docs: document CUDA CustomStorage configuration - #120
Conversation
Signed-off-by: Hannah Zhang <hannahz@nvidia.com>
|
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 configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Enterprise Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
| - The [Helm](https://helm.sh/docs/intro/install) CLI | ||
| - A cluster that permits privileged pods for the node agent — see [Security](docs/operations/security.md) | ||
|
|
||
| The default CUDA checkpoint path works with the general driver prerequisite above. Enabling [CUDA CustomStorage](docs/guides/custom-storage.md) additionally requires a driver that exports the CUDA 13.4 CustomStorage API; CUDA 13.x compatibility alone is not a capability check. |
There was a problem hiding this comment.
https://docs.nvidia.com/cuda/developer-preview/13.4/cuda-toolkit-release-notes/index.html#driver-compatibility which CUDA drivers supports CUDA 13.4?
There was a problem hiding this comment.
The CustomStorage path is an explicit opt-in using the CUDA 13.4 Developer Preview API, while the default remains the existing driver-managed path. The guide calls this out
There was a problem hiding this comment.
The helper checks cuCheckpointOperationComplete at runtime and rejects posix before mutating the workload when it isn’t available
There was a problem hiding this comment.
Which CUDA driver supports CUDA 13.4? I believe there is a support matrix of GPU operator + CUDA driver + CUDA version
The missing piece for me is which CUDA driver does customers needs to install
| | `seccomp.deploy` | Deploy the CRIU seccomp profile ConfigMap and init container. Use this field name; `seccomp.enabled` is not a chart value | `true` | | ||
| | `runtime.type` | CRI backend: `containerd` or `crio` | `containerd` | | ||
| | `runtime.socketPath` | CRI socket (empty = default for `runtime.type`) | `""` | | ||
| | `config.cudaCheckpoint.storageMode` | Storage policy for newly created CUDA checkpoints: `legacy` or `posix` | `legacy` | |
There was a problem hiding this comment.
move config.cudaCheckpoint -> storage.gpu.engine
storageMode -> backend [criu | nixl ] later we will also have
There was a problem hiding this comment.
They are not interchangeable backend values imo -- CRIU is the process checkpoint engine, while NIXL POSIX is the CUDA artifact transfer backend.
There was a problem hiding this comment.
I’m open to reorganizing the config hierarchy, but the accurate values would be closer to driver-managed | nixl-posix, not criu | nixl. Changing it would also require updating #96 rather than only renaming it in the docs
There was a problem hiding this comment.
I do want to change the hierarchy, of course not only in the docs but that's my reference as PM for these interface changes.
regarding values: @dfeigin-nv WDYT?
| | `config.cudaCheckpoint.storageMode` | Storage policy for newly created CUDA checkpoints: `legacy` or `posix` | `legacy` | | ||
| | `config.cudaCheckpoint.transferBufferCount` | Pinned transfer slots per active CUDA device | `4` | | ||
| | `config.cudaCheckpoint.transferChunkBytes` | Bytes per pinned transfer slot | `67108864` | | ||
| | `config.cudaCheckpoint.daemon.maxOperationSeconds` | Cooperative watchdog for one CUDA helper operation | `3600` | |
There was a problem hiding this comment.
I think "Cooperative watchdog for one CUDA helper operation" is unclear from a user perspective and also I don't get it.
There was a problem hiding this comment.
It's the maximum time allowed for one CUDA checkpoint or restore helper request
| ```yaml | ||
| config: | ||
| cudaCheckpoint: | ||
| storageMode: posix |
There was a problem hiding this comment.
I'm not sure the full example is required here only to enable NIXL
There was a problem hiding this comment.
I included the transfer and resource values to show the operational defaults but I can reduce this to the minimal setting so it's not as scary/complicated-looking
There was a problem hiding this comment.
Updated so that the enablement example now contains only the required storageMode: posix setting. The tuning and resource options remain in the reference table.
| | `config.cudaCheckpoint.transferChunkBytes` | Bytes in each pinned transfer slot | `67108864` (64 MiB) | 1-256 MiB, 4096-byte aligned | | ||
| | `config.cudaCheckpoint.daemon.maxOperationSeconds` | Cooperative transfer watchdog for one helper operation | `3600` | `1`-`3600` | | ||
| | `config.cudaCheckpoint.daemon.resources` | CPU and memory requests and limits for the helper container | See the example above | Kubernetes resource values | | ||
| | `config.restore.restoreTimeoutSeconds` | Overall restore budget in the Snapshot agent | `8100` | Positive integer | |
There was a problem hiding this comment.
why is it in the custom storage guide?
| @@ -0,0 +1,156 @@ | |||
| # Use CUDA CustomStorage | |||
There was a problem hiding this comment.
custom storage engine
|
|
||
| The Snapshot agent image may be built against CUDA 13.0 headers because the helper dynamically resolves the public CUDA 13.4 entry point. The node driver, not the image's toolkit version, determines whether CustomStorage is available at runtime. | ||
|
|
||
| ## Enable CustomStorage |
There was a problem hiding this comment.
Customers don't "enable custom storage" they can modify the IO engine to use NIXL instead of CRIU.
There was a problem hiding this comment.
I think this is the same layer distinction as one of the above comments. NIXL does not replace CRIU here — CRIU still captures and restores the process state. Selecting posix changes the CUDA path from driver-managed checkpoint storage to the CUDA 13.4 CustomStorage API, with NIXL POSIX moving the resulting extents.
There was a problem hiding this comment.
From a user perspective, customStorage is another storage rather than the existing supported storage which is local PVC. This is not the case. I do understand that for the CUDA C/R it's a custom storage backend / engine but we should slightly abstract it from Snapshot users. (naming wise)
@dfeigin-nv WDYT?
There was a problem hiding this comment.
I think the naming should be something clearer than custom storage. Custom Storage is more of an implementation detail for us, not something the user should actively choose
There was a problem hiding this comment.
only after criu finishes the IO does the driver-managed checkpoint storage start, so legacy | criu are both correct. What is most clear to the user should be used.
Signed-off-by: Hannah Zhang <hannahz@nvidia.com>
Summary
Adds documentation for configuring and validating Snapshot's opt-in CUDA CustomStorage path (the behavior implemented in #109 + #96). The guide is linked from the main README, chart documentation, storage documentation, troubleshooting, and the guide index.
Review focus
Whether the CUDA capability requirements, Helm values, artifact compatibility, and current limitations are clear and accurate for someone enabling this for the first time.
Validation
posixconfiguration.git diff --checkpasses.