One Model, Two Bottlenecks: LLM Classification Is Compute-Bound, Generation Is Memory-Bound
The symptom: one benchmark number, two very different bills You get a new accelerator, run the vendor's throughput benchmark, and it posts a great tokens-per-second number. You size a fleet against that number. Then one of two things happens in production. Either your classification service — text in, one label out — runs at a fraction of the throughput the benchmark promised, or your chat/generation service leaves the accelerators sitting at 20% utilization while latency creeps up. Same model, same silicon, and the economics are nowhere near what you provisioned for. The benchmark wasn't lying. It measured a workload whose bottleneck has almost nothing to do with yours. "LLM inference" is not one workload — it is two, and they live at opposite ends of the same accelerator's roofline. Two phases hiding inside "inference" Every request through a transformer has two distinct phases with different performance characteristics: Prefill processes...