posts

vnn01

local_qwen36_27b

tags
ai_programming

缘起

  • 现在ai编程的服务触手可及,但有些时候还是需要本地部署一个大模型后端,因为可以带来2个好处:
    1. 数据安全, 所有数据都在本地。
    2. 速度快,在本地访问,不受网络延迟影响。
  • 截止到 2026.5.24的时间点 ,本地部署还是推荐 Qwen3.6-27B 模型,实测效果不错。大模型发展太快,如果超过 3个月 了就要谨慎阅读博文的内容了。
  • 目前在4090 24G的机器上,部署 Qwen3.6-27B 的4bit量化mtp模型,是达到可用效果的(吞吐量 50~70token/s ),具体来说:
    • 如果追求极致质量,可以配置为 64~80k 上下文。
    • 如果追求极致上下文,可以配置为 256k 上下文。
    • 如果是用claude code的,上下文建议配置为200k,如果要启用256k的上下文,建议使用openclaude,详细内容后面再展开。
    • llamacpp可以混合cpu和gpu推理,但建议还是使用gpu推理,混合推理速度变慢很多。
    • 据传 Claude Haiku 也就是20B参数,所以本地的Qwen3.6-27B还是能打的。

大模型与显存

  • 显存大小制约了模型参数和上下文长度
    • 模型是固定开销,所以要根据自己的显存选择合适的量化版本
      • 4bit量化版本大概占用17G显存
      • Qwen3.6-27B-UD-Q5_K_XL也可以,模型19G
    • kvcache和上下文长度、请求数量相关,也是优化的重点
      • k和v可以选择不同的数据精度
      • 一般说q8_0的量化精度损失比较少

推理后端选择

  • 用来写代码的话不推荐用ollama,虽然部署简单,但推理性能一般,可能只有llamacpp的60%?
  • 推荐 llamacpp 或者 vllm,或者其他推理引擎TensorRT LLM,lmdeploy,可以自己选择测试
  • 注意:llamacpp的gguf格式在vllm下Qwen36用不了

推理参数选择

llamacpp推理参数

  • 强烈推荐使用 mtp 版本的量化模型,实测吞吐量可以由 30~40token/s 变成50~70token/s
  • 要启动mtp就加上
      --spec-type draft-mtp --spec-draft-n-max 2
    
  • 要加上 -ngl 选项,将模型参数放到gpu
-ngl all \
  • 开启flash attention
-fa on -np 1 \
  • 最重要的还是设置kvcache的参数
-ctk,  --cache-type-k TYPE              KV cache data type for K
                                        allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
                                        (default: f16)
                                        (env: LLAMA_ARG_CACHE_TYPE_K)
-ctv,  --cache-type-v TYPE              KV cache data type for V
                                        allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
                                        (default: f16)
                                        (env: LLAMA_ARG_CACHE_TYPE_V)
  • 如果要非对称kvcache,比如-ctk q8_0, -ctv q4_0,cmake的时候加上-DGGML_CUDA_FA_ALL_QUANTS=ON选项
cmake llama.cpp -B llama.cpp/build -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON  -DGGML_CUDA_FA_ALL_QUANTS=ON

上下文选择

  • 要在本地形成生产力我觉得最好要128k的上下文,要不然很快就把上下文占完。
  • 如果显存吃紧,那就优化下kvcache:
    • 用q8_0的kvcache可以比f16节省一半,也就是扩大一倍上下文长度。
    • 用q4_0的kvcache上下文可以比q8_0再扩大一倍,如果要开启256k上下文,kv cache都要使用 q4_0。
    • 或者k用q8_0, v用q4_0,大家根据需求多测试选择最合适的。

ai编程助手选择

  • 如果用claude code的话最好将模型的上下文设置为200k,匹配claude code的默认上下文,如果设置过短的话,比如32k就触发不了claude code自动压缩上下文的功能了。不过claudecode上下文不支持动态配置,即使配置为256k上下文,他也只认200k。
  • 如果想兼容claude code而且配置上下文,那就切换到openclaude:
    • 环境变量CLAUDE_CODE_OPENAI_FALLBACK_CONTEXT_WINDOW=262144可以设置模型默认的上下文

模型参数

通用思考任务: temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0
精准编程的精准思考: temperature=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0
非思考模式: temperature=0.7, top_p=0.80, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0

总结

  • 建议使用llamacpp或vllm来部署Qwen36-27B的4bit量化mtp模型。
    • 确保推理引擎版本是最新的。
  • 上下文长度管理是非常重要的,如果使用claude code,建议使用200k上下文;如果要更强的灵活配置,请使用openclaude。