Chapter 11

常见错误

📌 commit b58b1bd从下载、训练到推理的高频问题

ms-swift 配置层多,错误类型也分散。本章按"下载 / 训练 / 推理 / 量化 / 部署"五类列。

11.1下载类

现象处理
模型下载断网重试;设 MODELSCOPE_CACHE 持久化避免重下
HF 模型 timeoutHF_ENDPOINT=https://hf-mirror.com
魔搭模型不能匿名下登录 modelscope login
大模型下载磁盘满大模型转 --model /path/to/local 本地路径

11.2训练类

现象处理
loss 不降 / 接近 ln(vocab)检查 template;EOS / pad 是否对
OOM 第一步--gradient_checkpointing true;降 micro_batch
OOM 在 eval--per_device_eval_batch_size
多卡只用 1 张没设 NPROC_PER_NODE
DeepSpeed ZeRO-3 + LoRA 报错升级 peft >= 0.11、transformers >= 4.45
save 时 OOMdistributed save 不应 OOM;--save_only_model true
训完 adapter_model 0 字节save_steps 太小,第一次 save 时还没真训练

11.3多模态训练类

现象处理
image 找不到用绝对路径,或设 --media_dir
OOM 视觉 LLM--freeze_vit true;降 --max_pixels
视频抽帧很慢装 decord;缩短视频或减少帧数
VLM LoRA 不学视觉检查 target_modules 是否覆盖 vision projector

11.4推理类

现象处理
LoRA 加载后输出和训练时不一致infer 时 torch_dtype 跟训练保持一致;不要降到 fp16
vLLM 不认识自定义模型vLLM 主分支可能不支持新模型;用 nightly
swift deploy 启动慢正常,vLLM 编译 CUDA graph 需 30-60s
多 adapter 同时部署vLLM 自家 multi-LoRA 支持;ms-swift 用 swift deploy --adapters a b c

11.5量化类

现象处理
AWQ OOM降 quant_n_samples / quant_seqlen
GPTQ 慢正常,AWQ 比 GPTQ 快 3-5×
量化后乱码calibration 数据跟训练分布差太大;换更接近的
量化模型 vLLM 加载失败vLLM 量化插件版本不匹配;升 vllm

11.6RLHF 专属

现象处理
DPO loss 不动lr 太大;DPO 用 5e-6
GRPO advantage NaNgroup reward std=0;提高 temperature
PPO reward 不升RM 不准;先评估 RM accuracy
online GRPO vLLM 慢--vllm_gpu_memory_utilization 0.4

11.7调试技巧

# 开 verbose
export SWIFT_LOG_LEVEL=DEBUG
export NCCL_DEBUG=INFO

# 看完整 args
cat ./output/v0-xxx/args.json | jq .

# 用 0.5B 小模型先验证
swift sft --model Qwen/Qwen2.5-0.5B --dataset alpaca-zh#100 \
    --train_type lora --num_train_epochs 1

11.8Sequence Parallel 启用 checklist

v4 的 SP(swift/sequence_parallel/)启用前必须满足的几个前置——少一条就 hang:

条件修复
必须开 flash-attn 2 --use_flash_attn true;eager / SDPA 与 SP 不兼容
sequence_parallel_size 整除 nproc 调 SP 度或调 GPU 数;SP × DP = nproc
启用 packing --packing true,否则 SP 没意义
不可同时开 TP > 1(HF 路径) Megatron 路径下另说,详见 ch09.8 五维并行
跨机用 zigzag_ring 而不是 ulysses --sequence_parallel_mode zigzag_ring 省带宽

11.9多模态 packing 不兼容场景

2025-06 引入的多模态 packing 强大但不是万能。已知不兼容:

不兼容替代
动态分辨率 VLM(InternVL3 / MiniCPM-V)+ packing 关 packing;或固定 --max_pixels
视频训练 + packing 抽帧后视为图像批;否则关 packing
grounding 训练 + packing bbox 坐标依赖单样本边界,packing 会破坏
SP + 多模态 + packing 三连 实测有 hang 案例,先两两组合测

11.10Megatron HF 转换错误

9.6 提到 to_mcore 转换 OOM。其它常见转换坑:

现象原因修复
KeyError 找不到 linear_qkv.weightMegatron 命名跟 HF 不一样 mcore-bridge 升到 ≥ 1.3.0;某些自定义层需要 swift PR 加适配
转换后 forward 输出不一致 RoPE / norm 实现微差 对比 swift export --to_hf 反向再训一步看 loss
LoRA Megatron 路径 target_modules 不匹配 Megatron 层命名 linear_qkv / linear_proj,跟 HF 的 q_proj / v_proj 不同--target_modules linear_qkv,linear_projall-linear
FP8 训练 grad scale 飘 H100 / H200 才支持,A100 不行 --fp8;或换硬件

11.11v3 → v4 升级注意

本书基线 commit 上 v4 是默认。从 v3 升 v4 的常见坑:

v3 路径v4 路径
from swift.llm import register_model from swift.model import register_model
from swift.llm import register_template from swift.template import register_template
from swift.llm import register_dataset from swift.dataset import register_dataset
from swift.llm.train.sft import SftPipeline from swift.pipelines import SwiftSft / sft_main
插件路径 --plugin_path my.py --external_plugins my.py

"我的 v3 代码升到 v4 import 全错" → grep swift.llm. 改成扁平 import 即可,99% 路径是直接迁移。CLI 字段名 v3 → v4 基本不变。

11.12这章你需要带走的