附录D:MoE模型性能调优速查表
训练超参数速查
基础配置
| 参数 |
小模型 (<10B) |
中模型 (10-100B) |
大模型 (>100B) |
| 学习率 |
3e-4 |
1e-4 ~ 3e-4 |
1e-4 ~ 2e-4 |
| 学习率调度 |
Cosine |
Cosine |
Cosine |
| Warmup步数 |
2000 |
5000 |
10000 |
| 权重衰减 |
0.1 |
0.1 |
0.05 |
| 梯度裁剪 |
1.0 |
1.0 |
1.0 |
| BF16 |
✅ |
✅ |
✅ |
| 梯度累积 |
1-4 |
4-16 |
16-64 |
MoE特定配置
| 参数 |
推荐值 |
说明 |
| 专家数量 N |
8-128 |
根据总参数量调整 |
| Top-K |
2 |
大多数场景的标准选择 |
| 容量因子 |
1.25 |
平衡效率与丢失率 |
| 辅助损失系数 \alpha |
0.01 |
起始值,根据负载调整 |
| 路由温度 \tau |
1.0 → 0.5 |
训练过程中退火 |
| 噪声标准差 |
0.1 → 0.0 |
训练过程中衰减 |
| 门控学习率 |
主LR × 0.5-1.0 |
可与主学习率相同或略低 |
分布式配置
| 配置项 | 8卡 | 64卡 | 256卡 | 2048卡 |
|:---||:---:|:---:|:---:|
| EP并行度 | 2-4 | 8-16 | 32-64 | 128-256 |
| DP并行度 | 2-4 | 4-8 | 4-8 | 8-16 |
| TP并行度 | 1-2 | 1-2 | 1-2 | 1-2 |
| 微批次大小 | 4-8 | 2-4 | 1-2 | 1 |
| 序列长度 | 4K-8K | 4K-8K | 4K | 4K |
推理部署速查
vLLM部署命令模板
# 单卡部署(小模型)
vllm serve mixtral-8x7b \
--gpu-memory-utilization 0.90 \
--max-model-len 4096
# 多卡部署(中模型)
vllm serve mixtral-8x22b \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.90 \
--max-model-len 4096 \
--max-num-seqs 128 \
--enable-prefix-caching
# 量化部署(节省显存)
vllm serve mixtral-8x7b \
--quantization awq \
--dtype half \
--gpu-memory-utilization 0.95
性能调优参数
| 参数 |
保守 |
推荐 |
激进 |
说明 |
| gpu_memory_utilization |
0.80 |
0.90 |
0.95 |
GPU显存使用率 |
| max_num_seqs |
32 |
64-128 |
256 |
最大并发序列 |
| block_size |
16 |
16 |
32 |
KV Cache块大小 |
| swap_space |
4GB |
4GB |
8GB |
CPU交换空间 |
| max_model_len |
2048 |
4096 |
8192 |
最大序列长度 |
故障排查速查
训练问题
| 症状 |
可能原因 |
快速修复 |
| Loss NaN |
梯度爆炸 |
降低学习率,增大梯度裁剪阈值 |
| Loss不下降 |
路由崩溃 |
增大辅助损失系数到 0.05 |
| GPU利用率低 |
通信瓶颈 |
减小EP,增大DP |
| OOM |
显存不足 |
启用梯度检查点,增大EP |
| 训练极慢 |
批次太小 |
增大批次或梯度累积 |
| 专家全相同 |
负载极度不均 |
重置门控网络参数 |
推理问题
| 症状 |
可能原因 |
快速修复 |
| 首token延迟高 |
预填充阶段慢 |
启用chunked prefill |
| 吞吐量低 |
批次太小 |
增大max_num_seqs |
| OOM |
KV Cache溢出 |
减小max_model_len或max_num_seqs |
| 输出质量差 |
量化损失 |
使用FP8替代INT4 |
| 路由错误 |
模型加载不完整 |
检查所有专家是否正确加载 |
关键公式速查
负载均衡损失
\mathcal{L}_{aux} = \alpha \cdot N \sum_{i=1}^{N} f_i \cdot P_i
专家容量
C = \alpha \cdot \frac{B \cdot T \cdot K}{N}
基尼系数
\text{Gini} = \frac{\sum_i \sum_j |f_i - f_j|}{2N^2 \bar{f}}
通信量(All-to-All)
\text{Comm} = 2 \cdot B \cdot T \cdot K \cdot d \text{ (bytes)}
计算效率比
\text{Efficiency} = \frac{K \cdot h^2}{N \cdot h^2 + N \cdot d} \approx \frac{K}{N} \text{ (当 } h^2 \gg d \text{)}
诊断命令速查
# 查看GPU状态
nvidia-smi -l 1
# 查看训练进程
ps aux | grep python
# 查看NCCL通信
NCCL_DEBUG=INFO python train.py
# 查看显存使用
python -c "import torch; print(torch.cuda.memory_summary())"
# 分析训练日志(辅助损失趋势)
grep "aux_loss" train.log | tail -100
# 检查路由频率分布
python analyze_routing.py --log-dir ./logs/