fine-tuning
微调与参数高效微调
本文整理 Char01.txt、Char03.txt、Char05.txt、Char06.txt、Char08.txt、Char09.txt 中的微调相关概念,并给出适合 Jetson Nano 的替代路线。
1. 微调是什么
微调是在预训练模型基础上,用任务数据继续训练,使模型适配特定任务或领域。
常见目标:
- 分类:情感分析、意图识别、质量判断。
- 生成:客服回复、代码补全、摘要。
- 问答:阅读理解、领域问答。
- 翻译:文本到文本生成。
- 检索增强:训练 embedding 或 reranker。
2. 全量微调 vs 参数高效微调
| 方法 | 更新参数 | 显存/内存 | Jetson Nano 适合度 |
|---|---|---|---|
| 全量微调 | 全部参数 | 最高 | 不适合大模型,只适合 tiny 模型 |
| LoRA | 低秩适配矩阵 | 中低 | 适合概念演示,不适合真实 0.5B+ 训练 |
| P-Tuning / Prompt Tuning | 虚拟 token / prompt 参数 | 较低 | 适合小模型演示 |
| 冻结骨干 + 分类头 | 只训练头部 | 较低 | Jetson Nano 相对可行 |
| RAG | 不训练或少训练 | 低 | 非常适合 Jetson Nano 原型 |
3. 数据准备流程
随书多个章节都遵循类似流程:
flowchart LR
A[Raw Data] --> B[Clean]
B --> C[Train/Validation Split]
C --> D[Tokenizer]
D --> E[Tensor Dataset]
E --> F[Trainer / Training Loop]
F --> G[Evaluation]
G --> H[Save Model]
关键点:
- 清洗空文本、重复文本和异常标签。
- 控制
max_length,Jetson Nano 上建议64或更低。 - 小样本先跑通流程,再扩大数据。
- 保存 tokenizer、config、model 权重和训练参数。
4. 模型替换策略
原始示例中的大模型需要替换:
| 原示例 | 问题 | 建议替换 |
|---|---|---|
facebook/llama-3b |
太大,不适合 Nano | distilbert-base-uncased、prajjwal1/bert-tiny |
gpt2 |
可推理但微调吃紧 | sshleifer/tiny-gpt2、自定义 tiny decoder |
gemma/gpt-7b-finetuned |
完全不适合 Nano | 远程 API 或云 GPU |
Salesforce/codegen-350M-multi |
训练不适合 Nano | Salesforce/codet5-small 仅做小样本/CPU 演示 |
Qwen2.5-0.5B |
可作为轻量推理目标,训练仍重 | 用量化推理;微调放云端 |
5. LoRA 概念
LoRA 的核心思想:冻结原模型权重,只训练低秩矩阵:
W' = W + BA
其中:
W是原始权重,不更新。A、B是低秩矩阵。- rank 越小,新增参数越少。
适合学习的 LoRA 配置:
lora_config = {
"rank": 4,
"alpha": 8,
"dropout": 0.05,
"target_modules": ["q_proj", "v_proj"],
}
在 Jetson Nano 上,建议只做:
- tiny GPT-2 的 LoRA 流程演示。
- 自定义小 Transformer 的 LoRA 插入实验。
- 冻结 embedding 和 transformer block,只训练小 adapter。
不要在 Nano 上对 Qwen2.5-0.5B 做训练型 LoRA。
6. P-Tuning / Prompt Tuning
P-Tuning 不直接改模型主体,而是学习一组虚拟 token embedding,引导模型完成任务。
适合理解:
- Prompt 不是简单文字模板,也可以是可训练参数。
- 对小数据任务,prompt tuning 可以减少训练参数。
- 推理时仍需要基础模型参与。
Jetson Nano 上建议用小分类模型或 tiny seq2seq 模型演示。
7. Trainer 参数建议
随书示例常见参数:
TrainingArguments(
per_device_train_batch_size=4,
num_train_epochs=3,
max_length=64,
)
Jetson Nano 建议:
TrainingArguments(
per_device_train_batch_size=1,
gradient_accumulation_steps=4,
num_train_epochs=1,
max_steps=50,
logging_steps=5,
save_strategy="no",
fp16=False,
)
说明:
batch_size=1降低内存。gradient_accumulation_steps模拟更大 batch。save_strategy="no"避免频繁写盘。fp16在 Jetson Nano / CUDA 10.2 / 旧 PyTorch 环境下不一定稳定,先关闭。
8. 评估指标
| 任务 | 指标 |
|---|---|
| 分类 | Accuracy、Precision、Recall、F1、Confusion Matrix |
| 生成 | Perplexity、人工评估、BLEU、ROUGE |
| 翻译 | BLEU、COMET、人工评估 |
| 检索 | Recall@K、MRR、NDCG |
| Agent | 任务完成率、工具调用成功率、成本、延迟 |
9. 推荐实践路线
- 手写 tiny Transformer,理解 forward / loss / backward。
- 用小数据训练字符级语言模型。
- 用
sshleifer/tiny-gpt2跑生成推理。 - 用
prajjwal1/bert-tiny做分类微调。 - 用 LoRA 思路改造一个自定义小模型。
- 把真实大模型训练迁移到云端或桌面 GPU。
- 在 Jetson Nano 上部署量化推理、RAG 或 API 原型。
Page Source