본문으로 건너뛰기

[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 의 다른글