[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(...)
MapBatches가 can_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 의 다른글
- 이전글 [Ray Data] 중복 batch_format 유효성 검사 제거
- 현재글 : [Ray] MapBatches 행 수 변경 시에도 연산자 퓨전을 유지하도록 수정
- 다음글 [Triton] AMD PartitionedSharedEncodingAttr 도입으로 shared memory 파티셔닝 지원
댓글