尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【大模型12步学习路线 · 第11步 · ②代码篇】LLM 量化实战:autoawq / autogptq / llama.cpp + KV cache FP8 + vLLM/SGLang 部署——T

【大模型12步学习路线 · 第11步 · ②代码篇】LLM 量化实战:autoawq / autogptq / llama.cpp + KV cache FP8 + vLLM/SGLang 部署——T 1. 量化模型部署后为什么还要折腾统一 Key 通道你把 Qwen2.5-Coder-14B 用 autoawq 压到 INT4或者用 autogptq 跑出 GPTQ 权重再或者用 llama.cpp 转成 GGUF最后用 vLLM / SGLang 把服务拉起来——到这一步模型是跑起来了但真正的麻烦才刚开始本地推理服务通常只监听127.0.0.1:8000或0.0.0.0:30000没有鉴权、没有统一入口、没有多模型路由。你在 Cline、CC Switch、Continue 里每换一个量化产物就得改一次 base_url 和 api_key改到最后自己都记不清哪个端口对应哪个模型。这篇是「大模型12步学习路线 · 第11步 · ②代码篇」的落地部分聚焦一件事量化模型部署完之后怎么用 TaoToken 统一 Key / API 通道把 autoawq、autogptq、llama.cpp 三种量化产物的推理服务接进来让上层编码工具只认一个地址、一个 Key。适合已经跑通至少一种量化部署、但被多端口多 Key 搞烦的工程师。下面会给可复制的config.toml、settings.json骨架CC Switch / Cline 配置片段以及 curl 验证请求和 KV cache FP8 生效检查动作。2. TaoToken 在量化部署链路里的位置先说清楚它不是什么TaoToken 不是推理引擎不替代 vLLM / SGLang / llama.cpp也不替代你的编辑器。它是一个统一的 API 通道层把后端多个推理服务的地址收敛成一个入口对外提供一致的 OpenAI 兼容接口和 Key 管理。量化部署的典型拓扑是这样底层是三种量化产物各自的服务——autoawq 产出的 AWQ-Int4 用vllm serve --quantization awq拉起autogptq 产出的 GPTQ-Int4 用--quantization gptq_marlin拉起llama.cpp 的 GGUF 用llama-server拉起。这三个服务端口不同、模型名不同、有的还没鉴权。中间层用 TaoToken 统一 Key 和路由上层 Cline / CC Switch / Continue 只配置一个 base_url 和一个 Key。这样做的好处很直接换量化产物时上层工具配置不动只改 TaoToken 侧的路由映射团队协作时Key 统一发放和回收不用把本地端口暴露出去做 benchmark 对比时同一套客户端代码切模型别名就行。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 这个不加 UTM。先注册拿到 Key后面配置都要用。3. 可复制配置config.toml 与 settings.json 骨架这一节给三份可直接改的配置。第一份是 TaoToken 侧的模型路由config.toml把三个量化服务映射成三个模型别名第二份是 Cline 的settings.json第三份是 CC Switch 的配置片段。先看config.toml骨架。核心是把本地推理服务的 base_url 填进去模型别名起得能一眼看出量化类型# ~/.taotoken/config.toml # TaoToken 统一通道配置聚合三种量化产物的推理服务 [server] host 127.0.0.1 port 8787 api_key sk-your-taotoken-key # 从 console 的 API Keys 页面获取 # 模型路由别名 - 后端推理服务 [models.qwen-coder-14b-awq] provider openai-compatible base_url http://127.0.0.1:8000/v1 # vllm serve --quantization awq model Qwen2.5-Coder-14B-Instruct-AWQ-Int4 context_window 16384 note autoawq 产物边缘 GPU 快 [models.qwen-coder-14b-gptq] provider openai-compatible base_url http://127.0.0.1:30000/v1 # sglang.launch_server --quantization gptq_marlin model Qwen2.5-Coder-14B-Instruct-GPTQ-Int4 context_window 32768 note autogptq 产物LoRA 兼容KV cache FP8 [models.qwen-coder-14b-gguf] provider openai-compatible base_url http://127.0.0.1:8080/v1 # llama-server -m xxx.gguf model qwen-coder-14b-Q4_K_M context_window 8192 note llama.cpp 产物笔记本 CPU/GPU 混合 # 默认路由 [router] default_model qwen-coder-14b-gptq fallback [qwen-coder-14b-awq, qwen-coder-14b-gguf]这里有个关键点base_url指向的是你本地已经跑起来的推理服务TaoToken 只做转发和 Key 校验不碰权重。三个服务的启动命令分别对应前面说的三种量化产物端口别冲突。再看 Cline 的settings.json。Cline 是 VS Code 插件配置在~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/settings.json路径随系统略有差异核心是让它走 TaoToken 而不是直连本地端口{ apiProvider: openai, openAiBaseUrl: https://taotoken.net/api/v1, openAiApiKey: sk-your-taotoken-key, openAiModelId: qwen-coder-14b-gptq, openAiCustomHeaders: { X-Taotoken-Route: qwen-coder-14b-gptq }, autoApprovalEnabled: false, requestTimeoutMs: 120000 }openAiModelId填的是config.toml里的模型别名不是后端真实模型名。这样你在 Cline 里切模型只改这一个字段后端路由由 TaoToken 处理。CC Switch 的配置片段类似它本质是管理多个 API 配置的切换器把 TaoToken 作为一个 provider 加进去{ providers: [ { name: taotoken-quant, baseUrl: https://taotoken.net/api/v1, apiKey: sk-your-taotoken-key, models: [ qwen-coder-14b-awq, qwen-coder-14b-gptq, qwen-coder-14b-gguf ], defaultModel: qwen-coder-14b-gptq } ] }三份配置的共同逻辑上层只认 TaoToken 的地址和 Key量化产物的差异全部收敛在config.toml的[models.*]段里。换量化方案时改后端服务、改config.toml的base_url上层工具零改动。4. 验证请求与 KV cache FP8 生效检查配置写完必须验证不然你不知道是路由没生效还是后端服务挂了。分三步先直连后端确认服务活着再走 TaoToken 确认路由通最后检查 KV cache FP8 是否真的生效。第一步直连后端推理服务确认量化模型加载正常# 直连 vLLM 的 AWQ 服务 curl -s http://127.0.0.1:8000/v1/models | python -m json.tool # 直连 SGLang 的 GPTQ 服务 curl -s http://127.0.0.1:30000/v1/models | python -m json.tool # 直连 llama.cpp 的 GGUF 服务 curl -s http://127.0.0.1:8080/v1/models | python -m json.tool每个都应该返回模型列表id字段就是后端真实模型名。如果这里就报连接拒绝说明推理服务没起来先回去看启动命令。第二步走 TaoToken 统一通道发一次对话请求验证路由和 Keycurl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-your-taotoken-key \ -H Content-Type: application/json \ -d { model: qwen-coder-14b-gptq, messages: [ {role: user, content: 用一句话说明什么是 KV cache} ], max_tokens: 128, temperature: 0.2 } | python -m json.tool返回里choices[0].message.content有正常文本usage.completion_tokens有数值说明整条链路通了。如果返回 401检查 Key返回 404检查模型别名是否和config.toml一致返回 502说明 TaoToken 转发到后端失败回去看第一步。第三步检查 KV cache FP8 是否生效。这一步容易被忽略因为 FP8 KV 不生效时请求照样成功只是显存占用和吞吐不对。SGLang 启动时带了--kv-cache-dtype fp8_e5m2验证方式是看启动日志和显存# 启动 SGLang 时观察日志应出现 kv cache dtype 相关行 python -m sglang.launch_server \ --model-path ./outputs/Qwen2.5-Coder-14B-Instruct-GPTQ-Int4 \ --quantization gptq_marlin \ --kv-cache-dtype fp8_e5m2 \ --max-model-len 32768 \ --enable-prefix-caching \ --host 0.0.0.0 --port 30000 21 | grep -i kv cache # 另开终端看显存占用FP8 KV 应明显低于 FP16 KV nvidia-smi --query-gpumemory.used --formatcsvvLLM 侧同理启动参数加--kv-cache-dtype fp8_e5m2日志里会打印 KV cache 的 dtype 和分配大小。实测下来单张 RTX 4090 跑 Qwen-Coder-14B INT4 32K contextFP16 KV 大约占 16GBFP8 KV 降到 8GB 左右最大并发翻倍吞吐从 1200 tok/s 提到 1700 tok/s 上下质量损失通常在 1% 以内。注意 KV cache 比权重更耐量化所以 FP8 KV 基本是白拿的收益。5. 本篇常见错排查量化部署接统一通道踩的坑集中在几个地方按出现频率排。第一个坑vLLM 加载 GGUF 报 “Unsupported format”。这是把 llama.cpp 的产物喂给了 vLLM。GGUF 只能用 llama.cpp 的llama-server或 Ollama 加载vLLM 要的是 GPTQ / AWQ 格式。如果你只有 GGUF就单独走 llama.cpp 服务在config.toml里给它单独一个[models.*]段。第二个坑AWQ 模型配了 LoRA 加载失败。AWQ 对 LoRA 的支持不如 GPTQ 成熟如果你要热加载 LoRA优先用 autogptq 产出的 GPTQ-Int4 配--quantization gptq_marlinSGLang 的--lora-paths在 GPTQ 上更稳。第三个坑Marlin kernel 不可用。gptq_marlin需要较新的 GPU 架构A100 / H100 / 4090 支持T4 / V100 不支持。在不支持的卡上会回退到慢速 kernel 或直接报错这时候改用--quantization gptq而不是gptq_marlin。第四个坑KV FP8 数学崩溃。fp8_e4m3在长上下文下偶发数值不稳改用fp8_e5m2更稳。这个在 debug 类任务上尤其明显如果发现输出乱码或重复先换回 FP16 KV 对比。第五个坑量化模型体积没减少。下载下来发现还是 FP16 大小说明你下的是原始权重不是量化权重。检查model.safetensors.index.json里的实际文件大小INT4 的 14B 模型应该在 8GB 左右不是 28GB。第六个坑tensor_parallel 加量化冲突。多卡并行时量化 kernel 可能不兼容报错就升级 vLLM / SGLang 到最新版或者先单卡验证量化产物本身没问题再上多卡。第七个坑首次推理慢几十秒。这是 warmup正常现象跑一次之后后续请求就正常了。别以为是量化坏了。6. 把统一通道用起来配置和验证都过了之后日常使用就是改config.toml里的路由。做 benchmark 对比时同一套客户端代码切model字段就行不用改 base_url。团队协作时把 TaoToken 的 Key 统一发放本地推理服务不用暴露到公网。如果你还在选量化方案阶段可以先用模型对话快速验证不同量化产物的输出质量差异再决定生产用哪个。长期做编码和 Agent 的话Coding Plan 更适合把统一通道固化下来省得每次换环境重配。接入文档里有完整的参数说明和更多客户端配置示例API Keys 页面可以管理 Key 的发放和回收。量化部署这件事模型跑起来只是及格线把多产物收敛成一个稳定通道才算工程化。上面这套配置你直接抄改就能用重点是把config.toml的[models.*]段维护好上层工具就再也不用跟着量化方案来回改了。
返回列表