PABCD Initiative Documentation Hub pabcd_initiative codexclaw cli-jaw

ML Infrastructure — GPU Clusters, Model Registry, Serving

Source: dev-devops/references/ml-infra.md

ML Infrastructure — GPU Clusters, Model Registry, Serving

Last reviewed: 2026-06-16

Applies to: NVIDIA GPU clusters, model serving platforms, MLOps

When to read: ML infrastructure provisioning or model deployment

Canonical owner: dev-devops (infra layer); dev-backend owns API/serving code patterns

---

§1 GPU Cluster Management

Node Selection

GPUVRAMBest ForK8s Resource
A100 (40/80GB)40-80GBTraining, large model inferencenvidia.com/gpu: 1
H100 (80GB)80GBLarge-scale training, HPCnvidia.com/gpu: 1
L4 (24GB)24GBInference, cost-efficientnvidia.com/gpu: 1
T4 (16GB)16GBLight inference, dev/testnvidia.com/gpu: 1

K8s GPU Scheduling

apiVersion: apps/v1
kind: Deployment
metadata:
  name: model-server
spec:
  template:
    spec:
      containers:
        - name: server
          image: model-server@sha256:abc123
          resources:
            limits:
              nvidia.com/gpu: 1
              memory: "32Gi"
            requests:
              nvidia.com/gpu: 1
              memory: "16Gi"
      nodeSelector:
        accelerator: nvidia-l4
      tolerations:
        - key: nvidia.com/gpu
          operator: Exists
          effect: NoSchedule

Cost Optimization

StrategyDetail
Spot/preemptibleTraining workloads (checkpointed)
Right-sizingMatch GPU VRAM to model size
Time-sharingNVIDIA MPS for small inference models
AutoscalingScale-to-zero with KEDA for inference

---

§2 Model Registry

Registry Selection

ToolBest ForKey Feature
MLflow Model RegistryGeneral MLOpsVersioning, staging, lineage
Weights & BiasesExperiment tracking + registryArtifacts, sweeps, reports
HuggingFace HubOpen-source models, LoRA adaptersModel cards, datasets
SageMaker Model RegistryAWS-native MLOpsApproval workflows

Model Versioning Contract

models/
  payments-fraud-detector/
    v1.0.0/
      model.onnx
      config.json
      metrics.json     # eval metrics at registration
      requirements.txt # inference dependencies
    v1.1.0/
      ...
RuleDetail
SemVerMajor = breaking API change, Minor = improved metrics, Patch = fix
ImmutableOnce registered, never overwrite — create new version
MetricsEval metrics recorded at registration time
LineageLink to training run, dataset version, code commit

---

§3 Model Serving Patterns

Serving Architecture Decision

PatternWhenTool
REST/gRPC APILow-medium throughput, general modelsFastAPI, TorchServe, Triton
Batch inferenceLarge dataset, latency-tolerantSpark, Ray, SageMaker Batch
StreamingReal-time features, event-drivenKafka + model sidecar
Edge inferenceLatency-critical, privacy-sensitiveONNX Runtime, TF Lite, Core ML

K8s Serving with Scale-to-Zero

# KEDA ScaledObject for inference service
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: model-server-scaler
spec:
  scaleTargetRef:
    name: model-server
  minReplicaCount: 0  # scale to zero when idle
  maxReplicaCount: 10
  triggers:
    - type: prometheus
      metadata:
        serverAddress: http://prometheus:9090
        metricName: http_requests_total
        query: rate(http_requests_total{service="model-server"}[2m])
        threshold: "10"
  cooldownPeriod: 300  # 5min before scale-down

Health Checks for Model Servers

# FastAPI model server health
@app.get("/health")
async def health():
    return {"status": "ok", "model_loaded": model is not None}

@app.get("/ready")
async def ready():
    # Verify model can actually inference
    try:
        _ = model.predict(dummy_input)
        return {"status": "ready"}
    except Exception as e:
        return JSONResponse({"status": "not_ready", "error": str(e)}, status_code=503)

---

§4 Edge Inference Triage

Decision: Cloud vs Edge Inference

FactorCloudEdge
Latency requirement>100ms acceptable<50ms required
Model size>1GB<500MB (quantized)
PrivacyData can leave deviceData must stay on device
ConnectivityReliable networkIntermittent/offline
Update frequencyFrequent model updatesInfrequent, versioned

Edge Model Optimization Pipeline

Full model (PyTorch/TF)
  → Export to ONNX
  → Quantize (INT8/FP16)
  → Optimize (ONNX Runtime, TensorRT, Core ML)
  → Package with inference runtime
  → Deploy to edge device

Runtime Selection

RuntimePlatformBest For
ONNX RuntimeCross-platformGeneral inference, web
TensorRTNVIDIA GPUGPU-optimized inference
Core MLApple devicesiOS/macOS on-device
TF LiteMobile/embeddedAndroid, IoT

---

§5 MLOps Platform Patterns

Training Pipeline

Data versioning (DVC/LakeFS)
  → Feature engineering (dbt/Spark)
  → Training (distributed, GPU cluster)
  → Evaluation (automated metrics + human review)
  → Registration (model registry)
  → Deployment (CI/CD → serving infra)
  → Monitoring (data drift, model performance)

Monitoring

SignalWhat to WatchAlert On
Data driftFeature distribution shiftKL divergence > threshold
Model performanceAccuracy, F1, latencyDegradation from baseline
Prediction distributionOutput class balanceUnexpected shift
InfrastructureGPU utilization, memory, throughputSaturation > 90%

---

§6 Anti-Patterns

BannedSymptomFix
GPU always-on for batchBurning money when idleScale-to-zero with KEDA
No model versioningCan't rollback, can't reproduceModel registry with SemVer
Training on spot without checkpointsLost hours of computeCheckpoint every N steps
Serving without health checksSilent model loading failures/health + /ready endpoints
No data drift monitoringSilent accuracy degradationAutomated drift detection
One-size GPUOverpaying for inferenceRight-size: L4/T4 for inference, A100/H100 for training