0.8B 模型写 bash 命令,卡了四天的地方在训练数据的写法
一位开发者把 Qwen3.5-0.8B 微调成离线 bash 助手,DPO、蒸馏、调参轮番上阵都停在 74%,最后发现问题出在训练请求和测试请求的写法不一样。补了约 9k 条同分布数据,准确率从 348 涨到 375。
终端里想要一个完全离线的助手:输入 dale "show the 5 largest files in this folder",一个小模型把英文写成命令,再由一个确定性的风险检查器标成 safe、caution、danger,确认之后才执行。这是开发者 Manuel 的项目 dale,代码 MIT,模型是 Apache-2.0 的 GGUF,能直接在 llama.cpp 上跑。整个东西是一个 51MB 的二进制,里面塞了 llama.cpp,没有 Python,没有服务端。
在 471 条留出的英文和西班牙语请求上测了一轮,所有模型都跑同一个 llama.cpp,统一 Q4_K_M:
| 模型 | GGUF | 正确数 | 准确率 | 95% CI |
|---|---|---|---|---|
| dale-9b(GPU) | 5.6 GB | 420 | 89.2% | 86.0–91.7 |
| dale-4b(GPU) | 2.7 GB | 410 | 87.0% | 83.7–89.8 |
| dale-2b | 1.3 GB | 385 | 81.7% | 78.0–85.0 |
| dale-0.8b(CPU) | 529 MB | 374 | 79.4% | 75.5–82.8 |
| Qwen3.5-9B,原版 | 5.7 GB | 296 | 62.8% | 58.4–67.1 |
| Gemma 4 E4B-it,原版 | 5.0 GB | 296 | 62.8% | 58.4–67.1 |
| Qwen3.5-4B,原版 | 2.7 GB | 257 | 54.6% | 50.0–59.0 |
| Gemma 4 E2B-it,原版 | 3.1 GB | 254 | 53.9% | 49.4–58.4 |
| Qwen3.5-2B,原版 | 1.3 GB | 152 | 32.3% | 28.2–36.6 |
| Qwen3.5-0.8B,原版 | 533 MB | 70 | 14.9% | 11.9–18.4 |
速度方面,2020 年的无 GPU 笔记本上,0.8B 的中位响应是 1.7 秒。4B 在 16GB GPU 上走 Vulkan 是 1.2 秒。

具体差在哪,看几组测试里的真实回答,左边是 dale-0.8b,右边是原版 Qwen3.5-9B:
| 请求 | dale-0.8b | 原版 Qwen3.5-9B |
|---|---|---|
| 临时冻结 PID 22601,别结束它 | kill -STOP 22601 | 往 /proc/22601/oom_score_adj 写值,什么也没冻住 |
| 把 offer.pdf 复制到 /mnt/usb/,已有的 offer.pdf 保持不动 | cp -n …/offer.pdf /mnt/usb/ | sudo cp …/offer.pdf /mnt/usb/,直接覆盖 |
| 在终端里给出 1234567890 的质因数分解 | factor 1234567890 | 一条 180 字符的 python3 -c 单行命令,还是语法错误 |
| 只想要 /opt/model-cache 的总磁盘占用,人类可读 | du -sh /opt/model-cache | 对目录调 os.path.getsize(),拿到的是目录项大小,不是内容大小 |
| 锁定本地账户 archivebot 的密码 | sudo passwd -l archivebot | sudo passwd archivebot,反而设了个新密码 |
| 当前 Bash 会话里,把 ll 设成 ls -alF 的别名 | alias ll='ls -alF' | 拒绝,说单条 shell 命令做不到 |
这些是挑出来的例子,作者自己说得很清楚。全量里还有 120 条只有 dale 做对、42 条只有 9B 做对的用例。原版 9B 还有个习惯,爱加 sudo,35 条命令根本不需要,dale 只有 5 条。

真正让作者难受的一段在后面。四轮数据之后,0.8B 卡在 74%。他试过对模型自己的失败样本做 DPO,试过用微调过的 27B 当 teacher 做五种不同的蒸馏,试过第三轮 epoch,试过 lr sweep。测试分数一动不动。他自己的原话是,几天就这么没了。
然后他回头去看请求本身是怎么写的。训练请求短、干净;测试请求更长,约束是叠着来的,比如“只要名字,按日期排序,不要子目录”。

他照着这个统计分布重新生成请求,往数据集里加了约 9k 条,重新训练。正确数从 348 变成 375,p = 0.001。

所以窄任务上小模型一旦平台期,先去看看数据是怎么写的,再去碰更花的方法。这是作者花了几天换来的经验。
需要说清楚的边界:基线模型没做微调,但给了 8-shot prompt,所以这组数字比较的是“微调过的小模型”和“带提示的大模型”,不能当模型排名看。测试集是合成的,判分由两家不同供应商的 LLM 完成。训练用的是租来的 RTX 5090 和 RTX Pro 6000。
作者在帖子最后留了个问题:有没有人真的在 1B 以下把大 teacher 的蒸馏做成了?他自己没做成,欢迎建议。
发布时间: 2026-11-08 23:26