环境搭建:从克隆代码到 ROCm 适配

手里拿着 AMD 显卡想跑大模型微调,最怕的就是对着满网的 CUDA 教程发呆。其实只要选对工具链,AMD 的 ROCm 生态完全能胜任低成本验证的任务。对于算法爱好者来说,LLaMA-Factory 是目前最友好的入口,它把复杂的分布式训练封装成了可视化的 WebUI,让我们能专注于模型效果而非底层报错。

首先,确保你的系统是 Linux(推荐 Ubuntu 22.04),并正确安装了 AMD 驱动与 ROCm Toolkit(建议 5.6 或 6.0+ 版本)。验证安装是否成功的最快方式是运行 rocm-smi,如果能看到显卡列表,说明底层驱动正常。接下来是关键的隔离环境步骤,千万别直接在系统 Python 里装包,否则依赖冲突会让你怀疑人生:

conda create -n llama-rocm python=3.10 -y
conda activate llama-rocm

激活环境后,安装 PyTorch 时必须指定 ROCm 源,这是很多新手踩坑的第一站。普通的 pip install torch 会拉取 NVIDIA 版本,导致后续无法调用显卡。请使用以下命令安装经过验证的稳定版本:

pip install torch==2.1.2+rocm5.6 torchvision==0.16.2+rocm5.6 --extra-index-url https://download.pytorch.org/whl/rocm5.6

接着克隆 LLaMA-Factory 项目并安装依赖:

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .

这里有一个核心避坑点:关于量化库 bitsandbytes。在 AMD 环境下,该库的支持尚不完善,强行安装往往会导致编译报错或运行时崩溃。对于仅希望验证模型效果的爱好者,最稳妥的策略是直接跳过 4-bit 量化,使用 FP16 精度进行 LoRA 微调。虽然显存占用稍高,但能避免 90% 的环境配置问题。编辑 requirements.txt,注释掉或删除 bitsandbytes 相关行,然后执行 pip install -r requirements.txt 即可。

WebUI 启动与关键环境变量配置

环境就绪后,我们不需要写复杂的 Python 脚本,直接启动 WebUI 是最直观的操作方式。但在启动前,必须显式告诉框架我们使用的是 AMD 后端。虽然 PyTorch 在 ROCm 下内部仍识别为 ‘cuda’,但缺少环境变量可能导致底层库加载失败。

在终端中执行:

export USE_ROCM=1
python src/webui.py

看到 Running on local URL: http://0.0.0.0:7860 字样后,打开浏览器访问该地址。界面加载成功后,你会看到一个清晰的控制台,左侧是模型与数据集配置,右侧是实时日志窗口。

数据集与模型选择

在“模型”栏中,为了快速验证流程,建议选择一个参数量较小的模型,例如 Qwen/Qwen-1.8B-ChatLlama-3-8B-Instruct(需确保已下载权重到本地路径)。小模型对显存更友好,能让你在单卡上更快看到结果。

在“数据集”栏,选择内置的 alpaca_gpt4_zh。这是一个经典的指令微调数据集,包含数千条高质量的中文问答对,非常适合用来测试模型是否“学会了”新任务。如果你有自己的数据,只需按照 JSONL 格式准备,并在配置文件中注册即可,但初次实践建议先用内置数据跑通全流程。

超参数设置实战

进入“训练”标签页,我们需要精细调整几个关键参数,以确保在 AMD 显卡上稳定运行:

  • 微调方法:务必选择 LoRA。这是显存占用最低的方案,能在不改动主模型权重的情况下,通过训练旁路适配器来实现定制化。
  • 学习率 (Learning Rate):设置为 2e-4。对于 LoRA 微调,这个值通常比全量微调要大,能保证收敛速度。
  • Batch Size:建议设为 48。如果你的显存只有 16GB,先从 2 开始尝试;若有 24GB 以上,可以开到 8
  • 梯度累积 (Gradient Accumulation):设为 4。这相当于在不增加显存占用的前提下,逻辑上增大了 Batch Size,有助于训练稳定。
  • 最大步数 (Max Steps):设为 500。对于验证性训练,几百步足以观察到 Loss 下降趋势,无需浪费数天时间。
  • 精度 (Precision):选择 fp16再次强调,不要尝试 int4nf4,除非你非常清楚如何编译非官方的 bitsandbytes 版本。

点击“开始训练”按钮,此时右侧日志区开始滚动输出信息。

训练监控与显存溢出排查

训练开始后,真正的观察才刚刚开始。正常的训练日志应该呈现规律的节奏:每隔几十秒输出一行 loss: xxx,且数值应呈现震荡下降的趋势。

例如,初始 Loss 可能在 2.5 左右,随着步数增加,逐渐降至 1.81.5。如果在 WebUI 的图表区看到曲线平滑向下,说明学习率设置合理,数据加载正常,AMD 显卡正在全速计算。反之,如果 Loss 始终不变(如卡在 3.5),可能是学习率过小或数据读取失败;如果 Loss 直接变成 NaN,则通常是精度溢出,需要检查是否错误开启了 BF16(部分旧款 AMD 卡不支持)或学习率过大。

遇到 OOM(显存溢出)怎么办?

这是最常见的问题。如果控制台突然报错 HIP error: out of memory 或程序直接崩溃,请按以下顺序排查:

  1. 减小 Batch Size:这是最直接的手段。将 Batch Size 减半,观察是否恢复正常。
  2. 关闭梯度检查点:虽然 gradient_checkpointing 能省显存,但在某些 ROCm 版本下可能引发兼容性问题,尝试将其关闭。
  3. 确认未加载量化库:检查启动日志,确保没有尝试加载 bitsandbytes 的 4-bit 模块。如果不小心选了 4-bit 选项,立即改回 16-bit。
  4. 监控显存状态:新开一个终端,运行 watch -n 1 rocm-smi,实时观察显存占用。如果还没开始训练显存就爆了,可能是有其他进程占用了显卡,或者模型本身太大超出了硬件极限。

当看到 Loss 稳步下降,且显存占用稳定在安全水位时,恭喜你,你已经成功在 AMD 显卡上完成了大模型的 LoRA 微调。这种低成本、高可控的实践方式,正是验证算法想法的最佳途径。不必追求一次训练出完美模型,先让流程跑通,再逐步调整参数,才是技术探索的正确姿态。

200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper
在这里插入图片描述

更多推荐