$VOLUMES_DIR/support-transcripts, read-only. Nobody can download
them unless the owner turns that on.
A Volume is not a dataset
A version suffix on a volume reference is refused when the spec is parsed. So is a malformed
id, and two volumes whose leaf names would collide at the same mount path.
Create and fill one
tp volume push uploads everything under the directory, minus OS and Office noise. Raise
--concurrency on a fast link.
Removing files, or the whole volume:
Point at storage you already have
A volume does not have to hold bytes the platform put there. If the material is already on storage your organisation runs — a MinIO bucket, a NAS export — an administrator can register it instead of copying it.- The platform never writes to it.
tp volume push, deleting files and emptying the volume are all refused. The material belongs to the storage it lives on; change it there. - Deleting the volume removes the registration, not the files. The count that comes back says one object.
- An administrator registers it. Deciding what the platform reaches into is an administrative decision, and the connection it reads through names which paths may be referenced and which projects may reference them.
Open a directory to users in the console
- An administrator opens System management → Storage connections and adds an S3 connection or a filesystem directory already mounted on the host.
- Set the allowed directories and projects, then test the connection. Connecting storage does not publish its contents.
- On the connection row, choose New volume. Choose an allowed directory or enter a subdirectory, give the volume a name, and choose its visibility.
- Enable previews if needed. Downloads remain off. A private volume is visible only to its owner and administrators; public visibility is still intersected with the connection’s project restrictions.
- Optionally set Allowed projects on the volume to narrow the connection scope. Allow job use is independent of previews and downloads. Turning it off blocks new submissions, but does not stop running jobs or revoke existing copies.
- Users open Data → Volumes to browse and preview permitted material, then reference the volume in a job. View volumes on a connection filters this list.
Reference it from a job
Declare it inexperiments/<experiment>/config.yaml, which is the durable form.
Merge volumes into an existing data section instead of adding a duplicate YAML key.
Your script must also accept or remove this platform metadata before passing config
to a strict trainer constructor. For the TRL SFT recipe, use --volume below
instead of adding data to the file passed directly to SFTConfig:
$VOLUMES_DIR/<leaf name>. Read the path from the environment; never
hard-code it.
Read files in a preprocessing script
For a volume namedacme/models, the root inside the job is $VOLUMES_DIR/models,
not $VOLUMES_DIR/acme/models and not the administrator’s NAS path. The platform
sets VOLUMES_DIR in the job environment; it is usually absent on your laptop.
In the console, open a subdirectory and choose Use this directory. The usage
panel generates configuration and Python examples for the directory you opened.
Declaring a volume makes its files available; your script decides which ones to read.
acme/documents attached to the job, with text files under
incoming/. Write results outside the read-only source. For a job submitted with
--output-dataset, write dataset files to $TUNEPLANE_DATASET_OUT_DIR instead.
Train with a model stored in a volume
Supposeacme/models contains my-model/config.json, tokenizer files and all the
model weight shards. Attach acme/models, then resolve the model directory
inside your training script:
$TUNEPLANE_OUT_DIR, not into
the model directory.
Use the TRL SFT recipe
The generatedexperiments/<experiment>/train.py passes args.model to
SFTTrainer. To accept a job-side environment path, add this after
args = parser.parse_args() in your copy of that script:
--model or a framework’s
YAML loader expands environment variables. Different recipes use different
configuration loaders. Attaching the volume alone never chooses a model or
configures a training dataset.
Keep large model libraries scoped
Referencing a volume attaches its whole directory. Readingmodels/my-model
in a script does not select a partial mount. With a pull connection, the platform
synchronizes the volume to job storage before startup; an existing filesystem
view can avoid this copy when configured by the administrator.
For a library containing hundreds of gigabytes of unrelated models, register the
required model subdirectory as its own external volume. For example, a volume
acme/my-model rooted at my-model/ is read at $VOLUMES_DIR/my-model. This also
lets the administrator grant access to that model without exposing its siblings.
Which backends can mount one
On a backend that cannot, submission is refused naming the setting, rather than starting a job
whose mount would be empty.
Turn one file into something people can read
Two permissions, both the owner’s, both off by default:
They are independent. Listing the structure — file names, sizes — is always available to anyone
who can reference the volume; content is not.
Produce a dataset from a volume
Reading a volume and publishing the result is a Processing Run: your code, on the platform, with provenance.$TUNEPLANE_DATASET_OUT_DIR and the platform publishes when the run
succeeds. The job never holds a registry credential, and the published dataset inherits the
classification of the material it read.
This is also how you clean a volume: read, treat, publish. The platform never rewrites what you
uploaded.
Check it worked
tp volume ls shows the volume with its file count. In a running job:
What a Volume does not protect against
What a Volume does not protect against
If your code can read the plaintext, no storage control stops exfiltration. A script that can
open a PDF can base64 it into its own stdout.What a Volume does enforce: no download route while
allow_download is off, no preview route
while allow_preview is off, one audited read per file when it is on, a read-only mount, an
audited reference, and no bulk log download. Every way out is a decision somebody made and a
record somebody can find.Keeping material off the cluster entirely is the deployment’s egress policy, not this feature.