手把手教你用 HIPify 转码,LLaMA-Factory 在 AMD 显卡上跑得飞起
环境准备:让 AMD 显卡“开口说话”
在开始折腾代码之前,最劝退的一步往往是环境配置。很多初学者拿着崭新的 AMD Instinct 或 Radeon 显卡,却对着黑屏的终端发愁。别慌,我们先把地基打牢。假设你使用的是 Ubuntu 22.04 或更新版本,且已经安装了基础的内核头文件。
首先,我们需要添加 ROCm 的官方软件源。打开终端,执行以下命令导入 GPG 密钥并添加仓库:
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | sudo apt-key add -
echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/debian/ jammy main" | sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt update
接下来是安装核心驱动。这里有个细节要注意:不要盲目安装所有包,我们只需要核心的 rocm-dev 和 HIP 运行时。输入:
sudo apt install rocm-dev hip-runtime-amd
安装完成后,最关键的一步是将当前用户加入 render 和 video 用户组,否则后续运行时会频频报出"Permission denied"的权限错误,这是新手最容易踩的坑:
sudo usermod -a -G render $USER
sudo usermod -a -G video $USER
切记,执行完这步后必须重启系统。重启后,输入 rocminfo,如果你能看到一长串关于 GPU 架构(如 gfx942 或 gfx1030)的详细参数列表,而不是报错,那么恭喜你,硬件层已经就绪。
一键转码:HIPify 把 CUDA 变成 HIP
很多小伙伴不敢尝试 AMD 卡,是因为手头的项目全是 CUDA 写的。难道要逐行重写?完全不用。ROCm 生态中的 HIPify 工具就是为此而生的“翻译官”。
假设你下载了一个基于 CUDA 的开源小项目 cuda-demo,里面满是 .cu 文件和 cudaMalloc 调用。我们只需要在项目根目录下运行:
hipify-clang ./cuda-demo/src --output-directory=./hip-demo/src
这个命令会扫描源码,自动将 cuda 前缀的 API 替换为 hip 前缀,并将文件后缀改为 .hip。整个过程通常只需几秒。
转换完成后,不要急着编译。打开生成的 .hip 文件快速扫一眼,重点检查是否有复杂的模板特化或内联汇编部分,这些偶尔需要人工微调。对于大多数标准算子,HIPify 的准确率极高,基本能完成 90% 以上的机械工作。
接下来是编译环节。AMD 使用 hipcc 作为编译器,它本质上是对 clang 的封装。进入新目录,执行:
cd hip-demo
hipcc -O3 -o main src/main.hip
如果一切顺利,你将得到一个可执行文件 main。运行它,如果终端输出了预期的计算结果且没有报错,说明你的第一份 HIP 代码已经成功在 AMD 显卡上跑起来了。这种“旧代码换新芯”的成就感,是入坑 ROCm 的最佳动力。
实战微调:LLaMA-Factory 上手指南
代码能跑只是第一步,真正的重头戏是大模型微调。LLaMA-Factory 是目前对 ROCm 支持最友好的微调框架之一,它的优势在于屏蔽了底层差异,让我们能专注于数据和方法。
首先,通过 pip 安装依赖。为了确保兼容性,建议先安装支持 ROCm 的 PyTorch 版本(具体版本号请参考 AMD 官网对应 ROCm 版本的推荐),然后安装 LLaMA-Factory:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.0
pip install llama-factory[deepspeed]
安装完成后,我们需要准备一个极简的配置文件 train_lora.yaml。针对 AMD 显卡,有几个关键参数必须设置正确,否则容易显存溢出(OOM):
model_name_or_path: meta-llama/Llama-3-8B-Instruct
dataset: alpaca_en_demo
template: llama3
finetuning_type: lora
cutoff_len: 1024
output_dir: saves/llama3/lora
per_device_train_batch_size: 2
gradient_accumulation_steps: 4
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true # AMD MI300 系列强烈建议使用 bf16
ddp_timeout: 180000000
注意 bf16: true 这一项。在较新的 AMD 架构上,BF16 精度不仅能节省一半显存,还能显著加速训练。如果你的显卡较老不支持 BF16,可改为 fp16: true。
一切就绪后,启动训练命令非常简单:
llamafactory-cli train train_lora.yaml
此时,终端会开始打印日志。你会看到 Loss 值在逐步下降,显存占用稳定在预期范围内。如果在启动时遇到 ImportError 提示找不到某些算子,通常是因为 DeepSpeed 未正确编译,尝试重新安装 deepspeed 并确保其链接到了正确的 HIP 库。
当训练结束,你可以在 saves 目录下找到微调后的 LoRA 权重。加载它们进行推理,你会发现模型已经学会了你提供的数据集风格。从驱动安装到模型产出,整套流程在 AMD 平台上已经相当顺畅。
其实,开源生态的魅力就在于此:工具链越来越完善,门槛越来越低。以前觉得“非 NVIDIA 不可”的执念,在亲手跑通这套流程后自然会消散。只要愿意动手试错,你会发现 AMD 显卡不仅性价比高,更能让你在技术探索的路上走得更远。
更多推荐


所有评论(0)