从单卡到多卡:LLaMA Factory 微调扩展指南
如果你已经成功在单卡 GPU 上完成了小规模语言模型的微调,现在想要扩展到更大的模型却不知从何下手,这篇文章正是为你准备的。LLaMA-Factory 作为一个高效的大语言模型微调框架,能帮助你从单卡环境平滑过渡到多卡分布式训练。本文将详细介绍如何利用 LLaMA-Factory 实现模型微调的横向扩展,包括环境配置、参数调整和显存优化等关键技巧。
为什么需要从单卡扩展到多卡
当模型规模超过单卡显存容量时,多卡并行训练就成为必然选择。根据实际测试数据:
- 7B 参数模型全参数微调需要约 80GB 显存
- 13B 参数模型需要约 160GB 显存
- 70B 参数模型可能需要超过 600GB 显存
这些需求远超单张消费级显卡的容量,此时就需要:
- 数据并行:将训练数据分片到不同 GPU
- 模型并行:将模型参数拆分到不同 GPU
- 混合策略:结合上述两种方法
LLaMA-Factory 多卡环境准备
LLaMA-Factory 支持多种分布式训练策略,以下是基础环境配置步骤:
- 确保所有 GPU 型号和驱动版本一致
- 安装 NCCL 库实现 GPU 间高效通信
- 配置 SSH 免密登录(多机训练时需要)
典型的单机多卡启动命令:
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 src/train_bash.py \
--stage sft \
--model_name_or_path /path/to/model \
--do_train \
--dataset alpaca_gpt4_en \
--template default \
--finetuning_type full \
--output_dir /path/to/output \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 1000 \
--learning_rate 5e-5 \
--num_train_epochs 3.0 \
--fp16
关键参数配置与显存优化
微调方法选择
LLaMA-Factory 支持多种微调方式,显存占用差异显著:
- 全参数微调:显存需求最高,但效果最好
- LoRA:仅训练少量参数,显存占用约为全参数的 1/3
- QLoRA:进一步量化模型权重,显存需求更低
批处理大小与梯度累积
多卡训练时这两个参数需要配合调整:
- 单卡批处理大小 (per_device_train_batch_size):根据单卡显存确定
- 梯度累积步数 (gradient_accumulation_steps):模拟更大批处理
例如,目标批处理大小为 64,使用 4 卡训练:
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4
精度与显存
不同精度对显存的影响:
- float32:最高精度,显存占用最大
- float16/bfloat16:显存减半,推荐大多数情况
- 8-bit/4-bit 量化:显存需求大幅降低,但可能影响模型质量
常见问题与解决方案
显存不足 (OOM) 错误处理
当遇到 OOM 错误时,可以尝试:
- 降低批处理大小
- 增加梯度累积步数
- 启用梯度检查点 (gradient_checkpointing)
- 使用更小的模型精度 (fp16/bf16)
- 尝试 LoRA 等参数高效微调方法

