文章目录
- 前言
- 1. 环境
- 2. 启动命令
- 3、用 ccswitch 接进来
- 4. 效果
- 5、参数说明
- 总结
前言
本文实战演示如何用两张 NVIDIA L20 通过 vLLM 部署 Qwen3.5-35B-A3B,利用张量并行与 MoE 架构压满显存,并接入 ccswitch 完成对话。涵盖启动命令、参数说明与客户端配置,助你快速跑通全流程。
本文介绍如何用两张 L20 把 Qwen3.5-35B-A3B 跑起来,并集成到 ccswitch。
1. 环境
硬件两句话说完:NVIDIA L20 × 2。
引擎用的 vLLM,没怎么纠结。两张卡刚好够--tensor-parallel-size 2,不用再调。名字里的 A3B 按 Qwen 系 MoE 的命名习惯,指的是激活参数那一档,所以 35B 的体量压在两张 L20 上是跑得动的。
客户端这边是 ccswitch。选它主要图省事——服务起好之后不用自己写脚本调 HTTP,界面里填个地址就能开聊,模型服务、MCP、API 这些也都在一个地方管。
2. 启动命令
source/gemini/data-3/miniconda3/bin/activate vllmLD_LIBRARY_PATH=/gemini/data-3/miniconda3/envs/vllm/lib:$LD_LIBRARY_PATHCUDA_VISIBLE_DEVICES=0,1vllm serve /gemini/data-3/open-source_model/Qwen/Qwen3.5-35B-A3B--host0.0.0.0--port8000--max-model-len65536--served-model-name Qwen3.5-35B-A3B --tensor-parallel-size2--enable-auto-tool-choice --tool-call-parser qwen3_coder前两行是环境。第一行激活 vLLM 这个 conda 环境,第二行把该环境的 lib 目录塞进LD_LIBRARY_PATH,让 vLLM 启动时能找到那几个 .so。
这里有个小事得提一句。LD_LIBRARY_PATH=...单独占一行的话,它只是个普通变量赋值,不会传给子进程,后面那条vllm serve是读不到的。要么跟 serve 命令写进同一行,要么前面加个export。我自己的做法是拼成一行。
剩下那串参数:
| 参数 | 作用 |
|---|---|
CUDA_VISIBLE_DEVICES=0,1 | 只用 0、1 两张卡 |
--host 0.0.0.0 | 监听所有网卡,别的机器能连过来;只在本机用可以写 127.0.0.1 |
--port 8000 | 服务端口 |
--max-model-len 65536 | 上下文长度,64K |
--tensor-parallel-size 2 | 张量并行切成 2 份,跟上面两张卡对得上 |
--served-model-name Qwen3.5-35B-A3B | 对外暴露的模型名,客户端填的是它,不是权重目录 |
--enable-auto-tool-choice | 打开工具调用 |
--tool-call-parser qwen3_coder | 指定用 qwen3_coder 解析工具调用 |
权重路径/gemini/data-3/open-source_model/Qwen/Qwen3.5-35B-A3B是实际落盘的位置,跟--served-model-name是两回事,别混。
3、用 ccswitch 接进来
服务起来之后就该接客户端了。
左侧「模型服务」搜到 Qwen3.5_35B_A3B_wulele,把开关打开。API 地址我填的是 vLLM 的地址加/v1,密钥留空——本地起服务没设 key。填完点一下「获取模型列表」,能拉到 Qwen3.5-35B-A3B,说明服务那边是通的。话题页顶上会显示当前用的哪个模型、哪个服务,对得上就没选错。
4. 效果
配好之后开聊即可。
5、参数说明
--tensor-parallel-size的数值要跟CUDA_VISIBLE_DEVICES里给的卡数对上,写 2 就得有两张卡可用--served-model-name可以随便起,但客户端里填的必须是它,填权重目录名是连不上的- ccswitch 那边配完,点「获取模型列表」验一下。开关是绿的说明不了什么
--max-model-len开多大,直接影响显存能塞下多少 KV cache,进而决定并发,别一上来就拉满
总结
本文介绍了 vLLM 部署 Qwen,并接入 ccswitch。若有疑问,欢迎留言讨论。