너드팩토리가 RTX 2080 Ti 6장이 달린 Ubuntu 20.04 LTS CLI 서버에 CUDA 11.1 GPU 가속 환경을 세팅한 절차다. 딥러닝 환경 설정은 GPU 모델, 드라이버, CUDA, 프레임워크 사이의 호환 정보가 흩어져 있어 자료 찾는 시간이 실제 설치 시간보다 길어진다는 문제의식에서 출발한다. GUI를 쓰지 않는 서버라 headless 패키지로 GPU 메모리를 아끼는 지점이 핵심이다.
핵심 포인트- GPU 장치, Nvidia 드라이버, CUDA와 cudnn, AI 프레임워크 네 항목의 상호 호환이 모두 성립해야 한다.
- nvidia-driver-450-server를 설치해도 GUI 출력 모듈이 함께 깔리므로 GPU 메모리를 아끼려면 nvidia-headless-450-server를 써야 한다.
- CUDA도 recommends를 제외하는 옵션을 붙인 cuda-toolkit 메타패키지를 설치해야 GUI 패키지가 딸려오지 않는다.
- CLI 전용 환경에서는 시스템 변수가 자동으로 잡히지 않아 PATH와 LD_LIBRARY_PATH를 직접 넣어야 nvcc로 버전을 확인할 수 있다.
- nvidia-smi가 보여주는 CUDA 버전은 드라이버가 지원하는 버전이지 실제 설치된 버전이 아니다.
상세 정리- 대상 환경: Ubuntu 20.04 LTS CLI 서버, RTX 2080 Ti 6장, 드라이버 450.119.03, CUDA 11.1, cudnn 8.2.0이다.
- 1단계 GPU 확인: lspci -k로 전체 장치를 보거나 NVIDIA 키워드로 걸러 모델을 확인한다.
- 2단계 호환 확인: 설치된 GPU와 OS에 맞는 드라이버를 찾고 그 드라이버가 지원하는 CUDA 범위를 확인한다. CUDA 11.1을 쓰려면 450.80.02보다 최신 드라이버가 필요하다.
- 3단계 연산 능력 확인: RTX 2080 Ti는 compute capability 7.5라 CUDA 10.0에서 10.2, 11.0에서 11.3까지 설치할 수 있다.
- 4단계 프레임워크 확인: torch 아카이브에서 쓰려는 torch 버전과 CUDA 조합이 있는지 파일명으로 확인한다. cu111과 torch-1.8.0과 cp36 조합이 있으면 그 조합이 지원된다는 뜻이다.
- 설치 여부 확인: /proc/driver/nvidia/version을 읽거나 nvidia-smi로 드라이버 설치 여부를 본다. 이미 다른 버전이 깔려 있으면 제거 후 맞는 버전으로 재설치한다.
- 저장소 등록: lsb_release로 우분투 버전 문자열을 만들고 NVIDIA 아카이브의 apt 키를 받아 cuda와 machine-learning 저장소를 sources.list.d에 추가한 뒤 apt update를 돌린다.
- 패키지 선택: apt-cache search로 나열하면 driver, driver-server, headless, headless-no-dkms 계열이 함께 나온다.
- headless를 써야 하는 이유: driver-450과 driver-450-server는 저장 경로만 다르고 구성은 같아 둘 다 GUI 출력 모듈이 설치된다. GPU 메모리를 아끼려면 headless 계열이어야 한다.
- 드라이버 설치: nvidia-headless-450-server와 nvidia-utils-450, dkms와 nvidia-modprobe를 설치하고 재부팅한다.
- CUDA 설치: 같은 방식으로 저장소를 등록하고 목록을 확인한 뒤 cuda-toolkit-11-1을 recommends 제외 옵션과 함께 설치한다. GUI 포함 버전이 필요하면 cuda-11-1을 설치한다.
- cudnn 설치: 목록에서 확인한 뒤 libcudnn8-dev를 설치한다.
- 설치 확인 1: /usr/local 아래에서 cuda 심볼릭 링크와 cuda-11.1 디렉터리를 확인한다.
- 설치 확인 2: nvcc는 GUI 포함 설치에서 자동으로 잡히는 시스템 변수에 의존하므로, CLI 환경에서는 프로필에 PATH와 LD_LIBRARY_PATH를 추가하고 적용한 뒤에야 버전 출력이 동작한다.
- 설치 확인 3: cudnn은 cudnn_version.h에서 CUDNN_MAJOR 주변을 읽어 버전을 확인한다.
- 마무리 검증: PyTorch에서는 cuda.is_available과 version.cuda, device_count, get_device_name으로, TensorFlow에서는 device_lib의 장치 목록으로 가속 가능 여부를 확인한다.
왜 읽나GUI 없는 서버에 딥러닝 환경을 올리다 GPU 메모리가 이상하게 잡히거나 nvcc를 못 찾은 적이 있다면 headless 패키지와 시스템 변수 설정이 그 답이다.