Llama3 中文通用 Agent 微调模型实战教程
本文介绍了基于 SWIFT 框架微调 Llama3-8b-instruct 模型以适配中文 Agent 场景的完整流程。内容涵盖环境搭建、数据集选择(COIG-CQIA、Alpaca 等)、训练参数配置(LoRA、Flash Attention)及推理部署。通过对比评测数据,分析了模型在中文问答、逻辑推理及英文数学能力上的表现,并提供了常见问题排查指南。旨在帮助开发者快速掌握大模型微调技术,构建具备工具调用和规划能力的智能体应用。

本文介绍了基于 SWIFT 框架微调 Llama3-8b-instruct 模型以适配中文 Agent 场景的完整流程。内容涵盖环境搭建、数据集选择(COIG-CQIA、Alpaca 等)、训练参数配置(LoRA、Flash Attention)及推理部署。通过对比评测数据,分析了模型在中文问答、逻辑推理及英文数学能力上的表现,并提供了常见问题排查指南。旨在帮助开发者快速掌握大模型微调技术,构建具备工具调用和规划能力的智能体应用。

Llama3 模型发布后,国内开发者对其进行了广泛的训练和适配。除了中文纯文本模型外,多模态版本也在陆续发布中。考虑到国内用户对 Agent(智能体)场景的特定需求,魔搭社区 LLM&AIGC 模型微调推理框架 SWIFT 基于 Llama3-8b-instruct 原始版本训练了通用中文模型,并保留且适配了中文 Agent 能力。这是开源社区中率先完整适配中文环境的通用 Agent Llama3 模型。
本教程将详细介绍如何使用 SWIFT 框架对 Llama3 进行中文 Agent 能力的微调,包括环境准备、数据配置、训练命令解析及推理部署。
推荐用户直接使用 swift 进行推理或部署:
# 安装依赖
pip install ms-swift -U
# 推理
swift infer --model_type llama3-8b-instruct --model_id_or_path swift/Llama3-Chinese-8B-Instruct-Agent-v1
# 部署
swift deploy --model_type llama3-8b-instruct --model_id_or_path swift/Llama3-Chinese-8B-Instruct-Agent-v1
本模型可以联合 ModelScopeAgent 框架使用,具体参考官方文档中的 Agent 微调最佳实践部分。
我们使用了魔搭官方框架 SWIFT 进行模型训练。开发者如果希望训练 Llama3 中文版本,请参考以下安装方式。
# 设置国内镜像源加速下载
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 克隆 SWIFT 仓库
git clone https://github.com/modelscope/swift.git
cd swift
# 安装 LLM 相关依赖
pip install -e '.[llm]'
# 环境对齐 (通常不需要运行,如果你运行错误,可以跑下面的代码,仓库使用最新环境测试)
pip install -r requirements/framework.txt -U
pip install -r requirements/llm.txt -U
为了适配中文及 Agent 场景,我们对语料进行了一定混合配比。训练 Llama3 使用的语料如下:
SWIFT 支持很多其他对训练有帮助的开源数据集,如 Firefly 中文数据集、DeepCtrl 多语数据集、Alpaca/ShareGPT 等。如开发者希望用其他数据集训练 Llama3,只需要在命令行指定 --dataset firefly-all-zh 等即可使用它们。
我们将 MLP 和 Embedder 加入了 lora_target_modules。你可以通过指定 --lora_target_modules ALL 在所有 linear 层(包括 qkvo 以及 mlp 和 embedder)加 lora。这通常是效果最好的配置。
| 超参数 | 值 | 说明 |
|---|---|---|
| lr | 5e-5 | 学习率,影响收敛速度和稳定性 |
| epoch | 2 | 训练轮数 |
| lora_rank | 8 | LoRA 秩,控制可训练参数量 |
| lora_alpha | 32 | LoRA 缩放系数 |
| lora_target_modules | ALL | 目标模块,ALL 表示所有线性层 |
| batch_size | 2 | 单卡批次大小 |
| gradient_accumulation_steps | 16 | 梯度累积步数,等效于增大 Batch Size |
训练使用 8 卡进行,环境准备完成后,只需要如下命令即可开启训练:
NPROC_PER_NODE=8 \
swift sft \
--model_type llama3-8b-instruct \
--dataset ms-agent-for-agentfabric-default alpaca-en ms-bench ms-agent-for-agentfabric-addition coig-cqia-ruozhiba coig-cqia-zhihu coig-cqia-exam coig-cqia-chinese-traditional coig-cqia-logi-qa coig-cqia-segmentfault coig-cqia-wiki \
--batch_size 2 \
--max_length 2048 \
--use_loss_scale true \
--gradient_accumulation_steps 16 \
--learning_rate 5e-5 \
--use_flash_attn true \
--eval_steps 500 \
--save_steps 500 \
--train_dataset_sample -1 \
--dataset_test_ratio 0.1 \
--val_dataset_sample 10000 \
--num_train_epochs 2 \
--check_dataset_strategy none \
--gradient_checkpointing true \
--weight_decay 0.01 \
--warmup_ratio 0.03 \
--save_total_limit 2 \
--logging_steps 10 \
--sft_type lora \
--lora_target_modules ALL \
--lora_rank 8 \
--lora_alpha 32
--use_flash_attn true: 启用 Flash Attention 技术,显著减少显存占用并加快训练速度。--gradient_checkpointing true: 梯度检查点,通过计算换空间,允许在有限显存下训练更大模型。--lora_target_modules ALL: 对所有权重矩阵应用 LoRA,相比仅针对 Q/V 投影,能更好地捕捉领域特征。--use_loss_scale true: 使用 Loss Scaling 防止数值溢出,特别是在混合精度训练中。为了提高 ReACT 格式的准确率,我们在训练过程中将部分 loss 字段的权重提高,以保留中文训练中的 agent 能力表现。
该模型具备良好的中文问答能力,示例如下:
(注:原文章中的图片链接已移除,此处为功能描述)
我们使用 swift 的 eval 命令对训练模型的前后进行了通用能力评测,结果如下:
| 评测模型 | ARC | CEVAL | GSM8K |
|---|---|---|---|
| Llama3-8b-instruct | 0.7645 | 0.5089 | 0.7475 |
| Llama3-Chinese-8B-Instruct-Agent-v1 | 0.7577 | 0.4903 | 0.652 |
从评测结果可以看出,中文 Agent 模型在 CEVAL(中文基准)上保持了较高水平,但在英文数学推理 GSM8K 上略有下降。经过消融实验我们发现去掉 alpaca-en 语料会导致 GSM8K 下降至少十个点以上。因此,在微调中文 Agent 能力时,适当保留英文指令数据有助于维持基础推理能力。
开发者也可以使用 swift 框架对其他模型进行评测,命令非常简单:
swift eval --model_type llama3-8b-instruct --model_id_or_type LLM-Research/Meta-Llama-3-8B-Instruct --infer_backend pt --eval_dataset ceval arc
在 ModelScope-Agent 中使用可以参考官方文档。我们在服务部署后,可以在 AgentFabric 中校验其接口调用效果,以天气查询为例,可以看到模型可以按照 system 要求对查询进行补全。
此外,模型还支持文生图和图片解释等多模态交互能力,体现了 Agent 在复杂任务链中的调度潜力。
batch_size 或增加 gradient_accumulation_steps,并确保开启了 --use_flash_attn。--use_fsdp 进行分布式训练优化。lora_target_modules 设置是否合理。本教程详细介绍了基于 SWIFT 框架微调 Llama3 中文 Agent 模型的完整流程。通过合理的语料配比和参数设置,我们可以获得一个既具备中文通用能力又拥有 Agent 任务处理能力的模型。开发者可以根据实际需求,在此基础上进行二次微调,以适应垂直领域的业务场景。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online