- Published on
딥러닝을 위한 Linux GPU 서버 완전 구축 가이드
- Authors
- Name
- 1. 딥러닝 GPU 서버 하드웨어 선택 가이드
- 2. Ubuntu 22.04/24.04 설치 및 초기 설정
- 3. NVIDIA 드라이버 설치
- 4. 드라이버 버전 선택 전략
- 5. CUDA Toolkit 설치
- 6. CUDA 버전과 드라이버 호환성 매트릭스
- 7. cuDNN 설치 및 설정
- 8. Conda/Mamba 환경 구성
- 9. Docker + NVIDIA Container Toolkit 설정
- 10. nvidia-smi, nvtop 모니터링 도구
- 11. SSH 원격 개발 환경
- 12. 보안 설정
- 13. 자동화: Ansible Playbook 예시
- 14. 정리: 전체 설치 순서 요약
- References
1. 딥러닝 GPU 서버 하드웨어 선택 가이드
딥러닝 서버를 구축하기 전에 가장 먼저 결정해야 할 것은 하드웨어 구성이다. 워크로드의 규모와 예산에 따라 선택지가 달라진다.
1.1 GPU 선택
GPU는 딥러닝 서버의 핵심 컴포넌트다. 선택 시 VRAM 용량, Tensor Core 세대, 메모리 대역폭을 중점적으로 고려해야 한다.
| GPU | VRAM | 용도 | 대략적 가격대 |
|---|---|---|---|
| RTX 4090 | 24GB GDDR6X | 개인 연구, 중소규모 학습 | ~$1,600 |
| RTX 5090 | 32GB GDDR7 | 개인 연구, 대형 모델 Fine-tuning | ~$2,000 |
| RTX A6000 / RTX 6000 Ada | 48GB GDDR6 | 프로덕션, ECC 메모리 지원 | ~$4,000+ |
| A100 (80GB PCIe/SXM) | 80GB HBM2e | 대규모 학습, NVLink 지원 | ~$10,000+ |
| H100 (80GB SXM) | 80GB HBM3 | 최대 규모 LLM 학습 | ~$25,000+ |
| H200 | 141GB HBM3e | Long-context LLM, 메모리 병목 해소 | ~$30,000+ |
실용적 추천:
- 개인/소규모 랩: RTX 4090 또는 RTX 5090. 24
32GB VRAM으로 7B13B 파라미터 모델의 Fine-tuning이 가능하다. - 기업/연구소: A100 80GB 또는 H100. NVLink을 통한 멀티 GPU 학습이 필수적인 환경에서는 데이터센터급 GPU가 필요하다.
- Multi-GPU를 고려한다면: PCIe 슬롯 간격, NVLink 지원 여부, 전원 공급 용량을 반드시 확인해야 한다.
1.2 CPU, RAM, Storage
| 컴포넌트 | 권장 사양 | 이유 |
|---|---|---|
| CPU | AMD EPYC 또는 Intel Xeon (코어 수 16+) | Data loading 병목 방지, PCIe 레인 충분 확보 |
| RAM | GPU VRAM의 2배 이상 (최소 64GB, 권장 128GB+) | 대규모 데이터셋 전처리, DataLoader worker 메모리 |
| OS Storage | NVMe SSD 500GB+ | 빠른 부팅, 패키지 캐시 |
| Data Storage | NVMe SSD 2TB+ 또는 RAID 구성 | 학습 데이터 I/O 병목 방지 |
| PSU | 1200W+ (Multi-GPU 시 1600W+) | RTX 4090 하나에 450W, 여유 전력 필수 |
CPU는 GPU 대비 상대적으로 덜 중요하지만, PCIe 레인 수가 멀티 GPU 환경에서 병목이 될 수 있으므로 서버급 플랫폼(AMD EPYC, Intel Xeon)을 권장한다. 데스크탑 플랫폼(AM5, LGA1700)에서도 단일 GPU 환경에서는 충분하다.
2. Ubuntu 22.04/24.04 설치 및 초기 설정
딥러닝 서버 OS로는 Ubuntu 22.04 LTS 또는 Ubuntu 24.04 LTS가 가장 널리 사용된다. NVIDIA 드라이버, CUDA, 각종 딥러닝 프레임워크의 지원이 가장 우선적으로 이루어지기 때문이다.
2.1 설치 후 기본 설정
# 시스템 업데이트
sudo apt update && sudo apt upgrade -y
# 필수 빌드 도구 설치
sudo apt install -y build-essential gcc g++ make cmake
# 커널 헤더 설치 (NVIDIA 드라이버 빌드에 필요)
sudo apt install -y linux-headers-$(uname -r)
# 네트워크 도구
sudo apt install -y net-tools curl wget git vim htop
# 시간대 설정
sudo timedatectl set-timezone Asia/Seoul
2.2 Secure Boot 비활성화
NVIDIA 드라이버는 커널 모듈을 로드해야 하므로, BIOS에서 Secure Boot을 비활성화하는 것이 권장된다. Secure Boot이 활성화된 상태에서도 MOK(Machine Owner Key)를 등록하여 사용할 수 있지만, 설정이 복잡해질 수 있다.
# Secure Boot 상태 확인
mokutil --sb-state
3. NVIDIA 드라이버 설치
NVIDIA 공식 문서에서는 크게 두 가지 설치 방식을 안내하고 있다: 패키지 매니저(apt) 방식과 .run 파일 방식이다. 서버 환경에서는 apt repository 방식이 관리 편의성 측면에서 권장된다.
3.1 방법 1: apt repository 방식 (권장)
NVIDIA 공식 드라이버 설치 가이드(https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html)에 따르면, Ubuntu에서는 다음과 같이 설치한다.
기존 드라이버 제거
# 기존 NVIDIA 관련 패키지 완전 제거
sudo apt-get purge nvidia* -y
sudo apt-get autoremove -y
sudo apt-get autoclean
ubuntu-drivers를 이용한 자동 설치
Ubuntu에서는 ubuntu-drivers 도구를 통해 시스템에 적합한 드라이버를 자동으로 설치할 수 있다.
# 사용 가능한 드라이버 목록 확인
sudo ubuntu-drivers devices
# 추천 드라이버 자동 설치
sudo ubuntu-drivers autoinstall
NVIDIA 공식 repository를 이용한 수동 설치
특정 버전의 드라이버가 필요한 경우, NVIDIA의 공식 apt repository를 추가하여 설치한다.
# NVIDIA 공식 repository 키 및 저장소 추가
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
# 특정 버전 설치 (예: 550 버전)
sudo apt install -y nvidia-driver-550
# 재부팅
sudo reboot
설치 확인
nvidia-smi
정상적으로 설치되었다면, GPU 이름, 드라이버 버전, 지원 CUDA 버전 등이 출력된다.
3.2 방법 2: .run 파일 방식
NVIDIA 홈페이지에서 직접 .run 파일을 다운로드하여 설치하는 방식이다. 특수한 커널 환경이나 커스텀 빌드가 필요한 경우에 사용한다.
# Nouveau 드라이버 비활성화
sudo bash -c "echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist-nouveau.conf"
sudo bash -c "echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u
sudo reboot
# GUI 환경 종료 (서버에 데스크탑 환경이 있는 경우)
sudo systemctl stop gdm3
# 또는
sudo systemctl stop lightdm
# .run 파일 실행
chmod +x NVIDIA-Linux-x86_64-550.120.run
sudo ./NVIDIA-Linux-x86_64-550.120.run
.run 파일 방식의 단점: 커널 업데이트 시 드라이버가 깨질 수 있으며, 패키지 매니저로 관리되지 않아 업데이트/제거가 불편하다. 서버 운영 환경에서는 apt 방식을 강력히 권장한다.
4. 드라이버 버전 선택 전략
NVIDIA는 데이터센터/서버용 드라이버에 대해 두 가지 브랜치를 운영한다.
4.1 Production Branch vs New Feature Branch
| 구분 | Production Branch (PB) | New Feature Branch (NFB) |
|---|---|---|
| 안정성 | 높음 (광범위한 테스트 완료) | 상대적으로 낮음 |
| 새 기능 | 출시 후 새 기능 추가 없음 | 최신 GPU 지원, 새 기능 포함 |
| 업데이트 정책 | 버그 수정, 보안 패치만 제공 | 주기적으로 새 기능 포함 릴리스 |
| 권장 환경 | 프로덕션 서버, 안정성 최우선 | 개발/테스트, 최신 GPU 사용 |
실무 가이드라인:
- 프로덕션 환경: Production Branch 사용. 예를 들어
550.xx시리즈가 PB로 지정되면, 해당 시리즈 내에서만 버그 수정 업데이트가 제공된다. - 최신 GPU (예: Blackwell 아키텍처): New Feature Branch를 사용해야 하는 경우가 많다. 최신 하드웨어 지원은 NFB에서 먼저 제공되기 때문이다.
- 서버에서
-server패키지를 사용:nvidia-driver-550-server와 같이-server접미사가 붙은 패키지는 Enterprise Ready Driver(ERD)로, 서버 환경에 최적화되어 있다.
# 사용 가능한 서버용 드라이버 확인
apt list --installed 2>/dev/null | grep nvidia-driver
apt-cache search nvidia-driver | grep server
5. CUDA Toolkit 설치
CUDA Toolkit은 NVIDIA GPU에서 병렬 컴퓨팅을 수행하기 위한 개발 환경이다. NVIDIA 공식 설치 가이드(https://docs.nvidia.com/cuda/cuda-installation-guide-linux/)에 따라 설치한다.
5.1 설치 전 확인사항
# CUDA 지원 GPU 확인
lspci | grep -i nvidia
# gcc 설치 확인
gcc --version
# 커널 헤더 확인
uname -r
sudo apt install -y linux-headers-$(uname -r)
5.2 네트워크 repository 방식 설치 (권장)
# CUDA keyring 패키지 설치
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
# CUDA Toolkit 설치 (최신 버전)
sudo apt-get install -y cuda-toolkit
# 또는 특정 버전 설치
sudo apt-get install -y cuda-toolkit-12-6
5.3 환경 변수 설정
# ~/.bashrc 또는 ~/.zshrc에 추가
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
# 적용
source ~/.bashrc
5.4 다중 CUDA 버전 관리
실무에서는 프로젝트마다 다른 CUDA 버전이 필요한 경우가 빈번하다. /usr/local/ 아래에 여러 CUDA 버전을 설치하고 update-alternatives로 관리할 수 있다.
# 다중 버전 설치 (예: 12.4와 12.6)
sudo apt-get install -y cuda-toolkit-12-4
sudo apt-get install -y cuda-toolkit-12-6
# /usr/local/ 아래 설치 확인
ls /usr/local/ | grep cuda
# cuda -> cuda-12.6 (심볼릭 링크)
# cuda-12.4
# cuda-12.6
# update-alternatives로 버전 전환 등록
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.4 10
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.6 20
# 버전 전환
sudo update-alternatives --config cuda
update-alternatives --config cuda를 실행하면 대화형 메뉴가 나타나며, 원하는 CUDA 버전을 선택할 수 있다. 이 방식을 사용하면 /usr/local/cuda 심볼릭 링크가 선택한 버전을 가리키도록 변경된다.
# 설치 확인
nvcc --version
6. CUDA 버전과 드라이버 호환성 매트릭스
CUDA Toolkit과 NVIDIA 드라이버 간에는 최소 드라이버 버전 요구사항이 존재한다. NVIDIA 공식 CUDA Toolkit Release Notes(https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html)에서 호환성 표를 확인할 수 있다.
6.1 주요 호환성 표 (Linux x86_64 기준)
| CUDA Toolkit 버전 | 최소 드라이버 버전 (Linux) |
|---|---|
| CUDA 12.0 | >= 525.60.13 |
| CUDA 12.1 | >= 530.30.02 |
| CUDA 12.2 | >= 535.54.03 |
| CUDA 12.3 | >= 545.23.06 |
| CUDA 12.4 | >= 550.54.14 |
| CUDA 12.5 | >= 555.42.02 |
| CUDA 12.6 | >= 560.28.03 |
| CUDA 13.0 | >= 570.86.15 |
| CUDA 13.1 | >= 575.51.03 |
핵심:
nvidia-smi에 표시되는 "CUDA Version"은 해당 드라이버가 지원하는 최대 CUDA Runtime 버전이다. 실제로 설치된 CUDA Toolkit 버전과 다를 수 있다. 실제 CUDA Toolkit 버전은nvcc --version으로 확인한다.
6.2 CUDA Forward/Minor Compatibility
NVIDIA의 CUDA Compatibility 문서(https://docs.nvidia.com/deploy/cuda-compatibility/)에 따르면, CUDA 12.x 이후부터는 Minor Version Compatibility가 지원된다. 즉, CUDA 12.0용 드라이버가 설치되어 있어도 CUDA 12.6으로 컴파일된 애플리케이션을 제한적으로 실행할 수 있다.
# 드라이버가 지원하는 CUDA 버전 확인
nvidia-smi | head -3
# 실제 설치된 CUDA Toolkit 버전 확인
nvcc --version
7. cuDNN 설치 및 설정
cuDNN(CUDA Deep Neural Network library)은 딥러닝에 최적화된 GPU 가속 라이브러리다. Convolution, Pooling, Normalization, Activation 등의 연산을 고도로 최적화하여 PyTorch, TensorFlow 등의 프레임워크가 내부적으로 사용한다.
NVIDIA 공식 cuDNN 설치 가이드(https://docs.nvidia.com/deeplearning/cudnn/installation/latest/linux.html)를 기반으로 설치한다.
7.1 apt repository 방식 설치 (권장)
# CUDA keyring이 이미 설치되어 있다면 cuDNN 패키지를 바로 설치할 수 있다
sudo apt-get install -y cudnn
# 특정 CUDA 버전용 cuDNN 설치
sudo apt-get install -y cudnn-cuda-12
7.2 Tarball 방식 설치
특정 버전이 필요하거나 시스템 패키지 매니저를 사용하지 않으려는 경우 tarball을 사용한다.
# NVIDIA Developer 사이트에서 다운로드 후
tar -xvf cudnn-linux-x86_64-9.x.x.x_cudaXX-archive.tar.xz
# 파일 복사
sudo cp cudnn-linux-x86_64-9.x.x.x_cudaXX-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-linux-x86_64-9.x.x.x_cudaXX-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
7.3 설치 확인
# cuDNN 버전 확인 (apt 설치 시)
dpkg -l | grep cudnn
# 또는 헤더 파일에서 직접 확인
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
8. Conda/Mamba 환경 구성
시스템 레벨의 CUDA Toolkit과 별개로, Conda/Mamba 가상 환경 내에서 PyTorch, TensorFlow를 설치하면 CUDA 버전 충돌을 방지할 수 있다. 최근의 PyTorch, TensorFlow는 자체적으로 CUDA Runtime을 번들링하고 있어, 시스템 CUDA 버전과 독립적으로 동작한다.
8.1 Miniforge(Mamba) 설치
# Miniforge 설치 (Mamba 포함)
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
bash Miniforge3-Linux-x86_64.sh -b -p $HOME/miniforge3
# 환경 변수 설정
$HOME/miniforge3/bin/mamba init bash
source ~/.bashrc
8.2 PyTorch 설치
# 딥러닝 환경 생성
mamba create -n dl python=3.11 -y
mamba activate dl
# PyTorch 설치 (CUDA 12.4 기준 - 공식 사이트에서 최신 명령어 확인)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# 설치 확인
import torch
print(f"PyTorch version: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")
print(f"cuDNN version: {torch.backends.cudnn.version()}")
print(f"GPU: {torch.cuda.get_device_name(0)}")
8.3 TensorFlow 설치
# TensorFlow 설치 (GPU 지원 포함)
pip install tensorflow[and-cuda]
# 설치 확인
import tensorflow as tf
print(f"TensorFlow version: {tf.__version__}")
print(f"GPU devices: {tf.config.list_physical_devices('GPU')}")
팁: PyTorch와 TensorFlow를 동일 환경에 설치하면 CUDA 라이브러리 버전 충돌이 발생할 수 있다. 가능하면 별도의 Conda 환경을 사용하는 것이 좋다.
9. Docker + NVIDIA Container Toolkit 설정
Docker를 사용하면 딥러닝 환경을 컨테이너 단위로 격리하여 관리할 수 있다. NVIDIA Container Toolkit(https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)을 설치하면 Docker 컨테이너 내에서 GPU를 사용할 수 있다.
9.1 Docker 설치
# Docker 공식 repository 설정
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 현재 사용자를 docker 그룹에 추가 (sudo 없이 사용)
sudo usermod -aG docker $USER
newgrp docker
9.2 NVIDIA Container Toolkit 설치
NVIDIA 공식 문서에 따른 설치 과정이다.
# NVIDIA Container Toolkit repository 설정
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 패키지 설치
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# Docker runtime 설정
sudo nvidia-ctk runtime configure --runtime=docker
# Docker 재시작
sudo systemctl restart docker
9.3 GPU Docker 테스트
# GPU 접근 테스트
docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi
# 특정 GPU만 사용
docker run --rm --gpus '"device=0"' nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi
# 모든 GPU 사용하여 PyTorch 컨테이너 실행
docker run --rm --gpus all -it pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime python -c \
"import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
9.4 Docker Compose에서 GPU 사용
# docker-compose.yml
services:
training:
image: pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all # 또는 특정 수: 1, 2 등
capabilities: [gpu]
volumes:
- ./data:/workspace/data
- ./models:/workspace/models
shm_size: '8g' # PyTorch DataLoader shared memory
주의:
shm_size를 설정하지 않으면 PyTorch의 DataLoader에서num_workers > 0일 때 shared memory 부족 오류가 발생할 수 있다.
10. nvidia-smi, nvtop 모니터링 도구
GPU 서버 운영에서 모니터링은 필수적이다. GPU 사용률, 메모리 사용량, 온도 등을 실시간으로 확인할 수 있어야 한다.
10.1 nvidia-smi
nvidia-smi는 NVIDIA 드라이버와 함께 설치되는 기본 모니터링 도구다.
# 기본 상태 확인
nvidia-smi
# 실시간 모니터링 (1초 간격)
watch -n 1 nvidia-smi
# 특정 정보만 쿼리
nvidia-smi --query-gpu=name,temperature.gpu,utilization.gpu,memory.used,memory.total --format=csv
# 프로세스별 GPU 사용량
nvidia-smi pmon -s um -d 1
# Persistence Mode 활성화 (서버 환경 권장)
sudo nvidia-smi -pm 1
Persistence Mode를 활성화하면 GPU 드라이버가 항상 로드된 상태를 유지하여, GPU를 처음 호출할 때 발생하는 초기화 지연(~수 초)을 제거할 수 있다. 서버 환경에서는 반드시 활성화해야 한다.
10.2 nvtop
nvtop은 htop과 유사한 인터페이스를 가진 GPU 모니터링 도구다. 여러 GPU의 사용률, 메모리, 온도, 프로세스 정보를 한 화면에서 실시간으로 확인할 수 있다.
# 설치
sudo apt install -y nvtop
# 실행
nvtop
10.3 gpustat
간결한 출력을 선호한다면 gpustat도 유용하다.
pip install gpustat
# 실시간 모니터링
gpustat -i 1 --color
11. SSH 원격 개발 환경
GPU 서버는 대부분 원격으로 접속하여 사용한다. 효율적인 원격 개발 환경을 구성한다.
11.1 SSH 서버 설정
# OpenSSH 서버 설치
sudo apt install -y openssh-server
# SSH 서비스 시작 및 자동 시작 설정
sudo systemctl enable ssh
sudo systemctl start ssh
11.2 VS Code Remote - SSH
VS Code의 Remote - SSH 확장을 사용하면 로컬 VS Code에서 원격 서버의 파일을 직접 편집하고, 원격 터미널을 사용할 수 있다.
클라이언트(로컬) 측 SSH config 설정:
# ~/.ssh/config
Host gpu-server
HostName 192.168.1.100
User username
Port 22
IdentityFile ~/.ssh/id_ed25519
ForwardAgent yes
11.3 tmux를 이용한 세션 유지
SSH 연결이 끊어져도 학습이 계속 실행되도록 tmux를 사용한다.
# tmux 설치
sudo apt install -y tmux
# 새 세션 생성
tmux new -s training
# 세션 분리 (detach): Ctrl+b, d
# 세션 재접속
tmux attach -t training
# 세션 목록 확인
tmux ls
필수 tmux 단축키:
Ctrl+b, d: 세션 분리 (학습 계속 실행)Ctrl+b, c: 새 윈도우Ctrl+b, n/p: 다음/이전 윈도우Ctrl+b, %: 수평 분할Ctrl+b, ": 수직 분할
11.4 포트 포워딩
Jupyter Notebook, TensorBoard 등을 로컬 브라우저에서 접근하기 위한 SSH 포트 포워딩 설정이다.
# Jupyter Notebook 포트 포워딩 (원격 8888 -> 로컬 8888)
ssh -L 8888:localhost:8888 gpu-server
# TensorBoard 포트 포워딩 (원격 6006 -> 로컬 6006)
ssh -L 6006:localhost:6006 gpu-server
# 여러 포트 동시 포워딩
ssh -L 8888:localhost:8888 -L 6006:localhost:6006 gpu-server
12. 보안 설정
GPU 서버가 네트워크에 노출되어 있다면 기본적인 보안 설정은 필수다.
12.1 SSH Key 인증 설정
# 클라이언트에서 키 생성
ssh-keygen -t ed25519 -C "your_email@example.com"
# 서버에 공개키 복사
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@gpu-server
# 서버에서 비밀번호 인증 비활성화
sudo vim /etc/ssh/sshd_config
/etc/ssh/sshd_config에서 다음 항목을 수정한다:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
# SSH 서비스 재시작
sudo systemctl restart sshd
12.2 UFW 방화벽 설정
# UFW 설치 및 활성화
sudo apt install -y ufw
# 기본 정책: 들어오는 트래픽 차단, 나가는 트래픽 허용
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH 허용
sudo ufw allow ssh
# 특정 IP에서만 SSH 허용 (더 안전)
sudo ufw allow from 192.168.1.0/24 to any port 22
# 방화벽 활성화
sudo ufw enable
# 상태 확인
sudo ufw status verbose
12.3 fail2ban 설정
SSH 무차별 대입 공격을 방어하기 위해 fail2ban을 설치한다.
# 설치
sudo apt install -y fail2ban
# 설정 파일 복사
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local 에서 [sshd] 섹션 수정
sudo vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
# fail2ban 시작
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 상태 확인
sudo fail2ban-client status sshd
13. 자동화: Ansible Playbook 예시
서버가 여러 대이거나 반복적으로 환경을 구성해야 하는 경우, Ansible을 사용하여 전체 설정 과정을 자동화할 수 있다.
13.1 Ansible Inventory
# inventory.ini
[gpu_servers]
gpu-server-01 ansible_host=192.168.1.101
gpu-server-02 ansible_host=192.168.1.102
[gpu_servers:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_ed25519
13.2 GPU 서버 Setup Playbook
# gpu_server_setup.yml
---
- name: GPU Server Initial Setup
hosts: gpu_servers
become: true
vars:
nvidia_driver_version: '550'
cuda_keyring_url: 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb'
tasks:
# ===== 시스템 기본 설정 =====
- name: Update and upgrade apt packages
apt:
update_cache: yes
upgrade: dist
cache_valid_time: 3600
- name: Install essential packages
apt:
name:
- build-essential
- gcc
- g++
- make
- cmake
- linux-headers-{{ ansible_kernel }}
- curl
- wget
- git
- vim
- htop
- tmux
- nvtop
- net-tools
- software-properties-common
state: present
- name: Set timezone to Asia/Seoul
community.general.timezone:
name: Asia/Seoul
# ===== NVIDIA 드라이버 설치 =====
- name: Purge existing NVIDIA drivers
apt:
name: 'nvidia*'
state: absent
purge: yes
ignore_errors: yes
- name: Add NVIDIA PPA
apt_repository:
repo: ppa:graphics-drivers/ppa
state: present
- name: Install NVIDIA driver
apt:
name: 'nvidia-driver-{{ nvidia_driver_version }}'
state: present
update_cache: yes
# ===== CUDA Toolkit 설치 =====
- name: Download CUDA keyring
get_url:
url: '{{ cuda_keyring_url }}'
dest: /tmp/cuda-keyring.deb
- name: Install CUDA keyring
apt:
deb: /tmp/cuda-keyring.deb
- name: Install CUDA Toolkit
apt:
name: cuda-toolkit
state: present
update_cache: yes
# ===== cuDNN 설치 =====
- name: Install cuDNN
apt:
name: cudnn-cuda-12
state: present
# ===== Docker 설치 =====
- name: Install Docker prerequisites
apt:
name:
- ca-certificates
- curl
- gnupg
state: present
- name: Add Docker GPG key
shell: |
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
args:
creates: /etc/apt/keyrings/docker.gpg
- name: Add Docker repository
shell: |
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
args:
creates: /etc/apt/sources.list.d/docker.list
- name: Install Docker
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: present
update_cache: yes
- name: Add user to docker group
user:
name: '{{ ansible_user }}'
groups: docker
append: yes
# ===== NVIDIA Container Toolkit 설치 =====
- name: Add NVIDIA Container Toolkit GPG key
shell: |
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
args:
creates: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
- name: Add NVIDIA Container Toolkit repository
shell: |
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
args:
creates: /etc/apt/sources.list.d/nvidia-container-toolkit.list
- name: Install NVIDIA Container Toolkit
apt:
name: nvidia-container-toolkit
state: present
update_cache: yes
- name: Configure Docker runtime for NVIDIA
command: nvidia-ctk runtime configure --runtime=docker
- name: Restart Docker
systemd:
name: docker
state: restarted
# ===== 보안 설정 =====
- name: Install security packages
apt:
name:
- ufw
- fail2ban
state: present
- name: Configure UFW - deny incoming
ufw:
direction: incoming
policy: deny
- name: Configure UFW - allow outgoing
ufw:
direction: outgoing
policy: allow
- name: Configure UFW - allow SSH
ufw:
rule: allow
name: OpenSSH
- name: Enable UFW
ufw:
state: enabled
- name: Enable fail2ban
systemd:
name: fail2ban
enabled: yes
state: started
# ===== GPU Persistence Mode =====
- name: Enable NVIDIA Persistence Mode
command: nvidia-smi -pm 1
ignore_errors: yes
handlers:
- name: Reboot server
reboot:
reboot_timeout: 300
13.3 Playbook 실행
# Ansible 설치
pip install ansible
# Playbook 실행
ansible-playbook -i inventory.ini gpu_server_setup.yml
# 드라이 런 (실제 실행 없이 확인)
ansible-playbook -i inventory.ini gpu_server_setup.yml --check
14. 정리: 전체 설치 순서 요약
딥러닝 GPU 서버 구축의 전체 흐름을 정리하면 다음과 같다.
1. 하드웨어 조립 및 BIOS 설정 (Secure Boot 비활성화)
|
2. Ubuntu 22.04/24.04 설치 및 기본 패키지 설정
|
3. NVIDIA 드라이버 설치 (apt 방식 권장)
|
4. CUDA Toolkit 설치 (필요한 버전별로 다중 설치 가능)
|
5. cuDNN 설치
|
6. Conda/Mamba 환경 구성 -> PyTorch/TensorFlow 설치
|
7. Docker + NVIDIA Container Toolkit 설치
|
8. 보안 설정 (SSH Key, UFW, fail2ban)
|
9. 모니터링 도구 설치 (nvtop, gpustat)
|
10. 원격 개발 환경 구성 (VS Code Remote, tmux)
이 가이드에서 다룬 내용을 순서대로 따라가면, NVIDIA 드라이버부터 Docker GPU 환경까지 완전한 딥러닝 개발 서버를 구축할 수 있다. 각 단계에서 문제가 발생하면 NVIDIA 공식 문서를 참고하여 트러블슈팅하는 것을 권장한다.
References
- NVIDIA Driver Installation Guide
- NVIDIA Driver Installation Guide - Ubuntu
- Ubuntu Server - NVIDIA Drivers Installation
- NVIDIA Data Center Drivers
- CUDA Installation Guide for Linux
- CUDA Toolkit Release Notes
- CUDA Compatibility
- Supported Drivers and CUDA Toolkit Versions
- cuDNN Installation Guide - Linux
- cuDNN Support Matrix
- NVIDIA Container Toolkit Installation Guide
- NVIDIA Container Toolkit - GitHub
- Docker Official Documentation