尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

8×RTX 4090 24GB 硬刚 DeepSeek-V4-Flash-0731:从官方推理到 vLLM OpenAI API 的完整踩坑记录

8×RTX 4090 24GB 硬刚 DeepSeek-V4-Flash-0731:从官方推理到 vLLM OpenAI API 的完整踩坑记录 最近拿到一台独占 GPU 服务器配置是 8 张 RTX 4090。目标很简单使用官方 DeepSeek-V4-Flash-0731 权重把模型部署成可以给 OpenWebUI、RAG 和业务系统调用的 OpenAI-compatible API。真正部署以后连续遇到了 SM89、DeepGEMM、CUDA Graph OOM、KV Cache OOM 等问题。这里把完整过程记录下来。## 一、硬件- 8 × NVIDIA GeForce RTX 4090- 单卡约 24 GB总显存约 192 GB- Compute Capability8.9 / SM89- 2 × Intel Xeon Gold 6530- RAM 约 503 GiB关键点RTX 4090 是 SM89而且这台机器没有 NVLink。## 二、先验证 Docker GPUbashdocker run --rm --gpus all nvidia/cuda:13.0.0-base-ubuntu24.04 nvidia-smi确认容器可以看到全部 8 张卡。## 三、先验证官方模型先使用 DeepSeek 官方 inference code 验证模型本身bashexport TILELANG_TARGETcudaexport CUDA_HOME/usr/local/cuda-13.0export PATH$CUDA_HOME/bin:$PATHCUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 torchrun --nproc-per-node 8 generate.py --ckpt-path /data/models/DeepSeek-V4-Flash-0731-converted-mp8 --config config.json --interactive最终出现textIm DeepSeek 并可以正常聊天。这一步证明官方权重和 8 卡分布式推理本身没问题。## 四、官方 vLLM 遇到 SM89 问题最初使用textvllm/vllm-openai:latest启动 DeepSeek-V4 时遇到textUnsupported architecture排查后确认问题与 DeepGEMM 路径和 RTX 4090 的 SM89 架构有关。因此没有修改官方模型权重而是换用 SM89 runtimetextghcr.io/yhfgyyf/vllm-deepseek-v4-sm89:0.28.1rc1-vision11-sm89-sm120-cu130注意第三方的是 runtime不是模型权重。## 五、第一个坑CUDA Graph OOMSM89 runtime 已经可以进入 DeepSeek-V4 实际模型执行但 CUDA Graph capture 阶段出现textTriton Error [CUDA]: out of memory于是采用text--enforce-eager--compilation-config {cudagraph_mode:NONE}## 六、第二个坑KV Cache OOM继续启动后出现textAvailable KV cache memory: 0.16 GiB32768 tokens 需要约 1.7 GiB KV Cache因此 vLLM 无法启动。最终增加text--cpu-offload-gb 8终于成功。## 七、最终运行参数textTP8EPenabledmoe-backendautoattention-backendFLASHINFER_MLA_SPARSE_DSV4kv-cache-dtypefp8_ds_mlablock-size256max-num-seqs1max-num-batched-tokens2048gpu-memory-utilization0.90cpu-offload-gb8enforce-eagercudagraph_modeNONEtokenizer-modedeepseek_v4reasoning-parserdeepseek_v4## 八、API Server 成功启动日志出现textStarting vLLM server on http://0.0.0.0:8000Application startup complete.健康检查bashcurl http://127.0.0.1:19090/health返回 HTTP 200。模型bashcurl http://127.0.0.1:19090/v1/models返回textDeepSeek-V4-Flash-0731OpenAPItexthttp://SERVER_IP:19090/openapi.jsonChatbashcurl http://SERVER_IP:19090/v1/chat/completions -H Content-Type: application/json -H Authorization: Bearer YOUR_API_KEY -d {model: DeepSeek-V4-Flash-0731,messages: [{role: user, content: 你好请简单介绍一下自己。}],max_tokens: 100}## 九、为什么不直接追求 1M Context模型配置里的最大上下文长度不等于当前硬件实际能够提供的 KV Cache。这台 8×4090 的 GPU 显存已经非常紧张因此生产参数需要结合实际 KV Cache、CPU Offload、并发和业务请求长度测试。## 十、下一步性能压测当前参数首先追求稳定textmax-num-seqs1max-num-batched-tokens2048下一步应该实测text1 / 2 / 4 / 8 ... 并发观察- TTFT- ITL- tokens/s- 总吞吐- GPU 利用率- KV Cache- CPU Offload- OOM最终找到这台 8×4090 的实际最佳配置。## 总结这次真正有价值的不是一条启动命令而是完整的排障路径text8×4090→ Docker GPU→ 官方模型→ 官方 inference 成功→ 官方 vLLM→ SM89 / DeepGEMM 问题→ SM89 runtime→ CUDA Graph OOM→ Eager→ KV Cache OOM→ CPU Offload→ vLLM API Server→ OpenAI-compatible API下面是本次实际验证成功的 Docker 启动命令。 bash docker run --rm --gpus all \ --ipchost \ --shm-size32g \ -p 19090:8000 \ -v /data/models/DeepSeek-V4-Flash-0731:/model:ro \ ghcr.io/yhfgyyf/vllm-deepseek-v4-sm89:0.28.1rc1-vision11-sm89-sm120-cu130 \ --model /model \ --served-model-name DeepSeek-V4-Flash-0731 \ --trust-remote-code \ --tensor-parallel-size 8 \ --enable-expert-parallel \ --moe-backend auto \ --attention-backend FLASHINFER_MLA_SPARSE_DSV4 \ --kv-cache-dtype fp8_ds_mla \ --block-size 256 \ --max-num-seqs 1 \ --max-num-batched-tokens 2048 \ --gpu-memory-utilization 0.90 \ --cpu-offload-gb 8 \ --enforce-eager \ --tokenizer-mode deepseek_v4 \ --reasoning-parser deepseek_v4 \ --compilation-config {cudagraph_mode:NONE} \ --host 0.0.0.0 \ --port 8000 重要公开文章和 GitHub 不要发布真实 API Key、公司内网 IP、密码等生产信息。第三方 runtime 也应在生产使用前自行审阅来源、代码、许可证和安全性。
返回列表