很多刚接触深度学习的朋友,手里拿着 AMD 显卡,却对着满网的"CUDA 教程”发愁。其实,AMD 早就推出了 ROCm(Radeon Open Compute)生态,它的目标很明确:打造一个开源、可替代 CUDA 的 GPU 计算平台。

简单来说,CUDA 是 NVIDIA 的封闭花园,而 ROCm 则是基于 Linux 的开放田野。两者在功能上高度对标:NVIDIA 有 cuBLAScuDNN,AMD 就有 rocBLASMIOpen;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 中:

  1. 模型路径:填入你下载的模型路径(如 Qwen/Qwen-1.8B-Chat,小模型适合测试)。
  2. 数据集:选择内置的 alpaca_gpt4_zh
  3. 微调方法:选择 LoRA,这是显存占用最低的方案。
  4. 启动训练:点击“开始训练”。

如果控制台没有报 HIP errormalloc failed,并且能看到 loss 逐渐下降,恭喜你,你的 AMD 深度学习环境已经搭建成功了!

写在最后

从 CUDA 到 ROCm,不仅仅是换个显卡那么简单,它意味着更多的选择和更开放的生态。通过 HIPify,我们可以复用海量的现有代码;借助 LLaMA-Factory 这样的优秀框架,大模型微调的门槛正在被无限降低。

如果你在配置过程中遇到报错,大概率是 ROCm 版本与 PyTorch 版本不匹配,或者缺少了某个系统级的开发库(如 rocblas, miopen)。别灰心,检查日志,对照官方文档调整版本号,多试几次就能跑通。一旦环境就绪,AMD 显卡的高性价比优势将在大模型训练中体现得淋漓尽致。

200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper

在这里插入图片描述

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐