保姆级教程:使用LLaMA-Factory轻松训练大模型
LLaMA-Factory是中文友好型大模型训练框架,本文详细介绍了从安装配置、数据准备、模型下载到训练脚本编写的完整流程。重点提供了基于DeepSpeed的分布式训练脚本示例,包括LoRA微调参数配置,以及训练后的模型合并与推理方法。项目结构清晰,文档完善,特别适合中文用户快速上手大模型微调任务。

对于希望尝试大模型训练的同学来说,从 LLaMA-Factory 入手是一个非常不错的选择!在实际工作中,也经常用到 LLaMA-Factory 进行模型训练。用得越多,越能体会到它的便捷与高效。尤其值得一提的是,LLaMA-Factory 提供了完整的中文学习文档,这对英文阅读不太熟练的同学来说,真的非常友好!
01 安装
一般喜欢从源码安装,源码里面有很多可以参考的文档~
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
验证是否安装成功:
llamafactory-cli version
简单看一下项目结构:

其中:
- src:核心源码目录
- data:主要包含数据集配置和示例数据
- dataset_info.json - 数据集注册配置文件,定义所有可用数据集的元信息
- 示例数据集文件 - 包含各种格式的示例数据集(JSON、JSONL等)
- examples:包含各种训练和推理的配置示例文件
- docker:包含不同硬件平台的 Docker 配置
如果看了官方文档你还是不知道训练数据怎么组织你可以去data目录下面找一找示例数集文件;如果你不知道训练脚本怎么写你可以去examples目录下找一找示例脚本
02 使用
第一步:准备好你的数据
LLaMA-Factory 支持的微调数据格式有:
- Alpaca
- ShareGPT
- OpenAI
预训练格式和DPO、KTO等强化学习的训练格式也支持,不同训练方式数据格式组织方式也不一样,具体可见官方文档,写的非常详细:
https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.html
上面也提到过在LLaMA-Factory项目的data目录下也给出了一些数据文件的例子,可供参考~
准备好的数据文件需要在LLaMA-Factory项目的data目录下的dataset_info.json文件中增加你的数据集说明
比如openai的数据组织格式如下:
[
{
"messages":[
{
"role":"system",
"content":"系统提示词(选填)"
},
{
"role":"user",
"content":"人类指令"
},
{
"role":"assistant",
"content":"模型回答"
}
]
}
]
对于上述格式的数据, dataset_info.json 中需要新增数据集描述:
"数据集名称": {
"file_name": "data.json",
"formatting": "sharegpt",
"columns": {
"messages": "messages"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant",
"system_tag": "system"
}
}
第二步:下载好你的训练模型
下载预训练模型到你的路径下,一般我们会从modelscope这个网站上下载,非常方便
第三步:组织训练脚本
这里给出了一个参考脚本,主要通过deepspeed进行单机多卡训练
你需要替换的地方有模型路径、数据集名称、数据集路径、deepspeed脚本文件位置等,其他参数可按需修改或者添加(每个脚本参数的含义后文已给出相关解释)
nohup deepspeed --include localhost:1,2,3 --master_port
1234 ./src/train.py \
--stage sft \
--do_train \
--deepspeed ./examples/deepspeed/ds_z3_config.json \
--model_name_or_path YOUR_MODEL_PATH \
--dataset YOUR_DATASET_NAME \
--val_size 0.05 \
--dataset_dir YOUR_DATASET_PATH \
--template qwen \
--max_length 4096 \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0.1 \
--output_dir ${out_dir} \
--overwrite_cache \
--overwrite_output_dir \
--cutoff_len 4096 \
--mask_history False \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 5 \
--save_steps 16 \
--save_total_limit 3 \
--learning_rate 5e-5 \
--num_train_epochs 6 \
--eval_steps 8 \
--plot_loss \
--bf16 \
--warmup_ratio 0.05 \
--ddp_find_unused_parameters False \
--preprocessing_num_workers 16 > ${out_dir}/train.log 2>&1 &
1. 启动与环境配置
nohup: 在后台运行命令,即使终端关闭也不会中断进程。deepspeed: 使用 DeepSpeed 库进行分布式训练。--include localhost:1,2,3: 指定使用本地的 GPU 设备(编号为 1、2、3 的 GPU)。--master_port 1234: 设置分布式训练的主节点端口号为 1234。
2. 训练脚本入口
./src/train.py: 主要的训练脚本路径(llamafactory项目的src目录下)
3. 训练任务配置
--stage sft: 训练阶段为监督微调(Supervised Fine-Tuning)。--do_train: 执行训练模式。
4. DeepSpeed 配置
--deepspeed ./examples/deepspeed/ds_z3_config.json: 指定 DeepSpeed 的配置文件路径(ZeRO Stage 3 配置),这个配置文件在llamafactory项目的examples目录下可以找到
5. 模型与数据配置
--model_name_or_path YOUR_MODEL_PATH: 预训练模型的路径或 Hugging Face 模型名称。--dataset YOUR_DATASET_NAME: 使用的数据集名称。--val_size 0.05: 验证集比例(5%)。--dataset_dir YOUR_DATASET_PATH: 数据集存放的目录路径。--template qwen: 使用 Qwen 模型的对话模板格式。--max_length 4096: 输入序列的最大长度。--cutoff_len 4096: 截断长度(与max_length一致)。--mask_history False: 不屏蔽历史对话内容。
6. LoRA 参数配置
--finetuning_type lora: 使用 LoRA(Low-Rank Adaptation)进行微调。--lora_target q_proj,v_proj: 对模型的q_proj(查询投影)和v_proj(值投影)模块应用 LoRA。--lora_rank 8: LoRA 的秩(rank)为 8。--lora_alpha 16: LoRA 的缩放系数为 16。--lora_dropout 0.1: LoRA 层的 Dropout 比例为 0.1。
7. 训练超参数
--per_device_train_batch_size 1: 每个 GPU 的训练批次大小为 1。--per_device_eval_batch_size 1: 每个 GPU 的验证批次大小为 1。--gradient_accumulation_steps 8: 梯度累积步数为 8(等效批次大小 = 批次大小 × 梯度累积步数 × GPU 数量)。--learning_rate 5e-5: 学习率为 0.00005。--num_train_epochs 6: 训练 epoch 数为 6。--lr_scheduler_type cosine: 使用余弦学习率调度器。--warmup_ratio 0.05: 学习率预热步数占总训练步数的 5%。
8. 训练过程管理
--output_dir ${out_dir}: 模型和日志的输出目录。--overwrite_cache: 覆盖已有的缓存文件。--overwrite_output_dir: 覆盖输出目录(如果已存在)。--logging_steps 5: 每 5 步记录一次日志。--save_steps 16: 每 16 步保存一次模型。--save_total_limit 3: 最多保留 3 个模型检查点(旧的会被删除)。--eval_steps 8: 每 8 步进行一次验证。--plot_loss: 绘制损失曲线。--preprocessing_num_workers 16: 使用 16 个进程进行数据预处理。
9. 硬件与性能优化
--bf16: 使用 BF16 混合精度训练(适合 NVIDIA Ampere+ GPU)。--ddp_find_unused_parameters False: 禁用 DDP 中未使用参数的检测(节省内存,可能适用于某些模型)。
10. 日志重定向
> ${out_dir}/train.log 2>&1 &: 将标准输出和错误输出重定向到train.log文件,并在后台运行
第四步:训练与查看
运行上述脚本即可启动训练
训练完成后,在你文件保存的目录下除了有模型文件还有两个loss文件:
- training_eval_loss.png
- training_loss.png
通过loss文件可以查看模型训练效果
第五步:模型推理
如果你是lora训练,推理之前还需要进行模型合并,合并脚本merge_config.yaml如下:
### examples/merge_lora/llama3_lora_sft.yaml
### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora
### export
export_dir: models/llama3_lora_sft
export_size: 2
export_device: cpu
export_legacy_format: false
通过 llamafactory-cli export merge_config.yaml 指令运行即可得到合并之后的模型,模型推理这里就不再过多赘述!
如何系统学习掌握AI大模型?
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 大模型行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】

更多推荐


所有评论(0)