A router that sends easy queries to a small model and hard ones to a large model looks like a pure cost play decided entirely in the application layer. That reading is incomplete, and the gap costs money the moment the models underneath move. RouteLLM — the open framework from LMSYS that popularised the pattern — trains a lightweight classifier to predict whether a strong model is actually needed for a given prompt, then routes accordingly. Read narrowly, it is a dispatcher that trades a little quality for a lot of saved compute. Read the way a systems engineer has to read it, a router is also a portability surface: the model behind each route can sit on a different GPU vendor or deployment target, and the routing decision quietly encodes hardware-aware assumptions that break when the hardware changes. How does RouteLLM AI work? The mechanism is simple to state. You have at least two candidate models with different cost and quality profiles — say a small 8B model that is cheap to serve and a large frontier model that is expensive. For each incoming query, a router scores how likely the cheap model is to produce an answer that matches the expensive one, then dispatches to whichever side of a calibrated threshold the query falls on. RouteLLM’s published work frames this as recovering most of the strong model’s quality while sending a large fraction of traffic to the weak model — a benchmark-class result reported against MT-Bench and MMLU-style evaluations in the RouteLLM paper, not a number you should assume transfers to your workload unchanged. In practice the router is a small model in its own right. LMSYS trained several variants — a similarity-weighted ranking approach, a matrix-factorisation model, and BERT- and causal-LLM-based classifiers — on human preference data from sources like the LMSYS-Chat-1M conversation dataset. The router runs on the request path, so its own latency and its own accelerator footprint are part of the system you are shipping, not free overhead you can ignore. This is where the cost story and the portability story stop being separable. If you want the deeper version of the cost-reduction argument on its own terms, we cover the routing-to-cut-spend angle in how RouteLLM works as query routing to cut GPU inference cost. Here the concern is different: what the router is silently assuming about the hardware beneath each route. What signals does a RouteLLM-style router use to decide which model handles a given query? Most of the public routing work keys off predicted answer quality — the probability that the cheap model’s output would be judged as good as the expensive model’s. That signal is learned from preference data and is, in principle, hardware-agnostic. A prompt about arithmetic is hard or easy regardless of whether the strong model runs on an NVIDIA H100 or an AMD MI300X. But a production router almost never optimises quality alone. It optimises quality subject to a cost and latency budget, and those two constraints are entirely hardware-dependent. The signals a real router blends look like this: Signal What it captures Hardware-dependent? Predicted quality gap Whether the cheap model likely matches the strong one No — learned from preference data Per-token cost Marginal spend to serve the query on the chosen model Yes — set by the backend’s throughput and price Tail latency p95/p99 response time under current load Yes — depends on kernel, memory, batching Prompt length / token count Prefill cost and KV-cache pressure Partly — tokenisation ratios shift the cost curve Current queue depth Whether the expensive backend is saturated Yes — a runtime property of the deployment The first row is portable. Every other row is a measured property of a specific AI executor — a hardware-plus-software-stack pairing. The router does not see “a large model.” It sees “a large model at roughly this cost and this latency,” and those numbers came from one target it was calibrated against. Why is model routing a GPU performance-portability concern, not just an application-layer cost optimization? Here is the divergence point. A router calibrated against a model served on CUDA with a TensorRT-LLM engine learns a cost-and-latency profile that reflects that stack: fused attention kernels, cuDNN-tuned GEMMs, a particular memory-access pattern. Migrate that same model to ROCm with a HIP-ported kernel path, or to Intel’s oneAPI and SYCL, and the profile shifts. The quality of each model’s answers may be identical, but the cost of getting them is not. The failure is quiet because nothing throws an error. The router keeps routing on the thresholds it learned. It just routes wrong — sending traffic to a backend that is no longer the cheaper option at the margin, or blowing a latency budget it thinks it is still meeting. This is the same debt that shows up when porting a GPU inference path off CUDA lock-in: translated kernels rarely match native performance, and a decision layer tuned against native numbers inherits the mismatch. Treating the router as vendor-agnostic while the models beneath it are vendor-locked reintroduces exactly the performance-portability debt the router was supposed to hide. A cost-saving mechanism becomes a cost-regressing one the moment the assumption that “the large model costs X” stops holding — and it stops holding on every backend migration. What happens to routing decisions when the models behind them migrate between NVIDIA, AMD, or Intel GPU backends? Consider a worked example, with the assumptions made explicit. Suppose a router was calibrated so that a query is sent to the cheap model whenever the predicted quality gap is small and the marginal saving is worth it. On the original NVIDIA target, the cheap model serves at, say, one-tenth the per-token cost of the large model — a wide enough gap that routing 60% of traffic to the cheap side is clearly worth a small quality trade. Now the cheap model migrates to an AMD backend where the ported kernel path is less mature, and its effective throughput drops. Its per-token cost is no longer one-tenth — it is one-third, illustratively. The quality trade-off the router is making has not changed, but the economic trade-off has collapsed. The router keeps sending 60% of traffic to a model whose cost advantage has mostly evaporated, and the promised savings quietly shrink. Nobody sees a crash; they see a cloud bill that stopped falling and a routing dashboard that still looks healthy. The mirror-image failure is worse. If the expensive model is the one that migrates and its latency degrades, the router’s tail-latency assumption is now wrong, and queries routed to it under a “we have latency headroom” belief start missing SLA. These are not exotic edge cases — they are the default outcome of calibrating once and treating the calibration as permanent. In our experience helping teams move inference paths between backends, the decision layer is the part most likely to be forgotten during a migration, precisely because it looks like application code rather than GPU code (an observed pattern across engagements, not a benchmarked failure rate). How should a router be calibrated so per-target latency and cost stay accurate across vendors? The fix is to make the router calibrate against measured per-target characteristics rather than one hard-coded latency-and-cost assumption. Concretely: Separate the portable signal from the hardware-dependent signal. Keep the learned quality predictor as the vendor-agnostic core. Treat per-token cost and tail latency as parameters supplied per backend, not baked into the router weights. Re-measure on every executor. When a model moves to a new NVIDIA, AMD, or Intel target, re-run the cost-and-latency characterisation against that specific stack — the same discipline you would apply when validating any hardware-agnostic GPU compute path rather than trusting spec-sheet peak numbers. Route on live cost, not stored cost. Where feasible, feed the router a recent measured cost per backend rather than a constant. Queue depth and tail latency are already runtime signals; per-token cost should be one too. Set the threshold as a policy, calibrate the numbers as data. “Route to cheap when the saving exceeds the quality risk” is a stable policy. The saving and the risk are numbers that must be refreshed when the underlying GPU inference deployment changes. Done this way, routes stay valid when a model moves between backends because the router is comparing current measured characteristics, not a frozen snapshot from the original target. That is what lets a team hold the same quality bar while shifting load to whichever GPU backend is cheapest at the margin — the actual return, rather than the theoretical one. What is the realistic engineering cost of maintaining a multi-model, multi-backend routing layer? It is not free, and pretending it is causes the failures above. A multi-model, multi-backend router carries three ongoing costs: the router model itself (training data, retraining as models change, its own serving footprint), the per-target characterisation work (re-measuring cost and latency on each backend), and the observability to detect when a route has drifted out of profile. None of these is exotic, but all three are recurring rather than one-time. A router that saves money in month one and is never recalibrated is a liability by month six. Whether that overhead pays off depends on your traffic mix and how much your backends actually diverge in cost. If 95% of your queries genuinely need the strong model, routing buys little and the maintenance is pure loss. If your traffic is genuinely bimodal and your backends genuinely differ in price, the router earns its keep — provided you treat it as a piece of GPU-aware infrastructure rather than a set-and-forget config file. The same cost-controlled deployment thinking applies when you take an LLM prototype to production across targets. FAQ What matters most about RouteLLM AI in practice? RouteLLM trains a lightweight classifier to predict whether a cheap model can match an expensive one on a given query, then dispatches each request to whichever side of a calibrated threshold it falls on. In practice the router is itself a small model on the request path, so its latency and accelerator footprint are part of the deployed system — the goal is recovering most of the strong model’s quality while sending a large share of traffic to the cheaper model. What signals does a RouteLLM-style router use to decide which model handles a given query? The core learned signal is a predicted quality gap — how likely the cheap model is to match the strong one — which is largely hardware-agnostic. A production router blends that with per-token cost, tail latency, prompt token count, and queue depth, and all of those except the quality gap are measured properties of a specific backend rather than portable constants. Why is model routing a GPU performance-portability concern, not just an application-layer cost optimization? Because the router optimises quality subject to cost and latency budgets, and those budgets are set by the specific GPU-plus-software stack each model runs on. A router calibrated against a CUDA/TensorRT profile encodes that stack’s cost and latency; when a model migrates to ROCm or oneAPI, the profile shifts and the router keeps deciding on stale numbers — reintroducing the portability debt it was meant to hide. What happens to routing decisions when the models behind them migrate between NVIDIA, AMD, or Intel GPU backends? The routing thresholds stay fixed while the underlying cost and latency change, so the router routes wrong without throwing any error. A cheap model whose ported kernel path is slower loses its cost advantage yet still receives the same traffic share, and an expensive model whose latency degrades starts missing SLA under a “we have headroom” assumption — savings shrink and dashboards still look healthy. How should a router be calibrated so per-target latency and cost stay accurate across vendors? Keep the learned quality predictor as the vendor-agnostic core and treat per-token cost and tail latency as per-backend parameters that are re-measured on each executor, not baked into the router weights. Route on recent measured cost rather than stored constants, and hold the threshold as a stable policy while refreshing the underlying numbers whenever a model moves targets. What is the realistic engineering cost of maintaining a multi-model, multi-backend routing layer? It carries three recurring costs: the router model itself, per-target cost-and-latency characterisation on each backend, and observability to catch route drift. These are ongoing rather than one-time, so a router that saves money once and is never recalibrated becomes a liability — the overhead only pays off when traffic is genuinely bimodal and backends genuinely differ in price. Router latency-and-cost calibration per GPU backend is one dimension of a GPU Performance Audit: the same cross-platform characterisation you would apply to portable kernels applies to the decision layer sitting above them. If your routing dashboard looks healthy but your inference bill stopped falling after a backend migration, the failure class is stale per-target calibration — start by re-measuring cost and latency on the target you actually shipped, not the one you trained against.