본문 바로가기
Artificial Intelligence/21. PyTorch

[PYTORCH] 초보 개발자를 위한 PYTORCH 설치 가이드 (CPU 및 GPU 버전 차이와 3가지 해결 방법)

by Papa Martino V 2026. 3. 23.
728x90

PYTORCH 설치 가이드
PYTORCH 설치 가이드

 

 

딥러닝 분야에서 가장 각광받는 프레임워크 중 하나인 PyTorch, 그 시작은 '설치'입니다. 하지만 초보 개발자들에게 설치 과정은 복잡한 환경 설정과 호환성 문제로 인해 좌절을 안겨주기도 합니다. 본 가이드는 단순한 명령어 복사-붙여넣기를 넘어, 왜 그렇게 설치해야 하는지, 발생할 수 있는 문제의 근본적인 해결 방법은 무엇인지 전문적인 시각에서 상세히 안내합니다. 특히, GPU 활용을 위한 NVIDIA CUDA 환경 구축과 같은 난해한 부분을 명쾌하게 풀어냅니다.

1. 설치 전 필수 이해: 내 하드웨어 확인

PyTorch 설치의 가장 큰 분기점은 'GPU(NVIDIA 그래픽카드)' 유무입니다. GPU는 딥러닝 연산을 획기적으로 가속화할 수 있지만, 설치 과정이 복잡합니다. 반면, CPU 버전은 비교적 간단하게 설치할 수 있습니다.

1.1. GPU(NVIDIA) 확인 및 CUDA 드라이버 설치

  1. NVIDIA 제어판 또는 장치 관리자에서 사용 중인 NVIDIA 그래픽카드 모델명을 확인합니다. (GeForce RTX 3060 등)
  2. 해당 모델이 CUDA를 지원하는지 확인합니다. (대부분의 최신 모델은 지원합니다.)
  3. NVIDIA 공식 홈페이지에서 최신 그래픽 드라이버를 다운로드하여 설치합니다. 드라이버 설치 과정에서 호환되는 CUDA 버전이 자동으로 설치되는 경우가 많습니다.
  4. 시스템 명령 프롬프트(CMD) 또는 터미널에서 nvidia-smi 명령어를 입력하여 설치된 드라이버 및 지원하는 최대 CUDA 버전을 확인합니다.
nvidia-smi

주의: 'CUDA Version' 항목에 표시되는 버전은 해당 드라이버가 지원할 수 있는 *최대* CUDA 버전입니다. 실제 설치된 CUDA Toolkit 버전과는 다를 수 있습니다.

1.2. CPU 버전 설치 결정

NVIDIA GPU가 없거나, 맥(Apple Silicon 제외, 이전 모델), 혹은 복잡한 설정 없이 빠르게 PyTorch를 체험해보고 싶다면 CPU 버전을 선택하는 것이 현명합니다. 이 가이드에서는 CPU 버전 설치도 함께 다룹니다.

2. CPU vs GPU 버전: 상세 비교

사용자 환경과 목표에 따라 CPU와 GPU 버전 중 어떤 것을 선택해야 할지 결정하는 데 도움이 되는 비교 표입니다.

비교 항목 CPU 버전 GPU 버전 (with CUDA)
주요 하드웨어 Intel, AMD CPU (Apple Silicon 포함) NVIDIA GPU
연산 가속 없음 (CPU 기본 연산) 있음 (CUDA 활용 대폭 가속)
설치 복잡도 낮음 (pip/conda 명령어 한 줄) 높음 (드라이버, CUDA Toolkit 설치 필요)
최적 사용처 모델 학습 테스트, 간단한 인퍼런스, 리소스 제한 환경 대규모 모델 학습, 실시간 인퍼런스, 고성능 계산
장점 설치가 간편하고 안정적임. 맥 등 비 NVIDIA 환경 지원. 매우 빠른 학습 속도 제공.
단점 대규모 모델 학습 시 극도로 느림. NVIDIA 그래픽카드 필수. 설치 및 환경 설정이 어려움.

3. 3가지 주요 설치 방법 상세 안내

시스템 환경에 따라 최적의 설치 방법이 다를 수 있습니다. 대표적인 3가지 방법을 단계별로 설명합니다.

방법 3.1: Python Package Manager (pip) 활용

가장 일반적이고 가벼운 방법입니다. 가상환경(venv)을 사용하는 것이 권장됩니다.

  1. 가상환경 생성 및 활성화:
    python -m venv pytorch_venv
    # Windows
    pytorch_venv\Scripts\activate
    # Linux/macOS
    source pytorch_venv/bin/activate
  2. PyTorch 공식 홈페이지에서 자신의 환경(OS, CUDA 버전)에 맞는 명령어를 복사하여 실행합니다.
    • CPU 버전 (Linux 예시): pip install torch torchvision torchaudio
    • GPU 버전 (CUDA 12.1 예시, Linux): pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

방법 3.2: Conda Package Manager 활용

데이터 과학 환경 구축에 유리합니다. 패키지 간 의존성 관리가 잘 된다는 장점이 있습니다.

  1. Conda 환경 생성 및 활성화:
    conda create -n pytorch_env python=3.10
    conda activate pytorch_env
  2. PyTorch 공식 홈페이지에서 명령어를 확인하여 실행합니다.
    • Conda를 통한 GPU 설치 (CUDA 12.1 예시): conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
    • Conda를 통한 CPU 설치: conda install pytorch torchvision torchaudio cpuonly -c pytorch

방법 3.3: Docker 컨테이너 활용 (고급 사용자)

호스트 시스템에 CUDA를 직접 설치하지 않고도 격리된 환경에서 PyTorch를 실행할 수 있습니다. NVIDIA Container Toolkit 설치가 필수입니다.

  1. Docker 설치NVIDIA Container Toolkit 설치 확인
  2. NVIDIA 공식 PyTorch Docker 이미지 사용:
    docker pull nvcr.io/nvidia/pytorch:24.03-py3  # 예시 버전
  3. GPU 할당과 함께 컨테이너 실행:
    docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:24.03-py3

4. 설치 결과 확인 및 문제 해결

설치가 완료되면, Python 인터프리터에서 간단한 스크립트를 통해 PyTorch가 정상적으로 설치되었는지, 특히 GPU를 인식하는지 확인해야 합니다.

4.1. 설치 확인 스크립트

import torch

print(f"PyTorch Version: {torch.__version__}")
if torch.cuda.is_available():
    print("GPU is AVAILABLE.")
    print(f"CUDA Version: {torch.version.cuda}")
    print(f"Current GPU Device: {torch.cuda.get_device_name(0)}")
else:
    print("GPU is NOT available. Using CPU.")

성공적인 GPU 설정 시 출력 예시

PyTorch Version: 2.2.0+cu121
GPU is AVAILABLE.
CUDA Version: 12.1
Current GPU Device: NVIDIA GeForce RTX 3080 Ti

4.2. GPU 인식 실패 시 해결 방법 2가지

만약 `torch.cuda.is_available()`이 `False`를 반환한다면, 다음과 같은 이유일 수 있습니다.

  • 해결 방법 1: CUDA 버전 불일치 확인
    • `nvidia-smi`로 확인한 'CUDA Version'이 PyTorch 설치 시 지정한 CUDA 버전보다 크거나 같은지 확인합니다. 만약 설치하려는 PyTorch의 CUDA 버전이 더 높다면, NVIDIA 드라이버를 업데이트해야 합니다.
  • 해결 방법 2: CPU 전용 버전 오설치 확인
    • `pip list | grep torch` 또는 `conda list torch` 명령어로 설치된 torch 버전을 확인합니다. 버전명에 `+cu...` 형식의 CUDA 표시가 없다면(예: `2.2.0`), CPU 전용 버전이 설치된 것입니다. 이 경우, 해당 패키지를 삭제하고 GPU 버전 설치 명령어를 다시 실행하십시오.

5. 실무 적용 가능한 예제 7가지

개발자가 PyTorch를 설치한 후 실무에서 바로 적용해볼 수 있는 7가지 핵심 예제를 소개합니다.

예제 1: 텐서 생성 및 기본 연산

import torch

# 텐서 생성 (2x3)
x = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float32)
y = torch.ones(2, 3)

# 텐서 덧셈
z = x + y
print(f"x + y =\n{z}")

# 행렬 곱셈 (3x2 텐서와 2x3 텐서 곱)
v = torch.randn(3, 2)
result = torch.matmul(v, x)
print(f"v * x =\n{result}")

예제 2: CPU와 GPU 간 텐서 이동

import torch

# 기본적으로 CPU에 텐서 생성
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"Using device: {device}")

x = torch.randn(3, 3)
print(f"Original device: {x.device}")

# GPU로 이동 (GPU 사용 가능 시)
if torch.cuda.is_available():
    x_gpu = x.to(device)
    print(f"Moved to device: {x_gpu.device}")
    
    # GPU 텐서 연산
    y_gpu = torch.ones_like(x_gpu) * 2
    z_gpu = x_gpu + y_gpu
    print(f"Result device: {z_gpu.device}")

# 다시 CPU로 이동
x_cpu = z_gpu.to('cpu')
print(f"Moved back to device: {x_cpu.device}")

예제 3: 자동 미분 (Autograd) 활용

import torch

# requires_grad=True 설정으로 미분 추적 활성화
x = torch.tensor([2.0, 3.0], requires_grad=True)
y = x**2 + 3*x + 1

# y를 x에 대해 미분
y.backward(torch.tensor([1.0, 1.0])) # 각 요소에 대한 그라디언트 계산

# x에 대한 미분값 확인 (dy/dx = 2x + 3)
# x=[2, 3] 일 때 dy/dx = [7, 9]
print(f"x.grad =\n{x.grad}")

예제 4: 간단한 선형 회귀 모델 정의

import torch
import torch.nn as nn

# 입력 데이터 (특징 수: 1, 출력 수: 1)
model = nn.Linear(1, 1)

# 초기 가중치와 편향 확인
print(f"Weight: {model.weight}")
print(f"Bias: {model.bias}")

# 입력 데이터 생성
input_data = torch.tensor([[1.0], [2.0], [3.0]])

# 모델 예측 (Inference)
output = model(input_data)
print(f"Prediction:\n{output}")

예제 5: 손실 함수와 최적화 도구 사용

import torch
import torch.nn as nn
import torch.optim as optim

# 간단한 모델 및 데이터
model = nn.Linear(1, 1)
criterion = nn.MSELoss() # 평균 제곱 오차 손실 함수
optimizer = optim.SGD(model.parameters(), lr=0.01) # 확률적 경사 하강법

# 가상의 목표값
target = torch.tensor([[2.0], [4.0], [6.0]])
input_data = torch.tensor([[1.0], [2.0], [3.0]])

# 훈련 스텝 (1회)
optimizer.zero_grad() # 그라디언트 초기화
output = model(input_data) # 예측
loss = criterion(output, target) # 손실 계산
loss.backward() # 역전파 (그라디언트 계산)
optimizer.step() # 가중치 업데이트

print(f"Loss after 1 step: {loss.item()}")

예제 6: 커스텀 데이터셋 클래스 정의

import torch
from torch.utils.data import Dataset, DataLoader

class SimpleDataset(Dataset):
    def __init__(self, size=100):
        # 가상의 데이터 생성
        self.x = torch.randn(size, 10)
        self.y = torch.randint(0, 2, (size,))

    def __len__(self):
        return len(self.x)

    def __getitem__(self, idx):
        return self.x[idx], self.y[idx]

# 데이터셋 인스턴스 생성
dataset = SimpleDataset()

# 데이터로더 활용 (미니배치 처리)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

for batch_idx, (data, target) in enumerate(dataloader):
    print(f"Batch {batch_idx}: data shape {data.shape}, target shape {target.shape}")
    if batch_idx == 1: break # 2개 배치만 확인

예제 7: MNIST 데이터셋 다운로드 및 전처리 (torchvision 활용)

import torch
import torchvision
import torchvision.transforms as transforms

# MNIST 데이터셋 다운로드 및 텐서 변환 설정
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,)) # 데이터 정규화
])

# 학습 데이터셋 다운로드
trainset = torchvision.datasets.MNIST(root='./data', train=True,
                                        download=True, transform=transform)

# 테스트 데이터셋 다운로드
testset = torchvision.datasets.MNIST(root='./data', train=False,
                                       download=True, transform=transform)

print(f"Train Dataset Size: {len(trainset)}")
print(f"Test Dataset Size: {len(testset)}")

# 데이터 확인 (첫 번째 데이터)
image, label = trainset[0]
print(f"Image shape: {image.shape}, Label: {label}")

출처

  • PyTorch 공식 문서.
  • NVIDIA CUDA Toolkit documentation.
  • Docker documentation.
728x90