AMD MIGraphX 源码分析
AMD MIGraphX 源码分析
项目概述
| 属性 | 值 |
|---|---|
| 名称 | AMD MIGraphX |
| 版本 | 2.15.0 |
| 许可证 | MIT |
| 语言 | C++17 (含 HIP/GPU 扩展) |
| 构建系统 | CMake 3.15+ |
| 定位 | AMD GPU 图推理引擎,用于加速机器学习模型推理 |
目录结构
AMDMIGraphX/
├── src/ # 核心源码
│ ├── include/ # 公共头文件 (migraphx API)
│ ├── op/ # 算子构建器
│ ├── onnx/ # ONNX 模型解析器
│ ├── tf/ # TensorFlow 模型解析器
│ ├── api/ # C 语言稳定 API
│ ├── py/ # Python 绑定 (pybind11)
│ ├── driver/ # CLI 命令行工具
│ └── targets/ # 后端目标平台
│ ├── gpu/ # GPU 后端 (HIP/MIOpen/rocBLAS)
│ ├── cpu/ # CPU 后端 (oneDNN)
│ ├── ref/ # 参考后端 (正确性验证)
│ └── fpga/ # FPGA 后端 (Vitis AI)
├── test/ # 测试套件
├── tools/ # 开发工具
├── docs/ # 文档 (Sphinx/Doxygen)
├── examples/ # 示例程序
├── cmake/ # CMake 模块
└── Dockerfile # Docker 构建文件
主要功能模块关系框图
模块关系说明
| 层级 | 模块 | 职责 |
|---|---|---|
| 模型输入层 | ONNX / TF / MXR | 接收外部机器学习模型文件 |
| 前端解析与接口层 | ONNX Parser、TF Parser、C API、Python 绑定 | 将外部模型解析为内部计算图表示,提供多语言调用接口 |
| 核心图编译引擎 | libmigraphx | 计算图构建、算子注册、多阶段优化、序列化,是整个项目的核心枢纽 |
| 后端目标执行层 | GPU / CPU / Ref / FPGA | 针对不同硬件平台生成并执行优化后的内核代码 |
| 工具与应用层 | Driver / Tests / Examples | 提供命令行工具、自动化测试覆盖和典型应用场景示例 |
数据流方向: 外部模型 → 前端解析器 → 核心引擎(构建与优化计算图) → 后端目标(生成硬件内核) → 执行推理。CLI 工具和 API 封装贯穿全链路,提供编译、验证和性能分析能力。
主要功能模块
1. 核心库 (src/ → libmigraphx)
核心图编译器框架,提供计算图的构建、优化和序列化能力。
关键组件:
| 组件 | 源文件 | 功能 |
|---|---|---|
| 程序与指令 | program.cpp, instruction.cpp, module.cpp |
计算图容器、指令节点、子图模块 |
| 张量形状 | shape.cpp, shape_transform_descriptor.cpp |
张量形状描述(类型、维度、步长、布局) |
| 数据表示 | argument.cpp, literal.cpp |
运行时张量数据与编译时常量 |
| 算子框架 | operation.cpp, make_op.cpp, register_op.cpp |
算子基类与注册机制 |
| 后端目标 | target.cpp, register_target.cpp, context.cpp |
抽象后端接口 |
| 优化通道管理 | pass.cpp, pass_manager.cpp |
优化 pass 基础设施 |
支持的算子 (~150+):
覆盖主流神经网络算子:convolution, dot/gemm, pooling, relu, softmax, batchnorm, reshape, transpose, concat, gather, scatter, rnn/lstm/gru, attention, quantizelinear/dequantizelinear, if/loop (控制流), topk, roialign, einsum, resize, FP4/INT4 量化算子等。
图优化 Pass:
| 类别 | Pass |
|---|---|
| 消除优化 | 死代码消除、公共子表达式消除、冗余分配消除、恒等消除、填充消除、连续性消除、类型转换消除 |
| 融合优化 | 逐点融合 (fuse_pointwise)、注意力融合 (fuse_attention)、拼接融合 (fuse_concat)、归约融合 (fuse_reduce)、逐点+归约融合 |
| 简化优化 | 代数简化、reshape 链简化、动态算子简化、QDQ 简化 |
| 常量优化 | 常量传播 (propagate_constant)、精度传播、字面量提升 |
| 重写优化 | dot/gelu/pooling/quantization/rnn/reduce/topk 重写 |
| 内存优化 | 内存着色 (memory_coloring)、分配调整、预分配参数 |
| 调度 | 指令调度 (schedule)、流分析 (analyze_streams) |
| 量化 | 8-bit 量化、INT4 量化、FP8 自动类型转换 |
序列化与 I/O:
| 功能 | 源文件 |
|---|---|
| JSON 序列化 | json.cpp, convert_to_json.cpp |
| MessagePack 序列化 | msgpack.cpp |
| SQLite 性能数据库 | sqlite.cpp |
| Base64 编码 | base64.cpp |
| GraphViz 可视化 | graphviz.cpp |
| Netron 可视化 | netron_output.cpp |
| 模型加载/保存 | load_save.cpp, serialize.cpp |
2. ONNX 解析器 (src/onnx/ → libmigraphx_onnx)
将 ONNX 模型解析为 MIGraphX 计算图。
- 源文件: 115+ 文件,包含 95+ 个独立 ONNX 算子解析器
- 依赖: protobuf(从
onnx.proto生成代码) - 支持算子: 覆盖 ONNX 标准算子集,包括 Conv, MatMul, Gemm, Attention, GroupQueryAttention, LSTM, GRU, Einsum, Resize, RoIAlign, If, Loop, Scan 等
3. TensorFlow 解析器 (src/tf/ → libmigraphx_tf)
将 TensorFlow 冻结图解析为 MIGraphX 计算图。
- 源文件: 43 文件,包含 30+ 个 TF 算子解析器
- 依赖: protobuf(10 个
.proto文件定义 TF 图结构) - 支持算子: Conv2D, MatMul, BatchNorm, Pooling, DepthwiseConv, StridedSlice, Concat 等
4. C API (src/api/ → libmigraphx_c)
稳定的 C 语言接口,SO 版本独立于核心库,供外部程序调用。
- 核心函数:
migraphx_load_onnx(),migraphx_compile(),migraphx_run()等 - 头文件:
migraphx.h(纯 C),migraphx.hpp(C++ 便利封装) - 附加: Python ctypes 封装 (
migraphx.py)
5. Python 绑定 (src/py/ → migraphx_pybind)
通过 pybind11 将 MIGraphX 暴露为 Python 模块。
- 核心绑定:
migraphx_py.cpp— 导出所有主要类到 Python - ONNX Runtime 后端:
backend/目录提供 ONNX Backend 接口实现
6. CLI 工具 (src/driver/ → migraphx-driver)
命令行工具,支持模型验证、性能测试、优化查看等。
| 子命令 | 功能 |
|---|---|
| verify | 模型验证(运行并检查数值精度) |
| perf | 性能基准测试 |
| passes | 运行并展示优化 pass 结果 |
| trim | 模型裁剪 |
| mlir | MLIR 集成 |
| read | 读取并显示模型信息 |
| compile | 编译模型 |
7. 后端目标平台
7.1 GPU 后端 (src/targets/gpu/ → libmigraphx_gpu) — 默认启用
最大最复杂的后端,支持 AMD GPU 加速推理。
| 组件 | 说明 |
|---|---|
| 编译管线 | compiler.cpp, compile_ops.cpp, compile_hip.cpp, compile_miopen.cpp |
| GEMM 实现 | rocBLAS (rocblas.cpp), hipBLASLt (hipblaslt.cpp), 自研 HIP GEMM (hip_gemm_impl.cpp) |
| 算子融合 | fuse_ops.cpp, fuse_mlir.cpp, fuse_ck.cpp |
| MLIR 编译 | mlir.cpp, compile_gen.cpp — 基于 rocMLIR 的内核编译 |
| JIT 编译 | jit/ 目录 — 22 个 JIT 算子(pointwise, reduce, softmax, layernorm, gemm 等) |
| 设备内核 | device/ 目录 — 15 个 HIP 设备内核 |
| 内核头文件 | kernels/include/ — 65 个 GPU 内核头文件 |
| 调度与内存 | schedule_model.cpp, allocation_model.cpp, analyze_streams.cpp |
| 性能调优 | perfdb.cpp (SQLite), problem_cache.cpp, time_op.cpp |
7.2 CPU 后端 (src/targets/cpu/ → libmigraphx_cpu) — 默认关闭
基于 oneDNN (DNNL) 的 CPU 推理后端。
- 依赖: oneDNN/DNNL(必选), ZenDNN(可选), OpenMP
- 支持算子: Convolution, GEMM, Pooling, Softmax, LayerNorm, LRN, Concat, Gather, Reduction, Eltwise 等
7.3 参考后端 (src/targets/ref/ → libmigraphx_ref) — 始终启用
基于 CPU 的简单参考实现,用于正确性验证。
- 每个算子都有对应的 CPU 参考实现
- 不依赖任何外部加速库
7.4 FPGA 后端 (src/targets/fpga/ → libmigraphx_fpga) — 默认关闭
AMD Xilinx FPGA 支持。
- 依赖: Vitis AI
- 组件: FPGA 目标注册、算子 lowering、子图管理、Vitis AI 适配器
外部依赖
GPU 相关依赖
| 库 | 版本要求 | 用途 | 必须 |
|---|---|---|---|
| HIP | - | AMD GPU 计算运行时 | GPU 必须 |
| MIOpen | - | 深度学习算子库(卷积、池化等) | 可选 (默认启用) |
| rocBLAS | - | BLAS 库(GEMM 矩阵乘法) | 可选 (默认启用) |
| hipBLASLt | - | 批量 GEMM(依赖 rocBLAS) | 可选 (默认启用) |
| rocMLIR | - | MLIR 内核编译器 | GPU 必须 |
| ComposableKernel (CK) | - | JIT 内核库 | 可选 (默认启用) |
| hipRTC | - | HIP 运行时编译 | 可选 |
CPU 相关依赖
| 库 | 用途 | 必须 |
|---|---|---|
| oneDNN (DNNL) | CPU 深度学习算子库 | CPU 后端必须 |
| ZenDNN | AMD Zen CPU 优化 DNN 库 | 可选 |
| OpenMP | CPU 并行计算 | CPU 后端必须 |
通用依赖
| 库 | 版本要求 | 用途 | 必须 |
|---|---|---|---|
| protobuf | - | ONNX/TF 模型文件解析 | 是 |
| half | - | IEEE 754 半精度浮点 (FP16) | 是 |
| nlohmann_json | >= 3.8.0 | JSON 序列化 | 是 |
| SQLite3 | - | 内核调优数据库 | 是 |
| msgpack-cxx | >= 5.x (或 6.x) | 二进制序列化 | 是 |
| pybind11 | - | Python 绑定 | Python 启用时 |
| Threads (pthreads) | - | 多线程支持 | 是 |
| ParallelSTL/TBB | - | C++ 并行 STL | 可选 |
构建工具依赖
| 工具 | 用途 |
|---|---|
| ROCm CMake Modules | CMake 构建辅助模块 |
| clang-tidy | 静态代码分析 |
| cppcheck | 静态代码检查 |
| clang-format | 代码格式化 |
| Doxygen | C++ API 文档生成 |
| Sphinx | 文档网站生成 |
库依赖关系图
┌─────────────────────────────────────┐
│ migraphx-driver (可执行文件) │
└──────────┬──────────────────────────┘
│
┌──────────────┼──────────────────────────┐
│ │ │
▼ ▼ ▼
libmigraphx_onnx libmigraphx_tf libmigraphx_py
(ONNX解析) (TF解析) (Python绑定)
│ │ │
│ protobuf │ protobuf │ pybind11
└───────┬────────┘ │
│ │
▼ │
┌─────────────┐ │
│ libmigraphx │◄───────────────────────────┘
│ (核心库) │
└──────┬──────┘
│
┌────────────┼────────────────────────────┐
│ │ │
▼ ▼ ▼
libmigraphx_gpu libmigraphx_cpu libmigraphx_ref libmigraphx_fpga
(GPU后端) (CPU后端) (参考后端) (FPGA后端)
│ │ │ │
┌────┼────┐ oneDNN+OMP 纯CPU实现 Vitis AI
│ │ │
MIOpen rocBLAS hipBLASLt
│
rocMLIR, CK, hipRTC
┌─────────────┐
│ libmigraphx_c│ (稳定 C API)
│ SO: 3.0 │
└──┬──────────┘
│
migraphx + onnx + tf
链接关系详解
| 库 | 链接依赖 |
|---|---|
libmigraphx |
Threads, nlohmann_json, SQLite3, msgpack-cxx, half, stdc++fs, dl |
libmigraphx_gpu |
migraphx, MIOpen, rocBLAS, hipBLASLt, rocMLIR, CK, HIP |
libmigraphx_cpu |
migraphx, oneDNN, OpenMP |
libmigraphx_ref |
migraphx, Threads |
libmigraphx_fpga |
migraphx |
libmigraphx_onnx |
migraphx, protobuf |
libmigraphx_tf |
migraphx, protobuf |
libmigraphx_c |
migraphx, migraphx_onnx, migraphx_tf (私有链接) |
migraphx-driver |
migraphx_all_targets, migraphx_onnx, migraphx_tf |
构建选项
| CMake 选项 | 默认值 | 说明 |
|---|---|---|
MIGRAPHX_ENABLE_GPU |
自动检测 | 启用 GPU 后端 |
MIGRAPHX_ENABLE_CPU |
OFF | 启用 CPU 后端 |
MIGRAPHX_ENABLE_FPGA |
OFF | 启用 FPGA 后端 |
MIGRAPHX_USE_MIOPEN |
ON (Linux) | 使用 MIOpen |
MIGRAPHX_USE_ROCBLAS |
ON | 使用 rocBLAS |
MIGRAPHX_USE_HIPBLASLT |
ON | 使用 hipBLASLt |
MIGRAPHX_USE_COMPOSABLEKERNEL |
ON (Linux) | 使用 CK JIT 库 |
MIGRAPHX_ENABLE_PYTHON |
ON | 启用 Python 绑定 |
BUILD_SHARED_LIBS |
ON | 构建动态库 |
BUILD_DEV |
OFF | 开发构建 |
MIGRAPHX_STRIP_SYMBOLS |
OFF | Release 模式剥离符号 |
测试体系
| 测试目录 | 测试数量 | 说明 |
|---|---|---|
test/ (根目录) |
~100 | 核心模块单元测试 |
test/onnx/ |
~1089 模型文件 | ONNX 算子一致性测试 |
test/verify/ |
~465 | 端到端数值验证测试 |
test/ref/ |
128 | 参考后端算子测试 |
test/api/ |
16 | C API 测试 |
test/gpu/ |
20 | GPU 特定测试 |
test/py/ |
16 | Python 绑定测试 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)