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 构建文件

主要功能模块关系框图

工具与应用层

后端目标执行层

核心图编译引擎
libmigraphx

前端解析与接口层

模型输入层

ONNX Model (.onnx)

TensorFlow Frozen Graph (.pb)

MIGraphX 序列化模型 (.mxr)

ONNX 解析器
libmigraphx_onnx

TF 解析器
libmigraphx_tf

C 稳定 API
libmigraphx_c

Python 绑定
migraphx_pybind

计算图构建
Program / Module / Instruction

张量形状系统
Shape / Argument / Literal

算子框架 (~150+)

图优化 Pass 管线
消除 / 融合 / 简化 / 常量传播 / 内存优化

调度与内存
Schedule / Memory Coloring

序列化与 I/O
JSON / MsgPack / SQLite / GraphViz

GPU 后端
HIP / MIOpen / rocBLAS / CK / rocMLIR

CPU 后端
oneDNN / ZenDNN / OpenMP

参考后端
纯 CPU 正确性验证

FPGA 后端
Vitis AI

CLI 工具
migraphx-driver

测试体系
单元 / ONNX / Verify / Ref / API

示例程序
Vision / NLP / Transformers / Diffusion

模块关系说明

层级 模块 职责
模型输入层 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 绑定测试

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐