Enterprise AI on-prem: running GPUaaS on Kubernetes

For the last two years the standard advice on Enterprise AI On-Prem has been to skip it: throw the workload in the cloud and let the provider worry about scaling. For a small proof of concept that is fine advice. Then you put a production multi-agent system on top of it, the monthly bill stops looking linear, and users start noticing the latency.

I thought I had seen every way a server can fail during a high-traffic launch, and then I started working with Blackwell GPUs and Kubernetes scheduling. A private GPU-as-a-Service (GPUaaS) platform is mostly an orchestration problem. Expensive hardware is the easy part to buy; keeping it busy instead of idle while the budget burns is the hard part.

Bootstrapping the Enterprise AI On-Prem node

Bare metal starts you at a blank screen and a UEFI shell. On something like a Cisco UCS C845A, nobody in a professional environment installs drivers by hand. You use an Assisted Installer to generate a discovery ISO, map it through virtual media, and let the node phone home to a central console. That is what makes an Enterprise AI On-Prem stack reproducible.

Plenty of the clients I work with are air-gapped, though, and that changes the job. You mirror the whole registry into something local like Quay: OpenShift release images, operator bundles, all of it. The process is messy and unforgiving about detail, and in a regulated industry there is no way around it. There is more on scaling performance in restricted environments here.

How GPU partitioning works: MIG and time-slicing

Most of an Enterprise AI On-Prem design comes down to how you hand the hardware to your workloads. There are two tools for that: Multi-Instance GPU (MIG) and time-slicing. MIG gives you real hardware isolation, with dedicated memory and compute units. Time-slicing is a fast context switch that lets several pods share one slice.

Mixing the two has worked best for me. Partition one GPU into dedicated 24GB slices for the 7B parameter models and leave the other whole for the 70B heavy hitters. In a Kubernetes ConfigMap that comes out as:

apiVersion: v1
kind: ConfigMap
metadata:
  name: device-plugin-config
  namespace: nvidia-gpu-operator
data:
  config.yaml: |
    version: v1
    sharing:
      timeSlicing:
        resources:
        - name: nvidia.com/gpu
          replicas: 4
        - name: nvidia.com/mig-1g.24gb
          replicas: 2

The control plane: building an idempotent reconciler

Don’t let your portal app talk to the Kubernetes API directly. Sooner or later you hit a race condition, resources get orphaned, and the cluster falls over. Put a controller in between, a Python reconciler running in a continuous loop, reading the desired state out of a PostgreSQL database and converging the cluster’s actual state onto it.

Every cycle has to be idempotent. If the reconciler dies halfway through provisioning, it should come back up, read the database, and work out where it stopped. That is the same reasoning behind high-performance data architecture: keep the source of truth away from the runtime plane.

Tokenomics: the ROI of Enterprise AI On-Prem

Finance will want a number, so give them cost per million tokens. In the cloud that number is variable and grows with your success. On-prem, hardware, power and cooling are fixed, so utilization is the lever that moves it. A platform running at 80% utilization produces tokens at close to half the unit cost of the same platform at 40%.

Once you factor in the steady-state traffic that multi-agent systems generate, the on-prem unit cost ends up under the cloud rate. For the configuration details, the NVIDIA GPU Operator documentation and the official Kubernetes resources are the places to look.

If this Enterprise AI On-Prem work is eating your dev hours, I can take it off your plate. I have been wrestling with WordPress and awkward server architectures since the 4.x days.

Start with the platform layer

An Enterprise AI On-Prem platform looks more intimidating than it is once you build on mature pieces like OpenShift and the NVIDIA Operator. The point of the exercise is to get past the POC and own the infrastructure, with data that never leaves your walls. Get the platform layer right and the model orchestration is a much smaller problem.

author avatar
Ahmad Wael
I'm a WordPress and WooCommerce developer with 15+ years of experience building custom e-commerce solutions and plugins. I specialize in PHP development, following WordPress coding standards to deliver clean, maintainable code. Currently, I'm exploring AI and e-commerce by building multi-agent systems and SaaS products that integrate technologies like Google Gemini API with WordPress platforms, approaching every project with a commitment to performance, security, and exceptional user experience.