How to Sample Production Prompts for a GPU Migration Comparison
Migrating LLM inference to a new GPU provider is decided by numbers, and the numbers are only as good as the workload you measure with. Synthetic benchmarks with fixed-length prompts exercise infrastructure in ways production never repeats, so the results do not transfer. This guide shows how to sample real production prompts, sanitize them without destroying the distributions that drive serving behavior, and replay them against candidate providers so the comparison predicts what happens after cutover.
Prerequisites: Traffic Inventory, Privacy Triage, and Parity Metrics

Fix three inputs before sampling: a traffic inventory that records prompt length, output length, arrival concurrency, and cache-hit patterns over a representative window; a privacy triage that classifies which prompts may leave production storage; and the parity metrics you will compare, typically p50 and p99 time to first token, inter-token latency, and per-GPU throughput. A comparison run without these inputs measures the sample, not the providers.
Practitioner tooling reinforces all three inputs. Load-testing libraries send consistent request sequences across APIs, and benchmark servers replay real prompt traces rather than fixed strings, which is only meaningful when the traffic window, sensitivity classes, and metric list are frozen first.
- Capture at least one full weekly cycle of request logs, including the busiest recurring period, recording input tokens, output tokens, inter-request gaps, and prefix-reuse patterns.
- Classify prompts into sensitivity classes (public, internal, restricted) and mark which classes may be exported for testing at all.
- Freeze the metric list: p50 and p99 time to first token, inter-token latency, and per-GPU tokens per second are the usual core.
Sampling Method: Stratify by Length, Cache Behavior, and Concurrency
Stratify the traffic by input length band, output length band, and cache class, then sample within each stratum proportionally to observed frequency, keeping the arrival-time gaps between requests. Replace raw prompt text with structurally identical synthetic text of the same token length so privacy is preserved while the length distribution, prefix-sharing pattern, and concurrency profile stay intact.
The strata that matter for serving performance are length bands, cache behavior, and timing, not prompt content. A sanitized sample that keeps those three distributions will exercise candidate infrastructure the same way production does.
- Bucket inputs into length bands (for example short, medium, long by observed quartiles) and do the same for outputs.
- Tag each request by cache class: fresh context, shared-prefix follow-up, or repeated exact prompt.
- Sample within each band proportionally to observed frequency across the full window.
- Rewrite each retained prompt as structurally identical synthetic text of the same token length, preserving shared prefixes where they existed.
- Keep the original arrival gaps between requests in the replay manifest.
Verify the result before any provider sees it: the sanitized sample's length histogram should overlay the production histogram band by band, and the arrival-time series should show the same burst structure.
Replaying the Sample for a Fair Provider Comparison
Replay the identical sanitized sequence against each candidate environment with the same client concurrency, the same arrival schedule, and the same model build, recording the locked metric set for every run. Repeat each run at least three times and compare medians, because single runs inherit warmup and transient noise. A replay is only fair when every candidate delivers the same physical conditions, which is why dedicated single-tenant capacity is the cleanest substrate for the test.
| Replay Control | What to Hold Fixed | Why It Matters |
|---|---|---|
| Request sequence | Identical order and arrival gaps for every provider | Queueing and batching behavior depend on timing, not just totals |
| Model build | Same weights, quantization, and sampling parameters | Build differences are findings, not noise |
| Repetitions | At least three runs per provider, medians compared | Single runs inherit warmup and transient effects |
| Environment class | Dedicated single-tenant capacity for every candidate | Shared virtualized neighbors inject variance no median removes |
OneSource Cloud provides dedicated single-tenant bare-metal GPU infrastructure hosted in secure U.S. data centers, which makes it a clean substrate for this kind of comparison: every replay run meets the same physical memory, clock, and network conditions, so measured differences trace to the providers rather than to neighbor workloads on a virtualized host.
Verification: Reading Results Without Fooling Yourself
Validate three things before trusting the winner: the sample still matches production length and concurrency distributions after sanitization, every provider run used the same model build and sampling parameters, and the spread between repeat runs is smaller than the gap between providers. If provider spread exceeds run-to-run spread, the test environment, not the provider, is the signal.
- Overlay the sanitized sample against production for length, cache class, and arrival-gap distributions.
- Audit each provider run for model build, quantization, and sampling-parameter equality.
- Compute run-to-run spread within each provider and compare it to the gap between providers.
Decision rule: if the between-provider gap exceeds within-provider variance by a clear margin on the metrics you locked, the comparison is decision-grade. If runs inside one provider differ as much as providers differ from each other, fix the environment before trusting any ranking.
FAQ
How many production prompts do I need for a reliable migration comparison?
Sample size follows strata rather than a fixed number: you need enough requests that every input-length band, output-length band, cache class, and concurrency level from a representative weekly window appears at its production frequency. For bursty production traffic that is typically thousands of requests; for stable traffic, fewer. The validity test is distributional, not numeric: the sanitized sample must overlay production on every stratum before any provider comparison is run.
Why replay a sampled production workload on dedicated OneSource GPUs before migrating?
OneSource provides single-tenant bare-metal GPU capacity, so a replayed production sample sees the same memory headroom, clock behavior, and network path that production will use after cutover. That removes the virtualized-neighbor variance that makes provider-to-provider comparisons unreliable, which is why dedicated capacity is the cleanest substrate for a migration replay.