[Ray] LLM 추론 벤치마크 엔진에 동시성 모드와 일정 QPS 모드 추가
PR 링크: ray-project/ray#62081 상태: Merged | 변경: +2282 / -8
들어가며
LLM 추론 서버의 성능을 측정할 때, 실제 서비스 패턴(다중 턴 대화, KV 캐시 히트율, 세션 간 시스템 프롬프트 공유)을 반영하는 벤치마크가 필요합니다. 이 PR은 Ray Serve의 LLM 벤치마크에 두 가지 트래픽 모드를 추가합니다: Concurrency 모드(rolling session pool)와 Rate 모드(token-bucket 기반 일정 QPS). ISL/hit-rate에서 user_tokens과 sys_tokens를 역산하는 WorkloadSpec 솔버도 포함됩니다.
핵심 코드 분석
WorkloadSpec: ISL/hit-rate로부터 토큰 수 역산
@dataclass
class WorkloadSpec:
isl: Optional[int] = None # 평균 입력 시퀀스 길이
hit_rate: Optional[float] = None # KV 캐시 히트율
def _derive_from_simple(self) -> None:
"""ISL = s + (n+1)/2 * u + (n-1)/2 * a
(1-h)*ISL = (1-f)*s/n + u
두 방정식에서 user_tokens(u)와 sys_tokens(s)를 역산"""
denom = 1 - (1 - f) * (n + 1) / (2 * n)
numer = (1 - h) * isl - (1 - f) / n * (isl - (n - 1) * a / 2)
user_tokens = numer / denom
sys_tokens = isl - (n + 1) / 2 * user_tokens - (n - 1) / 2 * a
TextGenerator: 정확한 토큰 수 텍스트 생성
토크나이저 라운드트립과 BPE-merge 폴백을 사용하여 요청된 토큰 수와 정확히 일치하는 텍스트를 생성합니다.
Concurrency 모드: 엔트로피 기반 웜업
# Rolling session pool에서 엔트로피가 충분히 높아질 때까지 웜업
# 세션 간 jitter로 동기화를 방지하여 정상 상태에 빠르게 도달
Rate 모드: Token-bucket 페이서
일정한 QPS로 요청을 발생시키되, 지연된 세션의 lazy 생성과 시간 기반 웜업을 지원합니다.
왜 이게 좋은가
- 현실적 벤치마크: 단순 단일 턴이 아닌 다중 턴 대화, KV 캐시 히트율, 시스템 프롬프트 공유를 모델링합니다.
- 두 가지 트래픽 모델: Closed-loop(동시성 제한)과 Open-loop(일정 QPS) 모두를 지원하여 서로 다른 부하 패턴을 측정합니다.
- 정확한 토큰 수: BPE 토크나이저의 특성을 고려한 정밀한 텍스트 생성으로, ISL/OSL이 의도한 값과 정확히 일치합니다.
- 포괄적 메트릭: TTFT, FC(첫 청크 지연), TPOT(토큰당 출력 시간)을 턴 단위로 수집합니다.
- 광범위한 테스트: 30개의 유닛 테스트가
WorkloadSpec역산,TextGenerator,Conversation,BenchmarkState를 검증합니다.
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [triton] AMD GPU Descriptor Encoding 최적화 패스 추가
- 현재글 : [Ray] LLM 추론 벤치마크 엔진에 동시성 모드와 일정 QPS 모드 추가
- 다음글 [gradio] Gradio SSE 라우트의 폴링 제거를 통한 성능 최적화
댓글