MIGraphX 执行提供程序

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

目录

安装

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

对于 Nightly PyTorch 版本,请参阅 Pytorch 主页 并选择 ROCm 作为计算平台。

大多数语言绑定的 ONNX Runtime 预构建二进制文件(包含 MIGraphX EP)已发布。请参考 安装 ORT

自 ROCm 6.0.2 起,AMD 提供了托管在 (https://repo.radeon.com/rocm/manylinux) 的预构建 python wheel 文件。

从源代码构建

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

要求

下面是受支持的 ROCm 版本与 Ubuntu 构建版本对应的矩阵。

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

ONNX Runtime 版本 MIGraphX ROCm 发布版本 Python 3.8 Python 3.10 Python 3.12
1.21 6.4.0   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 并使用最新 ROCm 版本和受支持的 ROCm-Pytorch 构建版本的 Docker 镜像,可在 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 Session 对象并调用 MIGraphXExecutionProvider 时,可以通过 Provider Options 结构 链接 来调用这些标志。

在使用 Python 时,这些项作为 Python 字典在调用 MIGraphX 执行提供程序时添加。

会话选项标志 描述
device_id INT 选择会话运行指定的设备 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 dump 格式的校准表。
migraphx_save_compiled_model 1 或 0 设置为 1 时,编译后将模型保存为 MIGraphX (.mxr) 格式。
migraphx_save_compiled_path path string (路径字符串) 写入 .mxr 文件的路径(默认为 ./compiled_model.mxr)。MIGraphX 编译模型存储的路径。此会话需要设置 migraphx_save_compiled_path。
migraphx_load_compiled_model 1 或 0 编译后将模型加载为 MIGraphX (.mxr) 格式。
migraphx_load_compiled_path path string (路径字符串) 读取 .mxr 文件的路径(默认为 ./compiled_model.mxr)。MIGraphX 编译模型存储的路径。
migraphx_exhaustive_tune 1 或 0(默认为 0) 通过 MIGraphX API 启用编译时的详尽参数调优。会增加额外的编译时间以获得潜在的性能提升。
migraphx_mem_limit INT 设置用于内存竞技场的内存限制。默认为 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 dump 格式的校准表。
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)