가이드 · 비교와 선택

코랩 대신 GPU 서버를 쓸 때 달라지는 것

Colab은 설치 없이 바로 쓰기 좋지만 GPU가 보장되지 않고 실행 시간에 상한이 있어요. 몇 시간 넘게 걸리는 학습이나 계속 유지할 환경이라면 GPU 서버가 더 예측하기 쉬워요.

업데이트
읽는 시간
약 10분

코랩이 끊기는 이유

Colab 공식 FAQ에 따르면 Colab은 노트북에서 직접 작업 중인 사용자를 우선하고, 사용량 한도를 수시로 조정해요.

  • 무료 버전은 최대 12시간까지 실행되고, 이것도 가용성과 사용 패턴에 따라 달라져요. 유료 플랜도 보통 최대 12시간이고, Pro+는 컴퓨팅 단위가 충분하면 최대 24시간까지 이어서 실행할 수 있어요.
  • 입력 없이 한동안 지나면 런타임이 끊기고 가상 머신이 삭제돼요. 서비스가 정한 최대 수명도 있어요.
  • 리소스는 보장되지 않고, 한도와 쓸 수 있는 GPU 종류도 시기마다 달라요. 한도가 계속 바뀌어서 구체적인 수치는 공개하지 않아요.
  • Pro, Pro+, Pay As You Go는 컴퓨팅 단위 잔액만큼 리소스를 더 줄 뿐, 특정 GPU를 보장하지는 않아요. 잔액을 다 쓰면 실행 중인 백엔드가 종료될 수 있고 무료 버전 정책으로 돌아가요.

Colab이 더 잘 맞는 경우

  • 한두 시간 안에 끝나는 실험, 튜토리얼, 강의 실습
  • 링크 하나로 노트북의 코드와 결과를 공유해야 할 때
  • GPU를 하루 몇 분씩만 쓸 때. 매번 서버를 만들고 정리하는 수고가 더 커요.
  • 환경 설정에 시간을 쓰고 싶지 않고, 정해진 GPU가 꼭 필요하지 않을 때

GPU 서버로 옮기면 달라지는 것

시간 제한이 사라지는 대신 서버를 직접 정리해야 해요. Colab은 탭을 닫고 잊어도 런타임이 알아서 정리되지만, GPU 서버는 정리하기 전까지 요금이 계속 나가요. 제공자별 요금 규칙에서 볼 점은 GPU 클라우드 고르는 법에 있어요.

Colab과 GPU 서버 비교 (일반적인 경우)
항목ColabGPU 서버
실행 시간최대 실행 시간과 유휴 타임아웃이 있어요직접 끄거나 삭제할 때까지 실행돼요
GPU시기에 따라 쓸 수 있는 종류가 달라요고른 GPU가 고정돼요
환경가상 머신이 삭제되면 패키지를 다시 설치해야 해요서버가 있는 동안 패키지와 파일이 남아요
데이터주로 Google Drive를 마운트해요서버 디스크나 별도 볼륨에서 바로 읽어요
접속브라우저의 노트북 화면SSH 터미널, JupyterLab, VS Code 원격 접속
서비스 실행대화형 작업과 무관한 웹 서비스는 금지돼요API 서버나 웹 UI를 포트로 열 수 있어요
이용 요금무료 또는 컴퓨팅 단위 기반 유료 플랜서버가 있는 동안 쓴 시간만큼 나가요

1단계: 패키지를 requirements.txt로 정리하세요

흩어진 !pip install 셀을 requirements.txt 하나로 모아요. Colab에 기본으로 깔려 있어서 따로 설치하지 않던 패키지는 서버에 없을 수 있으니, 노트북의 import 문을 기준으로 목록을 만드세요.

pip freeze로 Colab 런타임 전체를 저장하면 쓰지 않는 패키지까지 고정돼서, CUDA 환경이 다른 서버에서 설치가 꼬이기 쉬워요. 실제로 쓰는 패키지만 적고, 결과 재현에 중요한 패키지는 Colab에서 쓰던 버전으로 고정하세요.

python
import importlib.metadata as md

for name in ["transformers", "datasets", "accelerate", "torch"]:
    print(f"{name}=={md.version(name)}")
Colab 셀에서 실행하면 지금 쓰는 버전이 나와요. 패키지 이름은 예시예요.

torch는 requirements.txt에서 빼고 서버의 CUDA 환경에 맞춰 따로 설치하세요. 버전 뒤에 붙은 +cu124 같은 표시까지 그대로 적으면 설치가 안 되거나 드라이버와 맞지 않는 빌드가 깔릴 수 있어요. PyTorch가 이미 설치된 서버라면 --system-site-packages로 가상 환경을 만들어 그대로 쓰면 돼요.

bash
python -m venv --system-site-packages .venv
source .venv/bin/activate
pip install -r requirements.txt

2단계: 데이터를 Google Drive 밖으로 옮기세요

drive.mount()는 Colab 안에서만 동작해요. 데이터를 서버로 먼저 옮기고 코드의 경로를 바꿔야 해요. 작은 파일이 많다면 .tar.gz나 .zip 하나로 묶어서 옮기세요.

bash
# 내 컴퓨터에서: 압축 파일을 서버로 보내요
rsync -avP dataset.tar.gz ubuntu@SERVER_IP:/data/

# 서버에서: 압축을 풀어요
tar -xzf /data/dataset.tar.gz -C /data/
ubuntu@SERVER_IP는 내 서버의 사용자와 주소로 바꾸세요. SSH 포트가 22가 아니면 -e "ssh -p 포트번호"를 붙여요.

내 컴퓨터를 거치기 어려울 만큼 크다면 rclone으로 서버에서 Google Drive를 직접 내려받을 수 있어요.

경로는 환경 변수로 받게 바꿔 두면 다른 서버나 볼륨으로 옮겨도 코드를 고치지 않아도 돼요.

python
# Colab에서 쓰던 코드
# from google.colab import drive
# drive.mount("/content/drive")
# DATA_DIR = "/content/drive/MyDrive/dataset"

# 서버에서는 경로를 환경 변수로 받아요
import os
from pathlib import Path

DATA_DIR = Path(os.environ.get("DATA_DIR", "/data/dataset"))
OUTPUT_DIR = Path(os.environ.get("OUTPUT_DIR", "/data/outputs"))
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)

google.colab의 다른 기능도 바꿔요. files.upload()와 files.download() 대신 rsync, scp, JupyterLab 파일 브라우저를 쓰고, userdata.get()으로 읽던 API 토큰은 환경 변수로 옮기세요.

3단계: 긴 작업은 tmux나 nohup으로 돌리세요

SSH 연결이 끊기면 그 세션에서 실행한 프로세스도 함께 종료될 수 있어요. tmux 세션 안에서 돌리면 연결이 끊겨도 학습이 계속돼요. 없다면 sudo apt install tmux로 설치하세요.

bash
tmux new -s train
python train.py
# Ctrl+b를 누른 뒤 d를 누르면 학습은 그대로 두고 세션에서 빠져나와요

# 다시 접속한 뒤 세션으로 돌아가요
tmux attach -t train

화면을 볼 필요 없이 로그만 남기면 된다면 nohup이 더 간단해요.

bash
nohup python train.py > train.log 2>&1 &
tail -f train.log
tail -f는 Ctrl+C로 빠져나와도 학습에는 영향이 없어요.

노트북 셀에서 돌린 학습은 브라우저를 닫아도 커널은 계속 돌지만, 그동안의 출력은 남지 않을 수 있어요. 코드는 노트북에서 다듬고, 긴 학습은 jupyter nbconvert --to script train.ipynb로 만든 .py 파일로 실행하세요. 변환하면 !pip 같은 줄이 get_ipython() 호출로 바뀌니 지우거나 셸 스크립트로 옮기세요.

4단계: 체크포인트로 언제든 이어서 학습하세요

시간 제한이 없어도 코드 오류, 메모리 부족, 더 큰 GPU로 옮기기처럼 학습이 멈추는 이유는 많아요. 가중치와 함께 옵티마이저 상태와 에포크까지 저장해야 같은 지점에서 이어갈 수 있어요.

python
import os
import torch

CKPT = "/data/outputs/last.pt"

def save_checkpoint(model, optimizer, epoch):
    tmp = CKPT + ".tmp"
    torch.save(
        {"epoch": epoch, "model": model.state_dict(), "optimizer": optimizer.state_dict()},
        tmp,
    )
    os.replace(tmp, CKPT)  # 저장 도중 멈춰도 이전 체크포인트가 깨지지 않아요

start_epoch = 0
if os.path.exists(CKPT):
    ckpt = torch.load(CKPT, map_location="cpu")
    model.load_state_dict(ckpt["model"])
    optimizer.load_state_dict(ckpt["optimizer"])
    start_epoch = ckpt["epoch"] + 1

for epoch in range(start_epoch, num_epochs):
    train_one_epoch(model, optimizer)
    save_checkpoint(model, optimizer, epoch)
model, optimizer, num_epochs, train_one_epoch는 기존 학습 코드의 것을 그대로 써요.

Shelf로 옮길 때 알아 둘 점

지금은 GA102 20GB와 RTX 3090 24GB로 서버를 만들 수 있어요. “PyTorch 2.4 Notebook (CUDA 12.4, JupyterLab, Python)” 예시 환경을 고르면 Colab처럼 브라우저의 JupyterLab에서 작업하고, SSH 키로 터미널에도 접속할 수 있어요. 노트북 작업에 맞는 구성은 코랩 대신 쓰는 JupyterLab GPU 서버를 보세요.

  • 데이터와 체크포인트는 영구 볼륨에 두세요. 서버를 삭제해도 남고, 다른 GPU 서버에 다시 올리지 않고 연결할 수 있어요.
  • 패키지를 설치한 환경은 저장 이미지로 남기면 새 서버에서 그대로 불러올 수 있어요. 메모리 상태는 저장되지 않으니 학습은 체크포인트로 이어가세요.
  • 서버 기본 디스크는 서버와 함께 삭제돼요. Shelf는 백업 서비스가 아니니 중요한 결과는 다른 곳에도 보관하세요.
  • 요금은 서버 생성 시점부터 1시간 단위로 계산하고, 중지해도 그대로 나가요. 작업이 끝나면 남길 것을 볼륨이나 저장 이미지에 두고 서버를 삭제하세요. 볼륨과 저장 이미지에는 저장 공간 요금이 따로 있고, GPU별 가격은 요금 안내에 있어요.

자주 묻는 질문

Colab Pro를 쓰면 사용량 제한이 없어지나요?

없어지지 않아요. Pro+도 연속 실행은 컴퓨팅 단위가 충분할 때 최대 24시간이고, 잔액을 다 쓰면 무료 버전 정책으로 돌아가요. 정해진 GPU를 몇 시간씩 끊김 없이 써야 한다면 GPU 서버가 맞아요.

Colab 노트북 파일을 GPU 서버에서 그대로 열 수 있나요?

.ipynb 파일은 JupyterLab에서 그대로 열려요. google.colab을 쓰는 코드(Drive 마운트, 파일 업로드, userdata)는 2단계처럼 바꿔야 해요. 서버에서 JupyterLab을 여는 방법은 원격 GPU 서버에서 JupyterLab 쓰기를 보세요.

GPU 서버가 필요할 때

필요한 GPU와 개발 환경을 골라 시간 단위로 시작해요.