3090ti部署qwen3.6-27B-MTP-q4_K-M的疑惑
-
启动参数,200K上下文,就是没办法拉满,有大神指导一下吗
MODEL="/home/stephen/models/qwen3.6-27b-mtp/Qwen3.6-27B-Q4_K_M.gguf"
MMR="/home/stephen/models/qwen3.6-27b-mtp/mmproj-BF16.gguf"
LLAMA_SERVER="${LLAMA_SERVER:-/home/stephen/llama.cpp-turbo/build/bin/llama-server}"if [ ! -f "$LLAMA_SERVER" ]; then
echo "ERROR: llama-server not found at $LLAMA_SERVER"
exit 1
fiCUDA_VISIBLE_DEVICES=0 "$LLAMA_SERVER"
-m "$MODEL"
--mmproj "$MMR"
--spec-type draft-mtp
--spec-draft-n-max 2
--spec-draft-p-min 0.75
--parallel 1
--host 127.0.0.1
--port 8080
--ctx-size 200704
--n-gpu-layers 99
--cache-type-k turbo4
--cache-type-v turbo4
--flash-attn on
--no-mmap
--reasoning off
--jinja
"$@" -
不明白什么是 上下文不能拉满?
下面是我用的CUDA 跟驱动给你参考
我是有nvlink但是据了解设置没什么分别+-----------------------------------------------------------------------------+ | NVIDIA-SMI 595.71.05 Driver Version: 595.71.05 CUDA: 13.2 | +-----------------------------------------------------------------------------+之前跑的llama.cpp
Flags (in docker-compose.yml)
--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 --host 0.0.0.0 --port 8000 # container-side; mapped to host :8011我的vllm设置
Flags (in docker-compose.yml)
--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 --host 0.0.0.0 --port 8000 # container-side; mapped to host :8011Environment
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:512 VLLM_USE_FLASHINFER_SAMPLER=1 VLLM_NO_USAGE_STATS=1 OMP_NUM_THREADS=1
-
@暧昧光影 关于你的两个问题:
1. 200K上下文拉不满的原因:
3090ti只有24G显存,Qwen3.6-27B-Q4_K_M模型本身占约16-17G,剩下7-8G给KV Cache。
你开了MTP(draft-mtp)还会额外占用draft model的显存,实际留给KV Cache的空间更少。即使用了
--cache-type-k turbo4 --cache-type-v turbo4(Q4量化KV Cache),200K上下文在27B模型上也远远超过24G的承载能力。粗略估算:27B模型80层左右,Q4 KV Cache每个token约0.5字节×4096隐藏层×2(K+V)×80层 ≈ 0.3MB/token。200K tokens ≈ 61GB显存,这还没算模型本身。建议解决方案:
- 先用
--ctx-size 32768跑(32K上下文),绝大部分场景完全够用 - 如果确实需要长上下文,加
--no-kv-offload把KV Cache放到系统内存,但推理速度会下降 - 或者先用普通版(非MTP)的Qwen3.6-27B跑通,确认基础设置没问题再开MTP——MTP本身也会多吃显存
- 另外可以加上
--cont-batching配合context shifting,长对话时自动丢弃早期token
2. CUDA设备编号问题:
这是正常的。nvidia-smi的GPU编号和CUDA的设备编号遵循不同的枚举顺序(PCIe总线顺序vs驱动加载顺序)。你可以用nvidia-smi -q -d INDEX查看每个GPU的Bus-ID,然后在代码里根据Bus-ID确认对应关系。或者直接试试 CUDA_VISIBLE_DEVICES=1 指定另一张卡,看能效有没有区别。 - 先用
-
@暧昧光影 关于你的两个问题:
1. 200K上下文拉不满的原因:
3090ti只有24G显存,Qwen3.6-27B-Q4_K_M模型本身占约16-17G,剩下7-8G给KV Cache。
你开了MTP(draft-mtp)还会额外占用draft model的显存,实际留给KV Cache的空间更少。即使用了
--cache-type-k turbo4 --cache-type-v turbo4(Q4量化KV Cache),200K上下文在27B模型上也远远超过24G的承载能力。粗略估算:27B模型80层左右,Q4 KV Cache每个token约0.5字节×4096隐藏层×2(K+V)×80层 ≈ 0.3MB/token。200K tokens ≈ 61GB显存,这还没算模型本身。建议解决方案:
- 先用
--ctx-size 32768跑(32K上下文),绝大部分场景完全够用 - 如果确实需要长上下文,加
--no-kv-offload把KV Cache放到系统内存,但推理速度会下降 - 或者先用普通版(非MTP)的Qwen3.6-27B跑通,确认基础设置没问题再开MTP——MTP本身也会多吃显存
- 另外可以加上
--cont-batching配合context shifting,长对话时自动丢弃早期token
2. CUDA设备编号问题:
这是正常的。nvidia-smi的GPU编号和CUDA的设备编号遵循不同的枚举顺序(PCIe总线顺序vs驱动加载顺序)。你可以用nvidia-smi -q -d INDEX查看每个GPU的Bus-ID,然后在代码里根据Bus-ID确认对应关系。或者直接试试 CUDA_VISIBLE_DEVICES=1 指定另一张卡,看能效有没有区别。 - 先用
-
不明白什么是 上下文不能拉满?
下面是我用的CUDA 跟驱动给你参考
我是有nvlink但是据了解设置没什么分别+-----------------------------------------------------------------------------+ | NVIDIA-SMI 595.71.05 Driver Version: 595.71.05 CUDA: 13.2 | +-----------------------------------------------------------------------------+之前跑的llama.cpp
Flags (in docker-compose.yml)
--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 --host 0.0.0.0 --port 8000 # container-side; mapped to host :8011我的vllm设置
Flags (in docker-compose.yml)
--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 --host 0.0.0.0 --port 8000 # container-side; mapped to host :8011Environment
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:512 VLLM_USE_FLASHINFER_SAMPLER=1 VLLM_NO_USAGE_STATS=1 OMP_NUM_THREADS=1
@applejuice 我是双卡配置,只用单独3090ti跑llama.cpp,turbo4之后上下文最多到200k,256不行。vllm问了ai肯定不行,128k都够呛。
如果不加多模态投影,省点显存的话,回头试试是否可以256k拉满 -
@applejuice 我是双卡配置,只用单独3090ti跑llama.cpp,turbo4之后上下文最多到200k,256不行。vllm问了ai肯定不行,128k都够呛。
如果不加多模态投影,省点显存的话,回头试试是否可以256k拉满@applejuice 我是双卡配置,只用单独3090ti跑llama.cpp,turbo4之后上下文最多到200k,256不行。vllm问了ai肯定不行,128k都够呛。
如果不加多模态投影,省点显存的话,回头试试是否可以256k拉满单卡 我就没试过了
单卡我才开65k 上下文 ComfyUI 上线的时候 过渡用罢了
其他时候都是2张卡跑LLM -
自己起的命令行不知道为什么不行, 可以克隆noonghunna/club-3090 这个大神的REPO,它会在系统盘拉取容器,轻松突破200K,后期你跑顺了也可以自己去找找yml文件,修改其中的配置。但是智商会有一定损伤的。 目前我日常就使用这个llamacpp/mtpiq4nl (IQ4_NL MTP)
。 -
还有个问题,你要200K, 最好不要加载投影文件,加了投影文件似乎会拖慢速度,并且智商似乎也有影响.
删除那行 MMR="/home/stephen/models/qwen3.6-27b-mtp/mmproj-BF16.gguf" ,模型只会识图能力(另外似乎3090系不支持BF16格式? 我也是问过AI,所以我之前测试都是下载的F16格式,有些大神制作的模型没有F16投影文件) .
我主要用来编程,改BUG,所以直接不加载投影. 我有另一台二奶机,16G老显卡,如果有识图需求是在上面加载的9B模型来给HERMES识图用.