8×H200 部署 DeepSeek-V4.1-Flash,并发 8 就极慢,首字延迟数分钟,GPU SM 100% 但 generation tput 为 0

Li_xx 2026-09-23 09:29 1

机器是8张H200,2T内存,本地NVMe放的模型。vLLM用的nightly镜像,部署的DeepSeek-V4.1-Flash。启动参数大概是这样:


--tensor-parallel-size 8 --enable-expert-parallel

–max-model-len 1048576 --max-num-seqs 64

–enable-prefix-caching

–speculative-config ‘{“method”:“dspark”,“num_speculative_tokens”:5,…}’

–mm-encoder-tp-mode data

-e VLLM_USE_RUST_FRONTEND=1


还挂了SimpleCPUOffloadConnector


现在问题是:并发才8个请求,就卡得不行。New API那边看日志全是“首字不适用”,frt=-1000,就是vLLM压根没吐第一个token出来。等个2到15分钟,客户端直接超时断了,completion_tokens=0。


vLLM自己的日志里 Reqs Running: 8,但 Avg generation tput: 0.0 toks/s,GPU KV cache used 才1%左右。Prefix cache hit rate也是抽风,一会98%一会0%。


nvidia-smi看,SM跑满100%,但mem才6%到28%,PCIe接收倒是有2.5到7 GB/s。GPU温度功耗都正常,ECC也全是0。之前有张卡报过Xid 95,重置后没再犯。


请求的prompt都巨长,几万到几十万token,reasoning_effort基本都是high或max。我怀疑是超长上下文把prefill队列堵死了,decode根本排不上,所以generation tput才是0。也可能Engram表放CPU内存,PCIe来回搬数据太慢。


试过去掉KV offload,没用。Rust前端启动时还提示有些参数不生效。CUDA Graph捕获的时候一堆空图警告,但最后显示都100%完成了。


有没有人遇到过类似情况?是不是必须把max-model-len降下来?或者换回Python前端?还是说Engram这块目前就是坑?求指点,感谢!

最新回复 (13)
  • 若可 09-23 09:49
    1

    用sglang部署吧

  • 北川 09-23 09:51
    2

    docker run --gpus all \


    –privileged --ipc=host \


    –shm-size 512g -v $(pwd):/workspace --network=host \


    -e VLLM_ENGINE_READY_TIMEOUT_S=3600 \


    -e VLLM_USE_RUST_FRONTEND=1 \


    vllm/vllm-openai:deepseekv41-flash-0909 /workspace/dsv4.1 \


    –tokenizer-mode deepseek_v41 \


    –tensor-parallel-size 8 \


    –tool-call-parser deepseek_v41 \


    –enable-auto-tool-choice \


    –reasoning-parser deepseek_v41 \


    –mm-encoder-tp-mode data \


    –trust-remote-code \


    –kv-cache-dtype fp8_ds_mla \


    –enable-prefix-caching \


    –enable-prompt-tokens-details \


    –enable-expert-parallel \


    –speculative-config ‘{“method”:“dspark”,“num_speculative_tokens”:5,“draft_sample_method”:“probabilistic”,“rejection_sample_method”:“block”,“enable_adaptive_verification”:true}’ \


    –gpu-memory-utilization 0.9518 --max-num-seqs 32 --seed=0 \


    –default-chat-template-kwargs ‘{“thinking”: true, “reasoning_effort”: “high”}’ \


    –compilation-config ‘{“mode”:1,“cudagraph_mode”:“FULL_DECODE_ONLY”}’



    我的参数,用的还是deepseekv41-flash-0909的docker,没更新nightly。

    SimpleCPUOffloadConnector这个建议关掉,我这个版本的docker开了直接崩。

  • GPLer 09-23 09:58
    3

    1. 并发场景首字慢可以配 --long-prefill-token-threshold [N] 避免单批次吃满全部预算

    2. 显存够的情况下同时加大 --max-num-batched-tokens [N] 增大单批次处理量

    3. 合理配置 kvcache 外挂,单机简单使用推荐使用 lmcache,能避免高缓存命中场景算力频繁浪费在 prefill 上

    4. 楼下提到的 PD 分离,最彻底

    5. 尝试其他引擎,比如其他楼提到的 SGLang,另外你卡架构比较新,TokenSpeed 之类的也可以试试,这个我卡太老了用不了没试过,但是效果看上去很牛逼

  • ljhhh0107 09-23 10:00
    4

    Prefill和Decode一起做会有这个bug,换成PD吧,应该2张H200做Prefil就可以

  • chenyaoling 09-23 10:00
    5

    用sglang + hicache 吧

  • Li_xx 楼主 09-23 10:02
    6

    之前用过sglang部署GLM5.3flash,他有个小bug,输出时间戳是浮点数,newapi接受int,会解析错误

  • 若可 09-23 10:06
    7

    那是newapi的问题吧,而且也可以自己加一个中间件解决。

  • JeremyGE 09-23 10:09
    8

    -e VLLM_USE_RUST_FRONTEND=1



    去掉-e VLLM_USE_RUST_FRONTEND=1 ,现在这个rust前端还不成熟

  • Li_xx 楼主 09-23 10:10
    9

    这个是尝试后加上的,同样的指令fastapi前端调用模型会报工具调用错误,输出直接截断了

  • suifenging 09-23 10:12
    10

    我也想试试,但是没有硬件啊!

  • diyun 09-23 10:12
    11

    啥家庭啊,直接就把ds4.1部署上了

  • GGBoy 09-23 10:12
    12

    用PD分离架构,P和D的参数要分别调下。

  • JeremyGE 09-23 10:14
    13

    python前端大部分版本都没有这个问题。试一下最新的v0.30.0-cu129 镜像吧

* 帖子来源Linux.do
返回