[LLM] AMD 7950X3D + RTX4090 Ubuntu, CUDA 설치
Ubuntu 기본설치
WSL(Windows Subsystem for Linux)의 완성도가 높아졌다더라도, Native Linux만큼은 아니다. 사내 있는 컴퓨터다 보니 Windows + Docker/w Ubuntu 의 조합도 생각해 봤지만, 관리 요소만 더 추가될 뿐이라 생각했다. 1년 전에는 nVIDIA 드라이버의 문제로 StableDiffusion에 문제가 생겨 고생했었던 경험이 있다. (AMD CPU의 GPU에 문제가 원인으로 밝혀짐) 이 글을 작성하는 시점에서 가장 최신 LTS 는 22.04.4다. 한국 Mirror에서 ISO를 받고 Rufus를 이용해 설치 USB를 만들면 어렵지 않게 설치가 가능하다.
- https://ubuntu.com/download/desktop
- http://mirror.kakao.com/ubuntu-releases (카카오 대한민국 미러)
- https://rufus.ie/ko/
설치가 종료 되면 기본적인 사용자를 추가하고 이제 ssh 서버를 동작시켜 원격으로 작업하자. 참고로 기본적 보안 정책을 반영할 필요가 있지만, 외부와 단절된 사용하기 때문에 별도 정책을 반영하지 않았다.
sudo apt update sudo apt upgrade sudo apt install openssh-server sudo systemctl enable sshd
본인의 경우 기본적인 드라이버는 Ubuntu 설치 시 포함 시켰기 때문에 별도로 설치할 필요는 없지만, 만약 이 옵션을 선택하지 않은 경우 드라이버 패키지를 설치해야 한다.
sudo apt install ubuntu-drivers-common
nVIDIA 설치 및 설정
올바르게 하드웨어가 인식 되었는지 확인하고 드라이버를 설치하자.
onelabs@OneLabsMLA:~$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1)
05:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1)
05:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1)
onelabs@OneLabsMLA:~$ sudo lshw -numeric -C display
2개의 GPU 가 정상적으로 보인다. 신기한건 CPU의 GPU를 비활성화 했는데도 목록에 나온다. 뭐 중요한건 그게 아니니 패스.
내가 개발하는 프로젝트는 12 버전의 CUDA가 필요하며, Toolkit 12.x를 사용하기 위해선 525.60.13 의 버전이 충족 되어야 한다. (Windows 의 경우 527.41)
uBuntu 에서 기본적으로 제공하는 드라이버의 호환성을 확인하고, 존재한다면 설치하자. nVIDIA 에서 패키지를 받아 설치하는 방법도 있지만, 드라이버 repo 에서 받으면 관리의 이점이 명확하다.
onelabs@OneLabsMLA:~$ sudo ubuntu-drivers devices == /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0 == modalias : pci:v000010DEd00002684sv00001043sd000088E2bc03sc00i00 vendor : NVIDIA Corporation driver : nvidia-driver-525 - distro non-free driver : nvidia-driver-535-server-open - distro non-free driver : nvidia-driver-550-server - distro non-free driver : nvidia-driver-525-open - distro non-free driver : nvidia-driver-550-server-open - distro non-free driver : nvidia-driver-535-open - distro non-free driver : nvidia-driver-535-server - distro non-free driver : nvidia-driver-545 - distro non-free driver : nvidia-driver-525-server - distro non-free driver : nvidia-driver-545-open - distro non-free driver : nvidia-driver-535 - distro non-free recommended driver : xserver-xorg-video-nouveau - distro free builtin
nvidia-driver-535 버전이 존재하며, 최소 요구조건(525)을 충족한다. 설치 후 재부팅하자.
onelabs@OneLabsMLA:~$ sudo apt install nvidia-driver-535 Reading package lists... Done Building dependency tree... Done Reading state information... Done . . onelabs@OneLabsMLA:~$ sync onelabs@OneLabsMLA:~$ reboot
설치가 올바르게 되었는지 확인해보자. 2개의 GPU가 535.161.07 드라이버로 바인딩 되었으며, 호환되는 CUDA 버전은 12.2다.
onelabs@OneLabsMLA:~$ nvidia-smi
CUDA Toolkit은 nVIDIA 에서 직접 받아 설치해야 한다. 호환되는 버전은 12.2 이기 때문에 12.2.2 (2023년 8월 릴리즈된) 버전까지 사용할 수 있다. 그 이상의 버전을 사용하려면 GPU 드라이버를 업그레이드 해야한다.
- https://developer.nvidia.com/cuda-toolkit-archive
플랫폼을 선택하고 조건에 맞는 버튼을 클릭하자
- Linux > x86_64 > Ubuntu > 22.04 > deb(local)
그럼 하단에 설치 방법을 확인할 수 있다.
onelabs@OneLabsMLA:~$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin onelabs@OneLabsMLA:~$ sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 onelabs@OneLabsMLA:~$ wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb onelabs@OneLabsMLA:~$ sudo dpkg -i cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb onelabs@OneLabsMLA:~$ sudo cp /var/cuda-repo-ubuntu2204-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/ onelabs@OneLabsMLA:~$ sudo apt-get update onelabs@OneLabsMLA:~$ sudo apt-get -y install cuda
설치는 일사천리로 진행된다. 참고로 toolkit의 용량이 1.5GB 정도 되기 때문에 설치에 적잖은 시간이 소요된다.
Setting up cuda-tools-12-2 (12.2.2-1) ... Setting up cuda-toolkit-12-2 (12.2.2-1) ... Setting up cuda-12-2 (12.2.2-1) ... Setting up cuda (12.2.2-1) ... Processing triggers for gnome-menus (3.36.0-1ubuntu3) ... Processing triggers for libc-bin (2.35-0ubuntu3.6) ... Processing triggers for man-db (2.10.2-1) ... Processing triggers for ca-certificates (20230311ubuntu0.22.04.1) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. done. Processing triggers for mailcap (3.70+nmu1ubuntu1) ... Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ... Processing triggers for desktop-file-utils (0.26-1ubuntu3) ... Processing triggers for hicolor-icon-theme (0.17-2) ... . . onelabs@OneLabsMLA:/opt/drivers# ls -l /usr/local | grep cuda lrwxrwxrwx 1 root root 22 4월 2 14:31 cuda -> /etc/alternatives/cuda lrwxrwxrwx 1 root root 25 4월 2 14:31 cuda-12 -> /etc/alternatives/cuda-12 drwxr-xr-x 15 root root 4096 4월 2 14:31 cuda-12.2
CUDA 의 패키지를 PATH에 추가해야 관련된 기능을 사용할 수 있다. .profile에 PATH/LD_LIBRARY_PATH를 추가하자. nvcc -V 를 통해 현재 철시된 cuda 버전을 확인할 수 있다. (12.2.r12.2)
onelabs@OneLabsMLA:~$ sudo vi ~/.profile . . export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH . . onelabs@OneLabsMLA:~$ source ~/.profile onelabs@OneLabsMLA:/usr/local/cuda$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation Built on Tue_Aug_15_22:02:13_PDT_2023 Cuda compilation tools, release 12.2, V12.2.140 Build cuda_12.2.r12.2/compiler.33191640_0
이제 마지막으로 cuDNN 을 설치해야 한다. cuDNN은 딥러닝 작업을 위해 필요하다. 프로젝트에 따라 필요 없을 수 있으므로 의존성 패키지를 확인해 볼 것을 권장한다. 예를 들어 StableDiffusion 을 개발하는 워크스테이션에는 cuDNN을 설치하지 않았다.
onelabs@OneLabsMLA:/opt/drivers# wget https://developer.download.nvidia.com/compute/cudnn/9.0.0/local_installers/cudnn-local-repo-ubuntu2204-9.0.0_1.0-1_amd64.deb onelabs@OneLabsMLA:/opt/drivers# sudo dpkg -i cudnn-local-repo-ubuntu2204-9.0.0_1.0-1_amd64.deb onelabs@OneLabsMLA:/opt/drivers# sudo cp /var/cudnn-local-repo-ubuntu2204-9.0.0/cudnn-*-keyring.gpg /usr/share/keyrings/ onelabs@OneLabsMLA:/opt/drivers# sudo apt-get update onelabs@OneLabsMLA:/opt/drivers# sudo apt-get -y install cudnn
cuDNN이 정상적으로 동작하는지 확인해보자.
onelabs@OneLabsMLA:/opt/drivers$ sudo apt-get install libfreeimage3 libfreeimage-dev onelabs@OneLabsMLA:/opt/drivers$ cp -r /usr/src/cudnn_samples_v9/ ~/ onelabs@OneLabsMLA:/opt/drivers$ cd ~/cudnn_samples_v9/mnistCUDNN onelabs@OneLabsMLA:~/cudnn_samples_v9/mnistCUDNN$ make clean && make onelabs@OneLabsMLA:~/cudnn_samples_v9/mnistCUDNN$ ./mnistCUDNN
다음과 같이 Test passed! 가 나오면 cuDNN 까지 정상 설치됐다 판단할 수 있다.