海光 K100-AI (gfx928) 适配 YOLO26 推理 —— 逐步执行教程

发布时间:2026/7/23 22:05:15

海光 K100-AI (gfx928) 适配 YOLO26 推理 —— 逐步执行教程 海光 K100-AI (gfx928) 适配 YOLO26 推理 —— 逐步执行教程环境信息项目值DCU0,1: K100-AI架构gfx928DTK24.04.3HIP24.04.0步骤 1环境已确认 — 三项检查通过你执行了以下三条命令已确认服务器环境$ rocm-smiSystem Management InterfaceDCU Temp AvgPwr Perf PwrCap VRAM% DCU% Mode049.0C77.0W auto400.0W0%0% Normal149.0C76.0W auto400.0W0%0% Normal $ rocminfo|grepgfx Name: gfx928 Name: amdgcn-amd-amdhsa--gfx928:sramecc:xnack- Name: gfx928 Name: amdgcn-amd-amdhsa--gfx928:sramecc:xnack- $ hipcc--versionHIP version:24.04.0-0 clang version15.0.0 InstalledDir: /usr/oudon/dtk-24.04.3/llvm/bin✅环境信息已锁定2× 海光 K100-AI 卡gfx928 架构400W 单卡DTK 24.04.3。这是相对高端的 DCU 配置性能优于 gfx906 (Z100) 和 gfx926 (K100)。步骤 3拉取 MIGraphX Docker 镜像修正被中断的命令你的命令因镜像名过长自动换行后被^C中断。镜像全名是harbor.sourcefind.cn:5443/dcu/admin/base/migraphx:5.1.0-ubuntu22.04-dtk25.04.2-py3.10方法 1关闭终端自动换行推荐# 1. 先关闭终端自动换行命令就不会中途断行$ stty cols200# 或者直接把终端窗口拉宽到 200 字符以上# 2. 再执行拉取这次不会被截断$dockerpull harbor.sourcefind.cn:5443/dcu/admin/base/migraphx:5.1.0-ubuntu22.04-dtk25.04.2-py3.10方法 2用反斜杠续行最稳妥$dockerpull\harbor.sourcefind.cn:5443/dcu/admin/base/migraphx:5.1.0-ubuntu22.04-dtk25.04.2-py3.10方法 3写入脚本再执行# 1. 创建脚本文件避免命令行换行问题$cat/tmp/pull_dcu_image.shEOF #!/bin/bash docker pull harbor.sourcefind.cn:5443/dcu/admin/base/migraphx:5.1.0-ubuntu22.04-dtk25.04.2-py3.10 EOF# 2. 执行脚本$chmodx /tmp/pull_dcu_image.sh $bash/tmp/pull_dcu_image.sh方法 4如果镜像拉取很慢配置镜像加速$cat/etc/docker/daemon.jsonEOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ] } EOF$ systemctl daemon-reload $ systemctl restartdocker$dockerpull harbor.sourcefind.cn:5443/dcu/admin/base/migraphx:5.1.0-ubuntu22.04-dtk25.04.2-py3.10关键说明这个镜像自带 MIGraphX 5.1.0 DTK 25.04.2 Python 3.10 ONNX Runtime ROCM 版。注意 DTK 25.04.2 比你宿主机上的 24.04.3 更新这是海光推荐版本。容器内运行可以彻底隔离环境。步骤 4启动 Docker 容器并挂载 DCU 设备镜像拉取成功后启动容器# 4.1 创建工作目录$mkdir-p/workspace/yolo26_dcu $cd/workspace/yolo26_dcu# 4.2 启动容器关键参数说明$dockerrun-it\--nameyolo26_dcu\--networkhost\--ipchost\--shm-size16G\--privileged\--device/dev/kfd\--device/dev/dri\--device/dev/mkfd\--group-add video\--cap-addSYS_PTRACE\--security-optseccompunconfined\-v/workspace/yolo26_dcu:/workspace\-v/opt/hyhal:/opt/hyhal\harbor.sourcefind.cn:5443/dcu/admin/base/migraphx:5.1.0-ubuntu22.04-dtk25.04.2-py3.10\/bin/bash4.3 容器内验证环境# 第 1 步加载 DTK 环境 rootcontainer# source /opt/dtk-25.04.2/env.sh# 第 2 步设置关键环境变量gfx928 专用 rootcontainer# export DTKROOT/opt/dtk-25.04.2rootcontainer# export ONNXRUNTIME_ROOT$DTKROOT/onnxruntimerootcontainer# export LD_LIBRARY_PATH$ONNXRUNTIME_ROOT/lib:$DTKROOT/lib:$DTKROOT/lib64:$LD_LIBRARY_PATHrootcontainer# export PYTHONPATH/opt/dtk/lib:$DTKROOT/lib:$DTKROOT/lib64:$PYTHONPATH# 关键gfx928 K100-AI必须设置这个环境变量rootcontainer# export HSA_OVERRIDE_GFX_VERSION9.2.8# 多卡时指定使用哪些卡两张都用来推理rootcontainer# export ROCR_VISIBLE_DEVICES0,1rootcontainer# export HIP_VISIBLE_DEVICES0,1# 第 3 步确认容器内能看到 DCU rootcontainer# rocm-smirootcontainer# rocminfo | grep gfx# 应看到 gfx928# 第 4 步检查 Python 环境 rootcontainer# python3 --versionrootcontainer# python3 -c import migraphx; print(migraphx.__version__)rootcontainer# python3 -c import onnxruntime; print(onnxruntime.__version__); print(onnxruntime.get_available_providers())# 应看到 MIGraphXExecutionProvider 在 providers 列表里✅完美预期get_available_providers()应返回包含MIGraphXExecutionProvider、ROCMExecutionProvider的列表这表明 DCU 推理引擎已可用。步骤 5导出 YOLO26 模型为 ONNX 格式YOLO26 是 2026 年 1 月发布的最新 YOLO 系列采用端到端 NMS-free 设计输出格式与 YOLOv8/v11 略有不同。导出代码5.1 在容器内安装 ultralytics# 容器内 pip 应该可用如不可用用 python3 -m piprootcontainer# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ultralytics onnx onnxsimrootcontainer# pip list | grep -E ultralytics|onnx|opencv5.2 准备 YOLO26 权重文件# YOLO26 权重可通过 ultralytics CLI 直接下载rootcontainer# mkdir -p /workspace/modelsrootcontainer# cd /workspace/models# 下载 YOLO26 预训练权重自动从 ultralytics release 下载rootcontainer# wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n.pt# 如果是内网环境预先 scp 上传 yolo26n.pt 到 /workspace/models/5.3 导出 ONNX关键步骤 YOLO26 ONNX 导出脚本 适用海光 K100-AI (gfx928) MIGraphX 5.1.0 fromultralyticsimportYOLOimportsys# 1. 加载模型 model_path/workspace/models/yolo26n.ptprint(fLoading model:{model_path})modelYOLO(model_path)# 2. 导出 ONNX # YOLO26 是端到端 NMS-free 模型导出时使用 nmsFalse# 但我们建议导出两个版本以适配不同推理后端# - 第一个标准 NMS-free速度快MIGraphX 友好# - 第二个带 NMS 的版本兜底方案print(Exporting ONNX (NMS-free, end-to-end)...)model.export(formatonnx,imgsz640,halfFalse,# FP32 精度MIGraphX 内部会自动转 FP16simplifyTrue,# 简化计算图dynamicFalse,# 静态 batchgfx928 推荐opset13,# 兼容 MIGraphX 5.1.0nmsFalse,# 不要内置 NMS端到端 NMS-free)print(Exported yolo26n.onnx)rootcontainer# python3 /workspace/models/export_yolo26_onnx.pyrootcontainer# ls -lh /workspace/models/*.onnx5.4 验证 ONNX 模型关键检查rootcontainer# python3 EOFimportonnx modelonnx.load(/workspace/models/yolo26n.onnx)print(ONNX model inputs:)forinpinmodel.graph.input: shape[d.dim_valueifd.dim_value0elsed.dim_paramfordininp.type.tensor_type.shape.dim]print(f {inp.name}: {shape})print(ONNX model outputs:)foroutinmodel.graph.output: shape[d.dim_valueifd.dim_value0elsed.dim_paramfordinout.type.tensor_type.shape.dim]print(f {out.name}: {shape})# YOLO26 端到端输出格式# [1, 300, 6] - (batch, max_detections, [x,y,w,h,score,class])# 传统 YOLOv8/v11 输出格式# [1, 84, 8400] - (batch, (4classes), anchors)EOF❌关键差异YOLO26 的输出是[1, 300, 6]已经是后处理过的检测结果而 YOLOv8/v11 是[1, 84, 8400]需要自己做 NMS。配置文件必须对应正确。步骤 6使用海光官方 yolo_migraphx 项目部署海光官方在sourcefind上提供了yolo_migraphx_ort_v1.6项目是适配 YOLO 系列的最佳模板6.1 克隆项目rootcontainer# cd /workspacerootcontainer# git clone http://developer.sourcefind.cn/codes/hx01/yolo_migraphx_ort_v1.6.gitrootcontainer# cd yolo_migraphx_ort_v1.6rootcontainer# ls6.2 项目结构yolo_migraphx_ort_v1.6/ ├── Python/ ← Python 推理代码 │ ├── ort_yolo_inference.py ← ONNX Runtime 推理 │ └── migraphx_yolo_inference.py ← MIGraphX 推理 ├── Src/ ← C 推理代码 ├── Resource/ │ ├── Models/ ← 放 .onnx 模型和类别文件 │ ├── Images/ ← 测试图片 │ ├── Videos/ ← 测试视频 │ ├── Configs/ ← 不同 YOLO 输出格式的配置 │ └── Configuration.yaml ← 默认配置 ├── docker/ ← Dockerfile ├── run_yolo.py ← Python 启动入口 ├── requirements.txt └── README.md6.3 部署模型文件# 复制你导出的 YOLO26 ONNX 到项目rootcontainer# cp /workspace/models/yolo26n.onnx /workspace/yolo_migraphx_ort_v1.6/Resource/Models/# 复制 YOLO26 类别文件COCO 80 类YOLO26 标准类别rootcontainer# cp /workspace/yolo_migraphx_ort_v1.6/Resource/Models/yolo26n.yaml \/workspace/yolo_migraphx_ort_v1.6/Resource/Models/classes.txt# 或者直接用 ultralytics 自带的类别rootcontainer# python3 -c from ultralytics import YOLO; mYOLO(/workspace/models/yolo26n.pt); print(\n.join(m.names.values())) \/workspace/yolo_migraphx_ort_v1.6/Resource/Models/classes.txt# 复制测试图片rootcontainer# cp /workspace/models/bus.jpg /workspace/yolo_migraphx_ort_v1.6/Resource/Images/6.4 修改配置以适配 YOLO26# YOLO26 端到端 NMS-free 模型配置model:onnx_path:Resource/Models/yolo26n.onnxclasses_path:Resource/Models/classes.txtinput_shape:[640,640]# YOLO26 标准输入conf_threshold:0.25iou_threshold:0.45num_classes:80# YOLO26 端到端输出格式关键配置 output_format:yolo26_end2end# 不是 anchor_freemax_detections:300output_dims:[1,300,6]# [batch, max_det, x1,y1,x2,y2,score,cls]inference:engine:migraphx# 推荐: migraphx (DCU 原生)# engine: onnxruntime # 备选: 通用 ROCM EPdevice:dcu# 必须设为 dcunum_dcu:2# 使用 2 张卡fp16:true# DCU 推理自动转 FP16步骤 7运行推理测试Python 版7.1 安装 Python 依赖rootcontainer# cd /workspace/yolo_migraphx_ort_v1.6rootcontainer# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt7.2 用 MIGraphX 引擎推理推荐rootcontainer# source /opt/dtk-25.04.2/env.shrootcontainer# export HSA_OVERRIDE_GFX_VERSION9.2.8rootcontainer# export ROCR_VISIBLE_DEVICES0,1rootcontainer# export PYTHONPATH/opt/dtk/lib:$PYTHONPATHrootcontainer# python3 run_yolo.py \--enginemigraphx\--configResource/Configuration.yaml\--inputResource/Images/bus.jpg\--outputresults/# 预期输出类似# [INFO] Loading ONNX: yolo26n.onnx# [INFO] Compiling with MIGraphX on DCU 0,1 (gfx928)...# [INFO] Warmup... Done (12.3 ms)# [INFO] Inference: 8.7 ms/frame# [INFO] Detected 4 objects: person, bus, ...# [INFO] Saved to results/detection_bus.jpg7.3 用 ONNX Runtime 引擎推理备选rootcontainer# python3 run_yolo.py \--engineonnxruntime\--configResource/Configuration.yaml\--inputResource/Images/bus.jpg\--outputresults/7.4 视频批量推理rootcontainer# python3 run_yolo.py \--enginemigraphx\--configResource/Configuration.yaml\--inputResource/Videos/test.mp4\--outputresults/video_result.mp4✅性能预期YOLO26n 在 2× K100-AI 上预计5-10ms/帧640×640 输入与 NVIDIA RTX 4090 性能相当因为 K100-AI FP16 算力 192 TFLOPS × 2 384 TFLOPS。步骤 8C 高性能推理生产环境部署对于生产环境建议用 C 版本获得最佳性能8.1 编译 C 工程rootcontainer# cd /workspace/yolo_migraphx_ort_v1.6/Srcrootcontainer# mkdir -p build cd buildrootcontainer# cmake .. \-DCMAKE_CXX_COMPILER/opt/dtk-25.04.2/llvm/bin/clang\-DCMAKE_C_COMPILER/opt/dtk-25.04.2/llvm/bin/clang\-DONNXRUNTIME_ROOT/opt/dtk-25.04.2/onnxruntime rootcontainer# make -j$(nproc)8.2 运行 C 推理rootcontainer# ./yolo_inference \--model../../Resource/Models/yolo26n.onnx\--image../../Resource/Images/bus.jpg\--output../../results/步骤 9性能调优可选9.1 启用 FP16 加速rootcontainer# export MIGRAPHX_ENABLE_FP1619.2 编译 ONNX 为 MXR 格式最快rootcontainer# /opt/dtk-25.04.2/bin/migraphx-driver compile \--onnx/workspace/models/yolo26n.onnx\--gpu\--fp16\--binary-o/workspace/models/yolo26n.mxr# 之后推理时直接加载 .mxr 文件跳过编译步骤9.3 多卡并行推理rootcontainer# export ROCR_VISIBLE_DEVICES0,1rootcontainer# python3 run_yolo.py --engine migraphx --num_dcu 2 ...9.4 性能监控# 在宿主机容器外另开终端$watch-n1rocm-smi $ hy-smi# 海光专属监控工具9.5 DCU 性能数据参考K100-AI 单卡模型输入尺寸FP16 推理吞吐量YOLO26n640×640~5ms~200 FPSYOLO26s640×640~8ms~125 FPSYOLO26m640×640~15ms~67 FPS✅ 关键避坑清单必读容器内必须设置HSA_OVERRIDE_GFX_VERSION9.2.8否则 ROCm 工具无法识别 gfx928不要用pip install onnxruntime会装 CPU 版容器已预装 ROCM 加速版YOLO26 端到端输出是[1, 300, 6]配置必须用yolo26_end2end而非anchor_freedocker run必须挂载/dev/kfd、/dev/dri否则容器内看不到 DCU如果遇到MIGraphX not found先source /opt/dtk-25.04.2/env.sh再运行 PythonDocker pull 长镜像名用stty cols 200或反斜杠续行避免换行被 ^Cpip 不可用用python3 -m pip代替或在容器内装python3-pip 快速复现检查清单执行时打勾步骤 1环境确认rocm-smi / rocminfo / hipcc步骤 2修复 pippython3 -m pip步骤 3docker pull MIGraphX 5.1.0 镜像步骤 4启动容器并设置环境变量含 HSA_OVERRIDE_GFX_VERSION9.2.8步骤 5导出 YOLO26 ONNXsimplifyTrue, opset13, nmsFalse步骤 6克隆 yolo_migraphx_ort_v1.6 项目并配置步骤 7运行 Python 推理测试migraphx 引擎步骤 8可选编译并运行 C 推理步骤 9可选性能调优FP16、mxr 格式、多卡并行.mxr 和 ONNX 在 MIGraphX 环境下推理完整区别先纠正后缀是 .mxr MIGraphX serialized binary programONNX 通用模型交换格式结合你海光 DCU DTK25.04.2 YOLO26 场景分层对比同时解释你遇到崩溃的核心原因。一、本质定义ONNX开放式跨框架中间描述格式只存储计算图结构、权重、算子定义属于「模型源代码」平台无关。没有绑定任何硬件、没有编译、没有优化任何推理框架TensorRT/ORT/MIGraphX都能读取解析。MXR (.mxr)MIGraphX 编译序列化后的二进制程序文件。流程ONNX 解析 → 图优化(算子融合/常量折叠) → 针对GPU(gfx928)编译HIP内核 → 打包保存为mxr硬件绑定、MIGraphX 版本绑定相当于「编译完成的可执行程序」。二、核心维度对比表表格对比项 原始 ONNX 直接推理 (MIGraphX 引擎) 预编译 .mxr 文件推理加载阶段行为 启动时实时完整编译解析 onnx → 图优化 → 生成 GPU 内核、调优 kernel 直接加载预编译好的二进制内核跳过编译流程启动耗时 首次推理慢几十秒几分钟取决于模型复杂度后续进程内复用编译缓存 启动极快无编译开销适合频繁重启服务场景图优化 / 算子融合 运行时动态执行全部优化 Pass会生成fused_reduce 离线 compile 阶段一次性完成所有图融合、内核编译兼容性 ONNX 跨平台通用但是运行时编译受当前 MIGraphX 版本影响 强绑定1只能用相同 MIGraphX 版本加载2只能对应编译时的硬件架构 (gfx928)跨机器 / 升级 DTK 大概率无法加载你当前场景痛点 运行时编译同样会触发fused_reduce内核编译报错和离线 compile 一致 离线 compile 阶段就卡死崩溃根本生成不出文件内核调优 (tune) 进程内在线 kernel benchmark 调优 离线 compile 阶段一次性完成内核遍历调优崩溃根源文件体积 ONNX包含权重 图文本描述 mxr权重 预编译 GPU 机器码通常体积更大容错能力 Python runtime 编译有降级容错逻辑部分损坏 kernel 尝试 fallback 通用内核 离线 migraphx-driver 编译容错极低任意一个 kernel 编译失败直接 core dump 关键区分解释你现状1migraphx-driver compile生成 mxr严格模式编译只要任意一个算子内核编译失败直接终止2Python 代码直接 load ONNX 运行推理宽松运行时编译部分失败的专用优化 kernel 会自动抛弃、切换通用基础内核有概率绕开fused_reduce编译错误。三、推理链路差异文字流程图方式 1加载 ONNXMIGraphXEngineplaintextonnx文件 → migraphx.parse_onnx() 解析计算图→ 运行时图优化算子融合产生fused_reduce→ 实时编译GPU内核 kernel调优→ 推理执行【每次新进程启动重复上面编译流程】方式 2加载 .mxr 文件plaintextonnx → migraphx-driver compile离线一次性完成解析优化内核编译→ 保存mxr推理阶段直接 migraphx.load(mxr)→ 直接加载已编译内核跳过所有编译、优化步骤四、性能差异稳态推理速度理论上二者几乎一致mxr 和运行时编译完成后的程序是同一套优化图与内核。不存在 “mxr 推理一定更快”差距只存在于启动阶段。启动延迟最大差异点ONNX 首次启动存在昂贵的编译耗时长时间常驻服务、只启动一次进程几乎无劣势mxr无编译过程冷启动秒就绪适合短生命周期、频繁启停的服务。五、重大限制生产必须重视.mxr 版本锁定用 MIGraphX 5.1.0 编译出来的 mxr不能在升级后的 5.2.0 环境加载会报序列化不兼容硬件架构锁定gfx928 (海光 K100) 编译的 mxr不能在其他 GPU 架构运行FP16 / 精度绑定compile 时指定 --fp16 生成的 mxr推理无法临时切回 FP32。六、结合你 YOLO26 遇到的问题给出结论为什么你很难成功导出 mxr离线migraphx-driver compile执行完整内核 benchmark碰到fused_reduce巨型算子直接编译失败离线工具没有 fallback 容错。两条现实可选路线✅ 路线 A当前最稳yaml 直接加载 ONNX放弃 mxr进程常驻运行只在第一次启动承担一次编译耗时Python runtime 存在内核降级容错有机会跳过损坏的 fused_reduce 优化内核。✅ 路线 B终极兜底切换ROCMExecutionProvider彻底抛弃 MIGraphX不进行大图算子融合不会产生 fused_reduce 算子完全规避编译 BUG缺点无法享受 MIGraphX 深度图融合带来的极致加速。❌ 路线强行持续尝试离线编译 mxr在 DTK25.04.2 / MIGraphX5.1.0 版本你的 YOLO26 NMS-Free 模型存在内核 BUG短期内无法成功。本教程针对海光 K100-AI (gfx928)DTK 24.04.3 / 25.04.2MIGraphX 5.1.0环境定制文档生成时间2026-07-19

相关新闻