Draft

This documentation is in draft and under active review. Figures for the Fall 2026 GPU reservation system are not yet published, and some pages describe behaviour that has not been verified against a primary source. Check with us before relying on anything here.

Coming from HPC: Vocabulary & Slurm Compatibility

For readers arriving from a Slurm cluster, most habits transfer and a few do not. This page is the translation table, and the three habits worth unlearning are at the bottom.

The Map


On an HPC cluster The nearest thing here Where it differs
Account / project Workspace A course, a lab, or a catch-all population. It anchors roster, storage, images, GPU classes, quota and budget. Named with launch.sh -W
Allocation Two separate things A group quota caps how many GPUs of a class a workspace may hold at once; a Service Unit budget caps how much GPU time may be spent. Neither alone is an allocation
Service units / core-hours Service Units & Budgets Genuinely similar: an hourly rate per GPU class, drawn against a budget that renews weekly for courses, monthly or quarterly for research
Partition / queue GPU class A size band, requested as a pod label: -l gpu-class=medium. Not a queue, and not a nameable set of nodes
The scheduler Kubernetes admission There is no queue position, no backfill and no observable priority ordering
sbatch, srun, squeue, scancel Compatibility wrappers They ship and they work. They translate into launch.sh; there is no Slurm behind them
sacct, sinfo, scontrol Nothing Use kubectl get pods and kubectl describe pod
module load Container images The environment is the image, chosen with -i or by the workspace. → Standard Images
Walltime (--time) Runtime limit 6 hours by default, up to 12 if set at launch. Two other clocks can also end a job — see below
--mem, --cpus-per-task -m, -c The number passed is a ceiling, and the reservation is half of it. This is the expensive one
--gres=gpu:N -g N Note -g is GPU and -G is group; they are one keystroke apart
--exclusive, whole-node jobs No equivalent -n can pin a pod to a named node, but the container is still sized by the resource tiers, on a node shared with other people
MPI, --nodes, multi-node Nothing Every job runs in one container on one node
Job arrays --array Submits multiple jobs. A concurrency limit such as %4 is parsed and ignored
Reservation Reservation Genuinely a reservation — but it guarantees access, not a running job. The session is still launched as usual
Fairshare Service Units, plus borrowing seniority Different mechanism, similar intent: dividing a contested cluster between groups and between members of a group
Login node dsmlp-login.ucsd.edu Same rule, stated more firmly: it is a jumpbox for launching jobs and moving files, and running work on it is prohibited
Scratch Not documented See the draft note above. Please do not assume a scratch area exists

Three Habits to Unlearn


--partition is not a scheduling partition. It is forwarded as a gpu-class pod label. --partition medium asks for a medium-sized GPU; a partition name that is not a GPU class asks for nothing that exists. The option is accepted either way, and the failure arrives later as a pod that will not schedule. → Coming from HPC

The number requested is the ceiling, not the reservation. launch.sh sets the Kubernetes request — what the scheduler guarantees — to half the limit named. -c 8 -m 32 reserves 4 CPU and 16 GB and permits 8 and 32; the remainder is available only if the node has it spare. Please size for the guarantee here: a job that needs 16 GB to be safe is launched with -m 32. → launch.sh Reference

"Pending" does not mean "queued". With no scheduler arbitrating between submissions, a pod that stays pending is a pod nothing can currently take — usually because a GPU request carries no gpu-class label, since medium and above sit behind NoSchedule taints and a request without the label has nowhere to land. The failure reads 0/5 nodes available and says nothing about labels. → Error Messages

Three Clocks, Not One


A Slurm user expects walltime to be the only thing that ends a job. Here, three separate limits can, and confusing them is the usual reason a run dies at an hour nobody expected.

Clock What it measures
Runtime limit Wall-clock time since the pod started → The Runtime Limit
Idle culling How long the GPU has been doing nothing → Idle Culling
The reservation window The capacity booked, and until when → What Ends a Session

Idle culling has no HPC equivalent. A GPU session that stops using its GPU is reclaimed after about 30 minutes, whatever its walltime says. A job that computes on CPU while a GPU sits loaded but untouched is exactly the shape this catches.

There Is No Slurm Here


These are translation wrappers around launch.sh, not a Slurm installation. There is no Slurm scheduler behind them. The consequences:

  • No queue and no scheduling. A job is submitted to Kubernetes, which places it when the resources exist. There is no queue position, no backfill, and no observable priority ordering.
  • No multi-node and no MPI. Every job runs in one container on one node. A --nodes 4 habit has nothing to translate into.
  • No accounting commands. There is no sacct, sinfo or scontrol.
  • State is local. The wrappers record what they submitted in ~/.slurm-compat/jobs.tsv, which is how squeue knows about submitted jobs. It is a file in a home directory, not a cluster database.

--partition is not a scheduling partition. It is forwarded as a gpu-class pod label — so --partition medium asks for a medium GPU class rather than a queue named "medium", and a partition name that is not a GPU class does not resolve to one. → GPU Classes

Option Mapping


Slurm option What it becomes here
--job-name The job's name
--partition -l gpu-class=<value> — a GPU class, not a queue
--cpus-per-task -c
--mem -m, rounded up to whole GB
--gres=gpu:N -g N
--gres=gpu:<model>:N -g N plus -v <model>
--time K8S_TIMEOUT_SECONDS — the container's runtime deadline
--output, --error Output files, with %j, %A, %u, %x and %a substitutions
--array Multiple submissions

Two options exist here that Slurm does not have:

Extension Effect
--image <image> The container image, as launch.sh -i
--course <workspace> The workspace to launch into, as launch.sh -W

--time is still subject to the platform's runtime limits, so a batch script asking for 72 hours does not receive 72 hours. → The Runtime Limit

Rough Edges


Array concurrency limits are parsed but not enforced. --array=1-100%4 submits all 100; the %4 is accepted and ignored. Concurrency has to be limited by other means.

sbatch does not propagate a job's exit status. A pipeline that checks the return code of a submission does not learn whether the work succeeded; the job's own output does.

The mapping is one-way. These wrappers translate into launch.sh; they do not translate back. When something goes wrong, the useful diagnostics are the Kubernetes ones — kubectl get pods, kubectl describe pod, kubectl logs — not Slurm ones. → Kubernetes

Which to Use


The compatibility layer exists to get working submission scripts running unchanged. Where it does that, it has done its job.

New work is better written against launch.sh, in the platform's own vocabulary — workspaces, GPU classes, background and batch modes — with no translation layer between the job and the error messages. → launch.sh Reference

What Is Simply Not Here


No MPI and no multi-node. Work that is tightly coupled across nodes belongs on another platform, and no amount of configuration changes that.

No genuine scheduler, and no accounting commands. There is nothing to query about queue position, and nothing that reports historical usage the way sacct would.

sbatch, srun, squeue and scancel are on the path here. They are translation wrappers, described above.

Where any of that is a requirement, please talk to Research IT first. They can weigh the work against the other platforms campus runs and against national resources. → Getting Help

What this platform does have, and most HPC clusters do not, is a browser-based notebook environment sharing one filesystem with the login node, per-user containers members build themselves, and Kubernetes underneath for those who want it.Kubernetes


If you still have questions or need additional assistance, email us at datahub@ucsd.edu or submit a ticket to the ITS Service Desk.