[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"learning-part-16-peft-lora":3,"learning-all":13},{"id":4,"slug":5,"title":6,"description":7,"level":8,"topic":9,"url":10,"content":11,"sortOrder":12},14,"part-16-peft-lora","Part 16 · PEFT 参数高效微调","重点吃透 **LoRA**：用极少量可训练参数微调大模型（消费级显卡就能跑）。","ADVANCED","PEFT\u002FLoRA",null,"# Part 14 · PEFT 参数高效微调\n\n\n---\n\n## Section 1 · PEFT 是什么 + 装环境\n\n**Subsection 1 · 概念**\n```\nPEFT（Parameter-Efficient Fine-Tuning，参数高效微调）\n= 只训练一小部分参数，就能达到接近全参微调的效果\n好处：显存占用小（1\u002F10 甚至更少）、训练快、成本低\n```\n\n**Subsection 2 · 装库**\ncmd：`pip install peft`\n\n**Subsection 3 · 过关自测**\n能说\"PEFT 解决什么问题\" = Section 1 完成。\n\n---\n\n## Section 2 · PEFT 三大流派（Adapter \u002F Prompt \u002F Prefix）\n\n**Subsection 1 · 记三种思路**\n```\n① Adapter Tuning  在 Transformer 层之间插入小网络，只训小网络\n② Prompt Tuning   在输入前加可学习的\"软提示\"向量，只训这些向量\n③ Prefix Tuning   在每层前加可学习的\"前缀\"，只训前缀\n```\n- 💡 共同点：**冻结原模型，只训练新增的小参数**。\n\n**Subsection 2 · 过关自测**\n能说出三种 PEFT 思路 = Section 2 完成。\n\n---\n\n## Section 3 · LoRA 原理（重点）\n\n**Subsection 1 · 记核心思想**\n```\nLoRA（Low-Rank Adaptation，低秩适配）\n原理：冻结原权重 W，在旁边加一个低秩矩阵 ΔW = A × B\n  A: (in_dim × r)   B: (r × out_dim)，r 很小（如 8\u002F16\u002F64）\n  r 越小→可训练参数越少→越省显存\n效果：参数量降到原模型的 ~0.1%，效果接近全参微调\n```\n\n**Subsection 2 · 画图**\n在备忘录画：\n```\n    输入\n      │\n      ▼\n  W(冻结) ──────┐\n               ▼\n             输出 = W·x + (A·B)·x\n      ▲\n A·B(可训练)\n```\n\n**过关**：能对着图讲 LoRA = Section 3 完成。\n\n---\n\n## Section 4 · 用 HF PEFT 跑 LoRA（代码）\n\n**Subsection 1 · 跑 LoRA 训练**\n新建 `lora_train.py`：\n```python\nfrom transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer\nfrom datasets import Dataset\nfrom peft import LoraConfig, get_peft_model\nimport json\n\n# 数据\nrows = [json.loads(l) for l in open(\"train_data_clean.jsonl\", encoding=\"utf-8\")]\ndataset = Dataset.from_list(rows)\nmodel_name = \"Qwen\u002FQwen2.5-0.5B-Instruct\"\n\ntokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)\nmodel = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)\n\n# LoRA 配置：只训练注入的低秩矩阵\nlora = LoraConfig(\n    r=8,                  # 秩：越小越省\n    lora_alpha=16,        # 缩放系数\n    target_modules=[\"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\"],  # 只改注意力投影\n    lora_dropout=0.05,\n)\nmodel = get_peft_model(model, lora)\nmodel.print_trainable_parameters()   # 打印可训练参数占比\n\ndef fmt(ex):\n    text = tokenizer.apply_chat_template(ex[\"messages\"], tokenize=False)\n    return tokenizer(text, truncation=True, max_length=256, padding=\"max_length\")\n\ndataset = dataset.map(fmt)\nargs = TrainingArguments(\n    output_dir=\"lora_out\",\n    num_train_epochs=3,\n    per_device_train_batch_size=1,\n    logging_steps=1,\n    save_strategy=\"no\",\n    report_to=[],\n)\nTrainer(model=model, args=args, train_dataset=dataset).train()\nmodel.save_pretrained(\"lora_out\")   # 只保存 LoRA 权重（很小）\nprint(\"LoRA 训练完成\")\n```\n- ✅ 预期看到：`trainable params` 只占百分之零点几，训练后 `lora_out` 里是几百 KB 的小文件。\n- 💡 **对比Part 13 全参微调：可训练参数从 100% 降到 ~0.5%，这就是 LoRA 的价值。**\n\n**过关**：LoRA 训练跑通并看到参数量对比 = Section 4 完成。\n\n---\n\n## Section 5 · 加载 LoRA 推理\n\n**Subsection 1 · 跑推理**\n新建 `lora_infer.py`：\n```python\nfrom transformers import AutoModelForCausalLM, AutoTokenizer\nfrom peft import PeftModel\n\nbase = \"Qwen\u002FQwen2.5-0.5B-Instruct\"\nmodel = AutoModelForCausalLM.from_pretrained(base, trust_remote_code=True)\nmodel = PeftModel.from_pretrained(model, \"lora_out\")   # 叠加 LoRA\n\ntokenizer = AutoTokenizer.from_pretrained(base, trust_remote_code=True)\ntext = tokenizer.apply_chat_template([{\"role\": \"user\", \"content\": \"能开发票吗\"}], tokenize=False, add_generation_prompt=True)\ninputs = tokenizer(text, return_tensors=\"pt\")\nout = model.generate(**inputs, max_new_tokens=50)\nprint(tokenizer.decode(out[0][len(inputs[\"input_ids\"][0]):], skip_special_tokens=True))\n```\n- ✅ 预期看到：按你数据的风格回答。\n\n**过关**：LoRA 推理跑通 = Section 5 完成。\n\n---\n\n## Section 6 · LLaMA-Factory 一键 LoRA\n\n**Subsection 1 · 跑命令**\n在 LLaMA-Factory 目录：\n```\npython src\u002Ftrain_bash.py \\\n  --model_name_or_path Qwen\u002FQwen2.5-1.5B-Instruct \\\n  --dataset train_data_clean.jsonl \\\n  --finetuning_type lora \\\n  --template qwen \\\n  --output_dir .\u002Flora_sft \\\n  --num_train_epochs 3 \\\n  --learning_rate 1e-4 \\\n  --lora_rank 8\n```\n- ✅ 预期看到：训练完成，`lora_sft` 里是 LoRA 权重。\n- 💡 对比Part 13 全参命令，只多了 `--finetuning_type lora`——生产就用这条。\n\n**过关**：LLaMA-Factory LoRA 跑通 = Section 6 完成。\n\n---\n\n## Section 7 · 评估 LoRA 效果\n\n**Subsection 1 · 对比**\n- 同一组测试问题，分别测：原始模型 \u002F LoRA 微调后。\n- 打分对比（沿用Part 13 Section 11 的方法）。\n- 写笔记：LoRA 达到了全参微调几成的效果？\n\n**过关**：有 LoRA 效果数据 = Section 7 完成。\n\n---\n\n## Section 8 · QLoRA 原理（显存再减半）\n\n**Subsection 1 · 记原理**\n```\nQLoRA = 量化（4bit）+ LoRA\n  - 把原模型量化到 4bit（省显存）\n  - 只对 LoRA 参数做反向传播\n效果：一张 24GB 显卡能微调 70B 级别模型；一张消费级卡能微调 7B~13B\n```\n- 💡 这就是\"消费级显卡微调大模型\"的钥匙。\n\n**过关**：能说 QLoRA = 4bit + LoRA = Section 8 完成。\n\n---\n\n## Section 9 · 用 bitsandbytes 跑 QLoRA\n\n**Subsection 1 · 装库**\ncmd：`pip install bitsandbytes`\n\n**Subsection 2 · 跑 QLoRA**\n在 `lora_train.py` 基础上改两处：\n```python\nfrom transformers import BitsAndBytesConfig\n\n# 4bit 量化配置\nbnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type=\"nf4\", bnb_4bit_compute_dtype=\"float16\")\nmodel = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, quantization_config=bnb)\n# 其余和 Section 4 相同\n```\n- ✅ 预期看到：模型加载时显存占用明显降低，训练跑通。\n- 💡 记下显存占用对比（Section 4 全精度 vs 现在 4bit），写进笔记。\n\n**过关**：QLoRA 跑通 = Section 9 完成。\n\n---\n\n## Section 10 · QLoRA 效果验证\n\n**Subsection 1 · 对比测试**\n- 同一测试集，对比：LoRA（Day4） vs QLoRA（Day9） 的效果与显存。\n- ✅ 预期看到：QLoRA 效果略降但显存省很多——**性价比之王**。\n\n**过关**：能说出 LoRA\u002FQLoRA 取舍 = Section 10 完成。\n\n---\n\n## Section 11 · LoRA 变体认识（AdaLoRA \u002F LongLoRA \u002F SLoRA）\n\n**Subsection 1 · 记三个变体**\n```\nAdaLoRA    自适应：自动决定哪些位置该用更大的秩（效果更好）\nLongLoRA   长上下文：把 LoRA 用到长文本场景\nSLoRA      SLoRA：服务场景高效多任务适配\n```\n- 💡 面试被问\"LoRA 有哪些改进\"→ 报这几个名字 + 一句话。\n\n**过关**：能报出变体 = Section 11 完成。\n\n---\n\n## Section 12 · P-Tuning V2\n\n**Subsection 1 · 记原理**\n```\nP-Tuning V2 = Prefix Tuning 的改进：在每一层都加可学习前缀\n（原始 P-Tuning 只在输入层加，效果有限）\n适合：分类\u002F小型任务，参数极小\n```\n- 💡 对比 LoRA：P-Tuning 参数更少但上限低；**LoRA 是现在的主流默认**。\n\n**过关**：能说 P-Tuning V2 与 LoRA 差异 = Section 12 完成。\n\n---\n\n## Section 13 · 实验：r 值的影响\n\n**Subsection 1 · 跑三档 r**\n- 分别用 `--lora_rank 4 \u002F 16 \u002F 64` 微调三次（同一数据），记录：\n  - 可训练参数数量\n  - 训练时间\n  - 测试分数\n- ✅ 预期看到：r 越大效果略好但参数\u002F时间涨；通常 r=8~16 性价比最高。\n\n**过关**：有 r 值对比数据 = Section 13 完成。\n\n---\n\n## Section 14 · 实验：不同数据量\n\n**Subsection 1 · 跑数据量对比**\n- 用 50 \u002F 200 \u002F 500 条数据各微调一次，记录分数。\n- ✅ 预期看到：数据到一定量后收益递减。写出你的\"性价比拐点\"。\n\n**过关**：有数据量对比 = Section 14 完成。\n\n---\n\n## Section 15 · 微调项目实战：领域风格助手\n\n**Subsection 1 · 选领域 + 造数据**\n- 选一个你熟悉的领域（结合你简历：合同审阅 \u002F 前端知识 \u002F 电子签名）。\n- 造 200 条\"领域问答\"数据（可用 DeepSeek 帮你批量生成初稿，再人工筛选）。\n- 清洗 → 格式化。\n\n**过关**：领域数据就绪 = Section 15 完成。\n\n---\n\n## Section 16 · 跑领域 LoRA\n\n**Subsection 1 · 微调**\n- 用 LLaMA-Factory 对你的领域数据做 LoRA 微调。\n- ✅ 预期看到：训练完成。\n\n**过关**：领域微调跑通 = Section 16 完成。\n\n---\n\n## Section 17 · 领域效果评估 + 迭代\n\n**Subsection 1 · 评估**\n- 出 20 道领域测试题（训练集外）。\n- 对比原始 vs 微调后，打分。\n- 效果不理想 → 检查：数据质量？r 值？轮数？针对性调整再训一轮。\n\n**过关**：领域效果有明确提升 = Section 17 完成。\n\n---\n\n## Section 18 · 部署微调模型\n\n**Subsection 1 · 服务化**\n- 把 LoRA 权重 + 基座模型用 vLLM 或 Ollama 部署（Ollama 支持 GGUF；vLLM 用 `--lora-modules`）。\n- 简单验证：通过 API 调用领域模型。\n- ✅ 预期看到：微调模型能以 API 形式被调用。\n\n**过关**：微调模型部署跑通 = Section 18 完成。\n\n---\n\n## Section 19 · 面试题\n\n**Subsection 1 · 练习作答**\n1. LoRA 的原理？\n2. QLoRA 怎么省显存？\n3. PEFT 和全参微调区别？\n4. 怎么选 r 值？怎么评估微调效果？\n5. LoRA 有哪些改进变体？\n6. 什么情况用微调、什么用 RAG？\n- 先自己答，再让 DeepSeek 补充标准答案。\n\n**过关**：6 题能答 = Section 19 完成。\n\n---\n\n## Section 20 · 站 14 验收\n\n**勾选**\n- [ ] 能画并讲 LoRA 原理\n- [ ] HF PEFT LoRA 训练 + 推理跑通（Section 4\u002F5）\n- [ ] LLaMA-Factory LoRA 一键跑通（Section 6）\n- [ ] QLoRA 跑通，能说省多少显存（Section 8\u002F9）\n- [ ] 能报出 LoRA 变体 + P-Tuning V2\n- [ ] r 值实验 \u002F 数据量实验至少一个完成（Section 13\u002F14）\n- [ ] 领域微调项目完成并有效果提升（Section 15~17）\n- [ ] 微调模型部署为 API（Section 18）\n- [ ] 6 道面试题能答\n\n**写 400 字Part 14 总结**：LoRA\u002FQLoRA 参数、显存、效果数据，你踩的坑。\n\n**全勾选 = Part 16 通过** → 进入下一站 Part 17 · 模型量化，10 天）。\n\n\n\n",16,[14,21,27,33,40,46,52,58,63,69,75,81,87,93,98,104,105,111,117,123,129],{"id":15,"slug":16,"title":17,"description":18,"level":19,"topic":20,"url":10,"content":10,"sortOrder":15},1,"part-1-llm-basics","Part 1 · 大模型基础认知","小白零基础友好。这一站不写代码，只建立\"大模型到底是什么\"的骨架。","BEGINNER","大模型认知",{"id":22,"slug":23,"title":24,"description":25,"level":19,"topic":26,"url":10,"content":10,"sortOrder":22},2,"part-2-llm-principles","Part 2 · 大模型原理 · 入门实操","这一站不卷数学，只把\"理解模型所需的知识\"讲透。；站 2A 解决\"理解模型\"，站 2B 解决\"面试能答\"。；这一层是\"有余力再做\"，不做也不影响你进入站 3。","大模型原理",{"id":28,"slug":29,"title":30,"description":31,"level":19,"topic":26,"url":10,"content":10,"sortOrder":32},100,"part-3-llm-principles-deep","Part 3 · 大模型原理 · 面试深入","数学基础、机器学习、神经网络、词向量、思维链等面试必考原理",3,{"id":34,"slug":35,"title":36,"description":37,"level":38,"topic":26,"url":10,"content":10,"sortOrder":39},101,"part-4-llm-principles-advanced","Part 4 · 大模型原理 · 进阶可选","从零写迷你模型、RLHF、PPO、分布式训练实操等进阶内容","INTERMEDIATE",4,{"id":32,"slug":41,"title":42,"description":43,"level":19,"topic":44,"url":10,"content":10,"sortOrder":45},"part-5-prompt-engineering","Part 5 · Prompt 提示词工程","从这里开始，你每天都要真的调大模型 API。","提示工程",5,{"id":39,"slug":47,"title":48,"description":49,"level":19,"topic":50,"url":10,"content":10,"sortOrder":51},"part-6-llm-api","Part 6 · 大模型 API 调用","站 3 你已经调通了 API。这一站把\"调用\"做成专业水准：","API 工程",6,{"id":45,"slug":53,"title":54,"description":55,"level":38,"topic":56,"url":10,"content":10,"sortOrder":57},"part-7-rag","Part 7 · RAG 检索增强生成","这一站是\"能落地\"的关键：让模型回答**你的私有知识**。","RAG",7,{"id":51,"slug":59,"title":60,"description":61,"level":38,"topic":56,"url":10,"content":10,"sortOrder":62},"part-8-rag-optimization","Part 8 · RAG 优化与评估","站 5 你做出了\"能跑\"的 RAG。这一站把它做到\"能打\"：",8,{"id":57,"slug":64,"title":65,"description":66,"level":38,"topic":67,"url":10,"content":10,"sortOrder":68},"part-9-langchain","Part 9 · LangChain 框架","目标：用 LangChain 把\"模型、提示词、检索、记忆、工具\"串成可复用的链和 Agent。","LangChain",9,{"id":62,"slug":70,"title":71,"description":72,"level":38,"topic":73,"url":10,"content":10,"sortOrder":74},"part-10-agent","Part 10 · Agent 基础","让模型从\"会聊天\"变成\"能干活\"：自己拆任务、调工具、看结果、再行动。","Agent",10,{"id":68,"slug":76,"title":77,"description":78,"level":8,"topic":79,"url":10,"content":10,"sortOrder":80},"part-11-multi-agent","Part 11 · 多 Agent 与 Agent IDE","从\"单个 Agent\"升级到\"多 Agent 协作\"，并掌握 AutoGen \u002F LangGraph \u002F GPTs \u002F Coze \u002F Dify 五个工具。","多 Agent",11,{"id":74,"slug":82,"title":83,"description":84,"level":8,"topic":85,"url":10,"content":10,"sortOrder":86},"part-12-llamaindex","Part 12 · LlamaIndex","站 5~7 你用了 LangChain 做 RAG。LlamaIndex 是另一条专攻\"数据 + LLM\"的路线。","LlamaIndex",12,{"id":80,"slug":88,"title":89,"description":90,"level":8,"topic":91,"url":10,"content":10,"sortOrder":92},"part-13-transformer","Part 13 · Transformer 深入","站 2A 建立了直觉，这一站把手写代码跑通——从\"懂概念\"到\"写得出\"。","Transformer",13,{"id":86,"slug":94,"title":95,"description":96,"level":8,"topic":97,"url":10,"content":10,"sortOrder":4},"part-14-open-models","Part 14 · 开源模型与私有化部署","目标：把主流开源模型在本地\u002F服务器跑通，理解服务化工程（显存、量化、并发）。","模型部署",{"id":92,"slug":99,"title":100,"description":101,"level":8,"topic":102,"url":10,"content":10,"sortOrder":103},"part-15-finetuning","Part 15 · 模型微调 Fine-Tuning","目标：理解\"什么时候必须微调、怎么选基座、怎么备数据\"，并完整跑通一次业务微调。","微调",15,{"id":4,"slug":5,"title":6,"description":7,"level":8,"topic":9,"url":10,"content":10,"sortOrder":12},{"id":103,"slug":106,"title":107,"description":108,"level":8,"topic":109,"url":10,"content":10,"sortOrder":110},"part-17-quantization","Part 17 · 模型量化","目标：理解\"为什么量化、主流算法各自思路\"，能动手量化并评估效果。","量化",17,{"id":12,"slug":112,"title":113,"description":114,"level":8,"topic":115,"url":10,"content":10,"sortOrder":116},"part-18-data-evaluation","Part 18 · 训练数据与模型评估","数据决定模型上限，评估决定你\"能不能交付\"。","数据与评估",18,{"id":110,"slug":118,"title":119,"description":120,"level":8,"topic":121,"url":10,"content":10,"sortOrder":122},"part-19-multimodal","Part 19 · 多模态应用","让 AI 同时\"看得懂图、听得了音、说得出话\"。","多模态",19,{"id":116,"slug":124,"title":125,"description":126,"level":8,"topic":127,"url":10,"content":10,"sortOrder":128},"part-20-projects-career","Part 20 · 项目实战 + 求职备战","把 0→1 到 1→100 学到的全部收敛成**能展示、能讲、能面试**的项目。","项目与求职",20,{"id":130,"slug":131,"title":132,"description":133,"level":8,"topic":134,"url":10,"content":10,"sortOrder":135},102,"extra-2026-ai-tech","额外篇 · 2026 年 AI 应用开发必学的 5 项成熟技术","从近半年爆发的技术里，挑出已经过了尝鲜期、能真正用在项目里的 5 项：推理模型、MCP、多模态、GraphRAG、AI 编程工具链，每项都给到能跑通的代码。","AI 工程实践",21]