파이토치

PyTorch는 유연성과 사용 편의성으로 유명한 오픈 소스 딥 러닝 프레임워크입니다. 이는 머신 러닝 개발자와 데이터 과학자들이 선호하는 범용 Python 하이레벨 프로그래밍 언어와의 호환성 덕분에 가능합니다.

 

파이토치란?

파이토치는 딥 러닝 모델을 구축하기 위한 완벽한 기능을 갖춘 프레임워크입니다. 딥 러닝은 머신 러닝의 한 유형으로, 이미지 인식, 언어 처리와 같은 응용 분야에 일반적으로 사용됩니다. 파이썬으로 작성되어 대부분의 머신 러닝 개발자가 비교적 쉽게 배우고 사용할 수 있습니다. PyTorch는 GPU에 대한 탁월한 지원과 계산 그래프를 즉시 수정할 수 있는 후진 방식 자동 미분 기능을 사용하는 것이 특징입니다. 따라서 빠른 실험과 프로토타이핑을 위해 널리 사용됩니다.

파이토치를 사용하는 이유는?

파이토치는 Facebook AI Research 및 여러 다른 연구소의 개발자들이 개발했습니다. 이 프레임워크는 Torch의 효율적이고 유연한 GPU 가속 백엔드 라이브러리와 신속한 프로토타이핑, 읽기 쉬운 코드, 최대한 다양한 딥 러닝 모델 지원에 중점을 둔 직관적인 파이썬 프런트엔드를 결합합니다. 파이토치를 사용하면 개발자가 익숙한 명령형 프로그래밍 방식을 사용하면서도 그래프를 출력할 수 있습니다. 2017년에 오픈 소스로 공개되었으며, 파이썬에 뿌리를 둔 덕분에 머신 러닝 개발자들로부터 큰 호응을 얻었습니다.

Features of PyTorch.

Image reference https://pytorch.org/features/

 

눈여겨 볼 점은, 파이토치가 후진 방식 자동 미분이라 불리는 Chainer의 혁신을 채택했다는 것입니다. 본질적으로 이는 완료된 작업을 기록한 다음, 기울기 연산을 위해 역방향으로 재생하는 테이프 레코더와 같습니다. 따라서 파이토치는 디버깅이 비교적 간단하며 동적 신경망과 같은 특정 응용 분야에 매우 적합합니다. 매 반복(iteration)이 다를 수 있기 때문에 프로토타이핑에 널리 사용됩니다.

파이토치는 파이썬으로 작성되고, 파이썬의 명령형 동적 연산 그래프(define-by-run) 즉시 실행(eager execution) 모드를 사용하기 때문에 파이썬 개발자에게 특히 인기가 높습니다. 이 모드에서는 파이썬에서 호출될 때 연산이 실행됩니다. 파이썬 프로그래밍 언어의 인기가 지속되면서 한 설문조사에서는 AI 및 머신 러닝 작업에 대한 관심이 점점 더 높아지고 있으며 이와 함께 관련 파이토치의 채택도 확대되고 있는 것으로 나타났습니다. 즉, 파이토치는 딥 러닝을 처음 접하는 파이썬 개발자에게 훌륭한 선택지이며, 파이토치를 기반으로 하는 딥 러닝 강좌의 라이브러리도 점점 더 늘어나고 있다는 것입니다. API는 초기 릴리스부터 일관성을 유지해 왔기 때문에 경험이 많은 파이썬 개발자가 코드를 비교적 쉽게 이해할 수 있습니다.

파이토치의 특별한 강점은 신속한 프로토타이핑과 소규모 프로젝트에서 찾을 수 있습니다. 사용 편의성과 유연성으로 인해 학술 및 연구 커뮤니티에서 선호되기도 합니다.

Facebook 개발자들은 파이토치의 생산적 적용을 촉진하기 위해 열심히 노력해 왔습니다. 최근 릴리스에는 Google TensorBoard 시각화 도구에 대한 지원, JIT 컴파일과 같은 향상된 기능이 포함되었습니다. 또한 ONNX(Open Neural Network Exchange)에 대한 지원을 확장하여 개발자가 사용 사례에 가장 적합한 딥 러닝 프레임워크 또는 런타임을 채택할 수 있습니다.

파이토치의 주요 이점

파이토치의 몇 가지 중요한 특성은 다음과 같습니다.

  • PyTorch.org 커뮤니티에는 다양한 자료와 튜토리얼을 갖춘 활발한 대규모 커뮤니티가 조성되어 있습니다. 유용한 포럼들이 운영되고 있습니다.
  • 파이썬으로 작성되었으며 과학적 컴퓨팅을 위한 넘파이(NumPy), SciPy 그리고 더 나은 성능을 위해 파이썬을 C로 컴파일하는 Cython과 같은 인기 있는 파이썬 라이브러리와 통합됩니다. 구문과 사용법이 파이썬과 유사하기 때문에 파이토치는 파이썬 개발자가 비교적 쉽게 배울 수 있습니다.
  • 주요 클라우드 플랫폼에서 잘 지원됩니다.
  • TorchScript라는 스크립트 언어는 즉시 실행 모드를 통해 사용 편의성과 유연성을 제공합니다. 이 실행 모드에서는 파이썬에서 호출할 때 즉시 연산을 실행하지만, C++ 런타임 환경에서는 속도와 최적화를 위해 그래프 모드로 전환할 수도 있습니다.
  • CPU, GPU, 병렬 처리와 분산 훈련을 지원합니다. 즉, 연산 작업을 여러 CPU 코어와 GPU 코어로 분산하고, 여러 컴퓨터의 여러 GPU에서 훈련을 진행할 수 있습니다.
  • 파이토치는 동적 연산 그래프를 지원하므로 런타임 시 네트워크 동작을 변경할 수 있습니다. 그러므로 런타임 전에 신경망을 정적 객체로 정의해야 하는 대부분의 머신 러닝 프레임워크에 비해 유연성 측면에서 큰 이점을 갖습니다.
  • 파이토치 허브는 사전 훈련된 모델의 저장소로, 경우에 따라 단 한 줄의 코드만으로 이러한 모델을 불러올 수 있습니다.
  • 표준 파이썬 클래스의 하위 클래스로 새로운 맞춤형 컴포넌트를 생성할 수 있고, TensorBoard와 같은 외부 툴킷으로 매개변수를 쉽게 공유할 수 있으며, 인라인으로 라이브러리를 쉽게 가져오고 사용할 수 있습니다.
  • 파이토치에는 핵심 기능을 확장하는 데 사용할 수 있는 것으로 정평 난 API 세트가 있습니다.
  • 실험을 위한 '즉시 실행 모드'와 고성능 실행을 위한 '그래프 모드'를 모두 지원합니다.
  • 컴퓨터 비전부터 강화 학습에 이르는 다양한 분야에 대규모로 도구와 라이브러리가 축적되어 있습니다.
  • 파이썬 프로그래머에게 익숙한 순수 C++ 프런트엔드 인터페이스를 지원하며 고성능 C++ 애플리케이션을 구축하는 데 사용될 수 있습니다.

 

파이토치의 작동 방식

파이토치와 텐서플로는 핵심 구성 요소가 텐서와 그래프라는 점에서 유사합니다.

텐서

텐서는 다차원 배열과 유사한 핵심 파이토치 데이터 유형으로, 모델의 입력과 출력 그리고 모델의 매개변수를 저장하고 조작하는 데 사용됩니다. 텐서는 넘파이의 ndarray와 유사하지만, 텐서는 GPU에서 실행하여 컴퓨팅을 가속화할 수 있다는 점이 다릅니다.

그래프

신경망은 중첩 함수 컬렉션을 입력 매개변수에 적용하여 입력 데이터를 변환합니다. 딥 러닝의 목표는 손실 메트릭에 대한 편미분(기울기)을 계산하여 이러한 매개변수(가중치와 편향으로 구성되며, 파이토치에서는 텐서에 저장됨)를 최적화하는 것입니다. 순전파에서 신경망은 입력 매개변수를 받아 출력층에 도달할 때까지 다음 층의 노드에 신뢰 점수를 출력하며, 출력층에서는 이 점수의 오차가 계산됩니다. 오차가 경사 하강(gradient descent)이라는 프로세스 내에서 역전파를 통해 다시 신경망 전체로 전달되면 가중치가 조정되고 모델이 개선됩니다.

그래프는 연결된 노드(정점이라고 함)와 간선으로 구성된 데이터 구조입니다. 딥 러닝을 위한 모든 최신 프레임워크는 그래프의 개념을 기반으로 하며, 신경망은 연산의 그래프 구조로 표현됩니다. 파이토치는 함수 객체로 구성된 유향 비순환 그래프(DAG)에 텐서와 실행된 연산의 기록을 보관합니다. 이 DAG에서 잎은 입력 텐서이고 뿌리는 출력 텐서입니다.

A Directed Acyclic Graph (DAG).

텐서플로를 비롯한 많은 인기 있는 프레임워크에서 연산 그래프는 정적 객체입니다. 파이토치는 동적 연산 그래프를 기반으로 하므로 연산 그래프는 런타임 시 구축 및 재구축됩니다. 순방향 전달(forward pass)을 위한 연산 수행과 역전파에 필요한 데이터 구조의 생성에는 동일한 코드가 사용됩니다. 파이토치는 텐서플로와 같은 정적 그래프 프레임워크의 기능과 성능에 필적하는 최초의 동적 연산 그래프 방식 딥 러닝 프레임워크로, 표준 합성곱 신경망부터 순환 신경망에 이르는 다양한 분야에 적합합니다.

파이토치 사용 사례

파이토치 프레임워크는 편리하고 유연한 것으로 잘 알려져 있으며, 일반적인 사용 사례로는 강화 학습, 이미지 분류, 자연어 처리(NLP) 등이 있습니다.

비즈니스, 연구, 교육 사례 

자연어 처리(NLP): Siri부터 Google Translate에 이르기까지, 심층 신경망은 머신의 자연어 이해 능력에 획기적인 혁신을 불러일으켰습니다. 이러한 모델의 대부분은 언어를 단어 또는 문자의 플랫 시퀀스로 취급하고 순환 신경망(RNN)이라는 일종의 모델을 사용하여 이 시퀀스를 처리합니다. 그러나 많은 언어학자들은 언어가 구(phrase)의 계층적 트리로 가장 잘 설명된다고 생각하기 때문에 이러한 구조를 고려하는 재귀 신경망으로 알려진 딥 러닝 모델에 대한 연구가 활발히 진행되어 왔습니다. 이러한 모델은 구현이 어렵고 실행하기가 비효율적인 것으로 악명높지만, 파이토치는 이러한 모델과 다른 복잡한 자연어 처리(NLP) 모델을 훨씬 더 쉽게 만듭니다. Salesforce는 NLP 및 멀티 태스크 러닝에 파이토치를 사용하고 있습니다.

 

연구:  파이토치는 사용 편의성, 유연성과 신속한 프로토타이핑 덕분에 연구에 널리 사용됩니다. Stanford University는 파이토치의 유연성을 활용하여 새로운 알고리즘 접근법을 효율적으로 연구하고 있습니다.

교육: Udacity 는 파이토치를 사용하여 AI 혁신가들을 교육하고 있습니다.

파이토치가 중요한 이유…

데이터 사이언티스트
파이토치는 파이썬에 익숙한 프로그래머라면 비교적 쉽게 배울 수 있습니다. 쉬운 디버깅, 간단한 API 그리고 다양한 파이썬 확장 기능과의 호환성을 제공합니다. 파이토치의 동적 실행 모델은 약간의 성능 오버헤드를 초래하지만 프로토타이핑에 탁월합니다.

소프트웨어 개발자
파이토치는 AI 모델을 빠르고 쉽게 배포할 수 있는 다양한 기능을 지원합니다. 또한 Captum(모델 해석력), skorch(Scikit-learn 호환성) 등과 같이 개발을 지원하는 풍부한 라이브러리 에코시스템을 갖추고 있습니다. 파이토치는 훈련을 위한Glow 추론을 위한 NVIDIA®

 TensorRT™와 같은 훌륭한 가속기 관련 에코시스템도 보유하고 있습니다.


GPU: 딥 러닝의 핵심

구조적으로 볼 때, CPU는 단 몇 개의 코어와 많은 캐시 메모리로 구성되어 있어 한 번에 처리할 수 있는 소프트웨어 스레드가 적습니다. 반대로 GPU는 수백 개의 코어로 구성되어 있어 수천 개의 스레드를 동시에 처리할 수 있습니다.

The difference between a CPU and GPU.

최첨단 딥 러닝 신경망의 경우 역전파를 통해 조정해야 하는 매개변수가 수백만 개에서 10억 개 이상에 이를 수 있습니다. 신경망은 수많은 동일 뉴런에서 생성되기 때문에 본질적으로 병렬성이 매우 높습니다. 이러한 병렬성은 자연스럽게 GPU로 매핑됩니다. GPU는 CPU만 사용하는 훈련에 비해 월등히 높은 연산 속도를 제공합니다. 이러한 이유로 GPU는 복잡한 대규모 신경망 기반 시스템을 훈련시키기 위한 플랫폼으로 선택되어 왔으며, 병렬성이 특징인 추론 작업 또한 GPU에서 실행하기에 매우 알맞습니다.

 

파이토치와 NVIDIA GPU

파이토치는 본질적 병렬성으로 인해 멀티 GPU 환경에서의 실행에 특히 적합합니다. 개발자는 텐서가 사용할 GPU를 지정하거나 가용성과 용량에 따라 애플리케이션이 선택하도록 할 수 있습니다. 파이토치 프레임워크에는 GPU 선택을 최적화하는 특정 기능이 있으며, 병렬 기능을 여러 GPU에 분산되는 작은 하위 신경망으로 분할하여 단일 GPU에 맞지 않을 정도로 큰 신경망을 실행할 수 있는 기능도 있습니다.

NVIDIA 기반의 경우 파이토치는 개발자가 NVIDIA CUDA® API에 액세스하여 병렬 GPU 연산을 수행하고 훈련 및 추론 시간을 크게 단축할 수 있도록 PyCUDA를 지원합니다. 개발자는 NGC(NVIDIA GPU Cloud)를 사용하여 파이토치를 쉽게 시작할 수 있습니다. 여기에서 사용자는 컴퓨터 비전, 자연어 처리 등과 같은 다양한 작업에 사용 가능한 사전 학습된 모델이 포함된 컨테이너를 가져올 수 있습니다. 하나의 컨테이너에 모든 종속 항목과 프레임워크까지 포함됩니다. NVIDIA GPU를 사용하는 경우, NVIDA의 TensorRT를 통해 파이토치에서 추론 성능을 크게 개선할 수 있습니다.

 

개발자용 NVIDIA 딥 러닝

GPU로 가속화한 딥 러닝 프레임워크는 심층 신경망을 맞춤형으로 유연하게 설계 및 훈련할 수 있게 해주고 Python 및 C/C++ 등의 일반적으로 사용되는 프로그래밍 언어에 대한 인터페이스를 제공합니다. MXNet, PyTorch, TensorFlow 등 널리 사용되는 딥 러닝 프레임워크는 고성능 멀티 GPU 가속화 학습을 제공하기 위해 NVIDIA GPU 가속화 라이브러리를 사용합니다.

NVIDIA GPU-accelerated libraries.

NVIDIA GPU 가속 엔드투엔드 데이터 사이언스

CUDA-X AI를 기반으로 구축된 오픈 소스 소프트웨어 라이브러리인 NVIDIA RAPIDS™ 제품군은 엔드투엔드 데이터 사이언스 및 분석 파이프라인을 전적으로 GPU에서 실행할 수 있게 해줍니다. 이 제품군은 NVIDIA CUDA 프리미티브를 사용하여 저수준 컴퓨팅 최적화를 수행하지만, 사용자 친화적인 Python 인터페이스를 통해 GPU 병렬 처리와 고대역폭 메모리 속도를 제공합니다.

RAPIDS GPU DataFrame을 사용하면 Pandas와 같은 인터페이스를 사용하여 데이터를 GPU에 로드한 다음, 절대 GPU를 떠나지 않고 이 데이터를 연결된 다양한 머신 러닝 및 그래프 분석 알고리즘에 사용할 수 있습니다. Apache Arrow와 같은 라이브러리를 통해 이러한 수준의 상호 운용성이 가능합니다. 이를 통해 데이터 준비부터 머신 러닝과 딥 러닝에 이르는 엔드투엔드 파이프라인을 가속화할 수 있습니다. NVIDIA RAPIDS, end-to-end GPU-accelerated data science.

RAPIDS는 널리 사용되는 여러 데이터 사이언스 라이브러리 간의 장치 메모리 공유를 지원합니다. 그래서 GPU에 데이터가 유지되므로, 호스트 메모리에 반복적으로 복사하느라 높은 비용을 들일 필요가 없습니다.

Popular data science libraries.

파이토치 사용 사례

파이토치 프레임워크는 편리하고 유연한 것으로 잘 알려져 있으며, 일반적인 사용 사례로는 강화 학습, 이미지 분류, 자연어 처리(NLP) 등이 있습니다.

다음 단계

다음 블로그를 읽어보세요.

더 알아보기:

  • 개발자, 연구자와 데이터 사이언티스트는 NVIDIA GPU를 위한 성능 조정 및 테스트를 거친 파이토치 예제가 포함된 NVIDIA 최적화 딥 러닝 프레임워크 컨테이너에 쉽게 액세스할 수 있습니다. 따라서 패키지와 종속 항목을 관리하거나 소스에서 딥 러닝 프레임워크를 구축할 필요가 없습니다. NVIDIA NGC에서 더 자세히 확인하고 바로 시작해 보세요.
  • NVIDIA NeMo는 추상화를 한 단계 더 발전시키는 파이토치 백엔드가 포함된 오픈 소스 툴킷입니다. NeMo는 세 줄의 코드로 복잡한 신경망 아키텍처를 빠르게 구성하고 훈련할 수 있도록 지원합니다. 또한 NeMo에는 ASR, NLP, TTS용 확장 가능한 모델 컬렉션도 함께 제공됩니다. 이러한 컬렉션은 QuartzNet, BERT, Tacotron 2, WaveGlow와 같은 최첨단 네트워크 아키텍처를 쉽게 구축할 수 있는 방법을 제공합니다. NeMo를 사용하면 손쉽게 구할 수 있는 API로 NVIDIA NGC에서 자동으로 모델을 다운로드하고 인스턴스화한 다음, 맞춤형 데이터 세트로 모델을 파인 튜닝할 수도 있습니다.
  • NVIDIA는 딥 러닝 워크플로의 학습 및 추론 단계를 가속화하는 최적화된 소프트웨어 스택을 제공합니다. NVIDIA 딥 러닝 홈 페이지에서 자세히 알아보세요.
  • NVIDIA Volta™ 및 Turing™ GPU를 기반으로 하는 Tensor 코어는 특별히 딥 러닝을 위해 설계되어 훈련 및 추론 성능이 월등히 더 뛰어납니다. 참조 구현에 액세스하는 방법을 더 자세히 알아보세요.
  • NVIDIA Deep Learning Institute(DLI)에서는 AI 및 가속 컴퓨팅 분야의 개발자, 데이터 사이언티스트, 연구자를 위한 실습 교육을 제공합니다.
  • 딥 러닝에 대한 기술적인 심층 분석은 간단명료한 딥 러닝에서 확인하세요..
  • 개발자 뉴스와 리소스는 NVIDIA 개발자 사이트를 확인하세요.