Utilisation is quoted from the scheduler
The scheduler reports the cards as allocated, so they count as busy. Actual device utilisation is much lower, and nobody can point at the difference.
Expensive accelerators, unstable multi-node training, and no proof of where the time goes.
The hardware is the most expensive thing in the company and the least measurable. Training runs fail for reasons that look random, inference cost per request is unknown, and the team is under pressure to ship rather than to instrument.
GPU scheduling with gang placement, fabric and storage that keep the accelerators fed, and inference endpoints with a capacity model instead of a guess.
If two or three of these describe your environment, the audit is worth the money. If all four do, it is overdue.
The scheduler reports the cards as allocated, so they count as busy. Actual device utilisation is much lower, and nobody can point at the difference.
It works on four nodes and hangs on eight, or it works until someone else starts a job. The pattern is at the interconnect or the scheduler, and both are being guessed at.
Nobody can state requests per second per GPU for the actual prompt and completion length distribution, so both over-provisioning and paging incidents are routine.
Driver and runtime versions drifted, and a job that lands on the wrong node behaves differently. Time is lost to a version matrix nobody owns.
Sequenced so that stopping after any phase leaves you better off rather than stranded mid-migration.
Measure at the device, per user and per job, over a real week. Separate allocated from actually busy, and name the idle tail.
A utilisation report per team and per job type, with the idle tail quantified.
Collect driver, runtime and fabric firmware versions across every node, then converge on one validated set with deviations documented and excluded from general scheduling.
One validated version set, and a scheduler that will not silently place a job on an outlier node.
Enable gang scheduling so multi-node jobs allocate all-or-nothing, then benchmark collective operations at your real job sizes.
A collectives baseline and a deadlock scenario that has been tested rather than theorised.
Benchmark with your own prompt and completion length distribution, then size for the latency target rather than for the vendor headline.
Requests per second per GPU at your target latency, and a scaling rule that survives the next traffic doubling.
Each discipline has its own page with the technology stack, the acceptance criteria and an explicit scope boundary.
Your GPUs are expensive and mostly idle. We fix the part that wastes them: the scheduler, the fabric, the storage feeding them, and the way jobs queue.
Slurm (SchedMD / NVIDIA builds) · Slinky (Slurm in Kubernetes) · OpenPBS / PBS Pro · IBM Spectrum LSFA cluster you can upgrade without holding your breath, whose etcd backup you have actually restored, and which you could rebuild from code in under an hour.
upstream kubeadm 1.31–1.34 · Kubespray · RKE2 · K3sMetrics, logs and traces that survive a node loss, alert on things that matter, and cost less than the infrastructure they watch.
Prometheus 2.5x · Thanos · Grafana Mimir · VictoriaMetricsCeph, BeeGFS and MinIO clusters designed around your real failure domains, benchmarked with fio, and proven to survive a disk, a node, and a rack going away.
Ceph (Squid / Reef) · Cephadm + Orchestrator · Rook-Ceph 1.17 · Ceph RGW (S3)12 min · per-node bring-up, measured on all 40
Read the engagement → B2B SaaS · North America49 min · measured control-plane upgrade, zero dropped requests
Read the engagement → Logistics technology · EU3 · major hops completed in planned windows
Read the engagement →Every case in this library is a representative engagement, written from our delivery patterns and marked as such. We do not present unnamed work as a named customer.
These are the numbers we put in the delivery report. If we cannot measure it, we do not promise it.
Every vendor says yes to everything. Here is where our answer is no, or where someone else needs to be in the room. If this list looks wrong for your situation, tell us — we would rather argue about scope before the contract than after.
Model architecture, training methodology and research outcomes
We make the infrastructure fast and measurable. What you train on it is yours.
GPU procurement and hardware sourcing
We do not resell hardware or take margin on it. We will tell you what to buy and what to refuse.
ML platform vendor integration (experiment tracking, feature stores)
We will run the platform underneath and keep it available. Application-level integration needs the vendor or your own team.
Scheduling, fabric, storage tuning and utilisation instrumentation
Including the benchmarks you keep as a regression baseline.
By workload shape, not by fashion. Long, tightly-coupled multi-node jobs with gang requirements fit Slurm. Many shorter jobs with service dependencies fit Kubernetes. Most labs end up running both, and we will tell you where that line belongs in your case.
That is the common case. We start by measuring what the existing hardware can actually do before recommending anything new — sometimes the answer is that the bottleneck is configuration, not silicon.
Yes, and usually by measuring first. Batching, quantisation and the serving runtime often matter more than the GPU count, and we will show the numbers before recommending either.
Thirty minutes, no slides. Bring the awkward constraint — that is usually the interesting part.