diff --git a/docs_new/cookbook/autoregressive/DeepSeek/DeepSeek-V4.mdx b/docs_new/cookbook/autoregressive/DeepSeek/DeepSeek-V4.mdx index d99f839fd..99776d5bc 100644 --- a/docs_new/cookbook/autoregressive/DeepSeek/DeepSeek-V4.mdx +++ b/docs_new/cookbook/autoregressive/DeepSeek/DeepSeek-V4.mdx @@ -145,7 +145,14 @@ The generator currently picks values on the **conservative** side (mirroring an **Hopper (H200) note** -The H200 image and checkpoint are currently being uploaded — public path coming shortly. +H200 image (`lmsysorg/sglang:deepseek-v4-hopper`) and FP8 checkpoints +(`sgl-project/DeepSeek-V4-Flash-FP8`, `sgl-project/DeepSeek-V4-Pro-FP8`) are +publicly available. + +PD-Disagg recipes on H200 may require `docker run --privileged --ulimit memlock=-1` +(or `--device /dev/infiniband:/dev/infiniband --cap-add IPC_LOCK`) so mooncake +can discover the IB HCAs; without IB exposure mooncake silently falls back to +TCP, which can lead to garbled KV transfer on large checkpoints. **Base model usage** diff --git a/docs_new/src/snippets/autoregressive/deepseek-v4-deployment.jsx b/docs_new/src/snippets/autoregressive/deepseek-v4-deployment.jsx index 568c25641..b1192f08c 100644 --- a/docs_new/src/snippets/autoregressive/deepseek-v4-deployment.jsx +++ b/docs_new/src/snippets/autoregressive/deepseek-v4-deployment.jsx @@ -164,6 +164,7 @@ export const DeepSeekV4Deployment = () => { "b200|small|balanced", "b200|small|max-throughput", "b200|small|cp", + "b200|small|pd-disagg", "b200|big|low-latency", "b200|big|balanced", "b200|big|max-throughput", @@ -171,7 +172,18 @@ export const DeepSeekV4Deployment = () => { "h200|small|low-latency", "h200|small|balanced", "h200|small|max-throughput", + "h200|small|cp", + "h200|small|pd-disagg", + // h200|big|pd-disagg: pending verification (needs 4-node H200 cluster with + // shared IB fabric: 2-node prefill + 2-node decode). ]); + // Recipes whose command is intentionally not yet provided (e.g. blocked by an + // upstream limitation). Showing a minimal placeholder is friendlier to users + // than emitting a commented-out invalid command. + const TBD_RECIPES = new Set([ + "h200|big|cp", + ]); + const TBD_PLACEHOLDER = "# to be provided"; const BEING_VERIFIED_NOTE = "# NOTE: this recipe is being verified on the latest checkpoint"; @@ -387,6 +399,7 @@ export const DeepSeekV4Deployment = () => { const base = `${envBlock}sglang serve \\\n${flags.join(" \\\n")}`; const withMultinode = multinode ? prependMultiNodeNote(base, nnodes) : base; const verifyKey = `${hardware}|${modelSize}|${recipe}`; + if (TBD_RECIPES.has(verifyKey)) return TBD_PLACEHOLDER; return VERIFIED_RECIPES.has(verifyKey) ? withMultinode : `${BEING_VERIFIED_NOTE}\n${commentOutCommand(withMultinode)}`; @@ -474,6 +487,7 @@ python3 -m sglang_router.launch_router \\ const full = `${prefill}\n\n${decode}\n\n${router}`; const verifyKey = `${hardware}|${modelSize}|pd-disagg`; + if (TBD_RECIPES.has(verifyKey)) return TBD_PLACEHOLDER; return VERIFIED_RECIPES.has(verifyKey) ? full : `${BEING_VERIFIED_NOTE}\n${commentOutCommand(full)}`;