When coding agents overwhelm a self-hosted model, reject early

Admission control can protect GPU capacity, but benchmark it against every offered request—including the ones rejected.

HJHarshul Jain登壇者 · AudiblePKParv Khatri登壇者 · SAP
チャンネル
AI Engineer
公開日
2026年11月9日
動画
52:08
読了時間
6 分
スライド
5
原文
英語
YouTube で開く
スクロールすると動画は右下に小さくなって再生を続けます。字幕は閲覧言語に合わせて切り替わります。
閲覧言語2 言語で読めます
この記事はまだ日本語に翻訳されていないため、英語の原文を表示しています。
要約

30 秒でわかる

Coding agents can turn one task into a burst of model calls and retries. Harshul Jain and Parv Khatri recommend deciding whether to admit, defer or reject before requests consume GPU memory, using both request details and live engine signals. In their small-GPU test, limiting the queue reduced p95 first-token latency while preserving the same reported goodput. They stress that goodput must count rejected requests, and that the right signal depends on the bottleneck.

  1. 1Decide before a request takes GPU memoryThe proposed admission layer chooses whether to start, defer or reject work.
  2. 2Combine request context with live engine stateTenant, session and deadline information complement cache, queue and replica signals.
  3. 3A session can be a more useful unit than a requestThe illustrative example shows why admitting fragments of two sessions may complete neither.
  4. 4Count rejected requests in the goodput denominatorPerfectly serving five percent of offered work is not a 100% success rate.
  5. 5Queue limiting reduced tail latency in one small testThe reported p95 fell from about 2.3 seconds to 0.95 seconds with the same goodput; this was a specific two-repeat setup.

ポイント

  1. Count rejected requests when measuring how much useful work a policy serves.
  2. Use fast-changing queue and memory signals rather than relying only on request counts.
  3. Respect Retry-After, add jitter and set a finite retry budget.
  4. Benchmark realistic fan-out and retries above as well as below capacity.
  5. Fail loudly when a policy’s required signal is unavailable.
全文

チャプターごとに整えた全文を読む

文字起こしのみ
01

Why agent bursts need an admission decision

Inference requests occupy GPU memory over time, and agent fan-out can overload capacity.

Harshul Jain of Audible and Parv Khatri of SAP introduce admission control: deciding which requests can enter a self-hosted language-model service when coding agents send bursts of work.

Inference begins with a prompt and produces an answer token by token. Jain emphasizes that the final output length is not known at the start, making the resources a request will consume difficult to predict.

A request passes through an application, an API gateway, a router and an inference engine such as vLLM or SGLang. The engine loads model weights onto GPUs, batches requests and maintains a key-value cache for each running request.

Jain describes a tension between quality, latency and throughput. Interactive chat may prioritize response quality and speed; asynchronous agents may tolerate more delay for throughput, while high-volume autocomplete can favor speed over a larger model.

Every deployment has a maximum load at which it can still meet its service-level objective. The speakers cite OpenAI’s 2023 routing incident and an Anthropic capacity incident as examples where load shedding or earlier capacity detection mattered.

They propose a decision at the front door: admit a request now, hold it for later, or reject it. The decision should happen before the request consumes GPU memory.

Three admission outcomes
スライド 1 / 5Three admission outcomesThe ingress layer admits, holds or rejects before work reaches the engine.

During prefill the engine reads the prompt and builds the cache; during decoding the cache grows as the model generates. Accepting a request commits resources for its lifetime, so admitting a long request affects the work already running.

When GPU memory fills, an engine may preempt, swap or fail work. These responses can increase latency and waste computation. Self-hosted deployments need to protect their own capacity rather than assume the inference engine can absorb any burst.

A coding agent can fan out into many file reads, tests and model calls, with retries layered on top. One user request can therefore create tens of model requests close together, unlike a person typing one message and pausing to read.

02

Place the decision at ingress

The policy combines request and engine signals and tells clients whether to start, wait or stop.

Khatri asks where admission belongs. Agents know their own calls, gateways know keys and quotas, routers see replicas, and engines see batches and cache. None necessarily combines request details with current capacity before accepting work.

A policy can act at ingress, at the engine’s queue, or during decoding. Later decisions can see more state but may require modifying and maintaining a fork of the scheduler; the speakers focus on ingress because it can work with an unmodified engine.

At ingress, the policy combines request information with system state and chooses admit, defer or reject. The request consumes no GPU memory until admitted, although the front-end infrastructure still has to handle it.

Useful request signals include input length, tenant, session and deadline. Engine signals include cache usage, queue age, cache hits and replica-pool load. They recommend using metrics that change within seconds, because a minute average can hide a brief fan-out.

Request and engine signals
スライド 2 / 5Request and engine signalsThe policy can combine tenant, session and deadline data with queue and cache state.

Their example rules defer a prompt that does not fit available headroom or excess calls from a session, reject a tenant over its share, and reject work that cannot meet its deadline. Engine-side rules consider cache headroom, queue age, cached prefixes and pool saturation.

An HTTP 200 begins a stream but does not guarantee that the stream finishes. Khatri advises clients to monitor the stream, handle partial failures and close the connection when abandoning work so resources can be released.

For a temporary defer, their example returns 503 with a Retry-After value. The client should wait for that interval plus random jitter. Without coordinated delays, many retries can arrive together and turn an initial burst into an even larger one.

For rejection, they distinguish a 429 caused by a caller exceeding its share from a 529 used in their example for provider overload. Clients should reduce their own concurrency for the former; for the latter, wait, switch provider or park the work. Both need a finite retry budget and backoff.

03

Choose the unit, signal and decision rule

The speakers compare request and session admission and discuss when different policies are useful.

Jain explains why counting requests is not the same as measuring cost. A fixed per-client rate limit supports fairness but does not track GPU pressure, while a fixed in-flight count treats a short request and a long one alike.

A policy has four design choices: the unit admitted, the signal observed, the rule converting the signal into a decision, and the resulting action. A deadline-based rule, for example, cannot work unless requests actually carry useful deadlines.

Per-request versus per-session admission
スライド 3 / 5Per-request versus per-session admissionAn illustrative scenario shows how partial admission can leave both sessions incomplete.

Their illustrative comparison shows two sessions with 20 calls each and room for only half. Admitting half of each may leave neither complete; admitting one full session lets it finish while the other receives a clear defer. The diagram is a scenario, not a measured benchmark.

Signals serve different goals. Cache pressure can protect memory, cache hits can identify reuse, queue depth can reveal waiting, deadline slack can protect latency objectives, and output-length estimates can help plan for long answers. Each can fail to reveal a different bottleneck.

The speakers contrast simple thresholds, two-signal gates, optimizers and formal deadline bounds. A more elaborate decision can cost more time; an optimizer taking seconds may react too slowly to dozens of calls arriving in two seconds.

They summarize four research policies and their reported gains, while warning that the papers use different models, engines and workloads. They do not present the figures as a leaderboard. In their assessment none cleanly covers online, whole-session admission on an unmodified engine.

Their decision tree starts with deadlines; otherwise it asks whether the KV cache fills at peak load. Cache and reuse signals may be useful when memory is the bottleneck; a queue-based threshold may be more useful when the queue grows but cache does not fill.

04

Benchmark with realistic traffic and honest goodput

A repeatable harness counts all offered requests and detects missing signals.

Khatri recommends benchmarking a policy against a measured cluster baseline. Replay the same realistic agent trace with and without the policy, including fan-out, retries and sessions, and sweep load from below to above measured capacity.

Goodput includes rejected requests
スライド 4 / 5Goodput includes rejected requestsServing five percent perfectly is five percent goodput when all offered requests count.

Their proposed score divides requests that meet the latency objective by all offered requests, including rejected ones. If a system rejects 95% and perfectly serves the rest, admitted-only attainment is 100%, while this goodput measure is 5%.

A useful report should disclose load relative to capacity, deadlines relative to unloaded latency, signal freshness, repetitions and variation, parameter provenance, whether rejected requests count, and the complete model, engine, hardware, workload and baseline.

The team built AdmitPerf as both an ingress library and a benchmarking harness. The same policy function is used for the benchmark and deployment, so a comparison can run against a real engine and GPU without changing the policy being evaluated.

Their workflow starts infrastructure, checks it is serving, benchmarks policies repeatedly, compares results and shuts the infrastructure down. They keep the deployment fixed across policy comparisons so provisioning changes do not confound the result.

A policy must declare the signals it requires. If cache usage is unavailable, the benchmark should stop rather than silently treating the missing value as zero and turning a cache threshold into an accept-everything policy.

On their small Qwen 2.5 0.5B and A10G test, the displayed table reports 80 requests at 15 per second and two repeats. With a maximum of two waiting requests, 63.1% were admitted and p95 time to first token fell from about 2.3 seconds to 0.95 seconds at the same reported goodput.

Queue limit experiment
スライド 5 / 5Queue limit experimentThe table reports admission rate, p95 first-token latency and goodput for a small GPU test.

In that run the KV cache peaked around 0.5% while the queue grew to 24 requests. A cache-pressure rule would have missed the bottleneck. The team also provides a fake engine so the setup can be explored on a laptop without a GPU.

同じチャンネルの記事

スライド 4 枚38:50EN
AI Engineer· 2026年11月10日LinkedIn’s self-improving agent first had to fix its judgesZiwei Guo, Saloni Gandhi · LinkedInA prompt-optimization loop improved a career agent, but unreliable evaluators required human calibration first.エージェント工学評価とオブザーバビリティAgent orchestration+1
スライド 5 枚12:57EN
AI Engineer· 2026年11月10日Harvey’s agents scaled until their platform and merge queue brokeJoey Wang · HarveyAfter an alert spawned 900 agents and one engineer launched 950 tasks, Harvey added deduplication and fair scheduling.エージェント工学Agent orchestrationDeveloper productivity+1
スライド 2 枚28:00EN
AI Engineer· 2026年11月10日Robinhood’s AI reviewer merges 60% of data PRs without human reviewChetas Joshi · RobinhoodScripts verify live facts, an agent traces code risks, and people retain sensitive decisions.エージェント工学Code review & verification人による検証(HITL)+1
スライド 7 枚19:41EN
AI Engineer· 2026年11月9日A high-reliability automation starts by routing the hard cases awayMatthew Jewkes · Standard CyberneticsMatthew Jewkes describes separating critical errors, ambiguous decisions and unusual exceptions in a biopharma indexing workflow.エージェント工学Workflow automation評価(Evals)+1
スライド 7 枚22:01EN
AI Engineer· 2026年11月9日Zach Lloyd: make the software factory measurable and editableZach Lloyd · WarpWarp’s CEO proposes recording agent runs, scoring failures and testing changes to the workflow on real tasks.ソフトウェアファクトリーコーディングエージェント評価(Evals)+2
スライド 12 枚27:35EN
AI Engineer· 2026年11月9日Uber traded an always-green trunk for faster AI-scale mergesPreetam Dwivedi, Manjari Akella · UberIts merge queue now relaxes some conflicts and validates the combined state after landing, with a verified-good fallback.開発ワークフローとテストコーディングエージェントインフラとデプロイ+2