MIGraphX 执行提供者

MIGraphX 执行提供者使用 AMD 的深度学习图优化引擎在 AMD GPU 上加速 ONNX 模型。

目录

安装

注意 请确保安装此处指定的 PyTorch 版本:PyTorch 版本

对于 PyTorch 每晚构建版本,请参阅 PyTorch 主页 并选择 ROCm 作为计算平台。

已发布带有 MIGraphX EP 的 ONNX Runtime 预构建二进制文件,适用于大多数语言绑定。请参考 安装 ORT

自 ROCm 6.0.2 起,AMD 在 (https://repo.radeon.com/rocm/manylinux) 上提供了预构建的 Python wheel 包。

从源代码构建

有关构建说明,请参阅 构建页面。预构建的 .whl 文件在下面的要求部分中提供,并托管在 repo.radeon.com 上。Docker 支持部分提供了基于 Ubuntu 的 Docker 开发环境。每个 ROCm 发布都会发布新的 .whl 和 Docker 镜像。

要求

以下是支持的 ROCm 版本与 Ubuntu 构建的对照表。

自 ROCm 6.0.2 起,预构建的 Python Wheels (.whl) 文件链接如下,对应于基于 Ubuntu 支持的主机操作系统的 Python 版本。所有链接都可以在 AMD 的 repo.radeon manylinux 页面 上找到,对应于每个 ROCm 版本。

ONNX Runtime 版本 MIGraphX ROCm 版本 Python 3.8 Python 3.9 Python 3.10 Python 3.12
1.21 6.4.1   3.9 3.10 3.12
1.21 6.4     3.10 3.12
1.19 6.3.1     3.10 3.12
1.19 6.3     3.10 3.12
1.18 6.2.4     3.10  
1.18 6.2.3     3.10  
1.18 6.2 3.8   3.10  
1.17 6.1.3     3.10  
1.17 6.1 3.8   3.10  
1.16 6.0.2     3.10  
1.16 6.0.0        
1.15 5.4.x        
1.14 5.4        
1.14 5.4        
1.13 5.4        
1.13 5.3.2        
1.13 5.3        
1.12 5.2.3        
1.12 5.2        

Docker 支持

对于简单的工作负载和/或原型设计,AMD 基于 Ubuntu 创建 Docker 镜像,使用最新的 ROCm 版本和支持的 ROCm-PyTorch 构建,可在 ROCM Dockerhub 找到。

目的是让用户能够快速启动并运行其自定义 Python 工作负载,并提供一个预构建的 ROCm、Onnxruntime 和 MIGraphX 包环境,以便无需构建 Onnxruntime 即可开始使用。

用法

C/C++

Ort::Env env = Ort::Env{ORT_LOGGING_LEVEL_ERROR, "Default"};
Ort::SessionOptions so;
int device_id = 0;
Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_MIGraphX(so, device_id));

C API 详情请见 此处

Python

当使用带有 MIGraphX 执行提供者的 ONNX Runtime 构建的 Python wheel 包时,它将自动优先于默认的 GPU 或 CPU 执行提供者。无需单独注册执行提供者。

Python API 详情请见 此处

请注意,下一个版本 (ORT 1.10) 在实例化 InferenceSession 时,如果需要使用默认 CPU 提供者以外的执行提供者,则需要显式设置 providers 参数。

您可以在 此处 查看一个 Python 脚本,用于在 CPU 或 MIGraphX 执行提供者上运行模型。

会话变量

这些标志可以通过在创建 Onnxruntime 会话对象并调用 MIGraphXExecutionProvider 时,通过 Provider Options 结构 链接 来调用。

当使用 Python 调用 MIGraphX 执行提供者时,项目会作为 Python 字典添加。

会话选项标志 描述
device_id 整数 选择为会话运行指定的设备 ID(默认为设备 0)
migraphx_fp16_enable 1 或 0 通过 MIGraphX API 启用输入模型的 FP16 量化模式。
migraphx_int8_enable 1 或 0 通过 MIGraphX API 启用输入模型的 int8 静态量化模式。需要设置校准表路径变量(migraphx_int8_calibration_table_name=有效路径)。
migraphx_int8_calibration_table_name 用于 int8 静态模型量化的一组输入校准数据的路径。
migraphx_int8_use_native_calibration_table 1 或 0 使用 Nvidia 原生 int8 格式或 JSON 导出格式的校准表。
migraphx_save_compiled_model 1 或 0 设置为 1 时,在编译后启用将模型保存为 MIGraphX (.mxr) 格式。
migraphx_save_compiled_path 路径字符串 写入 .mxr 文件的路径(默认为 ./compiled_model.mxr)。存储 MIGraphX 编译模型的路径。需要为此会话设置 migraphx_save_compiled_path。
migraphx_load_compiled_model 1 或 0 设置为 1 时,在编译后启用加载 MIGraphX (.mxr) 格式的模型。
migraphx_load_compiled_path 路径字符串 读取 .mxr 文件的路径(默认为 ./compiled_model.mxr)。存储 MIGraphX 编译模型的路径。
migraphx_exhaustive_tune 1 或 0(默认 0) 通过 MIGraphX API 启用参数的穷举调优作为编译的一部分。这会增加额外的编译时间,以实现潜在的性能提升。
migraphx_mem_limit 整数 设置用于内存区域的内存限制。默认使用 ORT 的 default_memory_arena_cfg 值。
migraphx_external_alloc 地址 此 EP 使用的外部内存分配函数地址。对于读取较大的模型权重非常有用。
migraphx_external_free 地址 此 EP 使用的外部内存释放函数地址。对于卸载通过 migraphx_external_alloc 输入分配的内存非常有用。
migraphx_external_empty_cache 地址 此模型使用的外部内存缓存地址。对于缓存外部分配模型的结果非常有用。

环境变量

环境变量可以在全局级别调用。它们通常通过以下方式使用:

export ORT_MIGRAPHX_XXXXX = <value> 

或在运行命令之前调用为:

ORT_MIGRAPHX_XXXX=<value> python3 example_script.py

这将启动一个推理会话并取代通过“Session()”调用的输入。

用户可以在同一运行中调用环境和会话变量,但环境变量将优先。

环境选项标志 描述
ORT_MIGRAPHX_DUMP_MODEL_OPS 1 或 0 在解析期间启用模型操作符的转储。
ORT_MIGRAPHX_FP16_ENABLE 1 或 0 通过 MIGraphX API 启用输入模型的 FP16 量化模式。
ORT_MIGRAPHX_INT8_ENABLE 1 或 0 通过 MIGraphX API 启用输入模型的 int8 静态量化模式。\n 需要设置校准表路径变量 (migraphx_int8_calibration_table_name=).
ORT_MIGRAPHX_INT8_CALIBRATION_TABLE_NAME 用于 int8 静态模型量化的一组输入校准数据的路径。
ORT_MIGRAPHX_INT8_USE_NATIVE_CALIBRATION_TABLE 1 或 0 使用 Nvidia 原生 int8 格式或 JSON 导出格式的校准表。
ORT_MIGRAPHX_SAVE_COMPILED_MODEL 1 或 0 编译后启用将模型保存为 MIGraphX (.mxr) 格式。
ORT_MIGRAPHX_SAVE_COMPILED_PATH - 写入 .mxr 文件的路径(默认为 ./compiled_model.mxr) 存储 MIGraphX 编译模型的路径。需要将 ORT_MIGRAPHX_SAVE_COMPILED_MODEL 设置为 1。
ORT_MIGRAPHX_LOAD_COMPILED_MODEL 1 或 0 编译后启用加载 MIGraphX (.mxr) 格式的模型。
ORT_MIGRAPHX_LOAD_COMPILED_PATH - 读取 .mxr 文件的路径(默认为 ./compiled_model.mxr) 存储 MIGraphX 编译模型的路径。需要将 ORT_MIGRAPHX_LOAD_COMPILED_MODEL 设置为 1。
ORT_MIGRAPHX_EXHAUSTIVE_TUNE 1 或 0(默认 0) 通过 MIGraphX API 启用参数的穷举调优作为编译的一部分。这会增加额外的编译时间,以实现潜在的性能提升。

示例

Python

import onnxruntime as ort

model_path = '<path to model>'

providers = [
    'MIGraphXExecutionProvider',
    'CPUExecutionProvider',
]

session = ort.InferenceSession(model_path, providers=providers)