PyTorch는 원래 Facebook의 AI Research 연구소에서 개발되어 2016년에 처음 출시된 오픈소스 머신러닝 라이브러리이다. 이는 Torch 프레임워크의 후속작으로, 딥러닝 알고리즘의 최적화된 저수준 구현 위에 구축된 고수준 애플리케이션 프로그래밍 인터페이스를 제공한다. 2025년 기준으로 PyTorch는 TensorFlow 및 Keras와 같은 프레임워크와 함께 인공지능 연구 및 프로덕션에서 가장 널리 사용되는 라이브러리 중 하나로 남아 있다. 이 라이브러리는 2022년 9월부터 Linux 재단의 자회사인 PyTorch 재단이 관리하고 있다.
역사
PyTorch의 기원은 2001년 Idiap 연구소가 GNU 일반 공중 사용 허가서로 출시한 C와 Lua로 작성된 머신러닝 라이브러리인 Torch로 거슬러 올라간다. 2010년경 Ronan Collobert, Clement Farabet, Koray Kavukcuoglu를 포함한 연구자들은 C 백엔드와 Lua 프론트엔드를 분리하여 이 라이브러리를 Torch7로 재작성했다. 2016년 중반, Facebook의 개발자들은 autograd 라이브러리와 Chainer 프레임워크의 영향을 받아 프론트엔드와 백엔드를 더욱 분리하도록 Torch7을 리팩터링했다. 이 작업은 2016년 오픈소스 프로젝트로 출시된 PyTorch의 탄생으로 이어졌다. Torch7의 개발은 2018년에 중단되었으며, 그 기능은 PyTorch에 통합되었다.
2017년 9월, Meta와 Microsoft는 딥러닝 프레임워크 간의 상호 운용성을 가능하게 하기 위해 ONNX(Open Neural Network Exchange) 프로젝트를 시작했다. ONNX는 모델을 프레임워크 간에 변환하고 NVIDIA의 TensorRT와 같은 다양한 실행 제공자에 맞게 최적화할 수 있게 한다. 2018년 3월, Caffe2는 PyTorch에 통합되어 Meta의 딥러닝 노력을 통합했다. 2023년 3월 15일 출시된 PyTorch 2.0은 코드 실행을 최대 2배 가속화하는 Python 수준 컴파일러인 TorchDynamo를 도입했으며, 주요 클라우드 플랫폼 전반에 걸친 훈련 및 추론 성능의 상당한 개선도 함께 제공했다.
핵심 기능
PyTorch는 NumPy 배열과 유사한 동종 다차원 배열인 텐서 데이터 구조를 중심으로 구축된다. 텐서는 중앙 처리 장치(CPU) 또는 그래픽 처리 장치(GPU)에서 연산할 수 있으며, NVIDIA 하드웨어의 CUDA, AMD의 ROCm, Apple의 Metal 프레임워크를 지원한다. Autograd라고 불리는 라이브러리의 자동 미분 시스템은 순방향 패스 중에 텐서에 대한 연산을 기록하여 방향성 비순환 그래프(DAG)를 구성한다. 손실이 계산되면 역전파가 이 그래프를 탐색하여 기울기를 계산하고, 이를 모델 매개변수 업데이트에 사용한다.
torch.nn 모듈은 다양한 계층 유형, 활성화 함수, 손실 함수를 포함한 신경망 구축을 위한 포괄적인 구성 요소 모음을 제공한다. 모델은 일반적으로 torch.nn.Module을 서브클래싱하고 forward 메서드를 구현하여 정의된다. 이 모듈식 설계는 단순한 피드포워드 네트워크에서 트랜스포머 기반 모델에 이르기까지 복잡한 아키텍처를 유연하게 구성할 수 있게 한다.
모델 직렬화
PyTorch 모델은 Python pickle 파일에 모델 가중치를 포함하고 바이트 순서와 같은 메타데이터를 포함하는 ZIP64 아카이브인 네이티브 직렬화 형식을 사용하여 저장하고 로드할 수 있다. .pt 및 .pth 파일 확장자가 이러한 파일에 일반적으로 사용된다. 이 형식은 훈련된 모델을 다양한 환경에서 쉽게 공유하고 배포할 수 있게 한다.
예제
다음 코드는 PyTorch의 저수준 기능을 보여준다. torch.nn 모듈을 사용하여 선형 계층이 있는 간단한 신경망을 정의하고 순방향 패스를 수행한다.
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleNet()
input_tensor = torch.randn(3, 10)
output = model(input_tensor)
print(output)같이 보기
- 딥러닝 소프트웨어 비교
- 머신러닝 소프트웨어 비교
- 미분 가능 프로그래밍
- DeepSpeed
- 오픈소스 인공지능
- PyTorch Lightning
참고 문헌
- PyTorch 문서. 이용 가능: https://pytorch.org/docs/stable/index.html
- PyTorch GitHub 저장소. 이용 가능: https://github.com/pytorch/pytorch
- Paszke, A. et al. (2019). PyTorch: An Imperative Style, High-Performance Deep Learning Library. In Advances in Neural Information Processing Systems 32.