Repository navigation
docs(guides): one flow from README to restore, one pattern for every recipe - #656
Merged
galletas1712 merged 18 commits intoOct 20, 2026
Merged
Conversation
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>
Contributor
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. 🗂️ Base branches to auto review: 1
Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
"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>
3 of 4 tasks
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
approved these changes
Oct 20, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
FRAMEWORK,MODELandGPUSfrom 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 APodSnapshotor Option BSnapshotJob), restore, and confirm the restore by the pod'snvidia.com/Restoredcondition. A closing section points people with their own engine or image to the workload contract.envsubstorsed.WORKLOAD_NAMESPACEnames the namespace the replicas run in, which is not the namespace Snapshot is installed in.One scheme for every recipe
model-cachedefined once indocs/guides/model-cache-pvc.yaml. The vLLM and TensorRT-LLM Qwen3 recipes gain the init container, offline env and PVC the others already had.<framework>-<model>-sourceand-snapshot, hyphens only (deepseek-v4.1-flashis nowdeepseek-v4-1-flash), and<framework>-1gpu-restoredand-8gpu-restored.1-gpu.yamland8-gpu.yaml, and all carrynvidia.com/restore-from: ${SNAPSHOT_NAME}. No profile needs hand editing.SnapshotJob3600 or 7200, readiness threshold 1800 or 3600. vLLM and SGLang had no Deployment deadline, and vLLM probed at 1200.SnapshotJobs set the samefsGroupas 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
applabel 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.1-gpu.yaml. The CI shared NFS claim now defaults toshared-model-cache, so amodel-cacheclaim from a guide-download run cannot shadow it.SNAPSHOT_E2E_MODEL_CACHE_*and the benchmarkmodelCacheModekey 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:PodSnapshot, then restore withrestore/1-gpu.yaml. PID 1 in the restored container was/snapshot-control/snapshot-restore-proxy, the pod reportednvidia.com/Restored=True, and the replica answered a/generaterequest.nvidia.com/snapshot-multi-gpuannotation, thesnapshot-cuda-installinit container and the launcher), through aSnapshotJob, 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 namedozbarshalom-<engine>-app, because the namespace already held incompatible ones.PodSnapshot). Pass: the checkpoint became Ready, PID 1 in the restored container was/snapshot-control/snapshot-restore-proxy, andnvidia.com/RestoredwasTrue.SnapshotJob), including the multi-GPU step that reads the agent image. Pass, with the same proxy PID 1 andRestored=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 theSnapshotJob.TRTLLM_MAX_NUM_TOKENSandTRTLLM_MAX_BATCH_SIZE(they repeatedapp.py's defaults) and raisesTRTLLM_FREE_GPU_MEMORY_FRACTIONfrom0.10to0.75, as in the GLM recipes: both Option A and Option B pass, with the restore proxy as PID 1 andRestored=True.Also checked:
SnapshotJobrecipes and the guide'sPodSnapshotvalidate against the chart's CRDs.Not run:
kubectlrun of 16 flows no longer applies, because the commands changed;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
nvidia.com/snapshot-multi-gpuannotation and the cuinterpose fixes are in 0.2.0. This branch is based on7e282f0e, which is published as chart0.0.0-g7e282f0ewith matching images. The version wording needs settling before this merges.e2e/snapshot_e2e/upgrade/scenarios.pysetsRESTORE_PROXY_RELEASE = (0, 2), "the first release whose agent restores through the restore proxy", but thev0.2.0tag does not have it.docs/limitations.mdstill says path remapping does not "establish multi-GPU workload support", which now reads oddly.ReadWriteManymodel cache PVC (2 TiB request), and SGLang's single-GPU recipe moves from its own 20GiReadWriteOnceclaim to it. On a cluster whose policy provides a shared model cache, a private PVC namedmodel-cachecan be rejected (it was on the dev cluster used for testing), which fails step 4 of the guides index there.🤖 Generated with Claude Code