Volumes are in beta for Hosted RL and Hosted SFT.
Legacy staging is being retired; volumes work the same on every cluster.
What you can do with and without a team-owned cluster
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 your team owns. On-demand capacity doesn’t include SSH. Personal accounts can’t own clusters, so they can’t open shells; use put and get instead.
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
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 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/. Directputuploads toruns/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.
- You pay for the data stored on your volumes, not their size. See Pricing.
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 is5Ti, and the maximum is 20Ti.
A volume’s size caps how much it can hold. It doesn’t set what you pay: you’re billed for the data stored. See Pricing.
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:
-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/.
put can upload through it instead; those changes reach cloud storage when you end the session.
Download data
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, withhf download), or for looking around and editing files. It needs a cluster your team owns and an SSH key.
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.
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
~/.ssh/id_rsa. prime volumes ssh prints Using SSH key: <path> before it connects.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, Hosted SFT or Hosted Pretraining run:
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:
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, SFT and pretraining runs write their checkpoints, logs, and other run outputs there, under runs/<runId>/. Hosted runs currently do not save the resolved config needed for checkpoint conversion.Get your checkpoints back
Each run saves its checkpoints toruns/<runId>/checkpoints/step_<N>/:
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 + 1checkpoints (the run writes a new one before it deletes the oldest), plus- about 20% extra.
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 1536Gi (1.5 TiB). 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.
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
20Ti but can’t shrink. Runs and shells already going keep their old size. New ones get the new size.
Expanding doesn’t change what you pay, because billing follows the data stored. It runs the same wallet checks as creating a volume.
Pricing
Volume storage costs $0.09 per GiB per month ($0.000125 per GiB per hour, with a month counted as 30 days), charged on the data stored.- You pay for stored data, not volume size. A
5Tivolume holding 100 GiB is billed for 100 GiB. An empty volume costs nothing, and expanding one doesn’t change the price. - Billed hourly across all your volumes. Each hour is charged on the data stored in every volume your team (or personal account) owns. Charges appear about two hours after the hour they cover.
- Only saved data counts. Billing follows the saved copy in cloud storage, the contents
prime volumes dureports. A run’s or shell’s changes count once they sync. - Deleting data lowers the charge. Delete files or volumes you no longer need; you stop paying for them once they’re removed from cloud storage.
- Team volumes bill to the team’s wallet; personal volumes bill to yours.
- Volume storage is separate from the GPU-hours a training run uses.
Creating or expanding a volume checks your wallet: you need a spendable balance, and you can’t already be at your spend limit or a team-member spending limit. Otherwise the command fails with
You've reached your Spend Limit or Insufficient funds in the wallet. Add funds or raise the limit in the Billing dashboard.
Track volume charges in the Billing dashboard.
Delete a volume
--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.