GPU 서버 환경 설정 — Rocky Linux 9.7

이 가이드는 폐쇄망 환경에서 DO-Solution 2.0 GPU 서버의 Rocky Linux 9.7 OS 환경 구축 방법을 제공합니다.

전제 조건

  • 공개망 서버와 폐쇄망 서버의 OS 및 커널 버전 일치:
    • OS Version: Rocky Linux 9.7
    • Kernel Version: 5.14.0-611.41.1.el9_7.x86_64
  • Root 권한 필요

1. 패키지 레포지토리 반입

SCP 또는 물리적 이동을 통해 폐쇄망 서버 /home/$USERdo-repo-rocky9.7.tar.gz 파일을 반입합니다.

2. 로컬 레포지토리 등록

Repo명 지정

bash
export RPM_REPO_NAME="do-repo"

파일 압축 해제 및 배치

bash
tar -xzvf ${RPM_REPO_NAME}-rocky9.7.tar.gz
sudo mv ${RPM_REPO_NAME} /opt/${RPM_REPO_NAME}

로컬 .repo 파일 생성

bash
export RPM_REPO_NAME="do-repo"

sudo cp /opt/${RPM_REPO_NAME}/${RPM_REPO_NAME}.repo \
    /etc/yum.repos.d/${RPM_REPO_NAME}.repo

3. DNF 캐시 초기화 및 확인

bash
# DNF 캐시 초기화
sudo dnf clean all
sudo dnf makecache

# DNF 레포 목록 확인
sudo dnf repolist

4. 시스템 패키지 설치

운영 유틸리티 설치

bash
export RPM_REPO_NAME="do-repo"

sudo dnf install -y --disablerepo="*" --enablerepo=${RPM_REPO_NAME} \
    vim pv telnet net-tools nvtop sysstat htop iotop lsof tcpdump \
    bind-utils curl unzip zip jq tree rsync python3-dnf-plugin-versionlock

커널 설치 및 버전 고정

bash
# 커널 버전 변수 지정
export KERNEL_VER="5.14.0-611.41.1.el9_7.x86_64"

# 커널 설치
sudo dnf install -y --disablerepo="*" --enablerepo=${RPM_REPO_NAME} \
    kernel-${KERNEL_VER} kernel-core-${KERNEL_VER} kernel-modules-${KERNEL_VER}

# 커널 버전 고정 (자동 업그레이드 방지)
sudo dnf versionlock add kernel-${KERNEL_VER}
sudo dnf versionlock add kernel-core-${KERNEL_VER}
sudo dnf versionlock add kernel-modules-${KERNEL_VER}

# 고정 확인
sudo dnf versionlock list

GRUB 부팅 커널 변경

bash
# 커널 버전 변수 지정
export KERNEL_VER="5.14.0-611.41.1.el9_7.x86_64"

# 설치된 커널 목록 확인
sudo grubby --info=ALL | grep "^kernel\|^title"

# 설치한 커널을 기본 부팅 커널로 지정
sudo grubby --set-default /boot/vmlinuz-${KERNEL_VER}

# 설정 확인
sudo grubby --default-kernel

서버 재부팅

bash
sudo reboot

재부팅 이후 커널 버전 확인

bash
uname -r

# 기대 출력 (반드시 아래 버전이어야 함):
# 5.14.0-611.41.1.el9_7.x86_64

5. NVIDIA 패키지 설치 (GPU 서버만 진행)

CPU 서버: 6단계 — Docker 설치로 건너뜁니다.

NVIDIA 드라이버 및 CUDA 설치

bash
# 재부팅 후 변수 재등록
export RPM_REPO_NAME="do-repo"
export KERNEL_VER="5.14.0-611.41.1.el9_7.x86_64"
export KMOD_KERNEL_VER=$(echo ${KERNEL_VER} | sed 's/\.el[0-9_]*\.x86_64$//')

# NVIDIA 드라이버 설치
sudo dnf install -y --disablerepo="*" --enablerepo=${RPM_REPO_NAME} \
    libnvidia-cfg libnvidia-fbc libnvidia-gpucomp libnvidia-ml \
    nvidia-driver nvidia-driver-cuda nvidia-driver-cuda-libs nvidia-driver-libs \
    nvidia-kmod-common nvidia-modprobe nvidia-persistenced nvidia-settings nvidia-xconfig \
    xorg-x11-nvidia kmod-nvidia-590.48.01-${KMOD_KERNEL_VER}

# CUDA 13.2 및 cuDNN 9 설치
sudo dnf install -y --disablerepo="*" --enablerepo=${RPM_REPO_NAME} \
    cuda-toolkit-13-2 cudnn9-cuda-13-2

nouveau 비활성화 및 재부팅

RHEL 계열 리눅스에서는 기본 GPU 드라이버로 nouveau를 사용합니다. NVIDIA 드라이버를 실행하려면 이 단계에서 비활성화해야 합니다.

bash
# nouveau blacklist 처리
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf

# initramfs 재생성
sudo dracut --force

# 재부팅
sudo reboot

CUDA 환경변수 설정

bash
# CUDA 설치 경로 확인
ls /usr/local/ | grep cuda

# 환경변수 설정
sudo tee /etc/profile.d/cuda.sh <<EOF
export PATH=/usr/local/cuda/bin:\${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:\${LD_LIBRARY_PATH}
EOF

source /etc/profile.d/cuda.sh

6. Docker 설치

bash
# 재부팅 후 변수 재등록
export RPM_REPO_NAME="do-repo"

sudo dnf install -y --disablerepo="*" --enablerepo=${RPM_REPO_NAME} \
    docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Docker 서비스 활성화
sudo systemctl enable --now docker

# Docker 권한 추가 (그룹 적용을 위해 재로그인 필요)
sudo usermod -aG docker $USER

7. NVIDIA Container Toolkit 설치 (GPU 서버만 진행)

CPU 서버: 8단계 — 설치 검증으로 건너뜁니다.

bash
export RPM_REPO_NAME="do-repo"
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.19.0-1

sudo dnf install -y --disablerepo="*" --enablerepo=${RPM_REPO_NAME} \
    nvidia-container-toolkit-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
    nvidia-container-toolkit-base-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
    libnvidia-container-tools-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
    libnvidia-container1-${NVIDIA_CONTAINER_TOOLKIT_VERSION}

# Docker Engine Runtime을 nvidia container toolkit으로 지정
sudo nvidia-ctk runtime configure --runtime=docker

# Docker Engine 재시작
sudo systemctl restart docker

8. 설치 검증

NVIDIA 드라이버 확인 (GPU 서버만)

bash
# nvidia 모듈 로드 확인
lsmod | grep nvidia

# 기대 출력:
# nvidia_uvm           2129920  0
# nvidia_drm            131072  0
# nvidia_modeset       1462272  1 nvidia_drm
# nvidia              98975744  2 nvidia_uvm,nvidia_modeset

# nvidia-smi 확인: 전달 받은 GPU 스펙과 일치하는지 확인
nvidia-smi

# 기대 출력 예시:
# NVIDIA-SMI 590.48.01  Driver Version: 590.48.01  CUDA Version: 13.1
# NVIDIA RTX 4000 Ada Generation

CUDA 확인 (GPU 서버만)

bash
nvcc --version

# 기대 출력:
# Cuda compilation tools, release 13.2, V13.2.78

cuDNN 확인 (GPU 서버만)

bash
ldconfig -p | grep cudnn

# 기대 출력: libcudnn.so.9, libcudnn_ops.so.9, libcudnn_adv.so.9 등

Docker 확인

bash
sudo docker version

# 기대 출력: Docker Engine Community 버전 29.x.x

NVIDIA Container Toolkit 적용 확인 (GPU 서버만)

bash
sudo nvidia-ctk runtime configure --runtime=docker --dry-run

# 기대 출력:
# {
#     "runtimes": {
#         "nvidia": { "path": "nvidia-container-runtime" }
#     }
# }