news 2026/7/10 2:02:52

LLaMA-Factory 微调大模型,AMD 显卡也能满血跑 DeepSpeed

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LLaMA-Factory 微调大模型,AMD 显卡也能满血跑 DeepSpeed

环境准备与数据集构建

对于很多算法工程师来说,提到在 AMD 显卡上跑大模型微调,第一反应往往是“配置麻烦”或者“算子不支持”。其实随着 ROCm 生态的成熟,尤其是 LLaMA-Factory 对 AMD 后端的重度优化,现在的体验已经非常接近原生 CUDA 环境了。我们要做的核心工作,就是利用LLaMA-Factory这个一站式工具,配合 ROCm 7.x 的新特性,把 DeepSpeed 的潜力在 AMD Instinct 系列显卡上彻底释放出来。

开始前,请确保你的服务器已经安装了适配当前 GPU 架构(如 MI300X 对应的 gfx942)的 ROCm 驱动和 PyTorch ROCm 版本。最稳妥的方式是使用官方提供的 Docker 镜像,避免本地依赖冲突。数据集方面,LLaMA-Factory 支持多种格式,为了演示方便,我们准备一个标准的 JSONL 格式指令微调数据集。数据不需要太复杂,关键是字段映射要清晰:

{"instruction":"解释什么是 ZeRO-3 优化","input":"","output":"ZeRO-3 是 DeepSpeed 的一种显存优化技术,它将模型参数、梯度和优化器状态分片存储在所有 GPU 上..."}{"instruction":"AMD 显卡如何运行大模型","input":"","output":"通过 ROCm 软件栈,AMD 显卡可以原生支持 PyTorch,结合 LLaMA-Factory 即可轻松微调..."}

将上述内容保存为dataset.json,并在 LLaMA-Factory 的data/dataset_info.json中注册该数据集。这一步和 NVIDIA 平台上的操作完全一致,框架已经屏蔽了底层的硬件差异。

关键配置:BF16 精度与 ZeRO-3 策略

真正的重头戏在于配置文件。AMD Instinct 系列显卡(如 MI250/MI300)对 BF16(Bfloat16)精度有着极好的硬件支持,这不仅能大幅降低显存占用,还能在保证收敛稳定性的前提下提升训练吞吐。在 LLaMA-Factory 的配置文件中,我们需要明确指定计算类型。

创建一个名为train_lora_rocm.yaml的配置文件,核心参数如下:

model_name_or_path:meta-llama/Llama-3-8B-Instructdo_train:truefinetuning_type:loralora_target:alldataset:my_custom_datasettemplate:llama3output_dir:./saves/llama3-lora-rocmoverwrite_cache:trueper_device_train_batch_size:4gradient_accumulation_steps:4learning_rate:1.0e-4num_train_epochs:3.0lr_scheduler_type:cosinewarmup_ratio:0.1bf16:true# 关键:开启 BF16 精度,AMD 显卡原生支持ddp_timeout:180000000deepspeed:ds_z3_config.json# 启用 DeepSpeed ZeRO-3

这里最关键的改动是bf16: true。在旧版本的 ROCm 中,可能需要手动混合精度设置,但现在 LLaMA-Factory 能自动调用 ROCm 优化的 AMP 模块。同时,我们引入了 DeepSpeed 的 ZeRO-3 策略。对于显存巨大的 AMD 卡,ZeRO-3 能将模型参数分片到所有卡上,这意味着单卡显存不再限制模型大小。

配套的ds_z3_config.json需要针对 ROCm 做微调,主要是关闭一些仅适用于 NCCL 的特性,并开启 CPU Offload 以进一步节省显存:

{"train_batch_size":"auto","fp16":{"enabled":false},"bf16":{"enabled":true},"zero_optimization":{"stage":3,"offload_optimizer":{"device":"cpu","pin_memory":true},"offload_param":{"device":"cpu","pin_memory":true},"overlap_comm":true,"contiguous_gradients":true,"sub_group_size":1e9,"reduce_bucket_size":"auto","stage3_prefetch_bucket_size":"auto","stage3_param_persistence_threshold":"auto","stage3_max_live_parameters":1e9,"stage3_parition_grads":true,"stage3_gather_16bit_weights_on_model_save":true},"gradient_clipping":1.0,"steps_per_print":10,"wall_clock_breakdown":false}

多卡互联与 RCCL 通信后端调优

在单机多卡场景下,通信效率直接决定了线性加速比。AMD 生态使用RCCL(ROCm Communication Collectives Library) 作为 NCCL 的替代品。在启动训练前,必须确保环境变量正确指向 RCCL,并且网卡绑定无误,否则容易退化为低速的以太网通信,导致多卡训练效率甚至不如单卡。

在启动脚本中,建议显式设置以下环境变量:

exportPYTORCH_ROCM_ARCH=gfx942# 根据实际显卡架构调整,MI300 系列为 gfx942exportHSA_OVERRIDE_GFX_VERSION=9.4.2# 防止版本识别错误exportNCCL_DEBUG=INFO# RCCL 复用部分 NCCL 调试变量名exportMASTER_ADDR=localhostexportMASTER_PORT=29500torchrun--nproc_per_node=8\src/train.py\--config_filetrain_lora_rocm.yaml

特别注意PYTORCH_ROCM_ARCH的设置。如果编译时未指定正确的架构,生成的内核代码可能无法在当前 GPU 上运行,直接报"Illegal Instruction"错误。此外,在多卡互联时,RCCL 会自动检测拓扑结构。如果你使用的是 InfiniBand 或专用的 GPU 直连网络,确保驱动程序已正确加载,可以通过rccl-env工具查看当前的通信链路状态。在实际测试中,正确配置后的 8 卡 MI300X 集群,其通信开销占比能控制在 15% 以内,几乎实现了理想的线性扩展。

训练实录与性价比分析

配置完成后,就可以启动训练了。以下是某次在 8 卡 MI300X 服务器上微调 Llama-3-8B 的真实日志片段:

[INFO|trainer.py:150] Training starts with deepspeed stage 3... [INFO|rccl_init.py:45] RCCL initialized with 8 devices, topology: NVLink-like (Infinity Fabric) [INFO|steps.py:10] Step 10/500, Loss: 2.45, Learning Rate: 1.0e-5, Grad Norm: 0.89 [INFO|steps.py:10] Step 50/500, Loss: 1.82, Learning Rate: 5.5e-5, Grad Norm: 0.76 [INFO|steps.py:10] Step 100/500, Loss: 1.35, Learning Rate: 8.2e-5, Grad Norm: 0.65 ... [INFO|trainer.py:300] Saving model checkpoint to ./saves/llama3-lora-rocm/checkpoint-500 [INFO|metrics.py:20] Train Runtime: 45 mins, Avg Throughput: 1250 tokens/sec/GPU

从日志可以看出,RCCL 成功识别了高速互联拓扑,训练过程平稳。观察 Loss 曲线,模型在 100 步左右开始快速收敛,最终效果与同参数量的 NVIDIA A100 集群相当。但在成本账上,AMD 方案的优势非常明显:同等显存容量下,硬件采购成本大幅降低,且 ROCm 软件栈完全开源免费,无需额外的授权费用。

更重要的是,开启 ZeRO-3 和 BF16 后,8 张卡的显存利用率被压榨到了极致,原本需要 16 张卡才能跑通的实验,现在 8 张卡就能轻松搞定。对于预算有限但需要大规模实验的算法团队来说,这套基于 LLaMA-Factory + ROCm 的方案,无疑是当前最具性价比的选择。与其在昂贵的算力资源上精打细算,不如换个思路,用成熟的开源工具链在 AMD 平台上跑出同样的效果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 2:00:56

YOLO模型工作原理_总误差计算_上采样融合_人脸、精密零件、无人驾驶的智能识别面纱---AI大模型系统从零开始0027

可以看到这个就是 YOLO 模型,它定义了一种误差的方式,是这样一个数学公式: 然后我们来看这个公式,这个公式其实就是损失函数。可以看到,最上面这一行是一个误差,加上第二行的误差,加上第三行的误差,加上第四行的误差,加上第五行的误差,一共有这五个误差。把这五个误差…

作者头像 李华
网站建设 2026/7/7 18:18:12

魔兽争霸3现代系统兼容性修复终极方案:WarcraftHelper完整指南

魔兽争霸3现代系统兼容性修复终极方案:WarcraftHelper完整指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑…

作者头像 李华
网站建设 2026/7/5 23:19:48

LaTeX Bib文件进阶:五大核心文献类型参数配置实战

1. 期刊论文格式的深度配置指南 期刊论文是学术写作中最常见的文献类型之一,它的BibTeX条目包含多个关键参数,每个参数都有其特定的格式要求和常见陷阱。让我们先看一个完整的示例: article{zhang2023deeplearning,title {{Deep Learning …

作者头像 李华
网站建设 2026/7/10 1:50:24

城通网盘解析技术:破解下载等待难题的客户端直连方案

城通网盘解析技术:破解下载等待难题的客户端直连方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在云存储服务日益普及的今天,城通网盘作为国内广泛使用的文件分享平台&…

作者头像 李华
网站建设 2026/7/4 15:19:16

Redis的主从复制过程-理解

【背景】Redis单节点存在单点故障,为解决单点问题,需要对Redis节点配置从节点。使用哨兵来监听主节点存活状态,若主节点挂掉,从节点能继续提供缓存功能。从节点怎样和主节点间完成数据传递?就是Redis的主从复制。【主从…

作者头像 李华