微调与本地部署
先想清楚什么时候该微调,再手写 LoRA、用 peft 微调一个开源小模型,估算内存、手写量化、用 Ollama 在自己电脑上运行,最后理解 vLLM 这类服务框架在解决什么问题。
各课
- 01什么时候该微调,什么时候不该
微调听起来像是让模型"学会"你的业务的正道,但它往往不是第一选择。这一课对比提示词、RAG 和微调各自能改变什么、要花多少代价,给出一个判断的顺序。
25 分钟 · 进阶 - 02LoRA 的原理,手写一遍
微调大模型,要不要把几十亿个参数全训练一遍?LoRA 冻结原来的参数,只在旁边加两个小矩阵。在第 09 模块的小 GPT 上手写 LoRA,只训练 1.5% 的参数就改了它的风格。
45 分钟 · 深入 - 03用 LoRA 微调一个开源小模型
换成真正的开源模型:用 transformers 和 peft 给 Qwen2.5-0.5B 装上 LoRA,在 CPU 上十几秒改掉它的自我介绍,再仔细看微调带来的副作用。
45 分钟 · 深入 - 04在自己电脑上跑模型:Ollama 和量化
把开源模型放到自己电脑上运行。先估算一个模型要占多少内存,再手写量化,看权重压到 8 位、4 位、2 位时变小多少、变差多少,最后用 Ollama 跑起来。
40 分钟 · 进阶 - 05用 vLLM 部署一个模型服务
同时服务很多用户时,问题变成怎么用同一张显卡处理尽量多的请求。用小 GPT 量出批量处理的效果,再讲 vLLM 怎样管理 KV 缓存、怎样启动兼容 OpenAI 的服务。
35 分钟 · 深入
第 09 模块从零训练了一个小 GPT。现实中,你几乎不会从零训练一个大模型,而是拿别人训练好的开源模型来用:直接运行它,或者在它的基础上微调。这个模块讲这两件事。
所有实验都在笔记本的 CPU 上完成。微调的是只有 5 亿参数的 Qwen2.5-0.5B-Instruct,训练只要十几秒。更大的模型需要显卡,课里会说明怎么估算需要多少显存。
为什么是这个顺序
第 1 课先泼一盆冷水:大部分时候你不需要微调,提示词和 RAG 更合适。确实需要时,第 2 课在第 09 模块的小 GPT 上手写 LoRA,弄懂原理;第 3 课换成真正的开源模型,用 transformers 和 peft 来做,并仔细看微调的副作用。
后两课讲部署。第 4 课先学会估算内存,手写量化,再用 Ollama 在自己电脑上运行模型;第 5 课讲同时服务很多用户时的问题,以及 vLLM 是怎么解决的。
代码在 code/10-finetune-deploy/ 下。第 2、4、5 课用到第 09 模块训练好的模型,需要先完成第 09 模块。
学完的标准
- 面对一个需求,能判断该用提示词、RAG 还是微调,并说出理由。
- 能手写 LoRA 层,解释为什么 B 要初始化为 0,以及 LoRA 为什么能合并回原权重。
- 能用
peft给一个开源模型装上 LoRA 并训练,只在回答部分计算损失,并用没见过的问题和普通问题检查效果和副作用。 - 能根据参数量和精度估算一个模型要占多少内存,并说出 KV 缓存怎么算。
- 能解释对称量化和分组量化,说出 8 比特、4 比特、2 比特大致会有什么影响。
- 能用 Ollama 运行一个本地模型,并让第一部分的代码改几个环境变量就调用它。
- 能解释模型服务为什么要批量处理请求,以及吞吐量和延迟之间的取舍。