Skip to main content
QUICK REVIEW

[논문 리뷰] PyTorch: An Imperative Style, High-Performance Deep Learning Library

Adam Paszke, Sam Gross|arXiv (Cornell University)|2019. 12. 03.
Parallel Computing and Optimization Techniques인용 수 16,163
한 줄 요약

PyTorch는 Python의 즉시 실행(eager)과 명령형 실행을 GPU 가속 및 자동 미분과 결합하여, 사용성을 유지하면서 경쟁력 있는 성능을 달성합니다. Pythonic하고 유연한 모델 구축 경험에 중점을 두며 상호 운용성도 우수하고 고성능 핵심을 제공합니다.

ABSTRACT

Deep learning frameworks have often focused on either usability or speed, but not both. PyTorch is a machine learning library that shows that these two goals are in fact compatible: it provides an imperative and Pythonic programming style that supports code as a model, makes debugging easy and is consistent with other popular scientific computing libraries, while remaining efficient and supporting hardware accelerators such as GPUs. In this paper, we detail the principles that drove the implementation of PyTorch and how they are reflected in its architecture. We emphasize that every aspect of PyTorch is a regular Python program under the full control of its user. We also explain how the careful and pragmatic implementation of the key components of its runtime enables them to work together to achieve compelling performance. We demonstrate the efficiency of individual subsystems, as well as the overall speed of PyTorch on several common benchmarks.

연구 동기 및 목표

  • 임의 실행으로 정적 그래프 성능에 맞출 수 있음을 입증한다.
  • PyTorch에서 사용성(파이썬스러움)과 속도를 균형 있게 설계 원칙을 설명한다.
  • Python 생태계와 확장성에 대한 상호 운용성 및 맞춤 연산과의 호환성을 보여준다.
  • 효율적인 CPU/GPU 실행 및 autograd를 가능하게 하는 구현 선택을 설명한다.
  • 다른 선도 프레임워크와의 비교를 통해 PyTorch를 경험적으로 평가한다.

제안 방법

  • 모델, 데이터, 학습 루프가 일반적인 Python 프로그램인 Python 중심의 eager 실행 모델을 제시한다.
  • 제어 흐름(Python/C++)과 데이터 흐름(텐서 및 연산) 및 CUDA 스트림을 통한 비동기 GPU 실행의 분리를 설명한다.
  • 할당 오버헤드와 단편화를 줄이기 위한 커스텀 CUDA 메모리 할당자를 설명한다.
  • 데이터 병렬성과 확장된 torch.multiprocessing를 통해 공유 CUDA 텐서를 지원하는 다중처리 지원을 상세히 다룬다.
  • 예측 가능한 메모리 해제를 위한 Python의 GC와 통합된 참조 카운팅 메모리 관리 전략을 개요한다.
  • 다른 프레임워크와의 벤치마크 및 비동기 데이터 흐름, 메모리 관리에 걸친 평가를 제공한다.

실험 결과

연구 질문

  • RQ1임의 정의형 실행 스타일의 프레임워크가 딥러닝 작업부하에서 정적 그래프 프레임워크와 경쟁력 있는 성능을 달성할 수 있는가?
  • RQ2어떤 설계 선택이 PyTorch를 사용자 친화적(Pythonic)이고 GPU에서 높은 성능을 발휘하도록 하는가?
  • RQ3PyTorch가 효율성을 유지하면서 폭넓은 Python 생태계 및 커스텀 확장과 어떻게 통합되는가?
  • RQ4메모리 관리, CUDA 스트림, 자동 미분 등 성능을 유지하면서 사용성을 희생하지 않는 핵심 런타임 메커니즘은 무엇인가?

주요 결과

프레임워크처리량(높을수록 좋음)AlexNetVGG-19ResNet-50MobileNetGNMTv2NCF
Chainer778±15N/AN/AN/AN/AN/AN/A
CNTK845±884±3210±1N/AN/AN/AN/A
MXNet1554±22113±1218±2444±2N/AN/AN/A
PaddlePaddle933±123112±2192±4557±24N/AN/AN/A
TensorFlow1422±2766±2200±1216±159631±1.3%4.8e6±2.9%N/A
PyTorch1547±316119±1212±2463±1715512±4.8%5.4e6±3.4%N/A
  • PyTorch는 일반 벤치마크 세트에서 가장 빠른 프레임워크와의 성능 차이가 17% 이내이다.
  • 비동기 GPU 실행은 CUDA 스트림을 통해 Python 제어 흐름과 GPU 작업을 겹치게 하여 장치 활용도를 높인다.
  • 커스텀 캐시 할당자와 참조 카운트 기반의 메모리 관리가 CUDA 할당 오버헤드를 줄이고 메모리 재사용을 가능하게 한다.
  • NumPy 및 DLPack과의 양방향 상호 운용성으로 제로 카피 데이터 공유가 가능해 Python 데이터 사이언스 도구와의 통합을 촉진한다.
  • 다중처리 확장은 데이터 병렬 학습 속도를 높이고 공유 메모리에 텐서 데이터를 옮기고 프로세스 간 통신을 효율화한다.
  • 연구 커뮤니티 내에서 arXiv의 언급으로 강한 채택 신호를 보인다.

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

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

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

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