Skip to main content
QUICK REVIEW

[논문 리뷰] DeepDSL: A Compilation-based Domain-Specific Language for Deep Learning

Tian Zhao, Xiao Bing Huang|arXiv (Cornell University)|2017. 01. 09.
Multimodal Machine Learning Applications인용 수 3
한 줄 요약

DeepDSL은 두 단계 최적화 파이프라인을 통해 딥 뉴럴 네트워크를 효율적이고 이식 가능하며 사용자 정의 가능한 자바 소스 코드로 컴파일하는 스칼라 내장 도메인 특화 언어이다. 이는 기호적 기울기 유도, 정적 메모리 분석, JNI를 통한 CUDA 타겟팅 코드 생성을 가능하게 하여, Caffe와 Tensorflow에 비해 경쟁적인 런타임 성능과 뛰어난 메모리 효율성을 달성한다. 특히 GPU 메모리 제약 조건 하에서 뛰어난 성능을 발휘한다.

ABSTRACT

In recent years, Deep Learning (DL) has found great success in domains such as multimedia understanding. However, the complex nature of multimedia data makes it difficult to develop DL-based software. The state-of-the art tools, such as Caffe, TensorFlow, Torch7, and CNTK, while are successful in their applicable domains, are programming libraries with fixed user interface, internal representation, and execution environment. This makes it difficult to implement portable and customized DL applications. In this paper, we present DeepDSL, a domain specific language (DSL) embedded in Scala, that compiles deep networks written in DeepDSL to Java source code. Deep DSL provides (1) intuitive constructs to support compact encoding of deep networks; (2) symbolic gradient derivation of the networks; (3) static analysis for memory consumption and error detection; and (4) DSL-level optimization to improve memory and runtime efficiency. DeepDSL programs are compiled into compact, efficient, customizable, and portable Java source code, which operates the CUDA and CUDNN interfaces running on Nvidia GPU via a Java Native Interface (JNI) library. We evaluated DeepDSL with a number of popular DL networks. Our experiments show that the compiled programs have very competitive runtime performance and memory efficiency compared to the existing libraries.

연구 동기 및 목표

  • 기존 딥 러닝 라이브러리의 제한 사항을 해결한다. 이는 인터페이스, 표현 방식, 실행 환경이 고정되어 있어 이식성과 사용자 정의의 가능성을 제한한다.
  • 개발자가 강타입 언어인 스칼라에서 고수준 텐서 함수로 딥 네트워크를 정의할 수 있도록 한다. 이를 통해 코드 안정성과 유지보수성을 향상시킨다.
  • 런타임 장애(예: 메모리 부족 예외)를 방지하기 위해 조기 오류 검출 및 메모리 소비 예측을 위한 정적 분석을 제공한다.
  • 모든 CUDA 지원 플랫폼에서 실행 가능한, 압축되고 인간이 읽을 수 있으며 사용자 정의 가능한 자바 소스 코드를 생성한다.
  • 정적 스케줄링을 통한 텐서 해제 배치 및 런타임 최적화를 통해 메모리 효율성을 향상시켜, 동일한 GPU에서 Caffe나 TensorFlow보다 더 큰 배치 크기를 허용한다.

제안 방법

  • 스칼라에 딥 러닝 구조를 도메인 특화 추상화로 내장하여, 텐서를 색인된 스칼라 표현식으로 표현함으로써 DSL 수준에서 계산을 노출한다.
  • 텐서 함수에 대해 기호적 기울기 유도를 수행하여 런타임 오버헤드 없이 백프로파게이션 로직을 자동으로 생성한다.
  • 두 단계 최적화를 적용한다: 첫 번째로 표현식 수준에서의 최적화(간소화, 루프 병합, 코드 이동, 벡터화), 두 번째로 정적 단일 할당(SSA) 형식에서의 공통 표현식 제거 및 인lines 처리.
  • 단일 패ass, 문자열 기반의 코드 생성기를 사용하여 타겟 자바 소스 코드를 생성하며, 이는 읽기 쉬우며 DSL 표현식과 독립적인 모듈화된 코드를 생성한다.
  • JCuda를 통합하여 JNI를 통해 CUDA 커널을 호출함으로써 GPU 가속을 가능하게 하되, JVM을 통해 플랫폼 독립성을 유지한다.
  • 정적 메모리 분석을 구현하여 각 레이어의 런타임 메모리 사용량을 예측하고, 피크 메모리 소비를 최소화하기 위해 텐서 해제를 재스케줄링한다.

실험 결과

연구 질문

  • RQ1일반 목적 언어인 스칼라에 내장된 도메인 특화 언어가 딥 러닝에서 경쟁적인 성능과 메모리 효율성을 달성하면서도 완전한 사용자 정의를 가능하게 할 수 있는가?
  • RQ2정적 분석이 딥 러닝 DSL에서 컴파일 이전에 설계 오류 탐지 및 메모리 소비 예측에 얼마나 효과적인가?
  • RQ3두 단계 최적화 파이프라인은 기존 딥 러닝 라이브러리에 비해 메모리 효율성과 런타임 성능을 얼마나 향상시킬 수 있는가?
  • RQ4컴파일 기반 DSL이 다양한 플랫폼에서 효율적으로 실행 가능한, 인간이 읽을 수 있고 사용자 정의 가능한 자바 코드를 생성할 수 있는가?
  • RQ5최적화와 코드 생성의 분리가 딥 러닝 DSL의 확장성과 유지보수성 향상에 어떻게 기여하는가?

주요 결과

  • DeepDSL이 생성한 자바 코드는 런타임 성능과 메모리 효율성에서 경쟁력을 보이며, 특히 메모리 제약 조건 하에서 Caffe와 Tensorflow를 능가한다.
  • DeepDSL의 정적 메모리 분석은 메모리 부족 오류를 예측하고 최적화함으로써 성공적으로 방지한다. 이로 인해 단일 GPU에서 배치 크기가 64인 ResNet 학습이 가능해졌으며, Caffe와 TensorFlow는 이를 실패한다.
  • 표현식 수준의 간소화와 SSA 기반 최적화를 포함한 두 단계 최적화 파이프라인은 효과적인 코드 이동, 공통 표현식 제거 및 인라인 처리를 가능하게 하여, 메모리 및 런타임 효율성을 모두 향상시킨다.
  • 생성된 자바 코드는 압축되고 인간이 읽을 수 있으며 사용자 정의 가능하여, 표준 IDE나 텍스트 에디터를 사용해 개발자가 수정하거나 확장할 수 있다.
  • DSL 표현식 조작과 코드 생성의 분리로 최적화 기법과 타겟 언어 백엔드의 독립적 발전이 가능해져 유지보수성과 확장성이 향상된다.
  • 복잡한 네트워크(예: ResNet)의 경우 컴파일 시간이 수 분에 이르지만, 결과로 생성된 코드는 매우 최적화되어 있어 배포 및 추가 튜닝에 적합하다.

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

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

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

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