Chapter 11

常见错误:动态编译失败、kernel 兼容性

📌 commit 1cf145c070ea 按"装 / 训 / 推" 三阶段分类

Unsloth 通过 monkey patch + Triton JIT 编译来加速,意味着错误类型也跟普通框架不同。 本章按"安装 / 训练 / 推理 / 导出" 四阶段列出最常见的错误,给一份"看到这种现象 → 怎么修"的对照表。

11.1调试金线

Unsloth 出错的优先排查顺序:

  1. 看启动 log 顶部的 Unsloth banner:Transformers / PyTorch / CUDA / Triton 版本是否在支持范围;
  2. 看 patcher report:哪些 kernel 是 TRITON、哪些是 PYTORCH(fallback);
  3. 是否能在官方 Colab notebook 上复现:能 → 环境问题;不能 → 数据 / 代码问题;
  4. git log 找最近的版本变化:Unsloth 高频迭代,可能上周还能跑的代码这周 break;
  5. 实在不行 → Unsloth Discord #help 频道,社区响应非常快。

11.2安装阶段错误

现象原因修复
ImportError: cannot import name 'XXX' from 'transformers' transformers 升级后破坏 Unsloth patch 降级到 Unsloth README 推荐版本;或升级 Unsloth 到最新
ModuleNotFoundError: No module named 'unsloth_zoo' 缺依赖库 pip install unsloth-zoo
Windows 上 Triton import 错误 装了 triton 而不是 triton-windows pip uninstall triton && pip install triton-windows
RuntimeError: CUDA driver too old driver 比 PyTorch 编译版本低 更新 NVIDIA driver
bitsandbytes: GPU not detected bitsandbytes 是 CPU-only 版 pip install -U bitsandbytes;Windows 用 jllllll whl
flash-attn 编译失败 没限并行 MAX_JOBS=4 pip install flash-attn --no-build-isolation;或不装,Unsloth 有 fallback
install.sh 卡在某一步 网络问题 / 镜像源 HF_ENDPOINT=https://hf-mirror.com

11.3训练阶段错误

OOM

现象原因修复
加载模型时就 OOM 模型不是 4bit / 太大 unsloth/*-bnb-4bit 预量化版
训练第 1 步 OOM batch / seq / r 太大 第 6 章 11 条优化路径
训了几百步后 OOM 遇到长样本 SFTTrainermax_seq_length 卡住;或开 packing=True
验证 / eval 时 OOM eval 时 batch / 长度不一样 per_device_eval_batch_size;或干脆关掉 eval

Triton 编译错误

现象修复
RuntimeError: Triton compilation failed Triton 版本和 PyTorch / CUDA 不兼容;试 pip install triton==3.0.0
训练第 1 步特别慢(几分钟) 正常,Triton kernel 首次 JIT 编译;之后会快
OutOfResources: Out of registers block size 太大;多半是 hidden_size 异常;试降 LoRA r 或换 base 模型
不同 GPU 上结果不一致 SM 架构不同,Triton kernel 自动选不同 block size

数值 / NaN

现象原因修复
第 1 步就 loss=nan 数据格式坏 / template 错 检查样本;用 tokenizer.apply_chat_template 重新拼
fp16 下 NaN 数值溢出 bf16=True(Ampere+ 默认)
训到一半 NaN lr 太大 / 数据 outlier 降 lr;查 outlier
loss 一直 = 0 train_on_responses_only 配错 核对 instruction_part / response_part 字符串

速度异常

现象原因修复
速度没比 HF + PEFT 快 patch 没生效 看启动 log "patcher report",是否有 = TRITON
训了几百步速度突然变慢 遇到长 seq batch,激活搬运慢 开 packing 让长度均匀
GPU 利用率低(< 80%) dataloader 太慢 dataloader_num_workers
chat_template 不一致导致 loss 下降异常 训练用一个模板、推理用另一个 训练和推理都用 get_chat_template(...)

11.4推理阶段错误

现象原因修复
训完模型推理时全是乱码 没切 for_inference 模式 FastLanguageModel.for_inference(model)
推理速度非常慢 同上 + 没开 use_cache model.generate(..., use_cache=True)
chat 输出夹特殊 token(<|eot_id|> 等) generate 没设 stop tokens tokenizer.apply_chat_template(..., add_generation_prompt=True) 拼输入
生成结果重复啰嗦 temperature=0 + greedy temperature 升到 0.7-0.9;加 repetition_penalty=1.1
从 LoRA 适配器加载后推理乱码 没 patch 基座模型 FastLanguageModel.from_pretrained() 加载 base,然后 model.load_adapter()

11.5导出 / 量化阶段错误

现象原因修复
save_pretrained_merged OOM 合并 LoRA 时显存爆 save_method="merged_4bit";或 device_map="cpu"
save_pretrained_gguf 报 llama.cpp 编译错 llama.cpp 没装好 Unsloth 会自动 clone llama.cpp 并编译;如果失败手动 git clone + make
GGUF 转换后推理乱码 chat_template 没正确写到 Modelfile 在 Modelfile 显式写 TEMPLATE,参考第 10 章
合并后模型比基座大很多 没 merge,只是叠加 save_method="merged_16bit"

11.6chat template 相关坑(最高频)

Unsloth 用户 50% 的"训完模型不对劲"都是 chat template 问题。三条原则:

  1. 训练 / 推理 / 导出全部用同一个 template
  2. get_chat_template(tokenizer, chat_template="...") 统一管理;
  3. 导出 Ollama / vLLM 时显式把 template 写到 Modelfile / generation_config。

常见错配:

训练用推理用结果
llama-3 chatml 模型不知道何时停,啰嗦
alpaca llama-3 system prompt 失效
自定义 tokenizer 默认整个对话格式错位

11.7"为什么 Unsloth 没起作用" 自检

如果跑完发现速度 / 显存和 HF + PEFT 一样,按这个清单查:

  1. print(unsloth.__version__) 是否 ≥ 2026.5;
  2. 启动 log 顶部是否有 ==((====))==  Unsloth 2026.x: Fast Llama patching
  3. 是否有 RMSNorm = TRITON / LoRA = TRITON 这类字样;
  4. 是否用了 FastLanguageModel,而不是直接 AutoModelForCausalLM
  5. 是否用了 FastLanguageModel.get_peft_model,而不是直接 peft.get_peft_model
  6. use_gradient_checkpointing 是否设为字符串 "unsloth" 而不是 True
  7. UNSLOTH_DEBUG=1,看 fallback 提示。

11.8提 issue 的最小清单

  1. Unsloth / unsloth-zoo / transformers / PyTorch / CUDA / Triton 版本;
  2. GPU 型号;
  3. 启动 log 的完整 banner + patcher report;
  4. 能否在官方 Colab 上复现?
  5. 能否在 max_steps=2 + 最小样本上复现?
  6. 完整 Python stack trace。

11.9心法

三句话

1. Unsloth 出错时,先看启动 log 的 patcher report,确认 TRITON 全开;

2. chat_template 训推一致,省 50% 的"训完不对劲"问题;

3. 不要手动升级 transformers,跟着 Unsloth pin 走。