개발? 새발!
개발? 새발!

PyTorch 딥러닝 프레임워크, 연구부터 프로덕션까지 완벽 정복

2025.12.13

PyTorch 딥러닝 프레임워크, 연구부터 프로덕션까지 완벽 정복

딥러닝 모델 학습하려고 프레임워크 찾아보다가
PyTorch랑 TensorFlow 사이에서 고민하고 계신가요?
요즘 연구실이나 스타트업에서 PyTorch 선택하는 곳이 진짜 많이 늘었어요

Meta에서 개발한 오픈소스 딥러닝 프레임워크인 PyTorch가
왜 이렇게 인기를 얻게 됐는지, 어떤 점이 좋은지 한번 살펴볼게요

관련 이미지 1

이미지 출처: 인프런

PyTorch가 뭔데요?

PyTorch는 Meta AI Research(옛날 Facebook AI)에서 만든 파이썬 기반 딥러닝 라이브러리예요
NumPy처럼 다차원 배열을 다루는 Tensor라는 자료형을 제공하는데,
이게 GPU에서도 똑같이 돌아가서 엄청 편해요

import torch


CPU 텐서 생성

x = torch.rand(3, 4)


GPU로 옮기기 (CUDA 사용 가능한 경우)

if torch.cuda.is_available():
    x = x.cuda()

근데 PyTorch의 진짜 강점은 동적 계산 그래프(Define-by-Run)라는 거예요
TensorFlow 1.x 쓰던 시절엔 그래프를 미리 다 정의해놓고 세션을 돌려야 했는데,
PyTorch는 forward 실행하는 그 순간에 그래프가 만들어져요
디버깅할 때 print 찍어보면 바로바로 확인되니까 개발 속도가 훨씬 빨라요

자동 미분이 이렇게 쉽다고?

신경망 학습의 핵심인 역전파(Backpropagation)를
PyTorch는 autograd 기능으로 자동으로 처리해줘요

import torch

x = torch.tensor([2.0], requires_grad=True)
y = x ** 2 + 3 * x + 1


자동으로 미분 계산

y.backward()
print(x.grad)  # dy/dx = 2x + 3 = 7.0

requires_grad=True만 설정해주면
복잡한 연산도 알아서 그라디언트를 추적하고 계산해줘요
손으로 일일이 미분 공식 써가며 계산할 필요가 없는 거죠 ㅎㅎ


모델 만들기는 정말 직관적이에요

torch.nn.Module을 상속받아서 클래스 형태로 모델을 정의하는데,
이게 정말 파이썬스럽고 읽기 쉬워요

import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)
        
    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = SimpleNet()

__init__에서 레이어들을 정의하고
forward에서 순전파 로직만 작성해주면 끝이에요

조건문이나 반복문도 그냥 파이썬 문법 그대로 쓸 수 있어요
이게 동적 그래프의 장점인데, 모델 구조를 실행 중에 바꿀 수도 있다는 거죠

관련 이미지 2

이미지 출처: espace - 티스토리

학습 루프 작성하기

PyTorch는 학습 과정을 명시적으로 작성해요
처음엔 코드가 좀 길어 보일 수 있지만, 그만큼 제어권이 크고 커스터마이징이 자유로워요

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(10):
    for inputs, labels in train_loader:
        # 그라디언트 초기화
        optimizer.zero_grad()
        
        # 순전파
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        
        # 역전파
        loss.backward()
        
        # 가중치 업데이트
        optimizer.step()

forward → loss 계산 → backward → optimizer.step()
이 흐름이 명확하게 보여서 뭘 하는지 이해하기 쉬워요

GPU 사용도 한 줄이면 돼요

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)
inputs = inputs.to(device)

.to(device) 메서드만 호출하면 모델이랑 데이터가 GPU로 쏙 이동해요
다중 GPU 학습도 DataParallel이나 DistributedDataParallel로 간단히 구현 가능해요


생태계가 진짜 풍부해요

PyTorch는 코어 프레임워크 외에도 도메인별 라이브러리를 제공하고 있어요

torchvision은 컴퓨터 비전용으로 ResNet, VGG 같은 유명 모델들과
CIFAR-10, ImageNet 같은 데이터셋을 바로 불러올 수 있어요

from torchvision import datasets, transforms, models


이미지 전처리

transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
])


데이터셋 로드

train_data = datasets.CIFAR10(root='./data', train=True, 
                              download=True, transform=transform)


사전학습된 모델 불러오기

resnet = models.resnet50(pretrained=True)

torchaudio는 음성 처리용이고,
torchtext는 NLP용인데 일부 모듈은 deprecated 됐지만
Hugging Face의 transformers 라이브러리가 그 역할을 완벽하게 대체하고 있어요

관련 이미지 3

이미지 출처: 인프런

프로덕션 배포는 어떻게 하나요?

연구용으로만 쓰기엔 아까운 게 PyTorch예요
실제 서비스 환경에 배포할 때 TorchScript와 TorchServe를 사용할 수 있거든요

TorchScript는 동적 그래프를 정적 그래프로 변환해서
최적화하고 C++ 환경에서도 실행 가능하게 만들어줘요

class MyModule(torch.nn.Module):
    def __init__(self):
        super(MyModule, self).__init__()
        self.linear = torch.nn.Linear(10, 5)
        
    def forward(self, x):
        return torch.relu(self.linear(x))

model = MyModule()


TorchScript로 변환

scripted_model = torch.jit.script(model)
scripted_model.save("model.pt")

trace 방식이랑 script 방식 두 가지가 있는데,
조건문이나 반복문이 있으면 script를 쓰는 게 안전해요

TorchServe는 학습된 모델을 REST API 형태로 서빙할 수 있게 해주는 프레임워크예요
AWS, GCP, Azure 같은 클라우드에서도 공식 지원하고 있어서
스케일링도 편하게 할 수 있어요


한국어 자료도 충분해요

PyTorch 한국 사용자 모임(PyTorchKR)에서
공식 튜토리얼을 전부 한국어로 번역해서 제공하고 있어요

tutorials.pytorch.kr 들어가면
"PyTorch 기본 익히기"부터 시작해서
컴퓨터 비전, NLP, 강화학습까지 분야별 예제를
Colab에서 바로 실행해볼 수 있어요

GitHub의 PyTorchKorea/tutorials-kr 저장소에서
오픈소스로 번역 작업을 하고 있고,
정기적으로 세미나나 밋업도 열리니까
커뮤니티에 참여해보시는 것도 좋을 것 같아요

TensorFlow랑 뭐가 다른데요?

사실 TensorFlow 2.x 나오면서 eager execution이 기본이 되어서
PyTorch랑 사용 경험이 많이 비슷해졌어요

근데 PyTorch가 여전히 연구자들 사이에서 인기 많은 이유는
정말 파이썬스럽고 직관적이라는 점이에요
디버깅할 때 그냥 Python debugger 쓰면 되고,
print 찍어보면 바로바로 확인되니까요

논문 구현할 때도 PyTorch로 작성된 코드가 압도적으로 많아서
최신 연구 따라가기가 훨씬 수월해요

물론 TensorFlow는 프로덕션 환경에서의 경험이 오래되고
TFX, TF-Serving 같은 도구가 잘 갖춰져 있다는 장점이 있죠
근데 PyTorch도 TorchServe 출시하면서 그 격차를 많이 줄였어요


설치는 간단해요

Python 3.10 이상이면 바로 설치 가능해요

# CPU 버전
pip install torch torchvision torchaudio


CUDA 11.8 버전

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

본인 CUDA 버전에 맞춰서 설치하면 되는데,
공식 홈페이지(pytorch.org)에서 선택하면
설치 명령어를 자동으로 생성해줘서 편해요

Conda 쓰시는 분들은

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

이런 식으로 설치하시면 돼요

간단한 예제로 마무리할게요

MNIST 손글씨 분류하는 전체 코드를 한번 보여드릴게요

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms


데이터 로더

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)


모델 정의

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)
        
    def forward(self, x):
        x = x.view(-1, 784)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters())


학습

for epoch in range(5):
    for inputs, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

관련 이미지 4

이미지 출처: 국내도서 - 교보문고

코드가 직관적이고 읽기 쉽죠?
이게 PyTorch의 매력이에요

딥러닝 처음 시작하시거나
최신 논문 구현해보고 싶으시다면
PyTorch로 시작하시는 걸 추천드려요

메타에서도 계속 업데이트하고 있고,
최근엔 리눅스재단 산하 PyTorch Foundation으로 넘어가면서
더욱 안정적인 거버넌스 체계를 갖추게 됐어요

tutorials.pytorch.kr에서 한국어 튜토리얼 보시면서
텐서 기초부터 차근차근 따라해보시면
금방 익숙해지실 거예요

궁금한 점 있으시면 PyTorchKR 커뮤니티에서 물어보시는 것도 좋아요
다들 친절하게 답변해주시더라구요 ㅎㅎ


이전 글 보기

Scikit-Learn으로 시작하는 머신러닝 여정 (feat. 진짜 쉬움)

AVPlayer 분석하기 - 동영상 플레이어 뜯어보기

이 블로그의 다음 이야기도 받아보세요

새 글 구독 (RSS)