[Ray Data] AutoscalingCoordinator에서 여러 데이터셋 실행 시 리소스 이중 할당 방지
PR 링크: ray-project/ray#59740 상태: Merged | 변경: +78 / -14
들어가며
Ray Data의 AutoscalingCoordinator는 여러 데이터셋이 동시에 실행될 때 클러스터 리소스를 배분하는 역할을 한다. 각 데이터셋은 명시적으로 요청한 리소스 외에 request_remaining=True로 잔여 리소스도 요청할 수 있다. 기존 구현에서는 잔여 리소스를 모든 request_remaining=True 요청자에게 중복 할당하여, 실제 가용 리소스보다 더 많은 리소스가 할당된 것처럼 보이는 문제가 있었다.
핵심 코드 분석
Before: 잔여 리소스 중복 할당
# NOTE, to handle the case where multiple datasets are running concurrently,
# now we double-allocate remaining resources to all requesters with
# `request_remaining=True`.
for ongoing_req in ongoing_reqs:
if ongoing_req.request_remaining:
ongoing_req.allocated_resources.extend(cluster_node_resources)
After: 균등 분배
remaining_resource_requesters = [
req for req in ongoing_reqs if req.request_remaining
]
num_remaining_requesters = len(remaining_resource_requesters)
if num_remaining_requesters > 0:
for node_resource in cluster_node_resources:
divided_resource = {
k: v // num_remaining_requesters for k, v in node_resource.items()
}
for ongoing_req in remaining_resource_requesters:
if any(v > 0 for v in divided_resource.values()):
ongoing_req.allocated_resources.append(divided_resource)
왜 이게 좋은가
- 리소스 과다 할당 방지: CPU 10, GPU 5인 노드에서 2개의 데이터셋이 각각 CPU 2, GPU 1을 사용 중이라면, 잔여 CPU 5, GPU 3을 각각 CPU 2, GPU 1씩 공평하게 나눈다. 이전에는 두 데이터셋 모두 잔여 전체를 할당받아 CPU 5+5=10이 할당된 것처럼 계산되었다.
- 정수 나눗셈으로 안전성 확보:
//연산자로 나누므로 할당량의 합이 실제 가용량을 초과하지 않는다. 나머지로 인해 일부 리소스가 미할당될 수 있지만, 과다 할당보다 안전하다. - 0값 필터링:
if any(v > 0 for v in divided_resource.values())로 모든 값이 0인 리소스 할당을 건너뛴다.
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [Triton] AMD TDM L2 Prefetch 백엔드 지원 추가
- 현재글 : [Ray Data] AutoscalingCoordinator에서 여러 데이터셋 실행 시 리소스 이중 할당 방지
- 다음글 [cpython] gh-124951: base64 인코딩/디코딩 2~3배 속도 향상 — CPU 파이프라이닝 최적화
댓글