PyTorch는 유연성과 사용 편의성으로 유명한 오픈 소스 딥 러닝 프레임워크입니다. 이는 머신 러닝 개발자와 데이터 과학자들이 선호하는 범용 Python 하이레벨 프로그래밍 언어와의 호환성 덕분에 가능합니다.
PyTorch는 유연성과 사용 편의성으로 유명한 오픈 소스 딥 러닝 프레임워크입니다. 이는 머신 러닝 개발자와 데이터 과학자들이 선호하는 범용 Python 하이레벨 프로그래밍 언어와의 호환성 덕분에 가능합니다.
파이토치는 딥 러닝 모델을 구축하기 위한 완벽한 기능을 갖춘 프레임워크입니다. 딥 러닝은 머신 러닝의 한 유형으로, 이미지 인식, 언어 처리와 같은 응용 분야에 일반적으로 사용됩니다. 파이썬으로 작성되어 대부분의 머신 러닝 개발자가 비교적 쉽게 배우고 사용할 수 있습니다. PyTorch는 GPU에 대한 탁월한 지원과 계산 그래프를 즉시 수정할 수 있는 후진 방식 자동 미분 기능을 사용하는 것이 특징입니다. 따라서 빠른 실험과 프로토타이핑을 위해 널리 사용됩니다.
파이토치는 Facebook AI Research 및 여러 다른 연구소의 개발자들이 개발했습니다. 이 프레임워크는 Torch의 효율적이고 유연한 GPU 가속 백엔드 라이브러리와 신속한 프로토타이핑, 읽기 쉬운 코드, 최대한 다양한 딥 러닝 모델 지원에 중점을 둔 직관적인 파이썬 프런트엔드를 결합합니다. 파이토치를 사용하면 개발자가 익숙한 명령형 프로그래밍 방식을 사용하면서도 그래프를 출력할 수 있습니다. 2017년에 오픈 소스로 공개되었으며, 파이썬에 뿌리를 둔 덕분에 머신 러닝 개발자들로부터 큰 호응을 얻었습니다.
Image reference https://pytorch.org/features/
눈여겨 볼 점은, 파이토치가 후진 방식 자동 미분이라 불리는 Chainer의 혁신을 채택했다는 것입니다. 본질적으로 이는 완료된 작업을 기록한 다음, 기울기 연산을 위해 역방향으로 재생하는 테이프 레코더와 같습니다. 따라서 파이토치는 디버깅이 비교적 간단하며 동적 신경망과 같은 특정 응용 분야에 매우 적합합니다. 매 반복(iteration)이 다를 수 있기 때문에 프로토타이핑에 널리 사용됩니다.
파이토치는 파이썬으로 작성되고, 파이썬의 명령형 동적 연산 그래프(define-by-run) 즉시 실행(eager execution) 모드를 사용하기 때문에 파이썬 개발자에게 특히 인기가 높습니다. 이 모드에서는 파이썬에서 호출될 때 연산이 실행됩니다. 파이썬 프로그래밍 언어의 인기가 지속되면서 한 설문조사에서는 AI 및 머신 러닝 작업에 대한 관심이 점점 더 높아지고 있으며 이와 함께 관련 파이토치의 채택도 확대되고 있는 것으로 나타났습니다. 즉, 파이토치는 딥 러닝을 처음 접하는 파이썬 개발자에게 훌륭한 선택지이며, 파이토치를 기반으로 하는 딥 러닝 강좌의 라이브러리도 점점 더 늘어나고 있다는 것입니다. API는 초기 릴리스부터 일관성을 유지해 왔기 때문에 경험이 많은 파이썬 개발자가 코드를 비교적 쉽게 이해할 수 있습니다.
파이토치의 특별한 강점은 신속한 프로토타이핑과 소규모 프로젝트에서 찾을 수 있습니다. 사용 편의성과 유연성으로 인해 학술 및 연구 커뮤니티에서 선호되기도 합니다.
Facebook 개발자들은 파이토치의 생산적 적용을 촉진하기 위해 열심히 노력해 왔습니다. 최근 릴리스에는 Google TensorBoard 시각화 도구에 대한 지원, JIT 컴파일과 같은 향상된 기능이 포함되었습니다. 또한 ONNX(Open Neural Network Exchange)에 대한 지원을 확장하여 개발자가 사용 사례에 가장 적합한 딥 러닝 프레임워크 또는 런타임을 채택할 수 있습니다.
파이토치의 주요 이점
파이토치의 몇 가지 중요한 특성은 다음과 같습니다.
파이토치와 텐서플로는 핵심 구성 요소가 텐서와 그래프라는 점에서 유사합니다.
텐서는 다차원 배열과 유사한 핵심 파이토치 데이터 유형으로, 모델의 입력과 출력 그리고 모델의 매개변수를 저장하고 조작하는 데 사용됩니다. 텐서는 넘파이의 ndarray와 유사하지만, 텐서는 GPU에서 실행하여 컴퓨팅을 가속화할 수 있다는 점이 다릅니다.
신경망은 중첩 함수 컬렉션을 입력 매개변수에 적용하여 입력 데이터를 변환합니다. 딥 러닝의 목표는 손실 메트릭에 대한 편미분(기울기)을 계산하여 이러한 매개변수(가중치와 편향으로 구성되며, 파이토치에서는 텐서에 저장됨)를 최적화하는 것입니다. 순전파에서 신경망은 입력 매개변수를 받아 출력층에 도달할 때까지 다음 층의 노드에 신뢰 점수를 출력하며, 출력층에서는 이 점수의 오차가 계산됩니다. 오차가 경사 하강(gradient descent)이라는 프로세스 내에서 역전파를 통해 다시 신경망 전체로 전달되면 가중치가 조정되고 모델이 개선됩니다.
그래프는 연결된 노드(정점이라고 함)와 간선으로 구성된 데이터 구조입니다. 딥 러닝을 위한 모든 최신 프레임워크는 그래프의 개념을 기반으로 하며, 신경망은 연산의 그래프 구조로 표현됩니다. 파이토치는 함수 객체로 구성된 유향 비순환 그래프(DAG)에 텐서와 실행된 연산의 기록을 보관합니다. 이 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™와 같은 훌륭한 가속기 관련 에코시스템도 보유하고 있습니다.
구조적으로 볼 때, CPU는 단 몇 개의 코어와 많은 캐시 메모리로 구성되어 있어 한 번에 처리할 수 있는 소프트웨어 스레드가 적습니다. 반대로 GPU는 수백 개의 코어로 구성되어 있어 수천 개의 스레드를 동시에 처리할 수 있습니다.
최첨단 딥 러닝 신경망의 경우 역전파를 통해 조정해야 하는 매개변수가 수백만 개에서 10억 개 이상에 이를 수 있습니다. 신경망은 수많은 동일 뉴런에서 생성되기 때문에 본질적으로 병렬성이 매우 높습니다. 이러한 병렬성은 자연스럽게 GPU로 매핑됩니다. GPU는 CPU만 사용하는 훈련에 비해 월등히 높은 연산 속도를 제공합니다. 이러한 이유로 GPU는 복잡한 대규모 신경망 기반 시스템을 훈련시키기 위한 플랫폼으로 선택되어 왔으며, 병렬성이 특징인 추론 작업 또한 GPU에서 실행하기에 매우 알맞습니다.
파이토치는 본질적 병렬성으로 인해 멀티 GPU 환경에서의 실행에 특히 적합합니다. 개발자는 텐서가 사용할 GPU를 지정하거나 가용성과 용량에 따라 애플리케이션이 선택하도록 할 수 있습니다. 파이토치 프레임워크에는 GPU 선택을 최적화하는 특정 기능이 있으며, 병렬 기능을 여러 GPU에 분산되는 작은 하위 신경망으로 분할하여 단일 GPU에 맞지 않을 정도로 큰 신경망을 실행할 수 있는 기능도 있습니다.
NVIDIA 기반의 경우 파이토치는 개발자가 NVIDIA CUDA® API에 액세스하여 병렬 GPU 연산을 수행하고 훈련 및 추론 시간을 크게 단축할 수 있도록 PyCUDA를 지원합니다. 개발자는 NGC(NVIDIA GPU Cloud)를 사용하여 파이토치를 쉽게 시작할 수 있습니다. 여기에서 사용자는 컴퓨터 비전, 자연어 처리 등과 같은 다양한 작업에 사용 가능한 사전 학습된 모델이 포함된 컨테이너를 가져올 수 있습니다. 하나의 컨테이너에 모든 종속 항목과 프레임워크까지 포함됩니다. NVIDIA GPU를 사용하는 경우, NVIDA의 TensorRT를 통해 파이토치에서 추론 성능을 크게 개선할 수 있습니다.
GPU로 가속화한 딥 러닝 프레임워크는 심층 신경망을 맞춤형으로 유연하게 설계 및 훈련할 수 있게 해주고 Python 및 C/C++ 등의 일반적으로 사용되는 프로그래밍 언어에 대한 인터페이스를 제공합니다. MXNet, PyTorch, TensorFlow 등 널리 사용되는 딥 러닝 프레임워크는 고성능 멀티 GPU 가속화 학습을 제공하기 위해 NVIDIA GPU 가속화 라이브러리를 사용합니다.
CUDA-X AI를 기반으로 구축된 오픈 소스 소프트웨어 라이브러리인 NVIDIA RAPIDS™ 제품군은 엔드투엔드 데이터 사이언스 및 분석 파이프라인을 전적으로 GPU에서 실행할 수 있게 해줍니다. 이 제품군은 NVIDIA CUDA 프리미티브를 사용하여 저수준 컴퓨팅 최적화를 수행하지만, 사용자 친화적인 Python 인터페이스를 통해 GPU 병렬 처리와 고대역폭 메모리 속도를 제공합니다.
RAPIDS GPU DataFrame을 사용하면 Pandas와 같은 인터페이스를 사용하여 데이터를 GPU에 로드한 다음, 절대 GPU를 떠나지 않고 이 데이터를 연결된 다양한 머신 러닝 및 그래프 분석 알고리즘에 사용할 수 있습니다. Apache Arrow와 같은 라이브러리를 통해 이러한 수준의 상호 운용성이 가능합니다. 이를 통해 데이터 준비부터 머신 러닝과 딥 러닝에 이르는 엔드투엔드 파이프라인을 가속화할 수 있습니다.
RAPIDS는 널리 사용되는 여러 데이터 사이언스 라이브러리 간의 장치 메모리 공유를 지원합니다. 그래서 GPU에 데이터가 유지되므로, 호스트 메모리에 반복적으로 복사하느라 높은 비용을 들일 필요가 없습니다.
다음 블로그를 읽어보세요.
더 알아보기: