PyTorch
Jump to navigation
Jump to search
PyTorch
Overview
PyTorch는 Meta(구 Facebook)에서 개발한 오픈소스 머신러닝 프레임워크. 텐서 연산과 자동 미분(Autograd)을 기반으로 한 딥러닝 연구와 프로덕션 배포 모두에 널리 사용됨.
Summary
- * 무엇인가? Python 기반 딥러닝 프레임워크. 텐서 연산 + 자동 미분 + 동적 그래프
- * 왜 필요한가? TensorFlow와 함께 AI/ML 분야 2대 프레임워크. 연구부터 배포까지 원스톱
- * 언제 사용하는가? 이미지 분류, NLP, 생성 AI, 강화학습 등 모든 딥러닝 작업
---
Purpose
이 문서가 존재하는 이유
- Goal: PyTorch의 개념, 사용법, 설정 가이드 제공
- Scope: 기본 개념, 설치/설정, 사용 예제, 모범 사례
- Non-goals: 고급 커스터마이징, 내부 소스 코드 분석
---
Key Concepts
---
Architecture
PyTorch는 동적 계산 그래프(Dynamic Computational Graph) 기반. 연산이 실행될 때마다 그래프가 생성되어 디버깅이 용이함. CUDA/TensorRT 등 다양한 백엔드 지원.
---
Workflow
1. 1. Tensor 생성 (CPU 또는 GPU)
2. 2. nn.Module 기반 모델 정의
3. 3. 손실 함수(Loss Function) + 옵티마이저 설정
4. 4. 학습 루프: 순전파 → 손실 계산 → 역전파 → 옵티마이저 업데이트
5. 5. 모델 저장(torch.save) + 로드(torch.load)
6. 6. 추론 모드(torch.inference_mode)에서 배포
---
Configuration
import torch
import torch.nn as nn
# Tensor 생성 (GPU 사용 시.cuda())
x = torch.randn(100, 64)
y = torch.randn(100, 32)
# 모델 정의
class SimpleModel(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(64, 32)
self.relu = nn.ReLU()
def forward(self, x):
return self.relu(self.fc(x))
model = SimpleModel()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
loss_fn = nn.MSELoss()
# 학습 루프
for epoch in range(10):
optimizer.zero_grad()
pred = model(x)
loss = loss_fn(pred, y)
loss.backward() # 자동 미분
optimizer.step() # 가중치 업데이트
print(f'Epoch {epoch}: loss={loss.item():.4f}')
# 모델 저장
torch.save(model.state_dict(), 'model.pt')
---
Best Practices
- GPU 사용 시 .cuda() 또는 .to(device) 명시적 사용
- 학습 중 torch.no_grad()로 메모리 절약
- nn.DataParallel 또는 torch.nn.parallel.DistributedDataParallel로 멀티 GPU
- torch.compile()으로 PyTorch 2.0+ 성능 최적화
- ONNX export로 타 프레임워크 호환성 확보
---
Limitations
- TensorFlow 대비 프로덕션 배포 생태계 아직 성장 중
- 정적 그래프 기반 프레임워크 대비 추론 최적화 도구 부족
- 대규모 분산 학습 설정 복잡
---
References
- PyTorch Official (if applicable)
- Hugging Face
- GitHub Repository
---