说明:本文是引子篇,只讲为什么走这条路、整体怎么串起来;命令级教程与踩坑展开见同系列文章(文末链工作流笔记)。
续篇(12GB 小模型路由器(实战篇):12GB 上 QLoRA 与训练环境):
12GB 小模型路由器(实战篇):12GB 上 QLoRA 与训练环境
契机
做一个心理学知识库问答向的应用,想把 RAG / 大模型接入这条链从零走一遍:数据、微调、量化、部署、调用,都在自己环境里摸实。
一开始的计划很朴素:从 Hugging Face 拉底座,只在工作站显卡上跑 QLoRA;Mac 侧负责合并、接进项目里跑对比。
真正把 LoRA merge 进单文件权重、接进业务之后,和同底座的 Q4 量化模型(Mac 上 Ollama 跑)对同一批问题打了一下:
- 结构化、条目式的回答:merge 后往往更利落、响应体感更快;
- 共情向、需要接用户长段情绪叙述时:容易变短、变平,长上下文续写也不如 Q4 那条线稳。
这不是严谨 benchmark,是个人在项目里反复试出来的体感。它让我不愿意把「合并版」当成唯一部署形态——更希望底座保持一条、能力用 adapter 切换,而不是每次改域就 merge 出一条新静态模型。
翻资料时看到 vLLM 支持多 LoRA、按请求切换(不必为每个域各维护一整份大模型),又能把推理服务收成 OpenAI 兼容接口,和现有后端好接——于是有了后面这场 INT4 底座 + 双 QLoRA 的小显存实验。
再往上抽象一层,这条实验真正想对齐的问题是:在成本可控的前提下,怎么做「多能力路由 + 可扩展并发」——同一底座挂多份能力(adapter),入口侧做路由与观测,先用单卡/单服务把链路跑通,再谈分池、限流和扩容。本系列正文偏实操与踩坑;更完整的架构与演进叙事(网关、Router、vLLM、可观测性、阶段非目标等),有机会再写,和引子、实战篇、推理篇互相照应,这里只点一下,不展开。
用到的配置
-
QLoRA 训练 + vLLM serve + 双 QLoRA 切换 + INT4(W4A16)量化底座
Ubuntu + 12GB 显存 RTX 5070(新卡,驱动/环境要自己拧一阵)。 -
单 LoRA merge 权重、同底座 Q4、Ollama 跑对照
Apple Silicon Mac(本机对比与业务联调用;不写具体核数了,避免和「统一内存」表述打架)。
使用的模型
Qwen3-4B-Thinking-2507(全精度训练与导出、量化与 vLLM 侧均以该系为锚)。
为什么 Mac 上还要留一条 Q4
Q4 在 Mac 上跑得动,按当前项目需求跑测试题、对答案、对语气都够用;配合 prompt,主观上能稳定到中上可用。具体怎么打分、对比表长什么样,放到后续篇。(引子里只交代:对照基线来自这条线。)
步骤(路线图级别)
- 按业务域准备一份 监督/偏好向 训练样本,大约 30~60 条(够做域适配,又不至于先把数据工程做成主项目)。
- 拉 全精度 底座,在 Ubuntu 上配好环境,跑 QLoRA,得到 两个 adapter(例如不同 domain / 不同话术目标)。
- 用 Hugging Face 生态里对应的流程把底座压成 INT4(W4A16) 推理权重(具体脚本与命令见系列文,这里不展开)。
- 安装 vLLM,挂载 量化底座 + 多个 adapter 路径,起 OpenAI 兼容服务。
- 调用侧按场景传参,路由到不同 LoRA(与业务里的「domain-a / domain-b」一类约定对齐即可)。
最终效果
业务里拆成两阶段(两次 vLLM 调用、各挂一个 LoRA):用户提问先走 adapter-a 做门禁/筛选;再换 adapter-b 生成最终回复正文。
看似简单,坑很多
- 显存:INT4 也不是「整条链只占 4bit」——KV、图捕获、桌面环境都会吃;
max_model_len和--gpu-memory-utilization要一起拧,有的模型 config 里上下文拉满会直接 EngineCore 起不来,必须显式压窗口。另:在源码根目录起 vLLM 可能踩到vllm._C未编译 的导入坑,换干净工作目录再起。 - 新卡:5070 这类较新 GPU,CUDA / 驱动 / 轮子版本要对照官方说明试,「能 import 不等于能起 engine」。
- 训练:LoRA/QLoRA 对你仍是半黑盒时,务必先 dry run 或小步试跑——工作机上直接全长训练,一步爆显存很常见;别假设 12GB 默认够你第一次就拉满 batch。
- 本机桌面:若 Ubuntu 桌面本机同时开浏览器调接口、后台还挂着 vLLM,给 桌面合成 / 浏览器 留一点显存余量,别按「理论满载」去排——细节调度后面单开一篇也行,引子只记别算满。
- 调参心智:merge 与「多 adapter 在线切」不是同一套取舍;下文系列会按笔记把参数与现象对齐。