模块 10 · 从零弄懂大模型

微调与本地部署

先想清楚什么时候该微调,再手写 LoRA、用 peft 微调一个开源小模型,估算内存、手写量化、用 Ollama 在自己电脑上运行,最后理解 vLLM 这类服务框架在解决什么问题。

各课

  1. 01
    什么时候该微调,什么时候不该

    微调听起来像是让模型"学会"你的业务的正道,但它往往不是第一选择。这一课对比提示词、RAG 和微调各自能改变什么、要花多少代价,给出一个判断的顺序。

    25 分钟 · 进阶
  2. 02
    LoRA 的原理,手写一遍

    微调大模型,要不要把几十亿个参数全训练一遍?LoRA 冻结原来的参数,只在旁边加两个小矩阵。在第 09 模块的小 GPT 上手写 LoRA,只训练 1.5% 的参数就改了它的风格。

    45 分钟 · 深入
  3. 03
    用 LoRA 微调一个开源小模型

    换成真正的开源模型:用 transformers 和 peft 给 Qwen2.5-0.5B 装上 LoRA,在 CPU 上十几秒改掉它的自我介绍,再仔细看微调带来的副作用。

    45 分钟 · 深入
  4. 04
    在自己电脑上跑模型:Ollama 和量化

    把开源模型放到自己电脑上运行。先估算一个模型要占多少内存,再手写量化,看权重压到 8 位、4 位、2 位时变小多少、变差多少,最后用 Ollama 跑起来。

    40 分钟 · 进阶
  5. 05
    用 vLLM 部署一个模型服务

    同时服务很多用户时,问题变成怎么用同一张显卡处理尽量多的请求。用小 GPT 量出批量处理的效果,再讲 vLLM 怎样管理 KV 缓存、怎样启动兼容 OpenAI 的服务。

    35 分钟 · 深入

第 09 模块从零训练了一个小 GPT。现实中,你几乎不会从零训练一个大模型,而是拿别人训练好的开源模型来用:直接运行它,或者在它的基础上微调。这个模块讲这两件事。

所有实验都在笔记本的 CPU 上完成。微调的是只有 5 亿参数的 Qwen2.5-0.5B-Instruct,训练只要十几秒。更大的模型需要显卡,课里会说明怎么估算需要多少显存。

为什么是这个顺序

第 1 课先泼一盆冷水:大部分时候你不需要微调,提示词和 RAG 更合适。确实需要时,第 2 课在第 09 模块的小 GPT 上手写 LoRA,弄懂原理;第 3 课换成真正的开源模型,用 transformerspeft 来做,并仔细看微调的副作用。

后两课讲部署。第 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 运行一个本地模型,并让第一部分的代码改几个环境变量就调用它。
  • 能解释模型服务为什么要批量处理请求,以及吞吐量和延迟之间的取舍。

本模块的代码