双 3090(NVLink)跑 Qwen3.6-27B,128K 上下文实测
-
声明:这篇东西是叫AI 总结的
交作业。双 3090 跑 Qwen3.6-27B,测了上下文深度对速度的影响
GPU:RTX 3090 ×2,已上 NVLink(nvidia-smi topo -m 显示 NV4,4 条 link 各 14GB/s,约 56GB/s)
模型:Qwen3.6-27B-UD-Q4_K_XL(unsloth 动态量化) --- 下载错了 将就用
引擎:llama.cpp 自编译(CUDA),layer-split(默认模式)
KV cache:q8_0,上下文 153600
开了 MTP(--spec-type draft-mtp --spec-draft-n-max 3)、flash-attn测试方法: 每次冷 prefill,关掉 prompt cache,数字比较实在。脚本跑 /completion 读 timings。
prompt_n | prefill t/s | gen t/s | 总显存 | 功耗
782 | 708.8 | 59.2 | 34.7G | 440W
6155 | 1285.9 | 58.5 | 34.8G | 436W
24587 | 1249.5 | 54.6 | 34.8G | 441W
98315 | 835.4 | 47.4 | 34.8G | 441W
135017 | 694.2 | 43.2 | 34.8G | 444W解码 59 → 43 t/s,从 800 一路到 135K 上下文只掉 27%,曲线相当平,不像单卡过了 64K 就断崖
显存全程稳定 34.7G(KV cache 启动时按满 context 预分配),48G 总显存还剩富裕,上下文还能再往上拉
prefill 在中段(6K~24K)能冲到 1250+ t/s,深上下文回落到 700 左右
双卡 layer-split,两张卡轮流跑,速度约等于单卡——双卡的收益主要是"显存容量",能塞下深上下文
功耗双卡合计稳定 ~440W一开始先用vllm 跑两张卡 结果只有7t/s, 所以先用上llama 然后在看能不能用上NVLINK
现在还叫claude 解决vllm 然后测试 -
声明:这篇东西是叫AI 总结的
交作业。双 3090 跑 Qwen3.6-27B,测了上下文深度对速度的影响
GPU:RTX 3090 ×2,已上 NVLink(nvidia-smi topo -m 显示 NV4,4 条 link 各 14GB/s,约 56GB/s)
模型:Qwen3.6-27B-UD-Q4_K_XL(unsloth 动态量化) --- 下载错了 将就用
引擎:llama.cpp 自编译(CUDA),layer-split(默认模式)
KV cache:q8_0,上下文 153600
开了 MTP(--spec-type draft-mtp --spec-draft-n-max 3)、flash-attn测试方法: 每次冷 prefill,关掉 prompt cache,数字比较实在。脚本跑 /completion 读 timings。
prompt_n | prefill t/s | gen t/s | 总显存 | 功耗
782 | 708.8 | 59.2 | 34.7G | 440W
6155 | 1285.9 | 58.5 | 34.8G | 436W
24587 | 1249.5 | 54.6 | 34.8G | 441W
98315 | 835.4 | 47.4 | 34.8G | 441W
135017 | 694.2 | 43.2 | 34.8G | 444W解码 59 → 43 t/s,从 800 一路到 135K 上下文只掉 27%,曲线相当平,不像单卡过了 64K 就断崖
显存全程稳定 34.7G(KV cache 启动时按满 context 预分配),48G 总显存还剩富裕,上下文还能再往上拉
prefill 在中段(6K~24K)能冲到 1250+ t/s,深上下文回落到 700 左右
双卡 layer-split,两张卡轮流跑,速度约等于单卡——双卡的收益主要是"显存容量",能塞下深上下文
功耗双卡合计稳定 ~440W一开始先用vllm 跑两张卡 结果只有7t/s, 所以先用上llama 然后在看能不能用上NVLINK
现在还叫claude 解决vllm 然后测试@applejuice 不错,下次带个截图,你让AI给你生成mark down格式,看起来就很舒服,它会自动排版的,论坛支持markdown文件。
-
搞不定vllm nvlink 没得发挥
-
@applejuice 双3090 NVLink 跑 vLLM 确实有几个坑,分享一下排查经验:
vLLM + NVLink 的关键点
vLLM 用 NCCL 做 Tensor Parallel 通信,NVLink 只要在 nvidia-smi topo -m 里能看到 NV4,NCCL 会自动走 NVLink,不需要手动配置。但有几个常见翻车点:
- --tensor-parallel-size 2 没加 — 不加这个参数就是单卡跑,NVLink 自然用不上
- Docker --shm-size 不够 — NCCL 需要共享内存做 buffer,推荐 --shm-size=16g,太小会报 NCCL 超时
- CUDA_VISIBLE_DEVICES 顺序问题 — NVLink 拓扑依赖 PCIe 插槽顺序,如果两张卡物理上是通过 NVLink 桥连的但 CUDA_VISIBLE_DEVICES 指定了非相邻的卡号,NCCL 可能不走 NVLink
- NCCL_NVLS_ENABLE=1 — 新版 vLLM(0.8.x+)有时需要这个环境变量来强制启用 NVLink 的 NVLS(NVLINK SHARP)协议
建议调试步骤:
- 先裸机(不用 Docker)跑 vLLM,排除 Docker 的共享内存问题:
python -m vllm.entrypoints.openai.api_server --model Qwen3.6-27B --tensor-parallel-size 2 - 如果报 NCCL 错误,加
export NCCL_DEBUG=INFO看通信路径——输出里如果有NVLink字样说明走对了 - 还不行的话加
--enforce-eager试试,关闭 CUDAGraph 有时能避开 NVLink 通信的 graph capture 问题
不过说回来,你已经用 llama.cpp 跑得很好了(双卡 prefill 6k+ t/s 相当不错),vLLM 在双 3090 上的优势主要是 OpenAI 兼容 API 和更灵活的调度。如果不需要多用户并发或者 API 服务,llama.cpp 的推理速度其实够用了。
-
声明:这篇东西是叫AI 总结的
交作业。双 3090 跑 Qwen3.6-27B,测了上下文深度对速度的影响
GPU:RTX 3090 ×2,已上 NVLink(nvidia-smi topo -m 显示 NV4,4 条 link 各 14GB/s,约 56GB/s)
模型:Qwen3.6-27B-UD-Q4_K_XL(unsloth 动态量化) --- 下载错了 将就用
引擎:llama.cpp 自编译(CUDA),layer-split(默认模式)
KV cache:q8_0,上下文 153600
开了 MTP(--spec-type draft-mtp --spec-draft-n-max 3)、flash-attn测试方法: 每次冷 prefill,关掉 prompt cache,数字比较实在。脚本跑 /completion 读 timings。
prompt_n | prefill t/s | gen t/s | 总显存 | 功耗
782 | 708.8 | 59.2 | 34.7G | 440W
6155 | 1285.9 | 58.5 | 34.8G | 436W
24587 | 1249.5 | 54.6 | 34.8G | 441W
98315 | 835.4 | 47.4 | 34.8G | 441W
135017 | 694.2 | 43.2 | 34.8G | 444W解码 59 → 43 t/s,从 800 一路到 135K 上下文只掉 27%,曲线相当平,不像单卡过了 64K 就断崖
显存全程稳定 34.7G(KV cache 启动时按满 context 预分配),48G 总显存还剩富裕,上下文还能再往上拉
prefill 在中段(6K~24K)能冲到 1250+ t/s,深上下文回落到 700 左右
双卡 layer-split,两张卡轮流跑,速度约等于单卡——双卡的收益主要是"显存容量",能塞下深上下文
功耗双卡合计稳定 ~440W一开始先用vllm 跑两张卡 结果只有7t/s, 所以先用上llama 然后在看能不能用上NVLINK
现在还叫claude 解决vllm 然后测试@applejuice prefill应该是最快的可以双卡同时算,后面就单卡了。感觉最大的优势还是48g,关注一波
-
我暂时不大想搞了 先用上来 不然为了小小改善花上几天不值得 就好像以前玩3d打印机 一直搞打印机都不打印
现在hermes 接入llama Qwen3.6-27B-uncensored-heretic
kv Q8_0 216k context(还没试)
prefill 800-900t/s
全模态吞吐 40t/s
也算可以用接下来玩下comfyUi
nvlink 就有点浪费 多花了3000好像
-
我暂时不大想搞了 先用上来 不然为了小小改善花上几天不值得 就好像以前玩3d打印机 一直搞打印机都不打印
现在hermes 接入llama Qwen3.6-27B-uncensored-heretic
kv Q8_0 216k context(还没试)
prefill 800-900t/s
全模态吞吐 40t/s
也算可以用接下来玩下comfyUi
nvlink 就有点浪费 多花了3000好像
@applejuice 速度差不多就别折腾了。
-
以不含 NVLink 的 PCI 3.0x8 雙道作為對比。 Hermes 96k 上下文大約是 52~55 t/s - Power Limit 250w. So 500w Total, ~46GB VRAM.


python -m vllm.entrypoints.openai.api_server
--model ~/AiModel/Qwen3.6-27B-AWQ-QuantTrio
--gpu-memory-utilization 0.95
--max-model-len 98304
--enable-auto-tool-choice
--tool-call-parser hermes
--tensor-parallel-size 2
--host 0.0.0.0
--port 8000 -
双卡3090 vLLM跑Qwen3.6-27B,强烈建议关注: https://github.com/noonghunna/club-3090 。
我自己的环境: 双卡3090 nvlink,模型Qwen3.6-27B-autoround-int4。 kv cache fp8_e5m2量化, 上下文长度 262144 。采用 dual-mtp 的vllm运行参数和测试脚本(soak-test.sh), p50_decode_tps:61.34;p95_ttft_ms:4864 。
官方给的测试,应该能到接近70tps,我的还有优化空间,但是能用了就没折腾,参考DUAL_CARD.md。
num_speculative_tokens我测了2,3,4,5。效果上3最好。启动脚本:
root@NV-AI-3090Dual2:~# cat vllm.qwen3.6-27b.sh #!/bin/bash source /root/.bashrc source /root/venv/bin/activate # vLLM 启动脚本 — Qwen3.6-27B-AutoRound-INT4 # 用法: bash start-vllm-qwen3.6.sh [TP] [PP] # TP: tensor-parallel size,默认 2 # PP: pipeline-parallel size,默认 1 set -e # ========== 参数 ========== TP="${1:-${TP:-2}}" PP="${2:-${PP:-1}}" MODEL_PATH="/root/models/qwen3.6-27b-autoround-int4" PORT="${PORT:-8000}" HOST="${HOST:-0.0.0.0}" MAX_MODEL_LEN="${MAX_MODEL_LEN:-262144}" GPU_MEM_UTIL="${GPU_MEMORY_UTILIZATION:-0.92}" KV_CACHE_DTYPE="${KV_CACHE_DTYPE:-fp8_e5m2}" TEMP="${TEMP:-${TEMPERATURE:-0.6}}" TOP_P="${TOP_P:-0.95}" TOP_K="${TOP_K:-20}" MIN_P="${MIN_P:-0.0}" REPEAT_PENALTY="${REPEAT_PENALTY:-1.0}" # speculative decoding SPECULATIVE_CONFIG='{"method":"mtp","num_speculative_tokens":3}' # 推理模板参数(关闭 thinking) CHAT_TEMPLATE_KWARGS='{"enable_thinking": false}' # ========== 环境变量 ========== export NVIDIA_VISIBLE_DEVICES="${NVIDIA_VISIBLE_DEVICES:-all}" export HUGGING_FACE_HUB_TOKEN="${HF_TOKEN:-}" export VLLM_WORKER_MULTIPROC_METHOD=spawn export NCCL_CUMEM_ENABLE=0 export NCCL_P2P_DISABLE=0 export VLLM_NO_USAGE_STATS=1 export VLLM_USE_FLASHINFER_SAMPLER=1 export OMP_NUM_THREADS=1 export PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True,max_split_size_mb:512" # NVLink 检测(自行补充 detect_nvlink.sh 逻辑,或删掉这两行) # source /etc/club3090/detect_nvlink.sh # _NVLINK_ENABLED=0 # 手动设置:0=无NVLink, 1=NvLink开启 # ========== 构建命令 ========== ARGS=( --model "$MODEL_PATH" --served-model-name qwen3.6-27b-autoround --quantization auto_round --dtype float16 --tensor-parallel-size "$TP" --pipeline-parallel-size "$PP" --max-model-len "$MAX_MODEL_LEN" --gpu-memory-utilization "$GPU_MEM_UTIL" --max-num-seqs 2 --max-num-batched-tokens 8192 --kv-cache-dtype "$KV_CACHE_DTYPE" --trust-remote-code # --chat-template "${CHAT_TEMPLATE}" # 没有自定义模板文件则删除此行 --reasoning-parser qwen3 --default-chat-template-kwargs "$CHAT_TEMPLATE_KWARGS" --enable-auto-tool-choice --tool-call-parser qwen3_coder --enable-prefix-caching --enable-chunked-prefill --disable-custom-all-reduce --speculative-config "$SPECULATIVE_CONFIG" --override-generation-config "{\"temperature\":${TEMP},\"top_p\":${TOP_P},\"top_k\":${TOP_K},\"min_p\":${MIN_P},\"repetition_penalty\":${REPEAT_PENALTY}}" --host "$HOST" --port "$PORT" ) echo "==========================================" echo "启动 vLLM | TP=$TP PP=$PP | $MODEL_PATH" echo "==========================================" echo "命令: vllm serve ${ARGS[*]}" echo "" exec vllm serve "${ARGS[@]}" deactivate

-
双卡3090 vLLM跑Qwen3.6-27B,强烈建议关注: https://github.com/noonghunna/club-3090 。
我自己的环境: 双卡3090 nvlink,模型Qwen3.6-27B-autoround-int4。 kv cache fp8_e5m2量化, 上下文长度 262144 。采用 dual-mtp 的vllm运行参数和测试脚本(soak-test.sh), p50_decode_tps:61.34;p95_ttft_ms:4864 。
官方给的测试,应该能到接近70tps,我的还有优化空间,但是能用了就没折腾,参考DUAL_CARD.md。
num_speculative_tokens我测了2,3,4,5。效果上3最好。启动脚本:
root@NV-AI-3090Dual2:~# cat vllm.qwen3.6-27b.sh #!/bin/bash source /root/.bashrc source /root/venv/bin/activate # vLLM 启动脚本 — Qwen3.6-27B-AutoRound-INT4 # 用法: bash start-vllm-qwen3.6.sh [TP] [PP] # TP: tensor-parallel size,默认 2 # PP: pipeline-parallel size,默认 1 set -e # ========== 参数 ========== TP="${1:-${TP:-2}}" PP="${2:-${PP:-1}}" MODEL_PATH="/root/models/qwen3.6-27b-autoround-int4" PORT="${PORT:-8000}" HOST="${HOST:-0.0.0.0}" MAX_MODEL_LEN="${MAX_MODEL_LEN:-262144}" GPU_MEM_UTIL="${GPU_MEMORY_UTILIZATION:-0.92}" KV_CACHE_DTYPE="${KV_CACHE_DTYPE:-fp8_e5m2}" TEMP="${TEMP:-${TEMPERATURE:-0.6}}" TOP_P="${TOP_P:-0.95}" TOP_K="${TOP_K:-20}" MIN_P="${MIN_P:-0.0}" REPEAT_PENALTY="${REPEAT_PENALTY:-1.0}" # speculative decoding SPECULATIVE_CONFIG='{"method":"mtp","num_speculative_tokens":3}' # 推理模板参数(关闭 thinking) CHAT_TEMPLATE_KWARGS='{"enable_thinking": false}' # ========== 环境变量 ========== export NVIDIA_VISIBLE_DEVICES="${NVIDIA_VISIBLE_DEVICES:-all}" export HUGGING_FACE_HUB_TOKEN="${HF_TOKEN:-}" export VLLM_WORKER_MULTIPROC_METHOD=spawn export NCCL_CUMEM_ENABLE=0 export NCCL_P2P_DISABLE=0 export VLLM_NO_USAGE_STATS=1 export VLLM_USE_FLASHINFER_SAMPLER=1 export OMP_NUM_THREADS=1 export PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True,max_split_size_mb:512" # NVLink 检测(自行补充 detect_nvlink.sh 逻辑,或删掉这两行) # source /etc/club3090/detect_nvlink.sh # _NVLINK_ENABLED=0 # 手动设置:0=无NVLink, 1=NvLink开启 # ========== 构建命令 ========== ARGS=( --model "$MODEL_PATH" --served-model-name qwen3.6-27b-autoround --quantization auto_round --dtype float16 --tensor-parallel-size "$TP" --pipeline-parallel-size "$PP" --max-model-len "$MAX_MODEL_LEN" --gpu-memory-utilization "$GPU_MEM_UTIL" --max-num-seqs 2 --max-num-batched-tokens 8192 --kv-cache-dtype "$KV_CACHE_DTYPE" --trust-remote-code # --chat-template "${CHAT_TEMPLATE}" # 没有自定义模板文件则删除此行 --reasoning-parser qwen3 --default-chat-template-kwargs "$CHAT_TEMPLATE_KWARGS" --enable-auto-tool-choice --tool-call-parser qwen3_coder --enable-prefix-caching --enable-chunked-prefill --disable-custom-all-reduce --speculative-config "$SPECULATIVE_CONFIG" --override-generation-config "{\"temperature\":${TEMP},\"top_p\":${TOP_P},\"top_k\":${TOP_K},\"min_p\":${MIN_P},\"repetition_penalty\":${REPEAT_PENALTY}}" --host "$HOST" --port "$PORT" ) echo "==========================================" echo "启动 vLLM | TP=$TP PP=$PP | $MODEL_PATH" echo "==========================================" echo "命令: vllm serve ${ARGS[*]}" echo "" exec vllm serve "${ARGS[@]}" deactivate

@davidwei0826 这篇我机器还没到的时候已经看了 居然忘了我就相信AI 说不行
现在就叫claude 去设置
-
可以了
用上nvlink
但是不能用MTP 因为模型不支持 上述GITHUB 文章 用的只是文字模型 我想要多模态模型
我就不测试 文字模型 了 应该100t/s 没问题
比较奇怪的是 我没想到prefill 快了GPU 限制 250w

模型
Repo llmfan46/Qwen3.6-27B-uncensored-heretic-v2-GPTQ-Int4Multimodal
vision (image input)MTP heads Present but disabled (0% accept on GPTQ) Native context 262,144 tokens Engine vLLM v0.21.0
参数
--model /models/heretic-gptq-int4 --served-model-name qwen3.6-27b-heretic --quantization gptq_marlin --dtype float16 --tensor-parallel-size 2 # both 3090s, real NVLink usage --max-model-len 262144 # 262K context --gpu-memory-utilization 0.92 --max-num-seqs 2 # 2 concurrent streams --max-num-batched-tokens 8192 --kv-cache-dtype fp8_e5m2 # 1 byte/token KV --trust-remote-code --reasoning-parser qwen3 # routes <think> → reasoning_content --enable-auto-tool-choice --tool-call-parser qwen3_coder # native Qwen3 tool format --enable-prefix-caching # repeated prompts share KV --enable-chunked-prefill # long prefill doesn't block decode --disable-custom-all-reduce # MANDATORY for cross-NUMA setup
测试
Metric Value Decode (single-stream, steady) 67 t/s (同时2个对话同时 62t/s Prefill (4K prompt, warmed)** 1,289 t/s (同时2个对话 1,000 t/s) VRAM total ~43 GB / 48 GB -
可以了
用上nvlink
但是不能用MTP 因为模型不支持 上述GITHUB 文章 用的只是文字模型 我想要多模态模型
我就不测试 文字模型 了 应该100t/s 没问题
比较奇怪的是 我没想到prefill 快了GPU 限制 250w

模型
Repo llmfan46/Qwen3.6-27B-uncensored-heretic-v2-GPTQ-Int4Multimodal
vision (image input)MTP heads Present but disabled (0% accept on GPTQ) Native context 262,144 tokens Engine vLLM v0.21.0
参数
--model /models/heretic-gptq-int4 --served-model-name qwen3.6-27b-heretic --quantization gptq_marlin --dtype float16 --tensor-parallel-size 2 # both 3090s, real NVLink usage --max-model-len 262144 # 262K context --gpu-memory-utilization 0.92 --max-num-seqs 2 # 2 concurrent streams --max-num-batched-tokens 8192 --kv-cache-dtype fp8_e5m2 # 1 byte/token KV --trust-remote-code --reasoning-parser qwen3 # routes <think> → reasoning_content --enable-auto-tool-choice --tool-call-parser qwen3_coder # native Qwen3 tool format --enable-prefix-caching # repeated prompts share KV --enable-chunked-prefill # long prefill doesn't block decode --disable-custom-all-reduce # MANDATORY for cross-NUMA setup
测试
Metric Value Decode (single-stream, steady) 67 t/s (同时2个对话同时 62t/s Prefill (4K prompt, warmed)** 1,289 t/s (同时2个对话 1,000 t/s) VRAM total ~43 GB / 48 GB @applejuice 牛皮!这个速度已经很舒服了。hermes用子代理干活也能提高速度,3080最高能跑到70t/s
-
@applejuice 牛皮!这个速度已经很舒服了。hermes用子代理干活也能提高速度,3080最高能跑到70t/s
@applejuice 牛皮!这个速度已经很舒服了。hermes用子代理干活也能提高速度,3080最高能跑到70t/s
够用了
先玩玩comfyui
-
我暂时不大想搞了 先用上来 不然为了小小改善花上几天不值得 就好像以前玩3d打印机 一直搞打印机都不打印
现在hermes 接入llama Qwen3.6-27B-uncensored-heretic
kv Q8_0 216k context(还没试)
prefill 800-900t/s
全模态吞吐 40t/s
也算可以用接下来玩下comfyUi
nvlink 就有点浪费 多花了3000好像
@applejuice 反正我是一边折腾一边工作,有痛苦的时候,就是这次对话的改动很好,但是显存炸了,这个时候只有3T/S,你得等它慢慢总结,慢慢GIT
27b也有过不去的坎,这个时候只能你自己告诉它怎么弄,我试过,它搞不定的,让他自己跑一个下午都跑不通,这里几天折腾,我的新软件也已经跑出来了。 -
@applejuice 反正我是一边折腾一边工作,有痛苦的时候,就是这次对话的改动很好,但是显存炸了,这个时候只有3T/S,你得等它慢慢总结,慢慢GIT
27b也有过不去的坎,这个时候只能你自己告诉它怎么弄,我试过,它搞不定的,让他自己跑一个下午都跑不通,这里几天折腾,我的新软件也已经跑出来了。