[논문 리뷰] Weld: Rethinking the Interface Between Data-Intensive Applications
Weld는 Spark, TensorFlow, Pandas, NumPy와 같은 다양한 라이브러리 간의 데이터 이동을 최적화하기 위해 통합된 지연 평가 방식의 중간 표현(IR)을 사용하는 데이터 집약적 애플리케이션을 위한 새로운 인터페이스를 제안한다. 이는 루프 융합 및 벡터화와 같은 기능 간 최적화를 가능하게 하며, 기존 API를 변경하지 않은 채로 다중 라이브러리 워크플로우에서 최대 29배, 단일 라이브러리 파ip라인에서 최대 6.5배의 성능 향상을 달성한다.
Data analytics applications combine multiple functions from different libraries and frameworks. Even when each function is optimized in isolation, the performance of the combined application can be an order of magnitude below hardware limits due to extensive data movement across these functions. To address this problem, we propose Weld, a new interface between data-intensive libraries that can optimize across disjoint libraries and functions. Weld exposes a lazily-evaluated API where diverse functions can submit their computations in a simple but general intermediate representation that captures their data-parallel structure. It then optimizes data movement across these functions and emits efficient code for diverse hardware. Weld can be integrated into existing frameworks such as Spark, TensorFlow, Pandas and NumPy without changing their user-facing APIs. We demonstrate that Weld can speed up applications using these frameworks by up to 29x.
연구 동기 및 목표
- 독립적으로 최적화된 라이브러리 간의 과도한 데이터 이동으로 인해 발생하는 데이터 분석 워크로드의 성능 저하 문제를 해결하기 위해.
- 기존 라이브러리 API를 변경하지 않고도 루프 융합 및 벡터화와 같은 기능 간 최적화를 가능하게 하기 위해.
- 다양한 워크로드를 아우르는 데이터-병렬 계산을 포괄할 수 있는 일반 목적의 하드웨어 독립적 중간 표현(IR)을 설계하기 위해.
- 독립적으로 개발된 라이브러리 간 런타임 최적화가 수동 최적화 코드 수준에 가까운 성능을 달성할 수 있음을 입증하기 위해.
- 단일 스레드 라이브러리인 NumPy와 Pandas를 병렬 하드웨어에서 효율적으로 실행하기 위해 소스 코드 변경 없이 자동 병렬화를 가능하게 하기 위해.
제안 방법
- Weld는 중첩된 병렬 루프와 '빌더'—결과를 계산할 것인지에 대한 구체적인 구현 세부 정보 없이 명시하는 추상화—기반의 기능적 중간 표현(IR)을 사용한다.
- 라이브러리들은 지연 평가되는 런타임 API를 통해 IR 조각을 제출하며, 실행은 평가가 강제될 때까지 연기된다.
- Weld 최적화기에서는 여러 라이브러리의 IR 조각을 결합하고, 함수 경계를 넘어서 루프 융합, 루프 타일링, 벡터화와 같은 최적화를 적용한다.
- 시스템은 다중 코어 CPU와 GPU를 포함한 다양한 하드웨어에 대해 효율적인 기계어 코드를 생성하며, Spark SQL 및 NumPy와 같은 라이브러리의 네이티브 메모리 데이터 형식을 유지한다.
- 경량 래퍼를 통해 기존 프레임워크와 통합되어 사용자 인터페이스 API의 후행 호환성을 유지한다.
- IR은 관계형, 그래프, 기계 학습 워크로드를 모두 표현할 수 있어 이질적인 데이터-병렬 연산 간 최적화를 가능하게 한다.
실험 결과
연구 질문
- RQ1통합된 중간 표현(IR)이 개별 라이브러리 내에서 불가능한 기능 간 최적화를 가능하게 할 수 있는가?
- RQ2지연 평가와 IR 조합을 통해 다중 라이브러리 데이터 분석 파이프라인에서의 데이터 이동 오버헤드를 어느 정도 줄일 수 있는가?
- RQ3일반 목적의 IR이 XLA나 Hyper와 같은 전용 시스템 수준의 성능을 다양한 워크로드에서 달성할 수 있는가?
- RQ4잘 최적화된 라이브러리와 단일 스레드 함수를 모두 포함하는 워크로드에서 Weld의 최적화 효과는 어느 정도인가?
- RQ5소스 코드 변경 없이 Weld이 단일 스레드 라이브러리인 NumPy와 Pandas의 자동 병렬화를 가능하게 할 수 있는가?
주요 결과
- Weld은 Spark, TensorFlow, Pandas, NumPy와 같은 다양한 데이터 집약적 라이브러리를 조합한 애플리케이션에서 최대 29배의 성능 향상을 달성한다.
- 단일 라이브러리의 함수만을 사용하는 워크플로우에서도 Weld는 데이터 이동을 최소화하고 기능 간 최적화를 가능하게 하여 최대 6.5배의 성능 향상을 제공한다.
- NumPy와 Pandas와 같은 단일 스레드 라이브러리를 병렬화할 경우, 자동으로 데이터 병렬성을 활용함으로써 최대 180배의 성능 향상을 달성한다.
- Weld는 Spark SQL, TensorFlow, Pandas, NumPy와 같은 기존 프레임워크와 API를 변경하지 않고도 성공적으로 통합된다.
- Weld의 최적화기는 라이브러리 경계를 넘어서 루프 융합 및 벡터화를 적용하여 중간 데이터 재료화를 줄이고 메모리 대역폭 활용도를 향상시킨다.
- 중간 표현(IR)은 관계형, 그래프, 기계 학습 워크로드를 모두 표현할 수 있을 정도로 일반적이며, 다양한 하드웨어 플랫폼에서 고성능 코드 생성을 가능하게 한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.