Skip to main content
Volumes are in beta for Hosted RL and Hosted SFT.
A volume is named cloud storage for your training data and results. Upload datasets and models to it, use it in training runs, and download the checkpoints each run saves there. A volume belongs to your team (or to you, with no team selected) and isn’t tied to any cluster.
Legacy staging is being retired; volumes work the same on every cluster.

What you can do with and without a cluster allocation

On-demand training is in beta and needs beta access for your account or team. On demand, a volume works only on GPU types whose clusters support shared storage. On any other GPU type, the run is refused with a message that names the type. Pick another GPU type with --gpu-type, or run without --volume. Shells need a cluster allocation for your account or team, or a cluster your team owns. On-demand capacity alone doesn’t include SSH. Personal accounts can’t own clusters, so they need an allocation. Ask Prime support if you need one.

Quickstart

Install and log in to Prime CLI 0.11.0 or later. Volumes use the team set in your CLI (prime config set-team-id <team-id>). With no team set, they belong to your personal account.
1

Create a volume

2

Upload a dataset

This creates datasets/my-data on the volume. Training runs see it at /volume/datasets/my-data.
3

Optional: open a shell on the volume

Needs a cluster allocation or a cluster your team owns and an SSH key.
After editing, exit the shell, run prime volumes stop research <session-id>, and wait for the final sync. Exiting alone leaves the session open and blocks training on the volume.
4

Train with the volume

Add a checkpoint configuration to save weights, then:
5

Download your checkpoints

Wait for the run to end and its volume sync to finish, then:
6

Delete the volume when you're done

Things to know

  • Each run writes checkpoints under runs/<runId>/checkpoints/. Previous runs are visible in the next run or shell at /volume/runs/. Direct put uploads to runs/ are refused.
  • A volume has one writer at a time: a training run, a read-write shell, or an upload. Wait for that writer to finish syncing before starting another. Read-only shells can coexist with a writer, but see the last saved copy.
  • Changes made by a run or shell reach cloud storage when it ends. There is no periodic sync. Downloads during a run can return the previous saved contents.
  • Each run gets a disk the size of your volume. It must fit the whole volume, including earlier runs, plus new checkpoints. See Choose a size.

Create a volume

Names use 1 to 40 lowercase letters, digits, and hyphens, and start and end with a letter or digit. The default size is 5Ti, and the maximum is 20Ti.
The volume is ready as soon as the command returns. If you have a cluster allocation (or your team owns a cluster) and an SSH key, create also starts a read-only shell session in the background. That session stops after 30 minutes of no use. Pass --no-warm to skip it. List your volumes:
Add -o json for JSON output.

Upload data

put uploads a file or folder. Paths on the volume start at its root:
  • A trailing / on the volume path means “into this folder”.
  • A trailing / on a local folder copies what’s inside it, not the folder itself.
  • Volume paths can use letters, digits, and ._-@%+=,:. For other names, use a shell.
  • Symlinks inside a folder are skipped.
  • You can’t upload to runs/.
Uploads go straight to cloud storage, so they don’t need a cluster allocation or an SSH key. While an upload runs, nobody can start another writer or delete the volume. A training run or someone else’s read-write shell blocks uploads until it finishes syncing. If you have your own read-write shell open, put can upload through it instead; those changes reach cloud storage when you end the session.

Download data

The local destination defaults to the current folder. Direct downloads read the saved copy in cloud storage. Wait for a run or read-write shell to finish syncing to retrieve its latest changes. get can read ordinary files through your own read-write shell, but downloads under runs/ always use cloud storage.

Open a shell on your volume

A shell is handy for downloading data on the cluster’s fast network (for example, with hf download), or for looking around and editing files. It needs a cluster allocation or a cluster your team owns and an SSH key.
When the session starts, the whole volume is copied to the machine, including runs/, and you find it at /volume. A large volume takes a while to copy. The session becomes ready after the download completes.
  • Read-write: changes are saved back when the session ends. Files you delete in the shell are deleted from cloud storage too. A training run or another read-write shell holds the writer lock until its final sync completes.
  • Read-only: nothing is saved back. These sessions can coexist with a writer, subject to the session limit. They read the saved contents from when the session started.
Exiting the shell doesn’t end the session. It ends after 30 minutes with no connection, or after 24 hours. To end it now:
Only you can connect to or stop your sessions, even on a team volume. Wait for the final sync after stopping a read-write session before downloading its changes or launching a training run on the same volume.

Set up your SSH key

Shells accept one key: your account’s primary SSH key. The CLI must point at the matching private key.
1

Get a key pair

Use an existing pair, or create one:
2

Add the public key to your account

Open Dashboard → Tokens → SSH Keys and paste the contents of ~/.ssh/id_ed25519.pub. A new key becomes your primary key. To switch later, click Set Primary on another key.
3

Point the CLI at the private key

The default is ~/.ssh/id_rsa. prime volumes ssh prints Using SSH key: <path> before it connects.
If you never added a key, you can use the key pair under System generated keys on the same page: download the private key, run chmod 600 on it, and point prime config set-ssh-key-path at it. Once you add your own key, the system-generated key stops working for shells.

Use a volume in a training run

Pass --volume to a Hosted RL or Hosted SFT run:
Or set volume = "research" at the top of the TOML, before any tables. If the volume doesn’t exist, the CLI creates it. Use --volume-size to choose its size. When the run starts, the whole volume is downloaded and mounted read-write at /volume. For example, a Hosted SFT data.name = "datasets/my-data" reads /volume/datasets/my-data. Earlier outputs are available under /volume/runs/. The run’s changes are saved to cloud storage when it ends, after the training pods stop. The final sync runs when the run completes, stops, fails, or pauses, so checkpoints survive prime train stop and crashes. End any read-write shell and wait for its final sync before launching the run. A training run holds the volume’s writer lock until its own sync completes.

Train from weights already on the volume

Both Hosted SFT and RL runs can load Hugging Face-format model weights from an absolute /volume/... path. Set [model].name in a Hosted SFT config, or set the shared [model].name in an RL config with [trainer] and [orchestrator] blocks:
Attach the volume when launching:
The directory must contain the model configuration, weights, and tokenizer assets. It does not need an entry in the cluster model cache. A sharded training checkpoint is a different format; export it to Hugging Face format before using it as a model directory. See Volume-hosted models for config examples and path rules.

Checkpoint settings

Checkpointing is off unless you add [ckpt]. An empty [ckpt] block saves the final checkpoint; set interval to save during training too:
If you set only keep_interval, the final checkpoint can be pruned when its step is not a multiple of that interval. Set keep_last to at least 1 to keep the final checkpoint too.
Neither keep_interval nor keep_last is required. All files on /volume are synced when the run ends. RL runs write checkpoints, logs, and other run outputs there. Hosted runs currently do not save the resolved config needed for checkpoint conversion. Hosted SFT writes checkpoints there; its other outputs remain on the run’s scratch disk.

Get your checkpoints back

Each run saves its checkpoints to runs/<runId>/checkpoints/step_<N>/:
Wait for the final volume sync before downloading a new run’s outputs. Complete trainer checkpoints contain trainer/.metadata. To load checkpoints outside Prime, convert them first: see Export to HF format.

Choose a size

Each run gets a disk the size of your volume. It must fit:
  • all existing files, including datasets, models, and earlier runs/ outputs, plus
  • keep_last + 1 checkpoints (the run writes a new one before it deletes the oldest), plus
  • about 20% extra.
The keep_last + 1 estimate assumes keep_last is set and keep_interval is unset. If you also preserve checkpoints with keep_interval, include those extra checkpoints. Without retention limits, size for every checkpoint the run saves. A full fine-tuning checkpoint is about 11–12 bytes per parameter (measured: ~341 GB for a 30B save, ~7.2 GB for a 0.6B save): For example, Qwen3-30B-A3B with keep_last = 2 holds up to 3 checkpoints, about 1 TB. With 20% extra and your datasets, use 1.5Ti. On 200Gi, even the first checkpoint doesn’t fit. ckpt.skip_optimizer = true doesn’t make checkpoints smaller. For the full sizing formula, the peak checkpoint count, and how to fix a run that fails with Disk quota exceeded, see Volume capacity.
Deleting saved files or checkpoints inside a read-write shell removes them from cloud storage when the session ends. Check what you need to keep before removing earlier runs to free space.

Check disk usage

prime volumes du (CLI 0.13.0 or later) shows how much of the volume’s saved contents is in use. It reads cloud storage, so a live run’s or session’s changes appear only after it ends and syncs.

Make a volume bigger

Volumes can grow up to 20Ti but can’t shrink. Runs and shells already going keep their old size. New ones get the new size.

Delete a volume

Deleting a volume deletes everything on it, including every run’s checkpoints.
Add --yes to skip the confirmation. Only team admins can delete team volumes. You can’t delete a volume while a run uses it, a shell is open on it, or an upload is running. Stop the run (prime train stop <runId>) or the shell (prime volumes stop), then try again. If the status shows DELETE FAILED, run prime volumes delete again.

Troubleshooting