分布式训练
LLaMA Factory支持单机多卡和多机多卡分布式训练。支持三种分布式引擎
-
DDP:通过实现模型并行和数据并行实现训练加速。使用DDP的程序需要生成多个进程并且为每个进程创建一个DDP实例,他们之间通过torch.distributed库同步。
- 数据切分:支持
- 模型切分:不支持
- 优化器切分:不支持
- 参数卸载:不支持
-
DeepSpeed:微软开发的分布式训练引擎,提供ZeRO、offload、Sparse Attention、1 bit Adam、流水线并行等优化技术
- 数据切分:支持
- 模型切分:支持
- 优化器切分:支持
- 参数卸载:支持
-
FSDP:使用全切片数据并行技术来处理更多更大的模型。DDP中每张GPU都保留了一份完整的模型参数和优化器参数。但FSDP切分了模型参数、梯度与优化器参数,使每张GPU是保留这些参数的一部分。除并行技术外,FSDP还支持将模型参数卸载至CPU,进一步降低显存需求
- 数据切分:支持
- 模型切分:支持
- 优化器切分:支持
- 参数卸载:支持
使用DDP进行训练
单机多卡训练
环境准备
参考通过镜像部署LLama Factory启动docker容器
# 以交互方式启动容器
sudo docker exec -it llamafactory /bin/bash
cd /app/data
# 创建进行训练的目录
mkdir train-qwen-stand-alone
cd train-qwen-stand-alone
# 依次创建 模型、训练数据集、训练日志、训练后模型输出路径
mkdir -p model/Qwen/Qwen2.5-0.5B-Instruct data log output
下载模型、训练数据集
模型从https://hf-mirror.com站点下载,可以使用站点提供的hfd.sh脚本,此脚本结合aria2,可以提供断点续传、并发下载等能力,使模型下载稳定且快速。模型下载脚本如下
cd /app/data/train-qwen-stand-alone
apt update
# hfd脚本需要
apt install curl -y
# hfd脚本需要
apt install aria2=1.36.0-1 -y
# 下载hfd.sh脚本
wget https://hf-mirror.com/hfd/hfd.sh
chmod a+x hfd.sh
# 执行下载Qwen/Qwen2.5-0.5B-Instruct模型
HF_ENDPOINT=https://hf-mirror.com nohup ./hfd.sh Qwen/Qwen2.5-0.5B-Instruct --local-dir /app/data/train-qwen-stand-alone/model/Qwen/Qwen2.5-0.5B-Instruct >/app/data/train-qwen-stand-alone/log/DOWNLOAD_MODEL.log 2>&1 & echo $!
# 查看下载日志
tail -f -n 500 log/DOWNLOAD_MODEL.log
同样可以使用hfd.sh从https://hf-mirror.com站点下载数据集,但有些项目是需要认证才能下载的
cd /app/data/train-qwen-stand-alone
# 创建存放训练数据集 评估数据集的目录
mkdir -p data/train data/eval
# 下载训练数据集
HF_ENDPOINT=https://hf-mirror.com nohup ./hfd.sh openai/gsm8k --hf_username 用户名称 --hf_token 自己的token --local-dir /app/data/train-qwen-stand-alone/data/train >/app/data/train-qwen-stand-alone/log/DOWNLOAD_DATASET_TRAIN.log 2>&1 & echo $!
# 下载评估数据集
HF_ENDPOINT=https://hf-mirror.com nohup ./hfd.sh openai/gsm8k --hf_username 用户名称 --hf_token 自己的token --local-dir /app/data/train-qwen-stand-alone/data/eval >/app/data/train-qwen-stand-alone/log/DOWNLOAD_DATASET_EVAL.log 2>&1 & echo $!
如果只是为了试验可以直接从llamafactory github代码库中获取数据集验证
# 下载训练数据集
curl -o /app/data/train-qwen-stand-alone/data/train/train_alpaca_zh_demo.json https://raw.githubusercontent.com/hiyouga/LLaMA-Factory/refs/heads/main/data/alpaca_en_demo.json
# 下载评估数据集
curl -o /app/data/train-qwen-stand-alone/data/eval/eval_alpaca_zh_demo.json https://raw.githubusercontent.com/hiyouga/LLaMA-Factory/refs/heads/main/data/alpaca_en_demo.json
注册训练数据集格式
cd /app/data/train-qwen-stand-alone
echo "{
\"train_alpaca_zh_demo\":{
\"columns\":{
\"prompt\":\"instruction\",\"query\":\"input\",\"response\":\"output\"},\"file_name\":\"train\",\"formatting\":\"alpaca\"},\"eval_alpaca_zh_demo\":{
\"columns\":{
\"prompt\":\"instruction\",\"query\":\"input\",\"response\":\"output\"},\"file_name\":\"eval\",\"formatting\":\"alpaca\"}}" > ./data/dataset_info.json
上面创建了注册数据集格式文件dataset_info.json,其中包含训练数据集格式定义和验证数据集格式定义
- train_alpaca_zh_demo:训练数据集名称
- formatting:指定数据集格式为alpaca格式
- file_name:数据集文件名称或数据集存放路径,支持多个数据集文件。这里直接指定的目录
- columns:指定数据集中字段映射到alpaca格式
- prompt:数据集代表提示词的表头名称,这里在数据集中字段是instruction
- query:数据集代表请求的表头名称,这里在数据集中字段是input
- response:数据集代表回答的表头名称,这里在数据集中字段是output
- eval_alpaca_zh_demo:验证数据集名称,其他字段含义相同
训练配置文件
在执行训练任务时需要配置各种超参信息。既可以在执行训练命令时通过参数指定;也可以编写超参yaml文件,执行时指定文件路径。推荐使用yaml文件方式维护,便于阅读
cat <<EOF> train-Qwen-Qwen2.5-0.5B-Instruct1-V1.yaml
bf16: true
compute_accuracy: true
cutoff_len: 2048
dataset: train_alpaca_zh_demo
eval_dataset: eval_alpaca_zh_demo
dataset_dir: /app/data/train-qwen-stand-alone/data
do_train: true
eval_steps: 100
eval_strategy: steps
finetuning_type: lora
gradient_accumulation_steps: 8
learning_rate: 0.00005
load_best_model_at_end: true
logging_steps: 10
lora_alpha: 32
lora_dropout: 0.1
lora_rank: 16
lora_target: all
lr_scheduler_type: cosine
max_samples: 1000000
metric_for_best_model: eval_loss
model_name_or_path: /hmlp/data/storage/Qwen2.5-0.5B-Instruct1/V1/Qwen2.5-0.5B-Instruct
num_train_epochs: 3
output_dir: /hmlp/data/finetune/4d0cd6c6-b125-4d45-b898-204758986cb6/ac6928a3-4dd0-4518-8716-3123f710955f/output
per_device_eval_batch_size: 1
per_device_train_batch_size: 1
save_on_each_node: true
save_steps: 100
save_total_limit: 10
stage: sft
template: qwen
trust_remote_code: true
val_size: 0.05
warmup_ratio: 0.1
EOF
创建train-Qwen-Qwen2.5-0.5B-Instruct1-V1.yaml训练配置文。LLaMA-Factory支持的各种参数及含义可以参考官方参数介绍
- bf16:是否开启bfloat16混合精度训练
- compute_accuracy: 是否在评估时计算 Token 级别的准确率。
- cutoff_len:序列长度(Sequence Length),单条数据的最大长度,包括输入和输出。超过该长度的数据在训练时将被舍弃,单位为token。如果数据集中的文本普遍较短,建议选择较短的序列长度以提高计算效率。
- dataset:指定训练使用的数据集名称
- eval_dataset:指定评估使用的数据集名称
- dataset_dir:指定数据集注册文件所在目录路径
- do_

4000

被折叠的 条评论
为什么被折叠?



