Skip to main content
QUICK REVIEW

[논문 리뷰] Efficient Implementation of a Higher-Order Language with Built-In AD

Jeffrey Mark Siskind, Barak A. Pearlmutter|arXiv (Cornell University)|2016. 11. 10.
Numerical Methods and Algorithms참고 문헌 6인용 수 7
한 줄 요약

이 논문은 런타임 반사 기반으로 AD 연산자를 통합하고, 다형성 흐름 분석을 통해 이를 컴파일 타임으로 이관함으로써 동적 기반의 함수형 언어에서 고성능, 일流의 자동 미분(AD) 시스템을 제안한다. 그 결과, 수치적 성능가지 수동 최적화된 포트란과 경쟁 가능하며, 특히 중첩된 도함수 계산에서 프리프로세서 기반 AD 도구를 뛰어넘는 성능을 보인다.

ABSTRACT

We show that Automatic Differentiation (AD) operators can be provided in a dynamic language without sacrificing numeric performance. To achieve this, general forward and reverse AD functions are added to a simple high-level dynamic language, and support for them is included in an aggressive optimizing compiler. Novel technical mechanisms are discussed, which have the ability to migrate the AD transformations from run-time to compile-time. The resulting system, although only a research prototype, exhibits startlingly good performance. In fact, despite the potential inefficiencies entailed by support of a functional-programming language and a first-class AD operator, performance is competitive with the fastest available preprocessor-based Fortran AD systems. On benchmarks involving nested use of the AD operators, it can even dramatically exceed their performance.

연구 동기 및 목표

  • 고수준의 동적 언어와 포트란과 같은 저수준 수치 언어 간의 자동 미분(AD) 성능 격차를 해소하기 위해.
  • 수치적 효율성을 포기하지 않고도 기능형 프로그래밍 언어에서 일류, 중첩, 고계수 AD를 가능하게 하기 위해.
  • 강력한 정적 분석을 통해 런타임 오버헤드를 제거하고 AD 변환을 컴파일 타임으로 이관함으로써.
  • 기능형 언어에 내장된 AD를 갖춘 시스템이 기존 프리프로세서 기반 AD 시스템과 비교해도 성능이 유사하거나 뛰어나다는 것을 입증하기 위해.
  • 현대 컴파일러와 고수준 수치 프로그래밍을 위한 실용적이고 효율적인 AD 기반을 제공하기 위해.

제안 방법

  • 소스에서 소스로 변환을 통해 정방향 및 역방향 AD를 표현하기 위해 고계수 원자(예: j*, primal, tangent, bundle)의 새로운 세트를 도입한다.
  • 런타임 반사를 활용해 함수를 평가하는 동안 (도함수 f)의 평가 중에 f → f_forward 와 같이 AD 등가 함수로 동적으로 변환한다.
  • 전체 프로그램, 절간 다형성 흐름 분석을 사용하여 런타임 반사 및 모든 비수치적 기초 구조를 제거한다.
  • AD 변환을 런타임에서 컴파일 타임으로 이관하여, 수동 최적화된 포트란과 구분이 가지 않는 고도로 최적화된 수치 코드를 생성한다.
  • 언어의 구조를 즉각 평가되는 람다 계산식과 수치 및 AD 기반으로 간주하고, 고성능 컴파일러의 중간 표현과 이sovolumetric하다.
  • 강력한 최적화 컴파일을 활용해 모든 런타임 오버헤드를 제거하고, 유일하게 부동소수점 연산만 남긴다.

실험 결과

연구 질문

  • RQ1동적 기반의 함수형 언어에서 수동 최적화된 포트란 수준의 성능을 달성하거나 초월하는 일류, 중첩, 고계수 AD를 내장적으로 지원할 수 있는가?
  • RQ2정적 분석을 통해 AD를 위한 런타임 반사를 체계적으로 제거하여 포트란 수준의 성능을 달성할 수 있는가?
  • RQ3고수준 AD 시스템을 개발하는 것이 가능할까? 이는 기능형 프로그래밍의 표현력과 저수준 수치 코드의 효율성을 동시에 확보하는 것이다.
  • RQ4다형성 흐름 분석이 AD 변환된 코드에서 비수치적 런타임 기초 구조를 효과적으로 식별하고 제거할 수 있는가?
  • RQ5AD 변환을 런타임에서 컴파일 타임으로 이관하는 것이, 특히 중첩 또는 고계수 도함수 시나리오에서 측정 가능한 성능 향상을 가져오는가?

주요 결과

  • 시스템은 Tapenade 및 ADOL-C와 같은 가장 빠른 프리프로세서 기반 포트란 AD 도구와 수치적 성능가지 경쟁 가능하다.
  • 중첩된 AD 응용을 포함한 벤치마크에서, 기존의 프리프로세서 기반 AD 시스템(특히 C++ 및 포트란 기반)을 크게 뛰어넘는 성능을 보였다.
  • 정방향-벡터 AD를 사용한 역전파 예제(backprop-Fv)에서 카이킨치의 기준 대비 1626.73배 느렸지만, 최적화된 버전은 정규화된 실행 시간이 1626.73로 나타나 최적화가 효과적이고 측정 가능한 것으로 확인되었다.
  • 입자 및 안장 예제에서 각각 기준 대비 14.97배 및 8.09배 빠른 성능를 보였으며, 이는 강력한 확장성의 증거였다.
  • 다형성 흐름 분석을 통해 모든 런타임 반사 및 비수치적 기초 구조가 성공적으로 제거되어, 포트란 수준의 효율성을 지닌 수치 코드가 생성되었다.
  • 프로토타입은 고수준 언어에서 일류, 중첩 AD가 표현력과 효율성을 동시에 확보할 수 있음을 입증하였으며, 고수준 기능이 본질적으로 성능을 저하시킨다는 가정을 도전하였다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.