从不敢下手到直接运行:LLaMA-Factory 配置文件的 AMD 特调指南

很多刚接触 AMD Instinct 系列显卡(如 MI250、MI300X)的朋友,在跑通 vLLM 推理后,面对微调训练往往会有种“无从下手”的焦虑。打开 LLaMA-Factory 的示例配置文件,满屏的参数让人犹豫:这些默认值在 NVIDIA 卡上没问题,但在 ROCm 环境下到底要不要改?改了会不会报错?

其实,AMD 生态现在的成熟度已经足以支撑稳定的大模型微调。关键在于读懂配置文件里那些针对 ROCm 后端需要“特殊照顾”的字段。今天我就结合自己在 DevCloud 和本地工作站的实战经验,把这份 YAML 配置文件拆解开来讲讲,帮你把那些不敢动的参数理清楚,直接给出一份能跑的模板。

核心路径与对话模板:地基要打牢

配置文件的开头通常是最基础但也最容易踩坑的地方。

首先是 model_name_or_path。在 AMD 环境下,我强烈建议你不要直接在配置里写 Hugging Face 的模型 ID(如 meta-llama/Llama-3-8B)。训练过程中频繁的权重加载和网络 I/O 在大规模迭代时极易成为瓶颈,甚至因网络波动导致中断。最佳实践是:先手动将模型下载到本地高速存储(如 NVMe SSD),然后在配置文件中填写绝对路径。这样不仅启动快,还能避免训练中途因拉取权重失败而前功尽弃。

其次是 template 字段。LLaMA-Factory 内置了多种对话模板,选错会导致模型学不会正确的回复格式。对于 Llama 3 系列,务必显式指定为 llama3;如果是 ChatGLM 或 Qwen,则对应填写 chatglm3qwen。在 ROCm 后端,模板的 Tokenizer 处理逻辑与 CUDA 一致,但如果你使用了非主流的基座模型,可能需要检查其特殊的特殊 token 是否在 ROCm 版的 Transformers 库中被正确识别。

微调策略与精度选择:显存与速度的平衡术

接下来是决定训练成本和效果的两个关键参数:finetuning_typebf16

在 AMD 显卡上,显存容量往往是硬约束。finetuning_type 提供了 loraqlorafull 等选项。

  • LoRA:这是目前最稳妥的选择。它冻结主模型权重,只训练低秩矩阵。在单张 MI250 或 MI300X 上,LoRA 可以轻松容纳 7B 到 13B 参数的模型进行全序列长度训练。它的优势在于不需要额外的量化库支持,兼容性最好,训练速度也快。
  • QLoRA:如果你想挑战 70B 级别的大模型,或者显存非常紧张,可以考虑 QLoRA。它将基座模型量化至 4-bit,显存占用能比 LoRA 再降低 40% 左右。但要注意,QLoRA 依赖 bitsandbytes 库,虽然社区已有 ROCm 适配分支,但在某些特定算子上仍可能不稳定。如果遇到奇怪的报错,回退到 LoRA 通常是最高效的排查手段。

关于精度,请务必关注 bf16 参数。对于 Instinct MI300X 等新架构显卡,开启 bf16: true 是必须的。AMD 的 Matrix Core 对 BF16 格式有极好的硬件加速支持,既能保证训练精度不损失,又能大幅提升吞吐量。相比之下,FP16 在某些旧版 ROCm 驱动下可能会遇到数值溢出或不稳定的情况。不要犹豫,新卡直接上 BF16。

设备映射与多卡陷阱:解决负载不均

最让人头疼的往往是 device_map。在默认的示例配置中,这个字段有时被省略,有时设为 auto。在单卡环境下,这没问题,框架会自动识别。但在多卡训练场景下,尤其是使用 DeepSpeed 进行 ZeRO 优化时,AMD 环境偶尔会出现“一张卡显存爆满,其他卡却在围观”的负载不均现象。

这时候,手动干预就很有必要。如果你发现训练进程启动后,rocm-smi 显示只有卡 0 在满载,可以尝试在配置文件中显式指定设备映射,或者在启动命令中通过环境变量强制绑定。不过,更推荐的做法是检查 DeepSpeed 的配置文件(deepspeed_config.json),确保 zero_optimization 阶段设置正确(如 stage3),并确认 offload_paramoffload_optimizer 没有错误地指向了 CPU 导致通信瓶颈。在 LLaMA-Factory 的 YAML 中,通常不需要手动写死 device_map: [0, 1, 2, 3],框架会依托 DeepSpeed 自动分配,但如果遇到异常,尝试移除该字段让框架重新探测,或者显式设置为 auto 往往能解决奇怪的绑定问题。

一份经过实测的 ROCm 专用配置模板

为了减少大家的试错成本,我整理了一份基于 Llama-3-8B、单卡 MI300X、LoRA 微调的配置文件模板。你可以直接复制保存为 llama3_lora_rocm.yaml,然后根据实际路径修改即可运行。

### 模型与数据路径
model_name_or_path: /data/models/Llama-3-8B-Instruct  # 务必使用本地绝对路径
adapter_name_or_path: null
template: llama3                   # 严格匹配基座模型
finetuning_type: lora              # 推荐首选,稳定且高效
lora_target: all                   # 针对所有线性层应用 LoRA

### 数据集配置
dataset: identity,alpaca_en_demo   # 替换为你自己的数据集名称
dataset_dir: ../data               # 数据目录相对路径
cutoff_len: 1024                   # 截断长度,根据显存调整
preprocessing_num_workers: 4       # 数据预处理线程数

### 训练核心参数
output_dir: saves/llama3-lora-rocm # 输出目录
overwrite_output_dir: true
per_device_train_batch_size: 2     # 单卡批次大小,OOM 则调小
gradient_accumulation_steps: 4     # 梯度累积,等效增大 batch
learning_rate: 1.0e-4              # 初始学习率
num_train_epochs: 3.0              # 训练轮数
lr_scheduler_type: cosine          # 余弦退火调度
warmup_ratio: 0.1                  # 预热比例

### AMD 环境特异性配置
bf16: true                         # MI300X 等新卡必须开启,利用 Matrix Core
fp16: false                        # 与 bf16 互斥,勿同时开启
device_map: auto                   # 让框架自动识别,多卡异常时可尝试移除
ddp_timeout: 18000000              # 分布式超时时间,防止慢节点拖死

### 优化与监控
plot_loss: true                    # 训练结束后绘制 Loss 曲线
include_effective_tokens_per_second: true # 监控有效吞吐量

有了这份配置,你只需要执行一行命令即可启动训练:

llamafactory-cli train examples/train_lora/llama3_lora_rocm.yaml

如果在训练过程中发现 Loss 震荡剧烈,除了调整学习率,还可以尝试在启动命令中加入 --disable_flash_attn 来排查注意力机制的数值稳定性问题,这在某些特定的 HIP 算子版本下是个有效的兜底方案。

从数据清洗到模型产出,AMD 生态的闭环已经非常清晰。不再需要对着默认配置文件发呆,只要理解了这几个关键字段背后的硬件逻辑,你就能灵活利用手头的 Instinct 显卡,训练出真正懂业务的垂直领域模型。

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

Logo

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

更多推荐