Baseten 开源 DeepSeek-V4.1-Flash 推理引擎 DeepSeek Ultrafast
DeepSeek Ultrafast
Baseten 开源面向 DeepSeek-V4.1-Flash 的推理引擎 DeepSeek Ultrafast,支持 1M 上下文和多机 KV cache 共享。
原文给出了 DeepSeek-V4.1-Flash 推理引擎的吞吐、步时与多机 KV cache 共享方案,可据此评估部署成本。
为 sm_100a 和 sm_103a 打造的 DeepSeek-V4.1-Flash 超高速推理引擎。它支持 1M 上下文长度和多服务器 KV 缓存共享。
性能
| 4 x GB300 (TP4) | 8 x B300 (TP8) | |
|---|---|---|
| 解码(编码) | 1,740 tokens/s | 2,060 tokens/s |
| 步进时间 | 3.30 ms | 2.71 ms |
| 接受长度 | 5.6 tokens/步 | |
| 预填充 | 13.2 秒内处理 1,000,000 tokens(76,000 tokens/s) | 11.7 秒内处理 1,000,000 tokens(85,000 tokens/s) |
解码、步进时间和接受长度是在 “实现俄罗斯方块游戏。直接输出 HTML 代码——不要解释。” 上测得的。每个解码步会起草一块 token 并对其进行验证;接受长度是每一步平均输出的 token 数。复现结果的说明位于本页底部。
流式输出一个完整的俄罗斯方块游戏,并实时显示解码速度,然后游玩它。以实时速度展示。
DeepSeek-V4.1-Flash-Fast 已在 Baseten Model APIs 上提供。更多性能改进和开源发布即将到来。
快速开始
要求
- 4 块 GB300(
sm_103a)、4 或 8 块 B300(sm_103a)或 4 或 8 块 B200(sm_100a)GPU - CUDA 13 工具包
models/中的 DeepSeek-V4.1-Flash- 一个用于多服务器 KV 缓存协调的 Redis 实例
sudo apt-get install -y build-essential pkg-config cmake clang libclang-dev \
libibverbs-dev librdmacm-dev libopencv-dev redis-server curl ca-certificates
curl -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none && . "$HOME/.cargo/env"1. 构建
rustup toolchain install DSUF_SM=sm_103a cargo build --release -p deepseek-ultrafast-engine --bin run -p deepseek-ultrafast-server --bin serve
2. 启动本地服务器
服务器会在各轮对话之间保留每个会话的 KV 缓存。Redis 记录哪个副本拥有每个会话的缓存;在本地只需让它保持运行即可。服务器会自行查找本机的 RDMA 端口:
redis-server --bind 127.0.0.1 --save '' --appendonly no --daemonize yes
DSUF_REDIS_URL=redis://127.0.0.1:6379 target/release/serve --ckpt models --gpus 0,1,2,3 --port 8000在 8 卡 B300 机器上,使用全部八块(--gpus 0,1,2,3,4,5,6,7;使用 DSUF_SM=sm_103a 构建)。
当 curl localhost:8000/readyz 返回 200 时即表示就绪,大约在启动后 20 秒。
3. 连接你的 harness
使用你喜欢的 OpenAI 兼容客户端。例如:
DEEPSEEK_BASE_URL=http://localhost:8000 DEEPSEEK_API_KEY=none \
npx @deepseek-ai/dsh headless "summarize this repo"多服务器环境中的 KV 缓存共享
每个服务器都会将近期会话的 KV 缓存保存在主机内存中。当某个会话的下一轮落到不同的服务器上时,该服务器会直接从持有缓存的服务器获取缓存,通过 RDMA 从主机内存到主机内存,而不是重新计算提示词。Redis 记录哪个服务器拥有每个会话的缓存,并通告所有权变更。
得益于 DeepSeek 极致的 KV 缓存压缩,传输速度非常快,可以在每次请求时进行。
此设置消除了对前缀感知路由的需求,并实现了更好的负载均衡。
参见 deploy/kubernetes.yaml 获取多服务器部署示例。
复现演示
从服务器流式获取俄罗斯方块答案并报告解码速度:
python3 - <<'EOF' import json, time, urllib.request body = { "model": "deepseek-v4.1-flash", "messages": [{"role": "user", "content": "implement the tetris game. output HTML code directly - no explanation."}], "thinking": {"type": "disabled"}, "stream": True, "stream_options": {"include_usage": True}, } req = urllib.request.Request("http://localhost:8000/v1/chat/completions", json.dumps(body).encode(), {"Content-Type": "application/json"}) start, first, tokens = time.time(), None, 0 with urllib.request.urlopen(req) as stream: for line in stream: if not line.startswith(b"data: {"): continue chunk = json.loads(line[6:]) if chunk.get("usage"): tokens = chunk["usage"]["completion_tokens"] for choice in chunk["choices"]: if text := choice["delta"].get("content"): first = first or time.time() print(text, end="", flush=True) end = time.time() print(f"\n\n{tokens} tokens at {tokens / (end - first):,.0f} tokens/s (first token after {first - start:.2f} s)") EOF
它以类似 5142 tokens at 1,717 tokens/s (first token after 0.04 s) 的一行结束。
我们在 4xGB300 上看到 1,700-1,770 tokens/s,在 8xB300 上看到 1,980-2,170 tokens/s(--gpus 0,1,2,3,4,5,6,7)。
服务器的 request_end 日志行会报告每个请求的步进时间(average_iteration_ms)和接受长度(average_accept_length)。在 30 次运行中,我们在 4xGB300 上看到 3.24-3.37 ms 和 5.1-6.1 tokens/步,在 8xB300 上看到 2.69-2.74 ms 和 5.3-6.1 tokens/步。
第三方库
- deepseek-recipe:提示词渲染和响应解析
- tokenizers:分词
- cuDNN 和 cuBLAS:视觉编码器
- OpenCV:图像解码
- Velo:副本之间通过 RDMA 进行 KV 传输
致谢
这些内核由编码代理优化,它们在工作时可以阅读 FlashInfer 和 SGLang 的源代码。
来源:Hacker News · github.com