LiteLLM

LiteLLM 6강

[라우팅] Router — 로드밸런싱 & 폴백

Router같은 모델의 여러 배포(다른 키·리전·공급자)를 하나의 풀로 묶어 부하를 분산하고, 한도 초과·장애 시 자동으로 폴백한다. 대량 트래픽에서 429를 회피하고 가용성을 높이는 핵심 도구다.

LiteLLM 6강 구성도

이 강의 목표는 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