Skip to content

docs(guides): one flow from README to restore, one pattern for every recipe - #656

Merged
galletas1712 merged 18 commits into
schwinns/cuinterpose-recipesfrom
docs/pr456-guide-flow
Oct 20, 2026
Merged

galletas1712 merged 18 commits into
schwinns/cuinterpose-recipesfrom
docs/pr456-guide-flow

Conversation

@ozbarshalom

@ozbarshalom ozbarshalom commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Refs #627. Targets the branch of #456. It does two things: gives the guides one flow you follow top to bottom, with the recipe chosen once at the start, and makes the eight recipes follow one scheme, so a 1 GPU and an 8 GPU run differ only where the GPU count forces it.

The flow

  • Guides index is one flow. After the shared setup (install, example files, namespace, model cache), you choose a recipe once by setting FRAMEWORK, MODEL and GPUS from one table, and paste one block that works out the files and resource names. Every later command uses that choice: prepare the ConfigMap, checkpoint (Option A PodSnapshot or Option B SnapshotJob), restore, and confirm the restore by the pod's nvidia.com/Restored condition. A closing section points people with their own engine or image to the workload contract.
  • No text substitution in commands. The two placeholders in the manifests (the agent image in multi-GPU source manifests, the checkpoint name in restore profiles) are filled in by editing the one line the page names and showing it, not with envsubst or sed.
  • WORKLOAD_NAMESPACE names the namespace the replicas run in, which is not the namespace Snapshot is installed in.
  • Multi-GPU recipes are one short section: all GPUs on one node, the agent image for a Deployment source, and the first-run time. The framework guides keep the engine-specific detail as reference.
  • The multi-GPU pod shape moved to the workload contract.
  • The guides have no clean-up section, no failure section and no inference request.

One scheme for every recipe

  • Model cache in every recipe, one PVC named model-cache defined once in docs/guides/model-cache-pvc.yaml. The vLLM and TensorRT-LLM Qwen3 recipes gain the init container, offline env and PVC the others already had.
  • Names <framework>-<model>-source and -snapshot, hyphens only (deepseek-v4.1-flash is now deepseek-v4-1-flash), and <framework>-1gpu-restored and -8gpu-restored.
  • Restore profiles are 1-gpu.yaml and 8-gpu.yaml, and all carry nvidia.com/restore-from: ${SNAPSHOT_NAME}. No profile needs hand editing.
  • Deadlines and probes follow the GPU class only: Deployments 1800 or 3600, SnapshotJob 3600 or 7200, readiness threshold 1800 or 3600. vLLM and SGLang had no Deployment deadline, and vLLM probed at 1200.
  • TensorRT-LLM SnapshotJobs set the same fsGroup as its Deployments and restore profiles. The controller merges its seccomp setting into an existing security context, so this is safe.

Other consumers of the recipes

  • Benchmarks deploy the vLLM Qwen3 recipe as a template and swap in seven other models. The engine now drops the recipe's model cache plumbing, so the pods it builds are unchanged apart from the renamed app label and the readiness threshold. I built them from the head of feat(examples): document and exercise multi-GPU workloads #456 and from this branch for three models and two pull policies and diffed them.
  • e2e points every framework at the shared PVC manifest and 1-gpu.yaml. The CI shared NFS claim now defaults to shared-model-cache, so a model-cache claim from a guide-download run cannot shadow it. SNAPSHOT_E2E_MODEL_CACHE_* and the benchmark modelCacheMode key are unchanged.

How it was checked

On a B200 node, with chart 0.0.0-g7e282f0e (this branch's base, 7e282f0e) installed, where the agent registers its NRI plugin and so runs the restore proxy, using the manifests in this branch:

  • Single GPU: vLLM Qwen3 0.6B, source Deployment and PodSnapshot, then restore with restore/1-gpu.yaml. PID 1 in the restored container was /snapshot-control/snapshot-restore-proxy, the pod reported nvidia.com/Restored=True, and the replica answered a /generate request.
  • Two GPUs: vLLM Qwen3 0.6B at tensor-parallel 2, a copy generated from the 8-GPU GLM 5.3 manifests (so it carries the nvidia.com/snapshot-multi-gpu annotation, the snapshot-cuda-install init container and the launcher), through a SnapshotJob, then restore with the 8-GPU profile at two GPUs. Same results.

The new flow, run from the page. A fresh clone of this branch, the commands extracted from the guides index and run in its order, with the two "edit this line" steps done by changing the line the page names. Same chart, same node. Two environment deviations, both in my clone of the repository and not in any step: the model-cache claim points at an existing PVC, because this cluster's Kyverno policy rejects a private PVC named model-cache, and the ConfigMaps are named ozbarshalom-<engine>-app, because the namespace already held incompatible ones.

  • Single GPU: vLLM Qwen3 0.6B, Option A (Deployment + PodSnapshot). Pass: the checkpoint became Ready, PID 1 in the restored container was /snapshot-control/snapshot-restore-proxy, and nvidia.com/Restored was True.
  • Two GPUs: vLLM Qwen3 0.6B at tensor-parallel 2 (the copy generated from the 8-GPU manifests), Option B (SnapshotJob), including the multi-GPU step that reads the agent image. Pass, with the same proxy PID 1 and Restored=True. Only 2 GPUs were free, and Option A needs 2 for the source plus 2 for the restored replica at once, so this one used the SnapshotJob.
  • TensorRT-LLM single GPU, after the review fix that removes TRTLLM_MAX_NUM_TOKENS and TRTLLM_MAX_BATCH_SIZE (they repeated app.py's defaults) and raises TRTLLM_FREE_GPU_MEMORY_FRACTION from 0.10 to 0.75, as in the GLM recipes: both Option A and Option B pass, with the restore proxy as PID 1 and Restored=True.
  • The CRDs were updated from this chart before the runs.

Also checked:

  • Consistency checks over all 24 manifests: naming, deadlines, probes, cache wiring, init container and engine agree on model and revision, the two lanes run the same workload, and no stale name is left anywhere. I mutated the recipes and docs seven ways and each check failed as it should.
  • All eight SnapshotJob recipes and the guide's PodSnapshot validate against the chart's CRDs.
  • The three pinned images exist and pull anonymously on amd64 and arm64. The three models are public and ungated, and their pinned revisions exist.
  • The e2e unit tests that run offline (365 pass; the 2 that need a live cluster are not run), and every relative link and anchor.
  • All 36 command blocks in the guides parse, and the recipe block derives the right manifests and names for all eight recipes in bash and zsh.

Not run:

  • the new flow for SGLang, for TensorRT-LLM at two GPUs, and Option A at two GPUs. The earlier fake-kubectl run of 16 flows no longer applies, because the commands changed;
  • the eight-GPU recipes (GLM 5.3, DeepSeek V4.1 Flash), and the model-download init container (the model was already in the cache);
  • the GPU e2e suites and make check test.

The same guides for Snapshot 0.2.0 are in #658, which targets release/0.2. 0.2.0 has no restore proxy, so its restore profiles run an inert placeholder command instead of the source command. They were run there on a 0.2.0 install.

For #456, not changed here

  • The README installs chart 0.2.0, which does not contain the restore proxy (the NRI plugin that makes it PID 1) or the no-proxy fallback, and the restore profiles here rely on them. The renamed nvidia.com/snapshot-multi-gpu annotation and the cuinterpose fixes are in 0.2.0. This branch is based on 7e282f0e, which is published as chart 0.0.0-g7e282f0e with matching images. The version wording needs settling before this merges.
  • e2e/snapshot_e2e/upgrade/scenarios.py sets RESTORE_PROXY_RELEASE = (0, 2), "the first release whose agent restores through the restore proxy", but the v0.2.0 tag does not have it.
  • docs/limitations.md still says path remapping does not "establish multi-GPU workload support", which now reads oddly.
  • There is no TensorRT-LLM DeepSeek V4.1 Flash recipe, so the matrix is 2 + 3 + 3.
  • The quickest recipe now needs a ReadWriteMany model cache PVC (2 TiB request), and SGLang's single-GPU recipe moves from its own 20Gi ReadWriteOnce claim to it. On a cluster whose policy provides a shared model cache, a private PVC named model-cache can be rejected (it was on the dev cluster used for testing), which fails step 4 of the guides index there.

🤖 Generated with Claude Code

The multi-GPU additions split the guides into parallel single-GPU and
eight-GPU paths from the first page, repeated prerequisites in several
guides, and left the restore stage without a concrete check. Restructure
so every recipe follows README -> guides index -> framework guide ->
checkpoint -> restore.

- Guides index: state the shared setup once (install, example files,
  namespace) and pick a recipe from one table that names each recipe's
  manifests and resources. Eight-GPU setup (single node, model cache,
  agent image) sits under the table.
- Framework guides: the same three steps for every engine (ConfigMap,
  model, deploy). The per-guide download blocks and the trailing
  Multi-GPU sections give way to callouts where an eight-GPU recipe
  differs.
- Checkpoint: Option 1 and Option 2 only. The multi-GPU pod shape moves
  to the workload contract.
- Restore: choose the profile, set the snapshot name, restore, and verify
  with a request. Fix the stale restore-deployment.yaml reference.
- Run every command from docs/guides so single-GPU and eight-GPU commands
  have the same shape.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
@ozbarshalom
ozbarshalom requested review from a team as code owners October 19, 2026 19:07
@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review: 1
  • main

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: ai-dynamo/snapshot/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Enterprise
  • Run ID: 3900aace-a5e4-409c-bf68-afad1d2c42db

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

ozbarshalom and others added 4 commits October 19, 2026 21:14
"Model cache" read like a Snapshot concept. It is an ordinary PVC that
some recipes mount for the model files, separate from the checkpoint
volume Snapshot installs. Say that where a recipe needs it, and stop
calling it a cache in the guide prose. Resource and file names are
unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
The model cache PVC was `snapshot-model-cache` in the eight-GPU recipes and
`sglang-model-cache` in the SGLang recipe, defined by two manifests, and the
prose described it in several ways. Use one name everywhere: a PVC named
`model-cache`, defined once in docs/guides/model-cache-pvc.yaml and described
in one "Model cache" section of the guides index that the framework guides
link to. This replaces the earlier "PVC for the model files" wording.

- SGLang's Qwen3 recipe now mounts the shared PVC, so it requests
  ReadWriteMany storage like the eight-GPU recipes instead of its own 20Gi
  ReadWriteOnce claim.
- e2e: SGLang uses the shared PVC manifest. The CI shared NFS claim now
  defaults to `shared-model-cache`, so a `model-cache` claim left behind by a
  run that downloaded through the guide cannot shadow it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
The eight recipes and their restore profiles had drifted apart in ways the GPU
count does not explain. Make them follow one scheme, so a 1 GPU and an 8 GPU run
differ only where the GPU count forces it.

- Every recipe reads its model from the model cache. The vLLM and TensorRT-LLM
  Qwen3 recipes gain the init container, offline env and PVC that the others
  already had.
- Names follow <framework>-<model>-source and -snapshot with hyphens only
  (deepseek-v4.1-flash becomes deepseek-v4-1-flash), and the restored
  Deployments are <framework>-1gpu-restored and -8gpu-restored.
- The restore profiles are 1-gpu.yaml and 8-gpu.yaml, and every one carries
  nvidia.com/restore-from: ${SNAPSHOT_NAME}, so no profile needs hand editing.
- Deployments use progressDeadlineSeconds 1800 (1 GPU) or 3600 (8 GPUs),
  SnapshotJobs activeDeadlineSeconds 3600 or 7200, and readiness probes
  failureThreshold 1800 or 3600. vLLM and SGLang had no deadline, and vLLM
  probed at 1200.
- The TensorRT-LLM SnapshotJobs set the same fsGroup as its Deployments and
  restore profiles.
- The benchmark engine drops the model cache plumbing from the vLLM pods it
  builds, because it sweeps models other than the one the recipe downloads and
  measures weights loaded from the container filesystem. The pods are otherwise
  unchanged apart from the renamed app label and the readiness threshold.
- e2e points every framework at the shared PVC manifest and the 1-gpu.yaml
  profile.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
Bring the guides in line with the uniform recipes and fill the gaps a first run
on a real cluster would hit.

- The guides index makes the model cache a setup step for every recipe, states
  the download sizes and the need to reach Hugging Face, and adds one naming
  pattern under the recipe table.
- The framework guides use the same steps for every recipe: the model appears in
  the init container and in the engine arguments, and both change together.
- Restore sets SNAPSHOT_NAME and renders the profile with envsubst for every
  recipe, so 1 GPU and 8 GPUs take identical steps.
- Add "Clean up and run again": the names are fixed, a SnapshotJob keeps its
  PodSnapshot, and a PodSnapshot of the same name makes the next SnapshotJob fail
  with PodSnapshotNameConflict.
- Add "If a step fails" and point each stage at the troubleshooting page.
- Create the namespace when it does not exist, and name the tools the guides use.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
@ozbarshalom ozbarshalom changed the title docs(guides): give the guides one flow from README to restore docs(guides): one flow from README to restore, one pattern for every recipe Oct 19, 2026
ozbarshalom and others added 13 commits October 20, 2026 00:59
Step 2 of the guides now says what the example files are and how to get them from the release/0.2 branch, and the four commands that filled in a name or the agent image use sed, which every Mac and Linux machine already has. The output is identical to the envsubst commands it replaces.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
…index

The index no longer has "Clean up and run again" and "If a step fails". restore.md drops its link to the clean-up section and keeps its pointer to the troubleshooting page.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
…n it

Nothing in the extra setup is specific to eight GPUs: it applies to any multi-GPU recipe, as the two-GPU runs on 0.2.0 showed. The section now says that, keeps the agent-image command and the first-run timing, and points to the workload contract for the why. Links to the old anchor are updated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
…ottom

Choose a recipe once, by setting three values, and every later command uses that choice: prepare the ConfigMap, checkpoint with a PodSnapshot or a SnapshotJob, restore and send a request. This replaces the separate selections in the stages and the vLLM-only examples they translated from. Adds a closing section for people who bring their own engine or image, and points links from the other pages at the new headings.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
SNAPSHOT_NAMESPACE read as the namespace Snapshot is installed in, which is a different one (snapshot). The guides use it for the namespace the replicas run in, so the variable is renamed and step 3 of the guides index says it is not the install namespace.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
…titles

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
…nce request

The guides no longer port-forward to the replica and send it a request. A restore is confirmed by the Deployment becoming Ready and by the pod's nvidia.com/Restored condition, in the guides index and in the restore page. The engine pages no longer say the restore page sends a request.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
… multi-GPU

Option A ran a sed over every recipe's source manifest, although only the multi-GPU manifests have a placeholder to fill in. A single-GPU recipe now applies its manifest as it is, and the agent-image substitution is a marked replacement command for multi-GPU recipes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
…ing through sed

The agent image (multi-GPU source manifests) and the checkpoint name (restore profiles) are placeholders in the manifests. The guides now say to open the manifest and replace the placeholder, show the exact line, and then apply the file as it is, in the guides index, the restore page and the three engine pages. No command in the guides rewrites text any more.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
The restore profiles keep the source command, which the restore proxy replaces. Snapshot 0.2.0 does not include the proxy, so the guides index now says so and points 0.2.0 readers to the guides on release/0.2. The clone is a plain clone of main.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
Removes the note at the top of the guides index. The plain clone of main stays.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
… redundant settings

Review feedback on the TensorRT-LLM single-GPU recipe. TRTLLM_MAX_NUM_TOKENS and TRTLLM_MAX_BATCH_SIZE repeated app.py's defaults (1024 and 1), so the manifests no longer set them. TRTLLM_FREE_GPU_MEMORY_FRACTION goes from 0.10 to 0.75, as in the GLM recipes, for a more realistic serving setup. Both manifests (the Deployment and the SnapshotJob) change together, and the guide says so.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
…TensorRT-LLM guide

The manifests still set the fraction to 0.75; the guide no longer explains it, and its text is back to what it was before the review fix.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
@galletas1712
galletas1712 merged commit 0d98e7c into schwinns/cuinterpose-recipes Oct 20, 2026
5 checks passed
danbar2 pushed a commit that referenced this pull request Oct 20, 2026
* feat(examples): document and exercise multi-GPU workloads

Add multi-GPU capture recipes for GLM 5.3 NVFP4 on vLLM, SGLang, and
TensorRT-LLM, and DeepSeek V4.1 Flash on vLLM and SGLang, with separate
Deployment and SnapshotJob capture manifests and per-GPU-count restore
profiles.

Keep the guides one flow. Each engine guide notes its multi-GPU
differences, the checkpoint guide shows single-GPU and multi-GPU capture
side by side, and restore differs only by profile. Use the
nvidia.com/snapshot-multi-gpu annotation. Restore profiles keep the
source's command for the restore proxy.

Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>

* docs(contract): list the KV-only release calls per engine

Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>

* docs(guides): drop the repeated driver prerequisite and explain the model cache

Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>

* docs: point both the workload and PageBroker at a newer libcuda.so

With a kernel-mode driver older than the 615 user-mode requirement, both
the workload and PageBroker load a 615 or newer libcuda.so through
LD_LIBRARY_PATH.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>

* docs(guides): one flow from README to restore, one pattern for every recipe (#656)

* docs(guides): give the guides one flow from README to restore

The multi-GPU additions split the guides into parallel single-GPU and
eight-GPU paths from the first page, repeated prerequisites in several
guides, and left the restore stage without a concrete check. Restructure
so every recipe follows README -> guides index -> framework guide ->
checkpoint -> restore.

- Guides index: state the shared setup once (install, example files,
  namespace) and pick a recipe from one table that names each recipe's
  manifests and resources. Eight-GPU setup (single node, model cache,
  agent image) sits under the table.
- Framework guides: the same three steps for every engine (ConfigMap,
  model, deploy). The per-guide download blocks and the trailing
  Multi-GPU sections give way to callouts where an eight-GPU recipe
  differs.
- Checkpoint: Option 1 and Option 2 only. The multi-GPU pod shape moves
  to the workload contract.
- Restore: choose the profile, set the snapshot name, restore, and verify
  with a request. Fix the stale restore-deployment.yaml reference.
- Run every command from docs/guides so single-GPU and eight-GPU commands
  have the same shape.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): describe the model volume as a plain PVC, not a cache

"Model cache" read like a Snapshot concept. It is an ordinary PVC that
some recipes mount for the model files, separate from the checkpoint
volume Snapshot installs. Say that where a recipe needs it, and stop
calling it a cache in the guide prose. Resource and file names are
unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): use one name for the model cache

The model cache PVC was `snapshot-model-cache` in the eight-GPU recipes and
`sglang-model-cache` in the SGLang recipe, defined by two manifests, and the
prose described it in several ways. Use one name everywhere: a PVC named
`model-cache`, defined once in docs/guides/model-cache-pvc.yaml and described
in one "Model cache" section of the guides index that the framework guides
link to. This replaces the earlier "PVC for the model files" wording.

- SGLang's Qwen3 recipe now mounts the shared PVC, so it requests
  ReadWriteMany storage like the eight-GPU recipes instead of its own 20Gi
  ReadWriteOnce claim.
- e2e: SGLang uses the shared PVC manifest. The CI shared NFS claim now
  defaults to `shared-model-cache`, so a `model-cache` claim left behind by a
  run that downloaded through the guide cannot shadow it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* feat(examples): make every recipe follow one pattern

The eight recipes and their restore profiles had drifted apart in ways the GPU
count does not explain. Make them follow one scheme, so a 1 GPU and an 8 GPU run
differ only where the GPU count forces it.

- Every recipe reads its model from the model cache. The vLLM and TensorRT-LLM
  Qwen3 recipes gain the init container, offline env and PVC that the others
  already had.
- Names follow <framework>-<model>-source and -snapshot with hyphens only
  (deepseek-v4.1-flash becomes deepseek-v4-1-flash), and the restored
  Deployments are <framework>-1gpu-restored and -8gpu-restored.
- The restore profiles are 1-gpu.yaml and 8-gpu.yaml, and every one carries
  nvidia.com/restore-from: ${SNAPSHOT_NAME}, so no profile needs hand editing.
- Deployments use progressDeadlineSeconds 1800 (1 GPU) or 3600 (8 GPUs),
  SnapshotJobs activeDeadlineSeconds 3600 or 7200, and readiness probes
  failureThreshold 1800 or 3600. vLLM and SGLang had no deadline, and vLLM
  probed at 1200.
- The TensorRT-LLM SnapshotJobs set the same fsGroup as its Deployments and
  restore profiles.
- The benchmark engine drops the model cache plumbing from the vLLM pods it
  builds, because it sweeps models other than the one the recipe downloads and
  measures weights loaded from the container filesystem. The pods are otherwise
  unchanged apart from the renamed app label and the readiness threshold.
- e2e points every framework at the shared PVC manifest and the 1-gpu.yaml
  profile.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): describe the uniform recipes, cleanup and failure pointers

Bring the guides in line with the uniform recipes and fill the gaps a first run
on a real cluster would hit.

- The guides index makes the model cache a setup step for every recipe, states
  the download sizes and the need to reach Hugging Face, and adds one naming
  pattern under the recipe table.
- The framework guides use the same steps for every recipe: the model appears in
  the init container and in the engine arguments, and both change together.
- Restore sets SNAPSHOT_NAME and renders the profile with envsubst for every
  recipe, so 1 GPU and 8 GPUs take identical steps.
- Add "Clean up and run again": the names are fixed, a SnapshotJob keeps its
  PodSnapshot, and a PodSnapshot of the same name makes the next SnapshotJob fail
  with PodSnapshotNameConflict.
- Add "If a step fails" and point each stage at the troubleshooting page.
- Create the namespace when it does not exist, and name the tools the guides use.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): download the example files without installing envsubst

Step 2 of the guides now says what the example files are and how to get them from the release/0.2 branch, and the four commands that filled in a name or the agent image use sed, which every Mac and Linux machine already has. The output is identical to the envsubst commands it replaces.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): drop the clean-up and failure sections from the guides index

The index no longer has "Clean up and run again" and "If a step fails". restore.md drops its link to the clean-up section and keeps its pointer to the troubleshooting page.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): call the eight-GPU section Multi-GPU recipes and shorten it

Nothing in the extra setup is specific to eight GPUs: it applies to any multi-GPU recipe, as the two-GPU runs on 0.2.0 showed. The section now says that, keeps the agent-image command and the first-run timing, and points to the workload contract for the why. Links to the old anchor are updated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): turn the guides index into one flow you follow top to bottom

Choose a recipe once, by setting three values, and every later command uses that choice: prepare the ConfigMap, checkpoint with a PodSnapshot or a SnapshotJob, restore and send a request. This replaces the separate selections in the stages and the vLLM-only examples they translated from. Adds a closing section for people who bring their own engine or image, and points links from the other pages at the new headings.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): call the workload namespace WORKLOAD_NAMESPACE

SNAPSHOT_NAMESPACE read as the namespace Snapshot is installed in, which is a different one (snapshot). The guides use it for the namespace the replicas run in, so the variable is renamed and step 3 of the guides index says it is not the install namespace.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): show the recipe table's variable names as plain column titles

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): confirm a restore by its condition instead of an inference request

The guides no longer port-forward to the replica and send it a request. A restore is confirmed by the Deployment becoming Ready and by the pod's nvidia.com/Restored condition, in the guides index and in the restore page. The engine pages no longer say the restore page sends a request.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): apply the source manifest directly unless the recipe is multi-GPU

Option A ran a sed over every recipe's source manifest, although only the multi-GPU manifests have a placeholder to fill in. A single-GPU recipe now applies its manifest as it is, and the agent-image substitution is a marked replacement command for multi-GPU recipes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): tell readers which manifest line to edit instead of piping through sed

The agent image (multi-GPU source manifests) and the checkpoint name (restore profiles) are placeholders in the manifests. The guides now say to open the manifest and replace the placeholder, show the exact line, and then apply the file as it is, in the guides index, the restore page and the three engine pages. No command in the guides rewrites text any more.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): say these guides need a build newer than 0.2.0

The restore profiles keep the source command, which the restore proxy replaces. Snapshot 0.2.0 does not include the proxy, so the guides index now says so and points 0.2.0 readers to the guides on release/0.2. The clone is a plain clone of main.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): drop the note about building newer than 0.2.0

Removes the note at the top of the guides index. The plain clone of main stays.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): raise the TensorRT-LLM Qwen3 KV-cache fraction and drop redundant settings

Review feedback on the TensorRT-LLM single-GPU recipe. TRTLLM_MAX_NUM_TOKENS and TRTLLM_MAX_BATCH_SIZE repeated app.py's defaults (1024 and 1), so the manifests no longer set them. TRTLLM_FREE_GPU_MEMORY_FRACTION goes from 0.10 to 0.75, as in the GLM recipes, for a more realistic serving setup. Both manifests (the Deployment and the SnapshotJob) change together, and the guide says so.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

* docs(guides): drop the sentence about the KV-cache fraction from the TensorRT-LLM guide

The manifests still set the fraction to 0.75; the guide no longer explains it, and its text is back to what it was before the review fix.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>

---------

Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>
Signed-off-by: Oz Bar Shalom <oz.barshalom@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Oz Bar Shalom <oz.barshalom@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants