微調與本地部署
先想清楚什麼時候該微調,再手寫 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 執行一個本地模型,並讓第一部分的程式碼改幾個環境變數就呼叫它。
- 能解釋模型服務為什麼要批次處理請求,以及吞吐量和延遲之間的取捨。
本模組的程式碼
程式碼和執行結果保留原樣(簡體中文),與實際執行時完全一致。