Router는 같은 모델의 여러 배포(다른 키·리전·공급자)를 하나의 풀로 묶어 부하를 분산하고, 한도 초과·장애 시 자동으로 폴백한다. 대량 트래픽에서 429를 회피하고 가용성을 높이는 핵심 도구다.
이 강의 목표는 model_list로 배포 풀을 구성하고, 라우팅 전략과 폴백을 설정하는 것이다.
1. 배포 풀 구성
model_name이 같은 항목들이 하나의 풀이 된다. Router는 요청 때 이 이름으로 풀을 고르고, 전략에 따라 실제 배포를 선택한다.
from litellm import Router
router = Router(
model_list=[
{"model_name": "gpt-4o",
"litellm_params": {"model": "openai/gpt-4o", "api_key": "k1",
"rpm": 100}},
{"model_name": "gpt-4o",
"litellm_params": {"model": "azure/gpt-4o", "api_key": "k2",
"api_base": "https://x.openai.azure.com"}},
],
routing_strategy="usage-based-routing-v2",
fallbacks=[{"gpt-4o": ["claude-sonnet"]}],
num_retries=2,
)
resp = router.completion(model="gpt-4o", messages=msgs)
2. 라우팅 전략
| 전략 | 동작 |
|---|---|
simple-shuffle |
가중치(rpm/tpm) 기반 랜덤 분배 |
least-busy |
진행 중 요청이 가장 적은 배포 |
usage-based-routing-v2 |
TPM/RPM 여유가 큰 배포 우선 |
latency-based-routing |
최근 지연이 가장 낮은 배포 |
3. 폴백
fallbacks는 1차 풀이 모두 실패했을 때 넘어갈 대체 모델을 지정한다. context_window_fallbacks(토큰 초과 시)도 따로 둘 수 있다.
핵심 명령·용어
| 이름 | 뜻 |
|---|---|
model_list |
배포 풀 정의 |
routing_strategy |
분산 알고리즘 |
fallbacks |
실패 시 대체 모델 |
rpm / tpm |
배포별 분당 요청·토큰 한도 |
예제
# 비동기 라우터로 대량 병렬 처리
import asyncio
async def run():
tasks = [router.acompletion(model="gpt-4o",
messages=[{"role":"user","content":f"{i}번 요약"}])
for i in range(20)]
return await asyncio.gather(*tasks)
asyncio.run(run())
해설) 20개 요청이 두 배포(k1·k2)로 자동 분산돼 단일 키의 429를 피한다. Router는 SDK뿐 아니라 다음 강의의 Proxy 내부에서도 그대로 쓰인다.
댓글 0
댓글은 운영자만 작성할 수 있어요.