收尾复盘
全专栏的决策速查、常见错误索引,以及一条从零开始的完整路径。
三条主线
整个专栏其实只在回答三个问题:
① 怎么把模型拿到手 → 格式怎么选、从哪下、国内怎么办
② 怎么让它跑起来 → 显存够不够、用哪套推理栈
③ 怎么让它变成我的 → 数据怎么整、怎么微调、怎么发布决策速查
下载
国内? → HF_ENDPOINT=https://hf-mirror.com,或用 ModelScope
只要权重? → allow_patterns=["*.safetensors","*.json","*.model","*.txt"]
GGUF 仓库? → 必须 --include 指定量化档,否则全下
要部署/进容器? → --local-dir,别用缓存(符号链接跨层易断)
生产环境? → 钉 commit hash,不用分支名选模型
显存 4G → 4B int4,或纯 CPU 走 GGUF
显存 8G → 8B Q4_K_M / AWQ ← 最常见
显存 12G → 8B int8,可开始 QLoRA 微调
显存 16G → 8B bf16,QLoRA 微调舒服
显存 24G → 32B int4,或 14B 微调 ← 甜点
纯 CPU → 16G 内存跑 8B Q4,约 5~10 token/s同显存下优先「大模型 + 重量化」。
部署
单人本地用 → Ollama
没有 N 卡 / Mac → llama.cpp(-ngl 按显存调)
要接进 Python → transformers(torch_dtype="auto" 必写)
有并发、要吞吐 → vLLM(--max-model-len 别用模型上限)训练
想让模型「知道」内容 → RAG,不是微调
想让模型「按某种方式说」 → LoRA
显存 12~16G → QLoRA(4bit 基座)
起手参数 → r=16, alpha=32, lr=2e-4, target_modules="all-linear"
数据量 → 先 500~1000 条精数据,别一上来堆 10 万
epoch → 数据越少轮数越少,500 条跑 1~2 轮常见错误索引
按出现频率排。这张表是整个专栏最实用的部分——遇到问题先在这里找。
| 症状 | 原因 | 在哪一章 |
|---|---|---|
| 8B 模型占了 32 G 显存 | 没写 torch_dtype="auto",默认 fp32 | transformers |
| 模型答非所问 / 输出乱 | 没用 apply_chat_template | transformers |
| 输出里带着自己的提问 | 忘了切 inputs.input_ids.shape[1]: | transformers |
| 模型停不下来一直生成 | eos_token_id 不对,漏下 generation_config.json | 仓库结构 |
| 下载 401 | gated 模型没在网页同意条款 | 认识 Hub |
| 设了镜像还连官方 | os.environ 写在 import 之后 | 国内访问 |
| 下了几十 G 用不上的东西 | GGUF 仓库没加 --include | 下载 |
| 加载报「找不到文件」 | 漏下 model.safetensors.index.json | 仓库结构 |
| 模型「忘了」前面的对话 | Ollama 默认上下文只有 4096 | GGUF 路线 |
| vLLM 启动就 OOM | --max-model-len 用了模型上限 | vLLM |
| 聊长了就 OOM | KV cache 随上下文增长 | 选模型 |
map 里报类型错误 | batched=True 时收到的是列的字典 | datasets |
| 训练 loss 掉到 0 | 数据重复 / 过拟合 / 泄漏 | 训练实操 |
| 训到一半 OOM | 某几条超长样本 | 训练实操 |
| 微调后通用能力变差 | 灾难性遗忘 | 训练实操 |
| 别人下了模型用不了 | 忘传 tokenizer | 推回 Hub |
| 「这月账单怎么这么多」 | 忘删的 Endpoint / GPU Space | 收费版 |
一条从零开始的完整路径
如果你想把整个流程走一遍,这是最短的可行序列:
① 环境(10 分钟)
export HF_HOME=/data/hf # 别撑满系统盘
export HF_ENDPOINT=https://hf-mirror.com # 国内
pip install -U huggingface_hub transformers torch accelerate② 跑通一个小模型(10 分钟)
ollama run qwen3:4b先确认「模型能在我机器上跑」这件事,再谈别的。
③ 接进代码(20 分钟)
用 transformers 那一章的最小例子,跑通 apply_chat_template + generate + 切输出。
④ 准备 200 条数据(半天)
按做数据集的对话格式,先做 200 条——不是 2 万条。人工过一遍。
⑤ 跑通训练(1 小时)
用微调那一章的脚本,先 max_steps=10 跑通,再放开。
⑥ 验收(1 小时)
准备 20 条训练集外的输入,训练前后对比。再测几条无关问题,确认没训傻。
⑦ 发布(20 分钟)
push_to_hub(private=True),写清 base_model 与已知局限,从零加载验证一遍。
整条路径一天之内能走完,前提是每一步都用小规模。
最常见的失败模式是「第四步就做了 2 万条数据、第五步直接全量训」——出了问题根本不知道是哪一环的锅。
小步快跑,每步都验证,比一次做对更快。
几条不随版本变化的经验
① 先跑通,再跑好。 小模型、小数据、少步数把全链路打通,再逐项放大。
② 质量比数量重要。 1000 条精数据胜过 10 万条粗数据——尤其对 LoRA。
③ 效果不好先看数据。 顺序是数据 → 超参 → 模型规模,不是反过来。
④ 微调不灌知识。 要模型「知道」什么,用 RAG;微调是教它「怎么说」。
⑤ 量化的性价比被低估。 4bit 让硬件门槛直接降一档,质量损失通常可接受。
⑥ 很多任务不需要 LLM。 分类、NER、语义匹配,几百 MB 的小模型又快又稳。
⑦ 定期清理花钱的资源。 这一条省下的钱,往往比所有技术优化加起来还多。
继续往下走
| 想深入 | 去哪 |
|---|---|
| Transformer 到底怎么工作的 | 《AI 大模型解构》 |
| 从零实现一个 GPT | 《nanoGPT 源码解读》 |
| PyTorch 底层机制 | 《PyTorch 源码漫游》 |
| 从比特到 AGI 的完整路径 | 《从 Bit 到 AGI》 |
| 把模型接成 Agent | 《从 LLM 到 Coding Agent》 |
官方资源:
- HuggingFace Docs —— 权威且更新快
- HF 社区课程 —— 免费,有 NLP / 深度强化学习 / Agent 等方向
- Hub 模型页的 Community 标签 —— 别人踩过的坑常在这里
回到专栏首页可查任意章节。
这个专栏讲的所有东西,本质上只是让你能自由地取用别人的成果、再把自己的东西还回去。 Hub 上那上百万个模型,每一个都是有人训完传上来的——你也可以是其中之一。