已验证可行的 Ubuntu 24.04 (noble) + ROCm 7.2.1 + PyTorch 2.11.0+rocm7.2 + vllm main + MinerU 3.2.0 完整流程 与 MinerU本地部署教程.md 的路径 A(22.04 + 7.1.1)形成互补 实测:RX 9070 上 Processing pages 65-71 it/s,略快于路径 A
| 你的情况 | 选哪条 |
|---|---|
| 求稳,跟着社区主流走 | 路径 A(22.04 + 7.1.1) |
| 想要最新 Linux 内核 / Wayland / glibc | 路径 B(本文) |
| 用 RX 9060 XT 等新发布的 RDNA4 显卡 | 路径 B(7.2.1 才正式收录) |
| 已经装好 24.04 不想重来 | 路径 B(24.04 + 7.1.1 不可行,详见下) |
| 需要 librocdxg 生产级特性 | 路径 B(7.2.1 起 librocdxg 标记为生产级) |
24.04 的 ROCm 7.1.1 仓库基于 LLVM 20(22.04 用 LLVM 17)。但 ROCm 头文件和 vllm 代码当初是按 LLVM 17 写的,没适配 LLVM 20 的语法收紧。第二轮验证遇到 7 个连环错误(__hip_internal::conditional 未定义、__activemask 未声明、__AMDGCN_WAVEFRONT_SIZE 未定义、operator+(float2) 重定义冲突、FP8 h2r.x.data 类型错误等),其中 FP8 错误需要改 vllm C++ 源码且修一个会冒出更多。判定为不可行,请直接装 7.2.1。
ROCm 7.2.1 升级到 LLVM 22 并修复了大部分兼容性问题,只剩 5 个头文件层面的小补丁,可控。
理解这些有助于你判断坑出在哪。
- RDNA 4 正式列入:RX 9070 / 9070 XT / 9070 GRE / 9060 XT / 9060 XT LP(gfx1200/gfx1201)在 7.2 中从"实验性"升级为"正式支持"
- RDNA 3 中端补齐:RX 7700 系列(gfx1101)官方收录
- Ryzen AI APU 核显 Preview:Strix Halo / Strix Point 的 RDNA 3.5 核显(gfx1150/gfx1151)获得 Preview 支持
| 维度 | 7.1.1 | 7.2.1 |
|---|---|---|
| librocdxg 状态 | 实验性 | 生产级(三方解耦:Windows 驱动、ROCm 版本、librocdxg 独立更新) |
| WSL2 GPU 穿透 | 不稳定 | ✅ 官方验证 |
| 核显 AI(核显 WSL) | 不支持 | ✅ 首次支持 |
| ROCm 版本 | Ubuntu 22.04 (jammy) | Ubuntu 24.04 (noble) |
|---|---|---|
| 7.1.1 | LLVM 17 | LLVM 20(不兼容) |
| 7.2.1 | — | LLVM 22(已修复大部分问题) |
- hipBLASLt 在 Qwen3-30B 推理上实测提升 106%(在线 GEMM 调优 + Swizzle 内存访问优化)
- RDNA 4 上的 ComfyUI SDXL 比 6.4.4 提速 2.6 倍,Flux S 提速 5.2 倍(AMD CES 2026 官方基准)
Discussion #3662 作者明确说过:"ROCm 7.2 并没有解决 RDNA 上 3D 卷积,2D 卷积的基数倍数,空洞卷积的问题"。所以你仍然需要执行 MinerU本地部署教程.md 第十步的 RDNA 适配补丁和第十二步的 MIOpen 预热。7.2 的性能优势主要来源于库优化和固件支持,不来自 MIOpen kernel 修复。
本文只描述路径 B 额外的或不同的步骤。下列章节请先参照 MinerU本地部署教程.md 的内容:
- 0.0 显卡兼容性表
- 第一步 1.1-1.4(WSL2 安装、
.wslconfig) - 第二步全节(网络、Hyper-V 防火墙、DNS、sudo 环境)
- 第三步 3.2 CMake 4.0.0 二进制包安装
- 第三步 3.3 Windows SDK 准备
- 第五步整节(librocdxg 编译)
- 第八步 amd-aiter(aiter 是 OK 的,flash_attn 有差异,见本文 6.2)
- 第十步 10.3 RDNA 适配补丁(Python 路径要改为 3.12)
- 第十一步、第十二步、第十三步(测试 / 预热 / 日常使用)
下面进入路径 B 特有的步骤。
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa # 可选,24.04 默认 Python 3.12 已经够用
sudo apt update
sudo apt install -y build-essential git wget curl \
python3.12 python3.12-venv python3.12-dev \
libnuma-dev libdrm2 libhwloc-dev ninja-build \
pkg-config libgl1| 与 22.04 相比的差异 | 说明 |
|---|---|
| Python 3.12 而非 3.13 | 24.04 默认就是 3.12。pytorch-triton-rocm 的 ROCm 7.2 wheel 同时支持 cp312 和 cp313;如果你坚持要 3.13,仍需 deadsnakes PPA |
libgl1 而非 libgl1-mesa-glx |
24.04 中后者已经移除,前者是替代品 |
CMake 4.0 二进制包安装与 22.04 完全相同(MinerU本地部署教程.md 3.2 节)。
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | \
sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rocm.gpg > /dev/null
# 24.04 代号是 noble
echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/7.2.1 noble main' | \
sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt updatesudo apt install -y rocminfo hip-dev miopen-hip注意版本号后缀变为 ~24.04 和 1.0.0.70201:
sudo apt install -y --allow-downgrades \
rocminfo=1.0.0.70201-38~24.04 \
rocm-device-libs=1.0.0.70201-38~24.04"降级"的解释与路径 A 相同——见 部署教程 4.3 节。
完全照搬路径 A 的第五步。/opt/rocm 已升级到 7.2.1,源码无需改动。
mkdir -p ~/mineru_stable && cd ~/mineru_stable
python3.12 -m venv .venv
.venv/bin/pip install --pre \
torch==2.11.0+rocm7.2 \
torchvision \
pytorch-triton-rocm \
--index-url https://download.pytorch.org/whl/rocm7.2
# 验证
.venv/bin/python -c "
import torch
print(f'PyTorch: {torch.__version__}')
print(f'ROCm: {torch.version.hip}')
print(f'GPU: {torch.cuda.is_available()} {torch.cuda.get_device_name(0)}')
"期望看到 2.11.0+rocm7.2 + 7.2.x + True AMD Radeon RX 9070。
包名与 22.04 路径 A 完全一致,必须包含 hipsparselt-dev(PyTorch ROCm 版的硬依赖):
sudo DEBIAN_FRONTEND=noninteractive apt install -y \
hipblas-dev hiprand-dev hipsparse-dev hipsparselt-dev \
hipsolver-dev hipcub-dev rocprim-dev rocthrust-dev \
rocblas-dev rocrand-dev hipfft-dev hipblasltaiter 与路径 A 一致:
cd ~ && git clone --recursive https://github.com/ROCm/aiter.git
cd ~/mineru_stable && .venv/bin/pip install -e ~/aiterflash_attn 在 ROCm 7.2 + Python 3.12 下安装时,会因 build-isolation 拉到 CUDA 版 torch;用 --no-build-isolation 并预先确保环境里有 ROCm torch:
cd ~
git clone --recursive https://github.com/Dao-AILab/flash-attention.git
cd flash-attention
git checkout bba578d43974c1d3ba157ab597124dd0fe2ccdb4
cd ~/mineru_stable
export FLASH_ATTENTION_TRITON_AMD_ENABLE=TRUE
.venv/bin/pip install --no-build-isolation -e ~/flash-attention.venv/bin/python -c "import torch; print(torch.__version__)"
# 期望: 2.11.0+rocm7.2
# 如果显示 +cu130,按下面顺序恢复:
.venv/bin/pip install --force-reinstall torch==2.11.0+rocm7.2 torchvision pytorch-triton-rocm \
--index-url https://download.pytorch.org/whl/rocm7.2
.venv/bin/pip uninstall -y triton triton-rocm24.04 + 7.2.1 这条路径上,cmake 编译 vllm 会撞到 6 个独立问题,每个都要打一个补丁。下面按"先打补丁、再编译"的顺序给出。逐条执行不要跳。
~/mineru_stable/.venv/bin/pip install -U \
"setuptools>=77.0.3" setuptools_scm setuptools_rust wheel旧 commit
357fddf61的 pyproject.toml PEP 639 写法与新 setuptools 已经匹配,不需要再改源码。
cd ~
git clone https://github.com/vllm-project/vllm.git
cd vllmROCm 7.2.1 的 hipcc.pl 在 24.04 上找不到伴生 Perl 模块,并且硬编码调用 clang-17(但 ROCm 7.2 实际带的是 clang-22)。
# Perl 模块路径修复
sudo ln -sf /usr/bin/hipvars.pm /usr/share/perl5/hipvars.pm
# 让 hipcc.pl 调用的 clang-17 指向实际的 clang-22
sudo ln -sf /opt/rocm/llvm/bin/clang-22 /opt/rocm/llvm/bin/clang-17
sudo ln -sf /opt/rocm/llvm/bin/clang++ /opt/rocm/llvm/bin/clang++-17
# 确保 /opt/rocm/bin/hipcc 指向 .pl(某些 ROCm 7.2 包改成了 shell wrapper)
sudo ln -sf /usr/bin/hipcc.pl /opt/rocm/bin/hipcc24.04 + ROCm 7.2.1 的 /opt/rocm/include/hip/ 下的几个头文件还残留着 LLVM 17 时代的写法,LLVM 22 不接受,需要修。下面三条 sed 命令是一次性的,直接执行:
# 补丁 2: __hip_internal::conditional → std::conditional
sudo find /opt/rocm/include/hip -name "*.h" \
-exec sed -i 's/__hip_internal::conditional/std::conditional/g' {} +
# 补丁 3: warpSize 常量修复(gfx1201 wavefront 是 32)
sudo find /opt/rocm/include/hip -name "amd_warp_functions.h" \
-exec sed -i 's/static constexpr int warpSize = __AMDGCN_WAVEFRONT_SIZE;/constexpr int warpSize = 32;/g' {} +
# 补丁 4: __activemask() → __builtin_amdgcn_read_exec()(只动 amd_warp_sync_functions.h)
sudo sed -i 's/__activemask()/__builtin_amdgcn_read_exec()/g' \
/opt/rocm/include/hip/amd_detail/amd_warp_sync_functions.hamd_warp_functions.h——该文件里 __activemask() 是通过 __builtin_amdgcn_read_exec() 实现的(即定义本身),改了反而递归崩溃。只动 amd_warp_sync_functions.h。
新版 ROCm 头文件已经定义了 operator+(float2, float2),vllm 的 mamba 模块又定义一遍,编译时 redefinition 报错。注释掉 vllm 那一段即可:
cd ~/vllm
sed -i '109,121s/^/\/\/ /' csrc/mamba/mamba_ssm/selective_scan.h行号 109-121 对应 vllm main 当前的 mamba operator+ 块。如果未来 vllm 改了行号,去
selective_scan.h搜索operator+,找到__device__ float2 operator+(float2 a, float2 b)那一段统一注释掉。
mkdir -p ~/vllm_build
export PATH=/opt/rocm/bin:/opt/rocm/llvm/bin:$PATH
export PYTORCH_ROCM_ARCH=gfx1201 # 改成你的 gfx 代号
cmake -S ~/vllm -B ~/vllm_build -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DVLLM_TARGET_DEVICE=rocm \
-DVLLM_PYTHON_EXECUTABLE=/home/$USER/mineru_stable/.venv/bin/python \
-DHIP_ROOT_DIR=/opt/rocm \
-DROCM_PATH=/opt/rocm \
-DCMAKE_HIP_ARCHITECTURES=gfx1201 \
-DCMAKE_PREFIX_PATH="/home/$USER/mineru_stable/.venv/lib/python3.12/site-packages/torch/share/cmake"注意 python3.12(不是 22.04 路径的 python3.13)。
三处关键细节(PATH 必须包含 /opt/rocm/bin、-DCMAKE_HIP_ARCHITECTURES 必须显式、不能设 -DCMAKE_HIP_COMPILER=hipcc)与路径 A 9.4 节一致,详细原因不再重复。
cd ~/vllm_build
PYTORCH_ROCM_ARCH=gfx1201 ninja -j4期望看到 41/41 通过(vllm main 当前的 target 数)。耗时 10-15 分钟(24.04 的 LLVM 22 编译速度比 22.04 LLVM 17 快)。
cp ~/vllm_build/*.abi3.so ~/vllm/vllm/
cd ~/vllm
VLLM_TARGET_DEVICE=rocm PYTORCH_ROCM_ARCH=gfx1201 \
~/mineru_stable/.venv/bin/pip install -e . --no-build-isolationvllm 0.21 main 的运行时依赖比旧 commit 多得多(
compressed_tensors、xgrammar、mistral_common、partial_json_parser、prometheus-client等)。不要加--no-deps,让 pip 自动解析。装完后第二次复查 PyTorch(可能被 vllm 的依赖拉成 CUDA 版):
.venv/bin/python -c "import torch; print(torch.__version__)"
# 如果不是 +rocm7.2:
.venv/bin/pip install --force-reinstall torch==2.11.0+rocm7.2 torchvision pytorch-triton-rocm \
--index-url https://download.pytorch.org/whl/rocm7.2
.venv/bin/pip uninstall -y triton triton-rocm这是 24.04 + 7.2.1 路径必须应用的两个补丁,原因与路径 A 9.10 节相同(amdsmi 不可用 + logger.warning_once 触发循环导入),补丁内容也完全一样:
- 补丁 6:
~/vllm/vllm/platforms/__init__.py的rocm_platform_plugin()末尾加torch.version.hip回退 - 补丁 7:
~/vllm/vllm/platforms/rocm.py的_get_gcn_arch()except 块去掉logger.warning_once(),改用sys.stderr.write()
详细文本见路径 A 的 9.10 节,照搬即可。
~/mineru_stable/.venv/bin/python -c "
from vllm.platforms import current_platform
print('Platform:', type(current_platform).__name__)
print('is_rocm:', current_platform.is_rocm())
print('device_type:', current_platform.device_type)
"期望 RocmPlatform / True / cuda。
完全按 MinerU本地部署教程.md 第十步 执行,但 RDNA 补丁的目标文件路径里 python3.13 要换成 python3.12:
PYVER=$(.venv/bin/python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
MINERU_INFER_DIR="$HOME/mineru_stable/.venv/lib/python${PYVER}/site-packages/mineru/model/utils/tools/infer"后续 patch A/B/C 完全相同。
MinerU 3.2.0 的代码结构与 3.1.x 略有调整,但 predict_rec.py 和 predict_det.py 的关键行没变,补丁仍然适用。如果未来某次升级后行号对不上,参考 MinerU本地更新指南.md 的"找不到 patch 位置"说明。
完全按路径 A 的第十一、十二、十三步执行。
| 阶段 | 路径 A (22.04 + 7.1.1) | 路径 B (24.04 + 7.2.1) |
|---|---|---|
| VLM 推理 (Two Step Extraction) | 6s (1.98 it/s) | ~5s 略快 |
| Layout Predict | ~1.5s | 1.2-1.5s |
| OCR-det | ~20 it/s | ~20 it/s |
| Processing pages | 61 it/s | 65-71 it/s |
| 13 页总耗时 | 6-7 秒 | 5-7 秒 |
路径 B 主要受益于 hipBLASLt 在线 GEMM 调优。如果你的工作负载以解析为主、单页复杂度高(多表格 / 多公式),路径 B 体验更好;如果就是日常 PDF,两条路径用起来差别有限。
升级或重装时,按下表顺序复查:
| # | 目标 | 命令 / 内容 | 何时需要 |
|---|---|---|---|
| 1 | hipcc Perl 模块 | ln -sf /usr/bin/hipvars.pm /usr/share/perl5/hipvars.pm |
编译 vllm 前 |
| 2 | clang-22 → clang-17 符号链接 | ln -sf /opt/rocm/llvm/bin/clang-22 /opt/rocm/llvm/bin/clang-17 |
编译 vllm 前 |
| 3 | ROCm 头文件 __hip_internal::conditional |
find ... sed std::conditional |
编译 vllm 前 |
| 4 | ROCm 头文件 warpSize 常量 |
sed amd_warp_functions.h warpSize=32 |
编译 vllm 前 |
| 5 | ROCm 头文件 __activemask |
sed amd_warp_sync_functions.h __builtin_amdgcn_read_exec |
编译 vllm 前 |
| 6 | vllm mamba operator+ 冲突 |
`sed -i '109,121s | ^ |
| 7 | vllm __init__.py WSL2 平台回退 |
torch.version.hip 兜底 |
安装 vllm 后 |
| 8 | vllm rocm.py 断循环导入 |
logger.warning_once → sys.stderr.write |
安装 vllm 后 |
| 9 | mineru predict_rec.py imgW 对齐 + batch padding |
按教程 10.3 节 | 安装 mineru 后 |
| 10 | mineru predict_det.py contiguous 检查 |
按教程 10.3 节 | 安装 mineru 后 |
下面是把补丁 1-6 打包的脚本,复制保存为 ~/apply_rocm72_patches.sh 一键应用:
#!/bin/bash
set -e
echo "[1/6] hipcc Perl module fix"
sudo ln -sf /usr/bin/hipvars.pm /usr/share/perl5/hipvars.pm
sudo ln -sf /usr/bin/hipcc.pl /opt/rocm/bin/hipcc
echo "[2/6] clang-22 → clang-17 symlink"
sudo ln -sf /opt/rocm/llvm/bin/clang-22 /opt/rocm/llvm/bin/clang-17
sudo ln -sf /opt/rocm/llvm/bin/clang++ /opt/rocm/llvm/bin/clang++-17
echo "[3/6] __hip_internal::conditional → std::conditional"
sudo find /opt/rocm/include/hip -name "*.h" \
-exec sed -i 's/__hip_internal::conditional/std::conditional/g' {} +
echo "[4/6] warpSize constant fix"
sudo find /opt/rocm/include/hip -name "amd_warp_functions.h" \
-exec sed -i 's/static constexpr int warpSize = __AMDGCN_WAVEFRONT_SIZE;/constexpr int warpSize = 32;/g' {} +
echo "[5/6] __activemask → __builtin_amdgcn_read_exec"
sudo sed -i 's/__activemask()/__builtin_amdgcn_read_exec()/g' \
/opt/rocm/include/hip/amd_detail/amd_warp_sync_functions.h
echo "[6/6] vllm mamba operator+ conflict"
if [ -d ~/vllm ]; then
cd ~/vllm
git checkout csrc/mamba/mamba_ssm/selective_scan.h 2>/dev/null || true
sed -i '109,121s/^/\/\/ /' csrc/mamba/mamba_ssm/selective_scan.h
fi
echo "All ROCm 7.2.1 + vllm patches applied."| 项目 | 路径 A (22.04 + 7.1.1) | 路径 B (24.04 + 7.2.1) |
|---|---|---|
| Python 默认 | 3.10(教程用 3.13 PPA) | 3.12 |
| LLVM | 17 | 22 |
| cmake 包名差异 | 较少 | 较多(mamba/operator/__activemask 等需补) |
| vllm main 编译 | ~60 分钟 | ~30-45 分钟(LLVM 22 编译更快) |
| librocdxg 状态 | 实验性 | 生产级 |
| RDNA 4 官方支持 | 实验性 | ✅ 正式 |
| 社区验证深度 | 充分 | 我们独立验证一次 |
| 升级 ROCm 后维护成本 | 低 | 较高(每次需重应用 ROCm 头文件补丁) |
如果你以后想 7.2.1 → 7.2.3 升级(修了 vllm profiler 时间线 bug),需要重新跑一次 apply_rocm72_patches.sh,因为 apt 升级会把头文件覆盖回去。
实在搞不定路径 B 也别硬撑。回到路径 A 步骤:
# Windows PowerShell:导出当前 24.04 备份
wsl --export Ubuntu-24.04 D:\WSL\ubuntu-24.04-backup.tar
wsl --unregister Ubuntu-24.04
wsl --install -d Ubuntu-22.04然后按 MinerU本地部署教程.md 从头走一遍。第一次部署可能 2 小时,但跑通后就稳了。
文档最后更新: 2026-05-27 实测环境:Windows 11 Pro + WSL2 Ubuntu 24.04 + AMD RX 9070 + ROCm 7.2.1 + PyTorch 2.11.0+rocm7.2 + vllm main + MinerU 3.2.0