Submitting HPC Jobs
HPC jobs run on registered provider clusters (SLURM, MOAB, or Open OnDemand) and are billed per verified usage against a budget you cap up front. Two submission paths exist: raw job specs and curated templates.
Path 1: Submit a raw job spec
Section titled “Path 1: Submit a raw job spec”Write a spec file (schema_version optional; must be "1.0" if present):
schema_version: "1.0"offering_id: "OFF-1"requested_nodes: 4requested_gpus: 8max_duration: 3600 # secondsmax_budget: "1000uve"job_script_file: "./job.sh" # or inline: job_scriptRequired fields: offering_id, requested_nodes (> 0), max_duration
(> 0), max_budget, and one of job_script / job_script_file (relative
paths resolve against the spec file’s directory).
virtengine tx hpc submit-job job.yaml --from tenantPath 2: Submit from a template
Section titled “Path 2: Submit from a template”Templates are governance-approved workload definitions with validated runtimes and security policy — the fastest safe path for common patterns:
| Template ID | Type | Use for |
|---|---|---|
mpi-standard | MPI | OpenMPI parallel computing |
gpu-compute | GPU | CUDA-accelerated compute |
batch-standard | Batch | Single-node batch processing |
data-processing | Data Processing | Spark/Dask pipelines |
interactive-session | Interactive | JupyterLab and terminal sessions |
virtengine hpc templates listvirtengine hpc templates list --type gpuvirtengine hpc templates show mpi-standardvirtengine hpc templates typesschema_version: "1.0"offering_id: "OFF-1"requested_nodes: 2requested_gpus: 1max_duration: 1800max_budget: "500uve"job_parameters: nodes: 2 gpus: 1 runtime_minutes: 30batch_config: partition: "gpu" job_name: "demo-job"virtengine tx hpc submit-from-template mpi-standard params.yaml --from tenantTemplates expose a typed parameter_schema (strings, enums, defaults,
required flags) — templates show <id> prints what a given template
expects.
What happens after submission
Section titled “What happens after submission”x/hpcrecords the job and produces a scheduling decision — which cluster runs it.- The provider’s routing enforcer validates the decision (strict mode rejects anything stale or mismatched — placement is deterministic and auditable).
- The scheduler adapter submits to SLURM/MOAB/OOD; the job walks
pending → queued → starting → runningto a terminal state (completed,failed,timeout, orcancelled). - Usage records (wall-clock, CPU core-seconds, GPU-seconds, memory, storage, network) flow back signed every 5 minutes, with final accounting flagged when the job ends.
Budget behavior
Section titled “Budget behavior”max_budget is a hard cap: it bounds what the job can settle against your
escrow. Size it from the queue’s price_per_hour × requested scale ×
max_duration, with headroom for storage and network. Underfunded budgets
fail placement rather than surprise-billing you.
Interactive sessions
Section titled “Interactive sessions”The interactive-session template provisions JupyterLab/terminal sessions
(via Open OnDemand on supporting providers, with OIDC authenticated through
VEID). Set max_duration realistically — sessions bill like any other job
while idle.