AIC lets a customer share a single GPU server across many users by time-slicing it. Users take turns: at any instant, exactly one user is using the GPU. A user may be internal (the customer’s own staff) or external (the customer’s partners, or their own customers).
Each kind of workload is described by a VM template — a template packages a model and its runtime configuration. During a time slice, a VM built from the relevant template owns the GPU and serves the active user. When the slice ends, that VM is powered off and the next slice’s VM boots and takes over the GPU. All workloads here are inference (not training) as the design is for stateless VMs that can be re-used by multiple tenants and stoppable at any time. The CPU and GPU monitoring over the time slice will give information on the usage of the resources during the time slice.
Key physical constraint. The GPU server is a multi-GPU baseboard with a high-speed interconnect — for example, an 8× NVIDIA A100 SXM4 80 GB NVLink baseboard. The whole baseboard is passed through to a single VM (full PCI passthrough) rather than being partitioned, so the GPU behaves as a single, indivisible, serially-shared resource. Time-slicing rotates ownership of that resource among users’ VMs over time.
These are VMs and not Kubernetes nodes.
The design is a pool of persistent, per-template VMs that rotate ownership of one GPU baseboard:
Because weights live on each template’s own persistent disk, a model is staged once — subsequent slices are a local reload, never a re-download.
Rotation uses the platform’s native scheduled actions. No external cron or extra tooling is required.
Attribute | Meaning |
ACTION | VM action: resume (boot a powered-off VM), poweroff, … |
TIME | Time of day the action fires |
REPEAT | 0=weekly, 1=monthly, 2=yearly, 3=hourly |
DAYS | Selector interpreted per REPEAT (weekly: 0=Sun … 6=Sat) |
END_TYPE | 0=never, 1=after N repetitions, 2=until date |
resume is the action that boots a powered-off VM back up — this is where the cold start (GPU re-acquire + interconnect init + weight reload) is paid.
All template VMs reference the same GPU baseboard, and the platform treats that GPU as a resource only one VM can hold at a time. Therefore:
Two persistent disks per template VM, deliberately split across storage tiers:
|
Disk |
Backing datastore |
Persistence |
Contents |
Hot path? |
|
OS / system |
Networked Block Storage |
Persistent |
Guest OS, GPU driver + CUDA, inference server, service config |
No — small boot reads |
|
Weights |
Local NVMe (host-local) |
Persistent, read-only |
Model weights/shards, tokenizer, model config |
Yes — the large per-slice load |
Rationale:
What is not stored on the VM (kept in external stores):
Inference is stateless at the VM level, so no user state is carried across slices — and a user’s data is never on the shared GPU hardware.