这篇适合谁
适合有多卡 GPU 服务器、想用 SGLang 托管 DeepSeek-V4-Flash 的读者。读完你能启动一个兼容 OpenAI 接口的服务,测通普通对话、流式输出、思考模式和工具调用,并知道首次部署最容易卡在哪里。
SGLang 和 DeepSeek-V4-Flash 是什么
SGLang 是一个开源的大模型推理服务框架。它提供 OpenAI 兼容接口,已有的 OpenAI 客户端代码通常只需要改一下地址就能调用[1]。
DeepSeek-V4-Flash 是 DeepSeek 官方发布的 Instruct 模型,权重在 Hugging Face 上,约 149GB,分成 46 个 safetensors 分片。其中 MoE 专家是 FP4 精度,Attention 和 Dense 层是 FP8 精度[2]。
先按硬件选路线
本文有两条路线。RTX PRO 6000 Blackwell 走官方 Docker 镜像;4 张 141GB 的 H200 走 Python 环境,这也是实测使用的配置[1]。
RTX PRO 6000 的官方验证配置用两张 96GB 显卡,TP=2,MoE 后端是 FlashInfer MXFP4。这套配置只支持 Flash 模型,并且不要开启 HiCache 或 MegaMoE[1][3]。大多数云服务器没有 Docker 运行时,这种情况直接走 Python 路线[1]。
两条路线最终提供的接口相同,区别在于环境从哪里来。Docker 路线把 SGLang 和 CUDA 依赖放在官方镜像里,启动前只需确认宿主机能运行 Docker,并能把 GPU 交给容器[1]。Python 路线则要自己建环境,装好 SGLang 和 sglang-kernel,并确认 PyTorch 与 CUDA 版本对得上。实测的 H200 环境是 Python 3.12 加 PyTorch 2.11.0+cu130,换机器时要先核对这个组合[1]。
这里的 --tp 指张量并行的卡数,决定模型被切分到几张卡上。Docker 路线设为 2,H200 路线设为 4,它要和你交给进程的卡数对应。模型本身约 149GB,超过单张 141GB 的 H200,所以单卡放不下,必须多卡切分[1][2]。
下载模型并检查
模型只下载一次。下载前先确认磁盘空间足够,权重本身就约 149GB。普通网络用 Hugging Face CLI;国内网络可以改用 ModelScope[1][2]。
hf download deepseek-ai/DeepSeek-V4-Flash \
--local-dir /root/autodl-fs/models/DeepSeek-V4-Flashmodelscope download \
--model deepseek-ai/DeepSeek-V4-Flash \
--local_dir /root/autodl-fs/models/DeepSeek-V4-Flash下载完成后,应有 46 个分片,没有 .incomplete 残留文件,目录总大小约 149GB,并且有 model.safetensors.index.json 索引文件[1]。
ls "$MODEL_PATH"/model-*.safetensors | wc -l
ls "$MODEL_PATH"/*.incomplete 2>/dev/null || echo "no incomplete"
du -sh "$MODEL_PATH"
test -f "$MODEL_PATH/model.safetensors.index.json" && echo "index OK"用 nvidia-smi 和 nvidia-smi topo -m 检查显卡和拓扑[1]。下载完成后可以逐项核对下面这份清单:
- 模型目录里有 46 个
model-*.safetensors分片。 - 没有
.incomplete残留文件。 - 目录总大小约 149GB,并且有
model.safetensors.index.json。 nvidia-smi能看到计划使用的全部显卡。
清单全部通过后再启动服务,能省下很多排查时间。
nvidia-smi
nvidia-smi topo -m路线一:RTX PRO 6000 用官方 Docker 镜像
先拉取镜像[1]:
docker pull lmsysorg/sglang:latest启动命令里的 --gpus '"device=0,1"' 只会用到 0 号和 1 号卡,即使服务器有 4 张 RTX PRO 6000 也一样。需要换卡时,修改这个设备列表。容器的端口是 30000,模型以只读方式挂载。命令里还设置了 --reasoning-parser deepseek-v4 和 --tool-call-parser deepseekv4,分别用于拆分思考内容和解析工具调用[1]。
docker run --rm \
--gpus '"device=0,1"' \
--shm-size 32g \
--ipc=host \
-p 30000:30000 \
-v /data/models/DeepSeek-V4-Flash:/models/DeepSeek-V4-Flash:ro \
lmsysorg/sglang:latest \
sglang serve \
--trust-remote-code \
--model-path /models/DeepSeek-V4-Flash \
--served-model-name deepseek-v4-flash \
--tp 2 \
--moe-runner-backend flashinfer_mxfp4 \
--mem-fraction-static 0.92 \
--cuda-graph-max-bs-decode 32 \
--reasoning-parser deepseek-v4 \
--tool-call-parser deepseekv4 \
--host 0.0.0.0 \
--port 30000路线二:4 张 H200 用 Python 环境
创建 Python 3.12 环境。实测使用的是 PyTorch 2.11.0+cu130。下面的命令先设置 uv 缓存,改用清华 PyPI 镜像,安装 SGLang,再从 cu130 索引重装 sglang-kernel[1]。
conda create -n sglang python=3.12 -y
conda activate sglang
export UV_CACHE_DIR=/dev/shm/uv-cache-sglang
export UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
export UV_LINK_MODE=copy
mkdir -p "$UV_CACHE_DIR"
python -m pip install --upgrade pip
python -m pip install uv
uv pip install --prerelease=allow sglang
uv pip install --force-reinstall sglang-kernel \
--index-url https://docs.sglang.ai/whl/cu130/安装后检查 CUDA 是否可用,并确认 DeepSeek-V4 的解析器存在[1]。
python -c "import torch; print(torch.__version__, torch.cuda.is_available(), torch.cuda.device_count())"
python -m sglang.launch_server --help | grep -o "deepseek-v4" | headH200 可以直接加载官方的 FP4 与 FP8 混合权重。实测命令使用 --tp 4,显存静态分配比例为 0.85,上下文先设为 131072(即 128K),MoE 后端用 Marlin W4A16[1]。命令还开启了 EAGLE 推测解码,推测步数为 3,top-k 为 1,每次草稿 token 为 4[1]。
先设置环境变量:
conda activate sglang
export CUDA_VISIBLE_DEVICES=0,1,2,3
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True再启动服务:
sglang serve \
--model-path /root/autodl-fs/models/DeepSeek-V4-Flash \
--served-model-name deepseek-v4-flash \
--trust-remote-code \
--tp 4 \
--host 0.0.0.0 \
--port 30000 \
--mem-fraction-static 0.85 \
--context-length 131072 \
--moe-runner-backend marlin \
--reasoning-parser deepseek-v4 \
--tool-call-parser deepseekv4 \
--speculative-algorithm EAGLE \
--speculative-num-steps 3 \
--speculative-eagle-topk 1 \
--speculative-num-draft-tokens 4首次启动会慢很多,因为要加载模型、预热内核并捕获 CUDA Graph。日志出现下面几行,说明服务已经就绪[1]。
Application startup complete.
Uvicorn running on http://0.0.0.0:30000
The server is fired up and ready to roll!调用接口
接口地址是 http://127.0.0.1:30000/v1,api_key 可以随便填。请求里的 model 字段必须是 deepseek-v4-flash,也就是启动命令里 --served-model-name 设定的名字,否则服务端找不到对应模型[1]。客户端这样创建[1]:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:30000/v1", api_key="EMPTY")开启思考模式,需要传 extra_body={"chat_template_kwargs": {"thinking": True}}。思考内容会出现在流式增量的 reasoning_content 字段里[1]。工具调用的测试会发送一个 get_weather 函数定义,询问北京的天气,然后打印返回的 tool_calls[1]。
思考模式和工具调用是两类不同的输出。思考内容单独放在 reasoning_content 里,最终回答仍在 content 中,所以客户端可以选择只展示回答,也可以把思考过程展示出来。工具调用则返回模型想调用的函数名和参数,真正执行函数、再把结果回传给模型的工作,要由你的应用来完成[1]。这一点在做 Agent 时尤其重要,因为模型只负责决定调用什么,并不会自己去执行。
常见问题
这套路线的代价主要在首次部署上。环境准备、模型下载和启动等待加在一起,通常比写客户端代码花的时间多得多。把每一步的输出保存下来,比如 nvidia-smi 的结果和启动日志,出问题时能更快定位原因。
首次启动慢是正常的。模型加载、内核预热和 CUDA Graph 捕获都要时间,在日志出现就绪三行之前不要急着测试,也不要反复重启,否则每次都要重新来一遍[1]。
如果显存紧张,可以先降低 --mem-fraction-static 的比例,或者缩短 --context-length,两者都会减少 KV 缓存的占用。这两个参数在本文的实测配置里分别是 0.85 和 131072[1]。
最容易忽略的是设备列表。四张 RTX PRO 6000 的服务器,如果不改命令,仍然只用 0 号和 1 号卡[1]。模型加载完成后,用 nvidia-smi 查看每张卡的显存占用;请求期间再看 GPU 利用率,确认各卡都在工作[1]。
官方的配置说明可以参考 SGLang 的 DeepSeek-V4 Cookbook[3]。
下一步
服务跑通以后,可以先用上面的客户端代码,换成你自己的提示词,观察流式输出、思考内容和工具调用在真实请求里的表现。想进一步调整并行方式、缓存或推测解码参数,先读 SGLang 的 DeepSeek-V4 Cookbook,再改启动命令,每次只改一个参数,便于回退[3]。
本文改编自 Datawhale 开源项目 self-llm 中的 DeepSeek-V4-Flash SGLang 部署教程[1],原文以 Apache-2.0 许可证发布。
来源
- 102-DeepSeek-V4-Flash SGLang 部署Datawhale self-llm (Apache-2.0)
- 2deepseek-ai/DeepSeek-V4-FlashHugging Face
- 3
引用本页: DeepSeek-V4-Flash 用 SGLang 部署. TellWorld, https://www.tellworld.net/zh/practice/practice-deepseek-v4-flash-sglang. 更新于 2026-11-14