본문으로 건너뛰기

[Ray Data] 클러스터 오토스케일러에 논리 메모리 사용률 지표를 추가하여 스케일링 정확도 향상

PR 링크: ray-project/ray#61007 상태: Merged | 변경: +43 / -3

들어가며

Ray Data의 클러스터 오토스케일러는 ResourceUtilizationGauge를 사용하여 클러스터 사용률을 모니터링하고 스케일업/다운을 결정합니다. 기존에는 CPU, GPU, Object Store Memory 3가지 자원만 감시했지만, 논리 메모리(memory) 사용률은 빠져 있었습니다. 메모리 부족으로 OOM이 발생할 수 있는 상황에서도 오토스케일러가 반응하지 못하는 맹점이 있었습니다.

핵심 코드 분석

Before: 메모리 없이 3가지 자원만 체크

def try_trigger_scaling(self):
    util = self._resource_util_gauge.get()
    if (
        util.cpu < self._cluster_scaling_up_util_threshold
        and util.gpu < self._cluster_scaling_up_util_threshold
        and util.object_store_memory < self._cluster_scaling_up_util_threshold
    ):
        # 스케일업 불필요
        return

After: 논리 메모리 추가

# ResourceUtilizationGauge에 메모리 계산기 추가
self._cluster_mem_util_calculator = TimeWindowAverageCalculator(
    cluster_util_avg_window_s
)
self._cluster_mem_utilization_gauge = Gauge(
    "data_cluster_mem_utilization",
    description="Cluster utilization % (Memory)",
    tag_keys=("dataset",),
)

# 스케일업 판단에 메모리 포함
def try_trigger_scaling(self):
    util = self._resource_util_gauge.get()
    if (
        util.cpu < self._cluster_scaling_up_util_threshold
        and util.gpu < self._cluster_scaling_up_util_threshold
        and util.memory < self._cluster_scaling_up_util_threshold  # 추가
        and util.object_store_memory < self._cluster_scaling_up_util_threshold
    ):
        return

# get()에서 메모리 포함 반환
def get(self) -> ExecutionResources:
    return ExecutionResources(
        cpu=self._cluster_cpu_util_calculator.get_average(),
        gpu=self._cluster_gpu_util_calculator.get_average(),
        memory=self._cluster_mem_util_calculator.get_average(),  # 추가
        object_store_memory=self._cluster_obj_mem_util_calculator.get_average(),
    )

왜 이게 좋은가

  1. OOM 방지: 논리 메모리 사용률이 임계값을 초과하면 오토스케일러가 스케일업을 트리거하여 OOM 위험을 줄인다.
  2. Grafana 대시보드 연동: data_cluster_mem_utilization 메트릭이 추가되어 모니터링 대시보드에서 메모리 사용률 추이를 확인할 수 있다.
  3. 기존 패턴 일관성: CPU/GPU와 동일한 TimeWindowAverageCalculator + Gauge 패턴을 따라 코드 일관성을 유지했다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글