Skip to main content
DeepSeek V4.1 Flash is the only released V4.1 checkpoint. There is no plain DeepSeek-V4.1 artifact and no released DeepSeek-V4.1-Pro checkpoint. This playbook serves deepseek-ai/DeepSeek-V4.1-Flash.
Vendor-verified · AI Reserve qualification pending. The architecture is not served by a normal vLLM pip wheel. Use a vLLM 0.30-era nightly from 2026-09-10 or later, then pin the image digest that passes. Never let a floating nightly update in place under production traffic.

Recipe contract

V4.1 uses a different tokenizer and parser contract from V4. Do not reuse deepseek_v4 flags: all three parser modes here are deepseek_v41.

0. Set up your shell

Every command on this page is copy-paste. Paste this block once per terminal and replace only the API key; every later step reads these variables.
Two keys, two jobs. AIRESERVE_API_KEY authenticates you to AI Reserve and creates the volume, quote, and instance. VLLM_API_KEY is a password you invent for the vLLM server you are about to start: step 4 passes it as vLLM’s --api-key, so the public HTTP port rejects anyone who does not send it. No vendor issues it and AI Reserve never sees it.
The Python and TypeScript tabs read the same three variables from the environment. The shell tabs need curl and jq; the Python tabs need requests (python -m pip install requests).

Check stock first

A quote is free and creates nothing. Run one before creating storage, because the volume in step 1 is placed next to this hardware and fails the same way when none is in stock:
A response with availability and price means you can continue. An error with code: no_capacity means this shape is not in stock in that region right now: try another region here and in steps 1 and 2, or wait, and read no_capacity reasons.

1. Allocate the model volume

Available now. The accelerator hint places the volume in a data center where 8×H200 has stock today, so the instance in step 4 can mount it. If step 0 reported no stock, this call fails the same way.
Wait for the operation to finish before you quote compute:

2. Quote 8×H200

Available now. The quote binds the floating reference tag. For a real release, replace it with the digest you qualified before requesting the quote. A quote expires after 120 seconds, so run step 4 right after it; if it has expired, run this step again.

3. Download the pinned artifact

Manual today. Use a loader with the persistent volume attached, or let vLLM populate HF_HOME during first start. The verification command requires the current hf CLI from huggingface_hub 1.18 or later, not the deprecated huggingface-cli:
No official BF16, GPTQ, AWQ, or GGUF production artifact is part of this recipe. Treat every conversion as a separate model requiring task-quality, vision, long-context, tool, and latency acceptance.

4. Launch the V4.1 server

Available now, runtime qualification pending. This starts target-only serving with the vision tower enabled. DSpark comes later, after the target baseline passes. The eight-GPU topology keeps Engram resident instead of depending on host-memory offload.
Wait for the launch operation the same way as in step 1 (wait_for and waitFor are already defined there):
A running instance is not a ready model. vLLM still has to load about 511 GB of weights (downloading them first unless step 3 staged them) and shard them across eight GPUs, which takes tens of minutes. Step 5 waits for /v1/models before the first request. To watch progress:
For text-only traffic, qualify a second profile with --language-model-only and remove --mm-encoder-tp-mode data. Do not silently route image requests to that profile.

5. Verify reasoning, tools, and vision

Set ENDPOINT to the returned port-8000 URL.
Wait until the model is loaded. The first successful /v1/models is the readiness signal; until then the port returns connection errors or 5xx:

Vision smoke test

IMAGE_URL is any image the server can fetch; a public sample is set here so the test runs as written. This must pass before the multimodal profile is considered ready:
The self-host encoder maps low/high/xhigh/max to 25/50/75/100; DeepSeek’s hosted API maps its named tiers differently. Use an integer when parity matters. Thinking defaults on, so a small output cap may be exhausted before visible content appears. Acceptance must also send:
  • a base64 image and a remote image URL through the OpenAI multimodal message shape;
  • multiple images in one prompt;
  • a tool call encoded through DeepSeek’s tagged markup language (DSML), followed by a tool result while preserving prior reasoning_content;
  • streaming responses in thinking and non-thinking modes;
  • invalid tool output to prove the application rejects it safely.

6. Qualify load and DSpark

Start with target-only serving:
Run separate text and vision sweeps. Progress through 4K, 32K, 128K, 384K, then near-1M contexts while varying concurrency and image count. Capture p50/p95/p99 TTFT, TPOT, queue time, throughput, errors, OOMs, HBM/host memory, KV usage, and tool/JSON validity. Then enable the checkpoint’s five-token DSpark block with real rejection. Never use rejection_sample_method: synthetic or a synthetic acceptance length as production evidence. Compare target-only and DSpark after clean restarts, and do not combine DSpark with prefill/decode disaggregation until the engine documents that combination as supported.
AI Reserve raw compute does not supply production replicas, health-aware load balancing or a managed load balancer, autoscaling, draining, durable workload logs, or customer GPU metrics. Add and test those layers before exposing the endpoint to clients. A protected raw port plus one successful request is not an industry-standard service.

7. Clean up

Primary sources