🌏 인트로
딥러닝(Deep Learning) 모델을 만들고 학습시키기 위한 오픈소스 라이브러리
NumPy + GPU + 자동미분 + 신경망 모듈을 합쳐 놓은 패키지
| 모듈 | 역할 |
|---|---|
| torch | 기본 수학 연산, Tensor(배열) 처리 |
| torch.nn | 신경망(Neural Network) 모델 구성용 모듈 |
| torch.optim | 최적화 알고리즘 (Adam, SGD 등) |
| torch.autograd | 자동 미분 기능 |
| torch.utils.data | 데이터셋 관리, 배치 생성(DataLoader) |
| torchvision / torchaudio / torchtext | 이미지, 오디오, 텍스트용 확장 라이브러리 |
| torch.distributed | 분산 학습용 라이브러리 (멀티 GPU, 멀티 서버) |
🌏 PyTorch 전체 구조 한눈에 보기
PyTorch는 여러 하위 모듈로 구성되어 있으며,
각 모듈이 딥러닝 파이프라인의 한 단계를 담당한다.
데이터 준비 ─▶ 모델 설계 ─▶ 손실 계산 ─▶ 역전파 ─▶ 최적화 ─▶ 학습 반복
↑ ↑ ↑ ↑ ↑
torch.utils.data torch.nn torch.autograd torch.optim torch
🌏 torch: 기본 수학 연산, Tensor 처리
✅ 역할
- NumPy와 거의 같은 기능*을 제공하지만 *GPU에서 연산 가능
- Tensor 생성, 수학 연산, 브로드캐스팅, 난수 생성 등을 수행한다.
✅ 예시
import torch
# Tensor 생성
a = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
b = torch.rand((2, 2)) # 0~1 사이 랜덤 값
# 기본 연산
print(a + b)
print(torch.matmul(a, b)) # 행렬 곱
print(a.mean(), a.std()) # 평균, 표준편차
# GPU 전송
a = a.to("cuda")
(참고)
GPU는 CPU가 시킨 계산만 수행하는 보조 연산 장치다.
즉, CPU → GPU에 연산 명령 전달 → GPU가 계산 → 결과를 다시 CPU로 반환 구조다.
GPU는 CPU 없이 혼자 동작할 수 없다.
🌏 torch.nn: 신경망(Neural Network) 구성 모듈
✅ 역할
- 모델의 레이어(층)와 구조를 만드는 모듈
nn.Linear,nn.Conv2d,nn.LSTM같은 “층”이 여기에 포함- 모든 모델은
nn.Module을 상속받아서 만든다.
✅ 예시
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(10, 64) # 입력 10 → 은닉 64
self.relu = nn.ReLU()
self.fc2 = nn.Linear(64, 1) # 은닉 64 → 출력 1
def forward(self, x):
x = self.relu(self.fc1(x))
return self.fc2(x)
model = SimpleNet()
CNN, Transformer, Residual Block, Attention 등 모든 구조가 이 안에서 정의된다.
🌏 torch.optim: 최적화 알고리즘
✅ 역할
- 모델의 파라미터(가중치)를 업데이트하는 알고리즘을 담당
- Gradient Descent, Adam, RMSProp 등이 여기에 포함
✅ 예시
import torch.optim as optim
optimizer = optim.Adam(model.parameters(), lr=0.001)
for epoch in range(100):
optimizer.zero_grad() # 이전 gradient 초기화
output = model(x) # 순전파(forward)
loss = criterion(output, y)
loss.backward() # 역전파(backward)
optimizer.step() # 가중치 업데이트
PyTorch는 Optimizer(최적화 알고리즘) 도 전부 구현해서 제공한다.
즉, 경사하강법(Gradient Descent) 계열 알고리즘을 직접 코딩할 필요 없이 torch.optim 모듈 안에서 바로 가져다 쓸 수 있다. (매우 편리~)
🌏 torch.autograd: 자동 미분 기능
✅ 역할
- 딥러닝의 핵심인 역전파(backpropagation) 를 자동으로 수행
- 모든 Tensor의 연산 과정을 추적하고,
.backward()호출 시 미분을 계산
✅ 예시
x = torch.tensor(2.0, requires_grad=True)
y = x ** 3 + 4 * x ** 2
y.backward() # dy/dx 자동 계산
print(x.grad) # 3x^2 + 8x = 3*(2^2)+8*2 = 28
학습 시 “오차를 역으로 전달해 가중치를 업데이트”하는 과정을 자동화해 PyTorch는 수식으로 미분을 쓸 필요가 없다.
🌏 torch.utils.data: 데이터 관리, 배치 생성
✅ 역할
- Dataset과 DataLoader 클래스를 통해 데이터를 효율적으로 관리
- 데이터를 batch 단위로 나누고, shuffle(섞기), 병렬 로딩 등을 수행
Dataset은 “데이터가 어디 있고, 어떻게 꺼낼지”를 정의하는 클래스로 PyTorch에게 데이터셋이 어떤 형태로 생겼는지 알려주는 설명서 역할을 한다.
DataLoader는 Dataset을 받아서 학습할 때 배치(batch) 단위로 잘라서 공급해준다. 배치 단위로 묶어주고 (batch_size), 순서를 섞어주고 (shuffle=True), 여러 CPU 스레드를 이용해 동시에 로딩(num_workers)까지 해준다.
✅ 예시
from torch.utils.data import Dataset, DataLoader
class MyDataset(Dataset):
def __init__(self, X, y):
self.X = X # 입력 데이터
self.y = y # 라벨 (정답)
def __len__(self):
return len(self.X) # 전체 데이터 개수
def __getitem__(self, idx):
# 인덱스로 접근했을 때 반환할 한 샘플
return self.X[idx], self.y[idx]
dataset = MyDataset(x, y)
loader = DataLoader(dataset, batch_size=32, shuffle=True)
for batch_x, batch_y in loader:
output = model(batch_x)
데이터셋이 커질수록 batch 단위 학습이 필수다. 이 모듈이 데이터를 효율적으로 GPU로 전달하는 역할을 한다.
이후에 나오는 학습 루프에서는 이런 식으로 Loader를 사용한다
for batch_x, batch_y in loader:
output = model(batch_x)
loss = criterion(output, batch_y)
...
🌏 torchvision, torchaudio, torchtext: 확장 라이브러리
✅ 역할
- 각 도메인(이미지, 음성, 텍스트)에 특화된 도구를 제공
- 미리 학습된 모델(pretrained models), 데이터셋, 전처리(transform)를 포함
유명한 모델이나 데이터셋은 torch에서 가져올 수 있다.
✅ 예시
from torchvision import datasets, transforms, models
# 이미지 전처리
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor()
])
# 데이터셋 불러오기
train_data = datasets.CIFAR10(root="./data", train=True, download=True, transform=transform)
# 미리 학습된 모델 불러오기
resnet = models.resnet18(pretrained=True)
- torchvision: 이미지 분류, 객체 탐지, 세그멘테이션
- torchaudio: 음성 인식, 음성 합성
- torchtext: 자연어 처리, 토큰화, 임베딩
🌏 torch.distributed: 분산 학습
✅ 역할
- 여러 GPU나 여러 서버에서 병렬 학습을 수행할 수 있게 하는 모듈
- 대형 모델(LLM, Diffusion 등)을 학습할 때 필수
✅ 예시
import torch.distributed as dist
dist.init_process_group(backend='nccl')
# 모델 병렬화
model = torch.nn.parallel.DistributedDataParallel(model)
한 대의 GPU로는 감당이 안 되는 대규모 모델을 수십 대의 GPU에서 나눠서 학습시킬 때 사용한다.

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
'AI > 딥러닝' 카테고리의 다른 글
| [AI/DL] FP8부터 H100까지, AI 학습용 GPU와 기술용어 완벽 정리 (0) | 2025.10.21 |
|---|---|
| [AI/DL] 딥러닝의 발전(2): RNN에서 Transformer까지 — 순차 데이터와 Self-Attention 이해하기 (0) | 2025.10.20 |
| [AI/DL] 딥러닝의 발전(1): AlexNet, ResNet, YOLO (2012~2016) (0) | 2025.10.17 |
| [AI/DL] 딥러닝 기본기 총정리: 퍼셉트론·손실함수·옵티마이저 (0) | 2025.10.17 |
| [AI/DL] GAN(Generative Adversarial Networks): Generator vs Discriminator 의 경쟁적인 가짜 찾아내기 (0) | 2024.12.06 |