Скучный слой перед моделью

Половину «проблем инференса» решает nginx перед FastAPI: лимиты, таймауты, кэш и честные 503. Дешевле, чем масштабировать GPU.

Когда инференс «тормозит», первый рефлекс — масштабировать GPU. Дорого. Половина таких историй лечится обычным nginx перед сервисом — слоем, который не решает задачи модели, но честно берёт на себя все бытовые.

Что забирает на себя гейтвей

  • Rate limit per ключ. Модель не должна страдать от того, что один интеграатор написал цикл без сна.
  • Таймауты. proxy_read_timeout короче, чем терпение клиента. 503 за 300 мс лучше, чем 200 через минуту — второе ещё и удерживает воркер.
  • Кэш идемпотентных запросов. Для классификаторов с стабильным входом hit rate 30–60% — обычное дело, и это бесплатно снятая очередь на инференс.
  • Честные коды ошибок. 429 с Retry-After вместо «сейчас подумает, но долго».
location /infer {
    limit_req zone=infer burst=20 nodelay;
    proxy_read_timeout 0.3s;
    proxy_next_upstream error timeout http_502 http_503;
    proxy_cache infer_cache;
    proxy_cache_key "$cache_key";
    proxy_cache_valid 200 5m;
    add_header X-Cached $upstream_cache_status;
}

Проверка на честность

Через месяц после включения кэша посмотрите, что у вас в X-Cached. Если HIT на запросах с персональными данными или на том, что явно должно считаться заново, — кэш надо чинить, а не гордиться им. Кэш, который кэширует неправильное, хуже отсутствия кэша: он молча врёт.

Самый дешёвый инференс — тот, до которого модель не дошла.

Синий-зелёный на уровне upstream-ов, серые 429 в дашборде вместо красных алертов и GPU, который не греется впустую, — весь профит от слоя, который никто никогда не хвалит. Его и не нужно хвалить. Его нужно просто не выключать «временно» в пятницу.

СКОПИРОВАНО