> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tuneplane.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configure the hardware registry

> GPU series, profiles, storage quota and schedule windows, from an operator's side.

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp admin set-quota alice --gpus 16 --jobs 6 --daily-gpu-hours 200
```

This is the operator's side of `--profile`. What a user sees is
[the resource model](https://docs.tuneplane.ai/en/concepts/resources.md).

Most of it is editable in the console at **Settings → Hardware**, which reloads hot: each
instance picks up a change on its `TUNEPLANE_HWCONFIG_REFRESH_INTERVAL`.

## GPU series

Specs and scheduling parameters for one class of GPU (h200 / h100 built-in defaults, overridable via `TUNEPLANE_HARDWARE_SERIES` JSON):

| Field | Purpose |
| - | - |
| `id` / `label` / `weight` | Identifier, display name, compute equivalence weight (for cross-series statistics) |
| `ray_accel_types` | Matches Ray acceleratorType |
| `pin_resource` | Ray custom resource key (for multi-pool pinning) |
| `slurm_constraint` | Slurm `--constraint`; **required for slurm multi-pool** |
| `total_gpus` | Once set, the authoritative capacity for quota admission |
| `mem_gib` | Per-GPU memory (for display/diagnostics reference) |

## Profiles

A series, a default shape, and the tuning that shape wants. Built-in defaults, overridable with
`TUNEPLANE_CLUSTER_PROFILES`.

| Field | What it decides |
| - | - |
| `name` | What a user writes after `--profile` |
| `series` | Which series this profile draws from, and therefore which quota and capacity it counts against |
| `num_nodes`, `gpus_per_node` | The default shape. Once submitted the JobSpec pool is authoritative, so a profile is never a second truth |
| `env` | Process environment injected with this profile: NCCL, Ray memory thresholds, the PyTorch allocator. On a multi-node job it has to match what `ray start` saw |
| `overrides` | Framework arguments appended to the training argv: parallelism, a vLLM memory fraction, a micro batch |

> [!WARNING]
>
> Put only keys every experiment shares in `overrides`. They are applied in struct mode, so a key
> that does not exist in the target config raises rather than being ignored — and it raises for
> every job on that profile, not just the one you were tuning.

The console's **Admin → Platform settings → Hardware** offers visual editing with hot reload (instances pull on `TUNEPLANE_HWCONFIG_REFRESH_INTERVAL`).

## User quotas

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp admin set-quota alice --gpus 16 --jobs 6 --daily-gpu-hours 200 \
  --max-storage-gb 2000 --profiles h200,h100 --priority 10
```

`TUNEPLANE_QUOTA_ENFORCE=0` downgrades the whole system to "record only, do not block" (for trial periods).

### Storage quota

`--max-storage-gb` caps the total held by all of a user's run directories
(working copy + checkpoints + logs). It counts `runs/<user>/`; the caches
(weights, datasets, Volumes) are shared platform infrastructure and are not
charged to anyone — the weights one job pulls, every later job uses.

| Setting | Meaning |
| - | - |
| `TUNEPLANE_STORAGE_SCAN_INTERVAL_S` | Scan interval in seconds, 600 by default; 0 disables it (quota and dashboard then report "not scanned") |
| `TUNEPLANE_DISK_WATERMARK_PCT` | Whole-volume watermark; crossing it pauses dequeuing for **everyone**, protecting the checkpoint writes of running jobs |

They answer different questions: the quota is "who is holding too much", the
watermark is "the disk is about to fill".

## Schedule windows

Restrict daily run windows per GPU series (Admin → Platform settings → Schedules):

| Setting | Semantics |
| - | - |
| `schedule_enforce` | Master enforcement switch (off = display only, no blocking) |
| Window definitions | Daily open intervals per series (service timezone `TUNEPLANE_TIMEZONE`) |
| `schedule_dispatch_min_remaining_s` | Don't dequeue if less than this many seconds remain in the window |
| `schedule_stop_grace_s` | Grace period before force-stop after the window closes (jobs receive a pause first, checkpoint preserved) |

Jobs paused this way resume training automatically when the window reopens.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.