Skip to main content

Rob Pankow Rob Pankow

AI Training Checkpoint and Model Registry Storage on Kubernetes

Jul 20, 2026  |  10 min read

AI Training Checkpoint and Model Registry Storage on Kubernetes

The AI inference storage guide covers what happens when a serving pod reads a model from storage. Training is the mirror problem: instead of reading a static weight file once, a training job writes a new, multi-gigabyte checkpoint every few minutes for days or weeks, and every one of those writes competes directly with the GPU compute loop for I/O bandwidth. Most Kubernetes clusters running training jobs have not designed for this. The checkpoint lands wherever the default StorageClass points, and the model registry that tracks which checkpoint is production-ready is often a folder convention in an object-storage bucket rather than a versioned system with rollback.

Both problems are storage architecture problems, not training-framework problems. This post covers why checkpoint writes stall training loops on the wrong backend, why model registries need snapshot-based versioning instead of ad hoc object copies, and how disaggregated NVMe/TCP storage addresses both without adding operational overhead to the training pipeline.

Why Training Checkpoints Are a Different Storage Problem Than Inference

A training job checkpoints for one reason: recovery. If a node fails, a spot instance is reclaimed, or a job needs to resume after a scheduled maintenance window, the checkpoint is the only thing standing between losing a few minutes of GPU-hours and losing the entire run. That recovery guarantee only holds if the checkpoint write itself does not become the failure mode.

Checkpoint writes have three characteristics that make them a distinct storage workload from both inference reads and typical database writes:

They are large and bursty. A checkpoint for a mid-size model (optimizer state plus weights) commonly runs into tens of gigabytes, and for large models it reaches hundreds of gigabytes. The write happens in a short burst, not a steady stream, because the training loop pauses (or a background thread races) to flush the full state at a fixed step interval.

They compete directly with GPU compute time. Unlike a background log write, a synchronous checkpoint blocks the training step until the write completes, or it consumes host CPU and memory bandwidth to serialize state to a background writer thread. Either way, slow storage during a checkpoint write turns directly into idle GPU-hours, which is the most expensive resource in the entire pipeline.

They accumulate and need lifecycle management. A long training run produces dozens or hundreds of checkpoints. Most are never needed again, but the last few and any flagged as “best so far” by a validation metric must be retained, and none of this should require the training script itself to manage retention.

The persistent volume backing a training job’s checkpoint directory therefore needs to sustain large sequential write throughput without blocking, tolerate node rescheduling without losing recent checkpoints, and support fast, cheap point-in-time capture for retention.

The Checkpoint Write Bottleneck: Storage Approach Comparison

The table below compares how common Kubernetes storage backends handle a representative 40 GB checkpoint write for a mid-size model, at the step interval where it matters most: the moment a node is about to fail or a spot instance is about to be reclaimed.

Storage approach40 GB checkpoint write timeGPU idle time during writeNode-failure recoveryRetention / rollback
Object storage (S3-compatible)3-8 min, not block-optimized for large sequential writesFull duration if write is synchronousNew pod re-uploads or resumes from last completed objectManual lifecycle rules, no atomic point-in-time capture
Node-local NVMe (hyperconverged)Fast if the node stays healthyMinimal on the healthy pathCheckpoint is lost if the node fails before it is copied off-nodeNo native snapshot; requires a separate copy job
Legacy SAN / iSCSI1-3 min, block-based but latency-bound at scaleModerate, scales poorly with concurrent training jobsPVC-backed, portable, but rebuild windows grow with cluster sizeArray-level snapshot, often licensed separately per feature
Disaggregated NVMe/TCP (simplyblock)Seconds to low tens of seconds at fabric speedNear zero, write is off the critical pathPVC reattaches on any node in secondsNative CSI snapshot, near-instant, no data movement

Table 1: Storage approach impact on training checkpoint write time, GPU idle time, and recovery behavior for a 40 GB checkpoint.

The node-failure column is the one most training pipelines underweight until it happens in production. Node-local storage makes the checkpoint only as durable as the node it is written on: if that node is the one that fails, the checkpoint the job needed most is gone with it. A disaggregated storage architecture separates the checkpoint’s durability from any single compute node, so a replacement pod on a different GPU node attaches the same persistent volume claim and resumes from the last completed checkpoint in seconds.

A stalled checkpoint write is idle GPU-hours, not a storage inconvenience. Talk to a storage architect about sizing a disaggregated NVMe/TCP cluster for your training and fine-tuning pipelines. Talk to a storage architect

Model Registries Need Versioned Rollback, Not Object-Storage Folders

Once a training run produces a checkpoint worth keeping, it needs to enter a model registry: a system that tracks which model version is deployed, which is staged for validation, and which was the last known-good version before a regression. In practice, many Kubernetes-based ML pipelines implement this as a naming convention inside an object-storage bucket (model-v12/, model-v13-candidate/) with no atomic versioning, no built-in rollback, and no guarantee that a “version” is internally consistent if the upload was interrupted.

That approach works until a bad fine-tune reaches production and the team needs to roll back immediately. Rolling back an object-storage convention means re-pointing the serving layer at a different prefix and hoping the previous prefix’s contents are still complete and untouched. Rolling back a PVC backed by CSI snapshots means restoring a specific, point-in-time, atomic capture of the volume: the same mechanism covered in the CSI snapshot architecture guide, applied to model artifacts instead of database volumes.

A registry built on snapshot-capable block storage gets three properties that a folder convention cannot guarantee:

Atomicity. A VolumeSnapshot captures the volume at a single point in time. There is no partial-upload state to worry about, because the snapshot either exists as a consistent capture or it does not exist yet.

Cheap versioning. A zero-copy clone or snapshot does not duplicate the full model data on disk. Keeping ten versions of a 200 GB model registry does not cost ten times the storage, which matters directly for a pricing model based on usable capacity.

Fast rollback. Restoring a previous model version is a volume-level operation measured in seconds, not a re-copy of gigabytes of object data across a network path built for infrequent, cold reads.

How training checkpoint writes and model registry versioning both resolve to CSI-snapshot-backed disaggregated NVMe/TCP storage
Figure 1: The checkpoint write bottleneck and object-storage registry sprawl (left), the disaggregated NVMe/TCP and CSI snapshot layer that resolves both (center), and the fast-recovery, versioned-rollback outcome (right).

How Disaggregated NVMe/TCP and CSI Snapshots Cover the Full Training Pipeline

Checkpointing and model registry storage look like separate problems, but they resolve to the same underlying requirement: a storage layer that decouples data durability from any single compute node and makes point-in-time capture cheap enough to use constantly rather than sparingly.

Disaggregated NVMe/TCP storage runs the storage layer on dedicated nodes, separate from the GPU nodes running training jobs. This has two direct effects on the checkpoint-and-registry pipeline:

Checkpoint writes do not compete with GPU host resources. Because no storage agent runs on the GPU node, checkpoint I/O does not consume CPU cycles or host memory that the training framework needs for data loading and gradient computation. The storage cluster absorbs the write burst independently, at fabric speed over the NVMe/TCP network.

Every checkpoint can be a snapshot boundary. Because a volume snapshot on a disaggregated NVMe/TCP backend is a fast, storage-side operation rather than a full data copy, taking a snapshot after every N checkpoints, or after every checkpoint flagged by a validation metric, adds negligible overhead. This turns the checkpoint directory itself into the model registry’s version history, rather than requiring a separate promotion pipeline to copy data into a registry bucket.

For teams already running the CSI snapshot architecture pattern for database workloads, extending the same VolumeSnapshotClass design to training checkpoint volumes is a configuration change, not a new system. A dedicated VolumeSnapshotClass with a shorter retention window handles frequent intermediate checkpoints, while a second class with deletionPolicy: Retain protects the small number of checkpoints promoted to the model registry.

Simplyblock licenses per usable storage TB per year with no per-core fee, which matters directly for checkpoint and registry storage: retaining more checkpoint history and more model versions is a capacity decision, not a per-GPU or per-node licensing decision. A team that doubles its training fleet does not pay more for storage unless the amount of checkpoint and model data actually stored grows. For the read-side half of this pipeline, the AI inference storage guide covers how the same disaggregated architecture removes cold-start delay once a model from the registry reaches a serving pod, and the scale-out AI storage guide covers sizing a cluster across both training and inference workloads.

Questions and Answers

What is a training checkpoint in a Kubernetes AI pipeline? A training checkpoint is a periodic, full capture of a model’s weights and optimizer state, written to persistent storage so a training job can resume after a node failure, spot-instance reclaim, or planned interruption without restarting from step zero. For large models this checkpoint can be tens to hundreds of gigabytes, and the write typically happens as a burst at a fixed step interval rather than as continuous I/O.

Why do training checkpoints stall the training loop on standard Kubernetes storage? A checkpoint write of tens of gigabytes competes directly with GPU compute for I/O bandwidth and, if synchronous, blocks the next training step until the write completes. On object storage or node-local disk without a dedicated fast path, this write can take several minutes, turning directly into idle GPU-hours. Disaggregated NVMe/TCP storage absorbs the write at fabric speed on dedicated storage nodes, keeping the write off the GPU node’s critical path.

What is a model registry, and why does it need snapshot-based versioning instead of object-storage folders? A model registry tracks which trained model version is deployed, staged, or retained as a rollback target. An object-storage folder convention has no atomic versioning and no built-in rollback: a bad promotion means manually re-pointing to a different prefix and trusting that its contents are complete. A registry backed by CSI volume snapshots gets atomic, point-in-time versions and can roll back to a previous model version in seconds instead of re-copying gigabytes of object data.

How does simplyblock handle checkpoint storage and model registry rollback together? Simplyblock exposes checkpoint volumes as standard Kubernetes PVCs over NVMe/TCP, so checkpoint writes land on dedicated storage nodes rather than competing with GPU host resources. Because simplyblock’s CSI driver supports fast, storage-side snapshots, each promoted checkpoint can become a VolumeSnapshot used as the model registry’s version history, with rollback handled as a volume-level restore rather than a data re-copy.

What storage sizing should I use for a training and model registry pipeline on Kubernetes? Start with the checkpoint size for your largest model (weights plus optimizer state, which is commonly 3-4x the weight size alone for adaptive optimizers), multiply by the number of checkpoints retained per run, and add the model registry’s retained version count. Because snapshots on a disaggregated NVMe/TCP backend do not duplicate unchanged data, retaining more checkpoint history costs closer to the incremental change size than to the full checkpoint size per version. Simplyblock’s pricing is per usable TB per year with no per-core fee, so cost scales with the checkpoint and registry data actually stored rather than with the size of the training fleet.

You may also like:

NVMe/TCP vs NVMe/RoCE for Kubernetes Storage: Choosing the Right Fabric
NVMe/TCP vs NVMe/RoCE for Kubernetes Storage: Choosing the Right Fabric

NVMe over Fabrics gives Kubernetes clusters low-latency block storage over the network. The transport you pick, TCP or RoCE, determines your latency floor, infrastructure cost, and operational complexity. Here is how to choose.

We Break Our Storage So You Never Have To
We Break Our Storage So You Never Have To

Simplyblock runs 100+ hours of automated chaos engineering before every release: real NVMe hardware, real FIO workloads, four failure types injected under live load. This is what we test, why it is necessary, and what it means for your infrastructure.

NVMe Storage Cost Optimization in 2026: Erasure Coding, Thin Provisioning, and Compute Efficiency
NVMe Storage Cost Optimization in 2026: Erasure Coding, Thin Provisioning, and Compute Efficiency

NVMe drives deliver the performance Kubernetes stateful workloads need, but triple replication and thick provisioning multiply their cost fast. Here is a practical breakdown of erasure coding economics, thin provisioning, and how sub-millisecond latency reduces compute waste.