본문으로 건너뛰기

[Ray] MapBatches 행 수 변경 시에도 연산자 퓨전을 유지하도록 수정

PR 링크: ray-project/ray#60756 상태: Merged | 변경: +15 / -19

들어가며

Ray Data의 연산자 퓨전(Operator Fusion)은 연속된 맵 연산을 하나의 태스크로 합쳐 오버헤드를 줄이는 핵심 최적화입니다. 그러나 MapBatches가 행 수를 수정한다고 올바르게 보고하도록 수정된 이전 PR(#60448)이 의도치 않게 퓨전 로직을 깨뜨렸습니다. 이 PR은 MapBatches에 대해 특별 케이스를 추가하여 역사적으로 항상 퓨전되던 동작을 복원합니다.

핵심 코드 분석

Before: 행 수 변경 연산자는 퓨전 불가

if (
    upstream_op.can_modify_num_rows
    and downstream_op.min_rows_per_bundled_input is not None
):
    logger.debug(...)

MapBatchescan_modify_num_rows = True로 올바르게 보고하면서 퓨전이 차단되었습니다.

After: MapBatches는 예외적으로 퓨전 허용

if (
    upstream_op.can_modify_num_rows
    # MapBatches는 역사적으로 항상 퓨전되었으므로 예외 처리
    and not isinstance(upstream_op, MapBatches)
) and downstream_op.min_rows_per_bundled_input is not None:
    logger.debug(...)

MapBatches 인스턴스인 경우 행 수 변경 여부와 관계없이 퓨전을 허용합니다.

왜 이게 좋은가

  • 회귀 방지: 2023년 6월부터 MapBatches는 항상 퓨전되었습니다. 이 동작을 깨면 기존 파이프라인의 성능이 저하됩니다.
  • 근본 원인 추적: PR 설명에 2023년부터 2026년까지의 변경 타임라인을 상세히 기록하여 향후 유지보수를 돕습니다.
  • 테스트 정리: udf_modifying_row_count=False 파라미터를 제거하여 테스트 코드가 더 간결해졌습니다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글