1. 为什么要在私有环境跑 Qwen3.6-35B-A3B
Qwen3.6-35B-A3B 是通义千问新一代开源代码模型,总参数 35B、激活参数约 3B,在编程基准上能对标更大规模的稠密模型。它适合谁?适合手里有一张 80G 显存卡、想把代码补全和 Agent 能力留在内网、又不想把源码发到公网的团队。它能做什么?用 vLLM 拉起一个 OpenAI-Compatible API,再用 TaoToken 统一 Key 接入 OpenCode,形成"本地推理 + 统一通道 + 编码工具"的闭环。
我这次的目标不是"把模型跑起来"这么简单,而是让它成为一个可服务化的节点:局域网内稳定访问、工具链能直接调用、上下文和显存都可控。整个过程基于一台 A100 80G 单卡服务器,Ubuntu Server 系统,Docker 部署 vLLM。踩过的坑主要集中在 KV Cache 显存分配上,后面会详细拆。
先说结论:Qwen3.6-35B-A3B 在单卡 A100 上跑 18K 上下文、56 token/s 左右的生成速度,完全够编程和 Agent 交互用。下面从环境准备一路写到 OpenCode 接入和排障。
2. TaoToken 前置:统一 Key 与 API 通道
私有化部署的模型服务跑在局域网,但工具链侧如果每个模型都配一套 Key、一套 baseURL,维护起来很碎。TaoToken 在这里的角色是统一入口:你可以在控制台生成一把 Key,把本地 vLLM 的 OpenAI-Compatible 端点和云端模型都挂到同一个通道下,OpenCode 这类工具只需要认一个 baseURL 和一把 Key。
具体操作路径:
- 打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册并进入控制台
- 在控制台里创建 API Key,建议按项目命名,方便后面区分
- 如果你要把本地 vLLM 也纳入统一管理,在接入配置里填本地服务的 baseURL(比如
http://192.168.15.119:8001/v1) - 需要看模型列表和调试对话,用模型对话页;需要长期编码和 Agent 任务,用 Coding Plan
API 基础地址是 https://taotoken.net/api ,注意这个地址不带 UTM 参数,直接用于代码里的 baseURL。控制台、API Keys、接入文档这几个页面建议先各扫一眼,后面配置时不用来回找。
注意:TaoToken 是统一 Key 和通道管理,不是让你绕过任何合规要求。本地 vLLM 服务仍然跑在你自己的机器上,数据不出内网。
3. 可复制配置:vLLM 启动与 OpenCode 接入
3.1 创建容器并挂载模型
先建容器,名字叫qwen36_35b_gpu0,指定用第 0 块 GPU。Qwen3.6-35B-A3B 用通用 vLLM 镜像即可,不需要专属镜像:
docker run -itd \ --name qwen36_35b_gpu0 \ --entrypoint /bin/bash \ --ipc=host \ --network host \ --shm-size 16G \ --gpus '"device=0"' \ -v /home/ubuntu/Qwen3.6-35B-A3B:/models/Qwen3.6-35B-A3B \ pytorch_vllm:v3_glm_qwen进容器后确认模型权重路径存在,再启动服务。端口这里选 8001,因为 8000 可能已经被别的服务占用。
3.2 vLLM 启动命令
第一次启动时我遇到了ValueError: No available memory for the cache blocks. Available KV cache memory: -10.25 GiB。这不是模型加载失败,而是 KV Cache 显存分配失败。KV Cache 随序列长度线性增长,vLLM 默认只用 70% 显存,长上下文下很容易把 KV Cache 空间挤没。
调整后的启动命令:
vllm serve /models/Qwen3.6-35B-A3B \ --served-model-name qwen3.6-35b-a3b \ --tensor-parallel-size 1 \ --max-model-len 18192 \ --gpu-memory-utilization 0.92 \ --max-num-batched-tokens 512 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --reasoning-parser qwen3 \ --language-model-only \ --host 0.0.0.0 \ --port 8001关键参数对照:
| 参数 | 作用 | 本次取值 |
|---|---|---|
--max-model-len | 最大上下文长度 | 18192 |
--gpu-memory-utilization | 显存使用上限 | 0.92 |
--max-num-batched-tokens | 单批 token 上限 | 512 |
--tool-call-parser | 工具调用解析器 | qwen3_coder |
--reasoning-parser | 推理过程解析 | qwen3 |
把上下文从 32768 降到 18192,KV Cache 占用明显下降,释放出约 15% 额外显存给 KV Cache,引擎就能正常初始化了。
3.3 OpenCode 配置骨架
模型服务跑通后,接入 OpenCode。配置文件放在~/.config/opencode/opencode.json:
mkdir -p ~/.config/opencode cat > ~/.config/opencode/opencode.json <<'EOF' { "$schema": "https://opencode.ai/config.json", "provider": { "qwen_vllm": { "npm": "@ai-sdk/openai-compatible", "name": "Qwen3.6-35B-A3B LAN vLLM", "options": { "baseURL": "http://192.168.15.119:8001/v1", "apiKey": "EMPTY" }, "models": { "qwen3.6-35b-a3b": { "name": "Qwen3.6-35B-A3B", "limit": { "context": 18192, "output": 2048 } } } } }, "model": "qwen_vllm/qwen3.6-35b-a3b" } EOF如果你走 TaoToken 统一通道,把baseURL换成https://taotoken.net/api,apiKey换成控制台生成的 Key,模型名按通道里配置的写。这样本地和云端模型可以共用一套工具配置。
4. 验证请求与成功结果
服务启动后另开终端验证模型列表:
curl http://127.0.0.1:8001/v1/models返回里可能出现两个重复结果,这不是报错。因为启动时加了--reasoning-parser qwen3,vLLM 会同时返回答案和推理过程,属于 Qwen3 推理模式的正常表现。
再发一个对话请求确认推理链路:
curl http://127.0.0.1:8001/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3.6-35b-a3b", "messages": [{"role": "user", "content": "用一句话说明快速排序的平均时间复杂度"}], "max_tokens": 128 }'能拿到正常回复就说明 OpenAI-Compatible API 通了。接着在 OpenCode 里选qwen_vllm/qwen3.6-35b-a3b这个模型,发一个代码补全请求,工具链侧能正常返回就完成了闭环。
实测生成速度:2048 tokens 耗时约 36.36 秒,约 56.3 token/s。这个速度在 35B 模型单卡 A100 推理里属于第一梯队,编程和长文本交互都够流畅。
5. 本篇常见错排查
5.1 KV Cache 显存不足
报错No available memory for the cache blocks,处理方式是降--max-model-len、提--gpu-memory-utilization、降--max-num-batched-tokens。三者配合,先保证引擎能起来,再按实际需求往上调。
5.2 端口冲突
8000 被占用时换 8001,同时确认--host 0.0.0.0让局域网能访问。如果 OpenCode 连不上,先用curl从工具所在机器测一下 baseURL 是否可达。
5.3 工具调用解析失败
--tool-call-parser qwen3_coder和--enable-auto-tool-choice要一起加,否则 Agent 场景下工具调用会解析不出来。模型名要和 OpenCode 配置里的models键一致。
5.4 返回重复结果
前面说过,这是--reasoning-parser qwen3的正常表现,不是 bug。如果你不需要推理过程,可以去掉这个参数,但 Qwen3 系列的推理能力会受影响。
5.5 接入侧 Key 问题
走 TaoToken 统一通道时,确认 baseURL 是https://taotoken.net/api,Key 从控制台 API Keys 页面生成。接入文档里有各工具的配置示例,排障时对照着看更快。
6. 把本地模型接进真实开发流
模型跑通只是第一步,真正有价值的是让它进入日常开发。我的做法是:本地 vLLM 负责代码补全和 Agent 任务,TaoToken 统一 Key 管理通道,OpenCode 作为前端工具。这样换模型、加模型都不用改工具配置。
如果你也在做私有化代码模型落地,建议先把 vLLM 的显存参数调稳,再处理工具链接入。显存没调好,后面所有验证都是白费。需要统一 Key 和通道管理,从控制台 API Keys 页面开始;需要调试模型对话,用模型对话页;长期编码和 Agent 任务,看 Coding Plan。接入文档里有完整的配置骨架,照着改 baseURL 和模型名就能跑。