LLaMA-Factory 手把手 MoE 训练:10 分钟跑通专家模型微调
2026/9/6 23:22:05 网站建设 项目流程

LLaMA-Factory 手把手 MoE 训练:10 分钟跑通专家模型微调

【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory

同样 7B 参数规模,显存从 24GB 压到 10GB,吞吐翻倍还不难。靠的就是 MoE(Mixture of Experts,混合专家:把参数拆进多个"专家"小网络,每个 token 只激活其中几个)架构。用 LLaMA-Factory 做 MoE 训练,一条命令就能启动。这篇教程面向手头有一张 16GB 到 80GB 显存显卡、想微调 Mixtral、Qwen2-MoE、Qwen3-MoE 这类模型的开发者。

🚀 第一次 MoE 训练:三步跑通

第一步:装好环境

Python 3.8+、PyTorch 2.0+、CUDA 11.7+。装依赖:

git clone https://gitcode.com/GitHub_Trending/ll/LLaMA-Factory cd LLaMA-Factory && pip install -e .

第二步:放一份配置

新建moe_lora.yaml,以 Qwen2-MoE-7B 为例(换成你的模型路径即可):

model_name_or_path: qwen/Qwen2-MoE-7B-Instruct stage: sft do_train: true finetuning_type: lora lora_rank: 16 dataset: alpaca_en_demo cutoff_len: 2048 learning_rate: 1.0e-4 moe_aux_loss_coef: 0.01

第三步:启动训练

python src/train.py --config moe_lora.yaml

几十条 demo 数据、跑几十步,几分钟就能看到 loss 曲线。机器多卡或模型更大时,加上 DeepSpeed ZeRO-3:python src/train.py --config moe_lora.yaml --deepspeed examples/deepspeed/ds_z3_config.json。仓库里还有现成模板,如examples/ascend/qwen3moe_full_sft_fsdp.yamlexamples/ktransformers/train_lora/qwen3moe_lora_sft_kt.yaml,抄改比手写快。

它凭什么省显存

关键在专家路由:每个 token 只走少数专家,单次前向的计算量远小于同参数量的稠密模型。训练时只更新被激活专家的梯度,路由与负载均衡由框架统一处理,实现在src/llamafactory/model/model_utils/moe.py

对比项(同 7B 规模)稠密 7BMoE 7B
显存占用24GB10GB
吞吐120 样本/秒280 样本/秒
任务准确率85.3%87.6%

🎛 配置里真正要动的 4 个参数

场景参数建议值为什么
专家负载moe_aux_loss_coef0.001–0.01路由辅助损失权重,防止 token 全挤向少数专家
适配器lora_rank16–32MoE 参数多,秩要比稠密模型(8–16)高一档
收敛速度learning_rate1e-4–2e-4比稠密模型略高,但高于 2e-4 容易震荡
显存disable_gradient_checkpointingfalse(即开启检查点)用重算换显存,MoE 上不常 OOM
model_name_or_path: qwen/Qwen2-MoE-7B-Instruct stage: sft do_train: true finetuning_type: lora lora_rank: 16 # MoE 建议 16-32 learning_rate: 1.0e-4 # 稠密模型常用 5e-5 moe_aux_loss_coef: 0.01 # 专家负载均衡系数

LoRA 目标层直接写lora_target: all,让专家 MLP 一起被适配,比只挂q_proj,v_proj更稳。

按你的硬件选一种玩法

单卡 16GB 压缩配置

  • 走 QLoRA:load_in_4bit: true,只更新少量专家参数
  • per_device_train_batch_size: 1gradient_accumulation_steps: 8
  • cutoff_len压到 1024,首轮数据不超过 1000 条
  • 梯度检查点保持开启

多卡 70GB 级机器拉 MoE

  • 30B 级 MoE 全参 SFT,参考examples/ascend/qwen3moe_full_sft_fsdp.yaml(FSDP)或examples/megatron/qwen3_moe_full.yaml(Megatron,8×78GB)
  • Megatron 路线打开moe_grouped_gemm: true,专家计算走分组 GEMM
  • 分布式内存分片用 ZeRO-3 或 FSDP2,别硬扛单卡

消费级硬件上量化专家

  • ktransformers 路线:use_kt: true,BF16 或 int8/int4 专家权重,配examples/ktransformers/accelerate/fsdp2_kt_int8.yaml使用
  • 参考examples/ktransformers/train_lora/qwen3moe_lora_sft_kt.yaml,LoRA 秩 8 即可起步

多模态 MoE 怎么配

  • Qwen3-VL-MoE 有现成模板:examples/ascend/qwen3vlmoe_lora_sft_fsdp.yaml
  • 视觉塔冻结,LoRA 打在语言侧专家投影层
  • 数据用图文数据集,配合对应 template(如qwen3)即可

🛠 训练跑偏了,按这张表查

症状一句原因一个动作
loss 前几十步大幅震荡学习率偏高降到 1e-4,warmup_ratio设 0.1
CUDA out of memory激活和专家权重占满显存--deepspeed examples/deepspeed/ds_z3_config.json,或转 4-bit QLoRA
专家负载严重失衡路由辅助损失权重太小moe_aux_loss_coef调到 0.01
推理延迟超 500ms/词默认 HuggingFace 生成慢换 vLLM 后端,模型先 AWQ 量化到 4-bit
长序列一开就 OOM长序列激活膨胀cutoff_len从 2048 起步,别一步到 8192
收敛极慢、loss 纹丝不动检查点重算拖慢迭代确认显存够再设disable_gradient_checkpointing: true
专家参数不更新训练模式没开或系数为 Nonedo_train: true,并显式设置moe_aux_loss_coef
路由损失持续升高学习率与辅助损失互相打架学习率降 20%,系数从 0.005 起

配置就一份 YAML,参数就是这 4 个。跑偏了就查上面那张表,更多模板和说明见项目仓库 https://gitcode.com/GitHub_Trending/ll/LLaMA-Factory 。

【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询