每个模型的"使用说明书":chat template、tokenizer 怪癖、LoRA target_modules、显存预算、典型问题。 配套主指南:LLM部署微调学习指南.md 更新日期:2026-04-27
本手册不重复主指南里的通用方法论,只讲每个模型自己的特异性。
目录
- 通用约定
- Qwen2.5 系列
- Qwen3 系列
- DeepSeek-V2 / V3
- DeepSeek-R1 蒸馏
- GLM-4
- InternLM2 / 3
- Llama3 / 3.1
- MiniCPM
- Qwen2-VL
- 选型快查表
通用约定
1. Chat Template 各不相同
Qwen2.5: <|im_start|>user\n你好<|im_end|>\n<|im_start|>assistant\n
Llama3: <|start_header_id|>user<|end_header_id|>\n\n你好<|eot_id|>...
GLM-4: <|user|>\n你好<|assistant|>\n
DeepSeek: <|begin_of_sentence|>User: 你好\n\nAssistant:
绝对不要手写——用 tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)。
2. 特殊 Token 表
| 模型 | bos | eos | 训练时是否要手设 pad |
|---|---|---|---|
| Qwen2.5 | (无显式) | im_end | 否 |
| Llama3 | begin_of_text | eot_id | 是(用 eos 代) |
| GLM-4 | gMASK+sop | user 标签 | 是 |
| DeepSeek | begin_of_sentence | end_of_sentence | 是 |
| InternLM2 | s | /s | 否 |
| MiniCPM | (无显式) | /s | 否 |
通用兜底:
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
3. LoRA target_modules 速查
| 模型家族 | 注意力层名 | FFN 层名 |
|---|---|---|
| Qwen 系全部 | q_proj, k_proj, v_proj, o_proj | gate_proj, up_proj, down_proj |
| Llama 系全部 | q_proj, k_proj, v_proj, o_proj | gate_proj, up_proj, down_proj |
| GLM-4 老版 | query_key_value, dense | dense_h_to_4h, dense_4h_to_h |
| GLM-4 hf 版(transformers≥4.46) | q_proj, k_proj, v_proj, o_proj | gate_proj, up_proj, down_proj |
| InternLM2 | wqkv, wo | w1, w2, w3 |
| Baichuan2 | W_pack, o_proj | gate_proj, up_proj, down_proj |
| MiniCPM | q_proj, k_proj, v_proj, o_proj | gate_proj, up_proj, down_proj |
不确定时打印层名:
for name, module in model.named_modules():
if 'Linear' in str(type(module)):
print(name)
Qwen2.5 系列
型号:0.5B / 1.5B / 3B / 7B / 14B / 32B / 72B(每档有 base 和 instruct) 架构:Llama 架构 + GQA(Grouped Query Attention) 许可:Apache 2.0(0.5B-32B);Qwen License(72B 商用申请)
关键参数(7B-Instruct)
| 项 | 值 |
|---|---|
| 参数量 | 7.62B |
| 隐藏维度 | 3584 |
| 层数 / 注意力头 | 28 / 28 (Q) + 4 (KV) |
| 词表大小 | 152,064 |
| 上下文 | 32K(原生)/ 128K(YaRN 外推) |
| FP16 推理显存 | 14.6 GB |
Chat Template
<|im_start|>system
You are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>
<|im_start|>user
你好<|im_end|>
<|im_start|>assistant
Tokenizer 特性
- 中文压缩高:1 汉字 ≈ 1.3 token(Llama3 是 2-3 token)
- 内置工具调用 token,
apply_chat_template支持tools参数
LoRA 配置
LoraConfig(
r=8, lora_alpha=32, lora_dropout=0.05,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
task_type="CAUSAL_LM"
)
不同尺寸训练超参
| 模型 | r | lr | batch×grad_acc | LoRA 单卡显存 |
|---|---|---|---|---|
| 0.5B | 8 | 5e-4 | 8×2 | 4 GB |
| 1.5B | 8 | 3e-4 | 4×4 | 8 GB |
| 7B | 8 | 2e-4 | 2×8 | 20 GB |
| 14B | 16 | 1e-4 | 1×16 | 36 GB |
| 32B | 32 | 1e-4 | 1×16 | 多卡 |
| 72B | - | - | - | 多卡 + ZeRO-3 |
典型问题
Tokenizer class Qwen2Tokenizer加载报错 →transformers>=4.45.0- 32K 上下文实际只用到几 K → vLLM 加
--max-model-len 32768 - 128K 上下文乱码 → config.json 加 YaRN 外推配置:
rope_scaling: {factor: 4.0, type: yarn, original_max_position_embeddings: 32768} - 微调后说英文为主 → 中文样本占比 ≥ 70%
- ModelScope 下载路径:
Qwen/Qwen2.5-7B-Instruct
该用哪个尺寸
- 学习/玩:1.5B 或 3B(笔记本能跑)
- 个人项目/小公司:7B-Instruct(性价比之王)
- 企业内部:14B / 32B
- 对标 GPT-4:72B
Qwen3 系列
2025 年发布的新一代,把"思考"和"普通对话"统一在一个模型里。
型号:0.6B / 1.7B / 4B / 8B / 14B / 32B / 235B-A22B(MoE)
关键特性:enable_thinking 切换模式
与 Qwen2.5 的差异
- 集成思考能力:默认
enable_thinking=True,会先输出<think>...</think>再答 - 更强的代码和数学:reasoning benchmark 接近闭源模型
- 多语言增强:119 种语言
- MoE 版本:235B 总参数,激活 22B,推理成本接近 22B 模型
关闭思考模式
只想要纯回答(节省 token):
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False
)
或者在用户消息里加 /no_think:
用户:写一个排序函数 /no_think
vLLM 部署
python -m vllm.entrypoints.openai.api_server \
--model ./Qwen3-8B \
--max-model-len 32768 \
--reasoning-parser deepseek_r1
启用 --reasoning-parser 后,API 返回的 JSON 多一个 reasoning_content 字段,前端可以分别展示思考和答案。
微调注意
- LoRA 配置和 Qwen2.5 完全相同(target_modules 一致)
- 训练数据要包含
<think>标签的样本,否则微调后会忘记思考能力 - 不要思考能力的话,数据纯净即可,推理时统一
enable_thinking=False
典型问题
- 思考内容混进答案 → 解析
</think>之后的部分,或用 vLLM 的 reasoning-parser - 思考链过长导致 token 超限 → 限制
max_tokens,或在 prompt 里加 "请简洁思考"
DeepSeek-V2 / V3
DeepSeek 通用对话主线。
架构亮点:
- MLA(Multi-head Latent Attention):压缩 KV Cache 到原来 1/4,长上下文友好
- MoE 结构:V2 是 236B / 激活 21B;V3 是 671B / 激活 37B
- 开源彻底,训练数据配比都公开
- DeepSeek-7B-chat:早期密集模型,普通用户主要用这个
Chat Template(7B-chat,DeepSeek-V2 类似)
DeepSeek 用 User: / Assistant: 字面前缀,而不是像 Qwen 那样的特殊 token 包裹:
- 开头加
<|begin_of_sentence|> - 用户回合:
User: ...(后跟两个换行) - 助手回合:
Assistant: ...<|end_of_sentence|> - 多轮直接拼接
实际生成时直接用 apply_chat_template,不要手写。
LoRA 配置
LoraConfig(
r=8, lora_alpha=32, lora_dropout=0.05,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
task_type="CAUSAL_LM"
)
训练超参建议(7B-chat)
| 项 | 值 |
|---|---|
| 学习率 | 1e-4(比 Qwen 低,DeepSeek 对 lr 敏感) |
| epoch | 3 |
| batch×grad_acc | 2×8 |
| 显存 | LoRA ~22GB,QLoRA ~6GB |
典型问题
- 输出"User:"或"Assistant:"前缀 → chat_template 没用对,模型把字面前缀又输出了一遍
- bos_token 重复 → tokenizer 默认会加 bos,如果你手动拼接又加一次,导致两个 bos
- 7B-chat 显存吃紧 → 强烈推荐 QLoRA(NF4),6GB 即可微调
- ModelScope 下载路径:
deepseek-ai/deepseek-llm-7b-chat
V2 / V3 的部署门槛
- DeepSeek-V2-236B:激活 21B,但加载时需要全部权重在显存,4×A100-80G 起步
- DeepSeek-V3-671B:激活 37B,8×H100-80G 起步,不是普通用户能本地跑的
- 替代方案:用 DeepSeek 官方 API,或用 R1-Distill 系列(下一节)
DeepSeek-R1 蒸馏
R1 原版 671B 太大,日常使用看蒸馏版。
型号:R1-Distill-Qwen-1.5B / 7B / 14B / 32B、R1-Distill-Llama-8B / 70B 性能:7B 蒸馏版数学能力超过 GPT-4o(MATH 基准) 训练方式:用 R1 生成的思考链数据,SFT 到 Qwen / Llama 基座上
关键差异:它是"基于 Qwen / Llama 的模型,带思考能力"
- chat_template、tokenizer 与对应基座(Qwen2.5 / Llama3.1)一致
- target_modules 也与基座一致
- 但输出会自动包含
<think>...</think>
vLLM 部署
python -m vllm.entrypoints.openai.api_server \
--model ./DeepSeek-R1-Distill-Qwen-7B \
--max-model-len 32768 \
--served-model-name r1-distill \
--reasoning-parser deepseek_r1
参数说明:
max-model-len 32768:思考链很长,必须开大上下文--reasoning-parser deepseek_r1:自动把思考和答案分开返回
调用建议
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="x")
resp = client.chat.completions.create(
model="r1-distill",
messages=[{"role": "user", "content": "证明根号2是无理数"}],
temperature=0.6, # 官方推荐,不要用 1.0
max_tokens=8192 # 思考会消耗很多 token
)
print(resp.choices[0].message.reasoning_content) # 思考过程
print(resp.choices[0].message.content) # 最终答案
微调注意
- 不建议微调小尺寸 R1-Distill 的"思考能力"——容易破坏蒸馏出来的推理链
- 如果只是要让它换个领域回答,微调后的输出会失去
<think>标签,推理能力下降 - 建议:R1-Distill 当作"推理专家"直接用,要领域适配走 RAG 而非微调
典型问题
- 输出没有
<think>标签 → 模型本身就这样,有时候简单问题不思考。temperature 调到 0.6 后会更稳定 - 思考链不收敛(无限循环) → 学习率不够低或训练数据污染。停掉重新训
- 上下文不够 → 把
max-model-len调到 32K 或 64K
GLM-4
智谱清言开源版。
型号:GLM-4-9B、GLM-4-9B-Chat、GLM-4-9B-Chat-1M(百万 token 上下文)、GLM-4V-9B(视觉版) 架构:RMSNorm + GLU + RoPE,标准 Transformer 许可:GLM 系列许可(免费商用,需登记)
重要分水岭:hf 版 vs 老版
GLM-4-9B 早期发布时,模型代码是自定义的(不在 transformers 主干里)。后来 HuggingFace 把它合并进 transformers 4.46+,同时智谱发布了"hf 版":
- 老版:
THUDM/glm-4-9b-chat,需要trust_remote_code=True,target_modules 是query_key_value, dense, dense_h_to_4h, dense_4h_to_h - hf 版:
THUDM/glm-4-9b-chat-hf,不需要 trust_remote_code,target_modules 改成标准的q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
新项目首选 hf 版,需要 transformers>=4.46.0。
Chat Template(hf 版)
[gMASK]<sop><|system|>
你是智谱AI<|user|>
你好<|assistant|>
LoRA 配置
# hf 版
LoraConfig(
r=8, lora_alpha=32,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
task_type="CAUSAL_LM"
)
# 老版
LoraConfig(
r=8, lora_alpha=32,
target_modules=["query_key_value","dense",
"dense_h_to_4h","dense_4h_to_h"],
task_type="CAUSAL_LM"
)
显存
| 操作 | 显存 |
|---|---|
| FP16 推理(9B) | 18 GB |
| LoRA 微调 | 24 GB |
| QLoRA 微调 | 8 GB |
| 1M 上下文版本推理 | 取决于 KV Cache,实际用 100K 就要 30GB+ |
典型问题
- 老代码升级到新 transformers 后报错 → 切到 hf 版,改 target_modules
- 1M 上下文实际跑不了 → KV Cache 显存爆炸,vLLM 必须配 PagedAttention 才能勉强用
- 输出多了一段
[gMASK]→ tokenizer 设置错了,正确的 chat_template 已自动处理 - ModelScope 路径:
ZhipuAI/glm-4-9b-chat-hf
工具调用强项
GLM-4 在 function calling 基准上表现优秀,如果你的应用要做 Agent / Tool Use,GLM-4 是国产模型里的首选。
InternLM2 / InternLM3
上海 AI 实验室开源,长文本和数学是亮点。
型号:InternLM2-1.8B / 7B / 20B、InternLM2.5-1.8B / 7B / 20B、InternLM3-8B 特点:
- 200K 原生长上下文(InternLM2.5)
- 数学和代码强(GSM8K、MATH 接近闭源)
- 开放性好,商用免费
Chat Template
<s><|im_start|>system
你是书生·浦语<|im_end|>
<|im_start|>user
你好<|im_end|>
<|im_start|>assistant
LoRA target_modules(注意!和 Qwen / Llama 都不同)
LoraConfig(
r=8, lora_alpha=32,
target_modules=["wqkv","wo","w1","w2","w3"],
task_type="CAUSAL_LM"
)
wqkv 是 Q/K/V 三合一的线性层,wo 是输出投影,w1/w2/w3 是 FFN 的三个矩阵(对应 gate/up/down)。
显存(InternLM2-7B)
| 操作 | 显存 |
|---|---|
| FP16 推理 | 15 GB |
| LoRA 微调 | 21 GB |
| QLoRA 微调 | 7 GB |
典型问题
- 模型加载需要
trust_remote_code=True(InternLM2,InternLM3 已合入 transformers) - 200K 长上下文不要直接全填进去,实测 64K 内效果最好
- 数学问题用 InternLM-Math 专用版本(7B/20B)效果更好
- ModelScope 路径:
Shanghai_AI_Laboratory/internlm2_5-7b-chat
Llama3 / Llama3.1
Meta 旗舰系列,英文最强,中文一般。
型号:Llama3-8B/70B、Llama3.1-8B/70B/405B、Llama3.2-1B/3B/11B-Vision/90B-Vision 许可:Llama 3 Community License(月活 ≥ 7 亿要单独申请)
中文能力
- 8B 中文一般,推荐用社区中文增强版(如 Llama3-Chinese-Chat)
- 70B 中文能力较好,但仍不如 Qwen2.5-72B
- 不要用 Llama3 做纯中文应用,选 Qwen 系
Chat Template(3.1)
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
You are a helpful assistant<|eot_id|><|start_header_id|>user<|end_header_id|>
Hello<|eot_id|><|start_header_id|>assistant<|end_header_id|>
注意结尾 assistant<|end_header_id|> 后有两个换行,这是 chat_template 规定的。
Tokenizer 注意
pad_token默认是 None,训练前必须手动设:tokenizer.pad_token = tokenizer.eos_token- 词表 128K,中文字符通常被切成 2-3 个 token(中文压缩比 Qwen 差很多)
LoRA 配置
LoraConfig(
r=8, lora_alpha=32, lora_dropout=0.05,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
task_type="CAUSAL_LM"
)
显存(Llama3.1-8B)
| 操作 | 显存 |
|---|---|
| FP16 推理 | 16 GB |
| LoRA 微调 | 22 GB |
| QLoRA 微调 | 7 GB |
典型问题
- 模型权重需要登记申请(HuggingFace 上点 Request access)
- 国内下载推荐:ModelScope 上
LLM-Research/Meta-Llama-3.1-8B-Instruct是镜像 - 中文输出英文穿插 → 微调中文样本至少占 80%
- 训练 loss 不下降 → 检查 pad_token 是否设置,以及数据是否漏了
<|eot_id|>
MiniCPM
面壁智能 + 清华 NLP 联合开源,端侧部署的代表。
型号:MiniCPM-1B / 2B / 4B、MiniCPM-V(视觉)、MiniCPM-o(全模态) 亮点:
- 2.4B 非 embedding 参数,在 7B 量级模型中性能领先
- 端侧友好(手机/边缘设备能跑)
- INT4 量化后 2GB 显存就能推理
Chat Template(MiniCPM-2B)
<用户>你好<AI>
非常简洁,直接用 <用户> 和 <AI> 字面 token 切分。
LoRA 配置
LoraConfig(
r=8, lora_alpha=32,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
task_type="CAUSAL_LM"
)
显存(2B)
| 操作 | 显存 |
|---|---|
| FP16 推理 | 5 GB |
| INT4 推理 | 2 GB |
| LoRA 微调 | 8 GB |
| QLoRA 微调 | 4 GB |
典型问题
- 加载需要
trust_remote_code=True - 长文本理解一般(2.4B 毕竟小),不要用它做 RAG 总结超长文档
- 端侧部署用 llama.cpp 转 GGUF 格式,具体见硬件适配文档
- ModelScope 路径:
OpenBMB/MiniCPM-2B-sft-bf16
何时选 MiniCPM 而非 Qwen2.5-1.5B
- 想跑在 CPU / 手机上 → MiniCPM(社区生态好,GGUF 全)
- 想榨最后一点性能 → MiniCPM(同尺寸下基准分数略高)
- 单纯学习/服务器部署 → Qwen2.5-1.5B(生态更全,文档更多)
Qwen2-VL
开源视觉语言模型代表。
型号:Qwen2-VL-2B / 7B / 72B、Qwen2.5-VL(2025 升级版) 能力:图像理解、视频理解(原生支持任意分辨率/任意长度) 许可:Apache 2.0(2B/7B)
关键特性
- 原生支持任意分辨率(Naive Dynamic Resolution):不用预先 resize 图片
- 支持视频:可以输入视频文件,模型自动按帧采样
- OCR 强:中英文文档识别接近闭源模型
输入格式
messages = [{
"role": "user",
"content": [
{"type": "image", "image": "path/to/image.jpg"},
{"type": "text", "text": "图里有什么?"}
]
}]
# 视频
messages = [{
"role": "user",
"content": [
{"type": "video", "video": "path/to/video.mp4", "max_pixels": 360*640, "fps": 1.0},
{"type": "text", "text": "视频里发生了什么?"}
]
}]
显存(7B)
| 操作 | 显存 |
|---|---|
| 推理(单张图) | 24 GB |
| 推理(视频,30秒) | 32-40 GB(取决于采样帧数) |
| LoRA 微调(只训 LLM) | 28 GB |
LoRA 配置(只微调语言部分)
LoraConfig(
r=8, lora_alpha=32,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
# 注意:不要包括 "visual" 开头的模块
task_type="CAUSAL_LM"
)
重要:VLM 微调要冻结视觉编码器,否则容易破坏图文对齐。peft 默认会按名字匹配 target_modules,如果你的 LLM 部分和视觉部分有同名层(如都叫 q_proj),需要用 modules_to_save=None + 精确名字过滤。
vLLM 部署
python -m vllm.entrypoints.openai.api_server \
--model ./Qwen2-VL-7B-Instruct \
--max-model-len 32768 \
--limit-mm-per-prompt 'image=2,video=1'
--limit-mm-per-prompt 控制单个请求最多多少图/视频,防 OOM。
调用(OpenAI 兼容)
import base64
with open("image.jpg", "rb") as f:
img_b64 = base64.b64encode(f.read()).decode()
resp = client.chat.completions.create(
model="qwen2-vl",
messages=[{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}},
{"type": "text", "text": "图里有什么?"}
]
}]
)
典型问题
- 大图爆显存 → 在 messages 里加
max_pixels=1280*960限制图像大小 - 视频卡顿 → 降低 fps(默认 2.0,改 1.0 或 0.5)
- 微调后视觉能力消失 → 没冻结视觉编码器,重训
- ModelScope 路径:
Qwen/Qwen2-VL-7B-Instruct
选型快查表
把所有模型按场景归类,5 秒内做决定。
按任务
| 任务 | 首选 | 备选 |
|---|---|---|
| 中文通用对话 | Qwen2.5-7B-Instruct | InternLM2.5-7B、GLM-4-9B-Chat |
| 中文长文本(50K+) | InternLM2.5-7B(200K) | GLM-4-9B-Chat-1M |
| 数学/逻辑推理 | DeepSeek-R1-Distill-Qwen-7B | InternLM2-Math、Qwen3-8B(thinking) |
| 代码生成 | DeepSeek-Coder-V2-Lite | Qwen2.5-Coder-7B |
| 工具调用/Agent | GLM-4-9B-Chat | Qwen2.5-7B-Instruct |
| 图文理解 | Qwen2-VL-7B | MiniCPM-V-2.6 |
| 端侧/低显存 | MiniCPM-2B | Qwen2.5-1.5B |
| 英文为主 | Llama3.1-8B | Gemma2-9B |
按显存预算
| 显存 | 推荐配置 |
|---|---|
| < 6 GB | MiniCPM-2B(INT4)、Qwen2.5-0.5B/1.5B |
| 6-12 GB | Qwen2.5-3B、QLoRA 微调 7B 模型 |
| 16-24 GB | Qwen2.5-7B + LoRA 微调(主力配置) |
| 24-48 GB | Qwen2.5-14B、Llama3.1-8B 全量微调 |
| 80GB | Qwen2.5-32B、72B 量化部署 |
| 多卡 | Qwen2.5-72B、Llama3.1-70B、DeepSeek-V3 |
按场景速记
- 中文小公司全场景 → Qwen2.5-7B-Instruct + LoRA + RAG
- 想体验"会思考的模型" → DeepSeek-R1-Distill-Qwen-7B 或 Qwen3-8B
- 公司内部知识库 → Qwen2.5-7B + bge-large-zh + Chroma
- 给客服做风格适配 → Qwen2.5-7B + LoRA(500-2000 条客服对话)
- 多模态项目 → Qwen2-VL-7B
- 给手机/边缘端做小助手 → MiniCPM-2B(GGUF)
通用原则
学完这份手册,记住三件事就够了:
- 每个模型的 chat_template、target_modules、特殊 token 都不同——动手前查一遍这份手册
- 首选 Qwen2.5 系列——除非有明确理由(纯英文、推理任务、多模态、端侧)
- 微调前先 RAG——大多数"模型不知道这个事实"的问题用 RAG 能解决,不要张嘴就微调
具体的可运行代码见配套文档 LLM部署微调-可运行代码.md;硬件平台适配见 LLM部署微调-硬件平台适配.md。