Unclear ownership
Model runtimes, interfaces, GPUs, and data paths need clear ownership before they become trusted capability.
Flagship Case Study - AI Infrastructure
NovaLab is not an AI demo. It is a controlled AI runtime platform built to understand how model serving, GPU infrastructure, observability, benchmarking, recovery, and operational decision-making fit together.
The work is intentionally practical: build the platform, validate the runtime path, observe the system under load, protect the working state, and document the decisions that make the environment easier to trust.
Business Context
Model runtimes, interfaces, GPUs, and data paths need clear ownership before they become trusted capability.
A model can return answers while the platform is near a bottleneck. Metrics make that visible.
A useful AI platform needs a known-good state that can be protected, restored, and explained.
Local testing helps expose compute, runtime, and scaling tradeoffs before larger cloud spend is committed.
Placement decisions matter when prompts, data, models, or outputs may involve sensitive work.
NovaLab creates a controlled place to learn the baseline before broader adoption decisions are made.
Platform Goals
Create a controlled environment for model serving and infrastructure learning.
Expose a runtime path that can connect cleanly to application clients like Open WebUI.
Confirm that the runtime, model, driver, CUDA, and RTX 3090 path work together.
Use Prometheus and Grafana to make runtime, host, and GPU behavior visible.
Use Locust to test the API path under controlled user counts.
Protect validated platform states with snapshots, backup, and documentation.
Turn implementation work into decisions, notes, and patterns that future builds can reuse.
Constraints
NovaLab runs on local lab hardware with a single RTX 3090 24GB. That makes GPU memory, power, thermal behavior, and consumer hardware limits part of the engineering problem.
Model sizing, context length, precision, and quantization matter. The full Qwen3-14B test exposed the practical VRAM limit, while the Qwen3-14B-AWQ test showed why model format matters.
The lab is designed to avoid unnecessary cloud spend while learning the runtime, observability, and capacity patterns that should inform future placement decisions.
Current State Dashboard
Architecture Overview
Runtime Request Flow
Observability Flow
The runtime exposes signals that help explain throughput, latency, running requests, waiting requests, and cache pressure.
Host and container metrics help separate runtime behavior from monitoring or system resource issues.
GPU utilization, temperature, power draw, and VRAM usage need their own visibility because they shape AI runtime capacity.
Prometheus gives the platform a consistent metrics layer for runtime, host, and GPU data.
Grafana shows runtime health, latency, throughput, queueing, and GPU behavior without relying on guesswork.
Load testing makes it possible to watch the platform while requests move through the same API path used by clients.
Benchmark Methodology
Locust generated load against the OpenAI-compatible API path instead of bypassing the application flow. That made the test closer to how clients would actually use the platform.
The validation included baseline testing and multi-user load testing so the platform could be observed as demand increased.
The goal was not to chase synthetic benchmark scores. The goal was to understand throughput, latency, queueing, failures, and GPU behavior under load.
Performance Results Summary
Metrics Tracked
Shows how much generated output the runtime produced during the test window.
Shows prompt processing demand alongside generated output.
Shows the typical request experience during the benchmark run.
Shows whether slower requests stayed within an understandable range.
Shows active work inside the runtime while load is applied.
Shows whether demand is backing up before the runtime can process it.
Shows the request rate being applied to the platform.
Shows whether the benchmark exposed request or service errors.
Shows whether the GPU is idle, useful, or saturated.
Shows the electrical demand created by the inference workload.
Shows whether the card stays within a stable operating range during load.
Shows how much GPU memory the model and runtime consume.
Capacity Planning Interpretation
The RTX 3090 can serve useful local inference workloads when the model and runtime are sized correctly.
Model format, memory footprint, and quantization affect capacity as much as raw GPU horsepower.
GPU load, queueing, latency, and failures make capacity visible. Guessing is not an operating model.
Zero observed waiting requests are more useful than a polished demo because they show whether the service is backing up.
The metrics help decide whether the platform is healthy, saturated, or misconfigured before changing the design.
Evidence Placeholder
Baseline runtime, latency, throughput, queueing, and GPU behavior.
Intermediate load view showing platform behavior before the 50-user run.
High-load dashboard view for the validated 50-user benchmark.
Request-level benchmark results from the load test run.
GPU utilization, power, temperature, and memory state during benchmark pressure.
Monitoring target state for the runtime, host, and GPU telemetry path.
Engineering Decision Log
| Decision | Reason | Outcome |
|---|---|---|
| Rebuild from a clean baseline | The environment had accumulated drift and troubleshooting noise. | Produced a known-good platform state that could be validated, backed up, and extended. |
| Validate GPU ownership before blaming the AI runtime | GPU passthrough, drivers, and container visibility had to be proven before troubleshooting model behavior. | Separated infrastructure problems from runtime problems. |
| Use observability before making performance claims | AI demos can look successful while hiding latency, queueing, saturation, or failures. | Prometheus and Grafana became part of the platform, not an afterthought. |
| Correct misleading metric queries | Some raw counters appeared useful but did not answer the real operational question. | Rate-based views made throughput and latency easier to interpret. |
| Collect GPU telemetry separately | Default runtime metrics did not fully explain GPU behavior. | GPU utilization, power, temperature, and VRAM became visible alongside runtime metrics. |
| Use quantization when full model size exceeded VRAM | The Qwen3-14B full model exceeded the RTX 3090 24GB constraint. | Qwen3-14B-AWQ became the practical path for fitting larger models into the hardware envelope. |
| Protect validated state with snapshots and NAS backup | Once the platform worked, the working state became an asset. | Reduced risk of losing progress during future experimentation. |
Challenges and Operational Response
Operational Lessons
The platform still depends on clean baselines, recoverability, monitoring, capacity planning, and operational discipline.
Model choice, context, format, and quantization all spend from the same limited pool.
Without metrics, it is too easy to confuse a working demo with a service that can be operated.
A metric can be accurate and still fail to answer the operational question being asked.
The same model family can behave very differently depending on size, format, and memory requirements.
Once the platform reaches a validated state, protecting that state becomes part of the engineering work.
Next Build Pass