从零搭建 AMD 深度学习环境,HIPify 加 LLaMA-Factory 联合实践
很多刚接触深度学习的朋友,手里拿着 AMD 显卡,却对着满网的"CUDA 教程”发愁。其实,AMD 早就推出了 ROCm(Radeon Open Compute)生态,它的目标很明确:打造一个开源、可替代 CUDA 的 GPU 计算平台。
简单来说,CUDA 是 NVIDIA 的封闭花园,而 ROCm 则是基于 Linux 的开放田野。两者在功能上高度对标:NVIDIA 有 cuBLAS、cuDNN,AMD 就有 rocBLAS、MIOpen;NVIDIA 用 NVCC 编译器,AMD 则对应 HCC 或最新的 ROCmCC。对于开发者而言,最大的痛点在于代码迁移——难道要把写好的 CUDA 代码全部重写吗?当然不用,这就引出了我们今天的主角:HIPify。
HIPify:让 CUDA 代码“一键”变身
HIP(Heterogeneous-compute Interface for Portability)是 ROCm 的核心编程模型,你可以把它理解为"CUDA 的孪生兄弟”。它的 API 设计与 CUDA 几乎一致,绝大多数情况下,只需要把代码里的 cuda 字符替换成 hip(例如 cudaMalloc 变为 hipMalloc),就能在 AMD 显卡上运行。
手动替换几千行代码显然不现实,AMD 官方提供了 HIPify 工具(本质是一个 Perl 或 Python 脚本),能自动完成这种“查找 - 替换”工作。
动手练习:转换一个简单的向量加法
假设你有一个标准的 CUDA C++ 文件 vector_add.cu,内容如下:
#include <cuda_runtime.h>
#include <iostream>
__global__ void vectorAdd(float *a, float *b, float *c, int n) {
int i = threadIdx.x;
if (i < n) c[i] = a[i] + b[i];
}
int main() {
float *d_a, *d_b, *d_c;
cudaMalloc(&d_a, 100 * sizeof(float));
cudaMalloc(&d_b, 100 * sizeof(float));
cudaMalloc(&d_c, 100 * sizeof(float));
vectorAdd<<<1, 100>>>(d_a, d_b, d_c, 100);
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
return 0;
}
在安装了 ROCm 环境的 Linux 终端中,只需运行一条命令:
hipify-clang vector_add.cu -o vector_add_hip.cpp
生成的 vector_add_hip.cpp 会自动将头文件改为 #include <hip/hip_runtime.h>,并将所有 cuda 前缀的函数调用转换为 hip 前缀。虽然实际的大模型项目结构更复杂,涉及大量算子库调用,但原理相同:先通过 HIPify 完成基础语法迁移,再针对特定算子进行微调优化。这也是为什么像 SGLang、TileLang 等新兴框架开始原生支持 ROCm 的原因——它们底层已经做好了这些适配工作。
实战:在 AMD 显卡上跑通 LLaMA-Factory
理论讲完,咱们来点真格的。很多新手卡在环境配置上,尤其是依赖库版本冲突。LLaMA-Factory 作为一个一站式大模型微调框架,现在已经对 ROCm 有了很好的支持。下面是一份经过验证的“避坑指南”,帮你从零搭建环境。
1. 系统与环境准备
首先,确保你的系统是 Linux(ROCm 目前对 Windows 支持尚不完善,建议用 Ubuntu 22.04 或更高版本)。安装好 AMD 显卡驱动和 ROCm toolkit(建议版本 5.6 或 6.0+)。
验证安装是否成功:
rocm-smi
python3 -c "import torch; print(torch.cuda.is_available())"
# 注意:在 ROCm 环境下,PyTorch 依然识别为 'cuda',这是为了兼容生态,实际调用的是 HIP 后端
2. 创建隔离的 Conda 环境
不要直接在系统 Python 里装包!使用 Conda 隔离环境是防止依赖爆炸的最佳实践。
conda create -n llama-rocm python=3.10 -y
conda activate llama-rocm
3. 安装关键依赖(避坑核心)
这一步最关键。普通的 pip install torch 会默认拉取 NVIDIA 版本,必须指定 ROCm 源。以下是一份精简且稳定的 requirements.txt 核心内容,你可以直接参考安装:
# 核心计算库 (以 ROCm 5.6/6.0 为例,具体版本号需匹配你的驱动)
torch==2.1.2+rocm5.6
torchvision==0.16.2+rocm5.6
torchaudio==2.1.2+rocm5.6
--extra-index-url https://download.pytorch.org/whl/rocm5.6
# LLaMA-Factory 及其依赖
transformers>=4.37.0
datasets>=2.14.0
accelerate>=0.25.0
peft>=0.8.0
bitsandbytes>=0.41.0 # 注意:需确认是否有 rocm 编译版,若无则暂不使用量化
scipy
einops
sentencepiece
protobuf
gradio
执行安装:
pip install -r requirements.txt
特别注意:如果在安装 bitsandbytes 时报错,说明该库尚未完美支持你的 ROCm 版本。对于新手,建议先跳过 4-bit 量化,使用 16-bit 全参数或 LoRA 微调,稳定性更高。
4. 克隆项目与 Hello World 微调
从 GitHub 拉取最新代码:
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .
接下来,我们尝试启动 WebUI 界面,这是最直观的操作方式。设置环境变量告诉框架我们使用的是 AMD 卡(虽然 PyTorch 内部识别为 cuda,但显式声明有助于某些底层库加载):
export USE_ROCM=1
python src/webui.py
浏览器打开 http://localhost:7860,你应该能看到熟悉的界面。
5. 运行第一个微调任务
在 WebUI 中:
- 模型路径:填入你下载的模型路径(如
Qwen/Qwen-1.8B-Chat,小模型适合测试)。 - 数据集:选择内置的
alpaca_gpt4_zh。 - 微调方法:选择
LoRA,这是显存占用最低的方案。 - 启动训练:点击“开始训练”。
如果控制台没有报 HIP error 或 malloc failed,并且能看到 loss 逐渐下降,恭喜你,你的 AMD 深度学习环境已经搭建成功了!
写在最后
从 CUDA 到 ROCm,不仅仅是换个显卡那么简单,它意味着更多的选择和更开放的生态。通过 HIPify,我们可以复用海量的现有代码;借助 LLaMA-Factory 这样的优秀框架,大模型微调的门槛正在被无限降低。
如果你在配置过程中遇到报错,大概率是 ROCm 版本与 PyTorch 版本不匹配,或者缺少了某个系统级的开发库(如 rocblas, miopen)。别灰心,检查日志,对照官方文档调整版本号,多试几次就能跑通。一旦环境就绪,AMD 显卡的高性价比优势将在大模型训练中体现得淋漓尽致。
200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper

更多推荐


所有评论(0)