파이토치
PyTorch는 Meta(구 Facebook) AI Research(FAIR)에서 개발한 딥러닝 프레임워크로, 동적 계산 그래프(dynamic computation graph)와 파이썬 친화적 인터페이스를 기반으로 한 고성능 머신 러닝/딥러닝 라이브러리이다. 자연어 처리, 컴퓨터 비전, 대규모 모델 연구 등 다양한 분야에서 사실상 표준적으로 사용되는 프레임워크 중 하나이다.
개요[편집 | 원본 편집]
PyTorch는 파이썬 문법과 자연스럽게 통합된 프로그래밍 모델을 제공하며, 텐서 연산, 자동 미분(autograd), GPU 가속, 모델 학습 및 배포 지원 등을 포함한다. 동적 실행 방식(eager execution)을 중심으로 설계되어 코드 흐름이 자연스럽고 디버깅이 쉬우며, 연구자·개발자에게 높은 생산성을 제공한다.
역사[편집 | 원본 편집]
PyTorch는 2016년 Meta AI Research에서 처음 공개되었으며, 초기 Torch(Lua 기반)의 철학과 Chainer의 define-by-run 동적 그래프 아이디어를 발전시켜 현대적인 파이썬 기반 프레임워크로 재구성되었다. 주요 초기 개발자는 Adam Paszke, Soumith Chintala, Sam Gross, Gregory Chanan 등이다.
PyTorch는 이후 활발한 커뮤니티 성장과 더불어 산업계·연구계에서 폭넓은 채택을 이루었으며, 2023년 PyTorch Foundation이 설립되며 독립적인 오픈소스 생태계를 형성하게 되었다.
특징[편집 | 원본 편집]
동적 계산 그래프 (Define-by-Run)[편집 | 원본 편집]
PyTorch는 실행 즉시 그래프를 구성하는 동적 그래프 방식을 사용한다.
- 파이썬 제어 흐름(if, for, while) 자유롭게 사용 가능
- 디버깅이 쉽고 직관적
- 복잡한 모델 구조 정의에 유리
Autograd (자동 미분 엔진)[편집 | 원본 편집]
PyTorch의 autograd는 연산 그래프를 기록하고 역전파(backpropagation)를 자동으로 계산한다.
- 다양한 연산에 대한 미분 규칙 내장
- reverse-mode automatic differentiation 기반
- 커스텀 autograd 함수 정의 가능
예시:
import torch
x = torch.tensor(2.0, requires_grad=True)
y = x*2 + x*3
y.backward()
print(x.grad) # 5.0
고성능 텐서 연산[편집 | 원본 편집]
PyTorch는 CPU/CUDA 백엔드(ATen)를 통해 고성능 텐서 연산을 제공하며, GPU 가속을 위한 CUDA, cuDNN, cuBLAS를 비롯해 다양한 최적화 기능을 활용한다.
TorchScript 및 컴파일 기능[편집 | 원본 편집]
PyTorch 1.x에서 제공된 TorchScript는 모델을 직렬화하고 최적화된 실행을 가능하게 한다. PyTorch 2.0에서는 다음과 같은 새로운 컴파일 스택이 도입되었다:
- TorchDynamo – Python bytecode 분석 기반 그래프 추출
- AOTAutograd – Autograd 그래프 분리
- TorchInductor – 커널 최적화 및 코드 생성
- Triton – GPU 커널 자동 생성 및 고성능 fused kernel 활용
이를 통해 동적 그래프 기반 PyTorch에서도 정적 최적화 수준의 고성능을 달성한다.
NumPy 친화성[편집 | 원본 편집]
PyTorch는 NumPy 배열과 텐서를 손쉽게 변환하며, 메모리를 공유할 수 있다.
- `torch.from_numpy()`
- `tensor.numpy()`
멀티플랫폼 지원[편집 | 원본 편집]
- CPU, GPU(NVIDIA CUDA), AMD ROCm
- 모바일 — PyTorch Mobile
- 서버 및 클라우드 — TorchServe, ONNX 변환 가능
아키텍처[편집 | 원본 편집]
PyTorch의 내부 구조는 크게 다음과 같다:
Python Frontend[편집 | 원본 편집]
사용자가 작성하는 파이썬 코드. 네트워크 정의, 제어 흐름, 모델 조립 등을 담당.
ATen Tensor Library[편집 | 원본 편집]
PyTorch의 핵심 텐서 라이브러리.
- C++로 구현
- CPU/GPU 공통 API
- operator dispatch 시스템을 통해 디바이스 선택
Autograd Engine[편집 | 원본 편집]
연산 그래프를 기록하고 역전파를 계산하는 C++ 기반 엔진.
Backend Kernels[편집 | 원본 편집]
- CUDA kernels
- cuBLAS, cuDNN
- Triton kernels (PyTorch 2.0 이후)
Memory Management[편집 | 원본 편집]
- CPU allocator
- GPU caching allocator
- pinned memory 지원
주요 기능[편집 | 원본 편집]
신경망 모듈 (torch.nn)[편집 | 원본 편집]
신경망 레이어, 손실 함수, 활성화 함수, 컨테이너 모듈 등 제공.
최적화(optim)[편집 | 원본 편집]
SGD, Adam, RMSProp 등 다양한 옵티마이저 제공.
데이터 로더[편집 | 원본 편집]
효율적인 mini-batch 관리를 위한 Dataset/DataLoader API 제공.
분산 학습[편집 | 원본 편집]
- DistributedDataParallel (DDP)
- RPC Framework
- Fully Sharded Data Parallel (FSDP)
채택 사례[편집 | 원본 편집]
- 대형 언어 모델(LLM) 연구
- 컴퓨터 비전 모델(ResNet, ViT 등)
- 자연어 처리(BERT, GPT 등)
- 강화학습
- 대규모 분산 학습
함께 보기[편집 | 원본 편집]
참고 문헌[편집 | 원본 편집]
- Paszke, Adam, et al. PyTorch: An imperative style, high-performance deep learning library. Advances in Neural Information Processing Systems 32 (2019).