Skip to main content
Every path the platform writes derives from that one setting. Nothing else is configured, and nothing is written outside it.

The layout

The invariant that matters

The root must resolve to the same absolute path on the console, on every node, and inside every container. A shared filesystem, an RWX PVC, or a same-path bind mount all satisfy it.
The path is expanded but deliberately not resolved through symlinks. The root is frequently a symlink or an NFS mount whose real path differs between the console and a node, and the whole design rests on the string being identical on both sides. Resolving it would break exactly the deployments it is meant to support.
A relative root is refused at startup rather than resolved against whatever directory the process happened to start in.

What is safe to reclaim

The caches are shared across runs on purpose. Without a shared HF cache, every job re-downloads tens of gigabytes of weights, which on an internal link costs more than the training does.

Where the database is not

FORGE_DB_PATH is deliberately not under the storage root. That root is usually a shared filesystem, and SQLite over NFS has well-known locking problems — the ledger would risk corruption and every console replica would contend for one file. The database is control-plane state, not job storage, so it stays local to the process. A team deployment sets FORGE_DB_URL to Postgres and the question stops mattering.

Corpora live outside

FORGE_CORPUS_ROOT must sit outside the storage root, and startup refuses a configuration where it does not. Corpora are governed read-only material with different access rules from the platform’s own writes; nesting them would make one reclamation policy apply to both.

Accounting and pressure

The watermark is worth setting. A full disk breaks every running job at once, not just the next one to start — and the jobs it breaks are the ones that have been running longest and have the most to lose.
Storage quota is measured, not reserved, so it is eventually consistent — a user can briefly exceed it between scans. The GPU gate is exact because allocation is a decision the platform makes; storage is a fact it observes.