본문으로 건너뛰기

[Ray Serve] Controller 마이크로벤치마크 공식 추가

PR 링크: ray-project/ray#61368 상태: Merged | 변경: +568 / -2

들어가며

Ray Serve의 Controller는 모든 deployment의 오토스케일링, replica 관리, 상태 업데이트를 담당하는 핵심 컴포넌트입니다. deployment 수가 늘어나면 Controller의 루프 속도가 저하되어 스케일링 지연이 발생할 수 있습니다. 이 PR은 Controller의 성능을 체계적으로 측정하는 마이크로벤치마크를 공식 릴리스 테스트에 추가합니다.

핵심 코드 분석

벤치마크 아키텍처

CONTROLLER_BENCH_CONFIG = {
    "checkpoints": [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048],
    "marination_period_s": 180,
    "sample_interval_s": 5,
}

체크포인트별로 replica 수를 증가시키며 각 단계에서 Controller의 성능 메트릭을 수집합니다.

측정 메트릭

def _controller_extract_metrics_row(health_metrics, ...):
    return {
        "loops_per_second": health_metrics.get("loops_per_second", 0),
        "event_loop_delay_s": health_metrics.get("event_loop_delay_s", 0),
        "deployment_state_update_mean_s": get_stat(...),
        "application_state_update_mean_s": get_stat(...),
        "process_memory_mb": health_metrics.get("process_memory_mb", 0),
        # ...
    }

주요 측정 항목:

  • loops_per_second: Controller 메인 루프 초당 실행 횟수
  • event_loop_delay_s: asyncio 이벤트 루프 지연
  • deployment_state_update_mean_s: deployment 상태 업데이트 소요 시간
  • process_memory_mb: Controller 프로세스 메모리 사용량

부하 생성 Deployment

@serve.deployment(
    autoscaling_config=_CONTROLLER_AUTOSCALING_CONFIG,
    max_ongoing_requests=2,
    graceful_shutdown_timeout_s=1,
)
class ControllerBenchMetricsGenerator:
    """Autoscaling deployment that generates handle metrics."""
    def __init__(self, hello_world: DeploymentHandle):
        self.hello_world = hello_world

    async def __call__(self):
        return await self.hello_world.remote()

오토스케일링이 활성화된 deployment가 요청을 생성하여 Controller에 부하를 줍니다.

왜 이게 좋은가

  1. 성능 회귀 감지: 릴리스 테스트에 포함되어 CI에서 자동으로 Controller 성능을 추적합니다. 성능 저하가 발생하면 즉시 감지됩니다.
  2. 스케일링 병목 식별: replica 수를 1에서 2048까지 증가시키며 어느 지점에서 Controller가 병목이 되는지 정량적으로 파악할 수 있습니다.
  3. 최적화 효과 검증: stop_replicas() 최적화(#60832), AutoscalingPolicy 캐싱(#60844) 같은 개선의 효과를 벤치마크로 검증할 수 있습니다.

실제 측정 결과(1 replica 기준):

  • Controller 루프: 9.65 loops/sec
  • 루프 지속 시간: 3.2ms
  • 이벤트 루프 지연: 0.59ms
  • 메모리: 185MB

벤치마크 없이는 최적화의 방향을 잡기 어렵습니다. 이 PR은 Ray Serve Controller의 성능을 체계적으로 추적하기 위한 중요한 기반을 마련합니다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글