Proxmox VM 에서 NVIDIA GPU 장치 사용하기 (CUDA, cuDNN, TensorFlow 설치 포함)
여기에서는 Proxmox VE 8.2.4 환경에서 테스트 하였으며, VM OS 는 Ubuntu 24.04 입니다.
1. Proxmox VE 호스트 서버에서 설정
grub 파일을 수정하고 업데이트 합니다.
아래에서 AMD CPU 는 amd_iommu=on 으로, INTEL CPU 는 intel_iommu=on 으로 입력하고 나머지는 동일하게 설정해 줍니다.
# vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on amd_iommu=pt pcie_acs_override=downstream,multifunction nofb video=efifb:off vga=off"
수정한 내용을 적용합니다.
# update-grub
VFIO (Virtual Function I/O) 관련 커널 모듈을 /etc/modules 파일에 추가하여 시스템이 부팅될 때마다 해당 모듈
이 자동으로 로드되도록 설정합니다.
# echo "vfio" >> /etc/modules
# echo "vfio_iommu_type1" >> /etc/modules
# echo "vfio_pci" >> /etc/modules
# echo "vfio_virqfd" >> /etc/modules
Proxmox VE 호스트 서버에서 GPU 를 인식하지 않도록 blacklist 에 등록합니다.
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
VFIO 정보를 등록해 줍니다.
먼저 NVIDIA 관련 장치 정보를 출력합니다.
# lspci -nn | grep -i nvidia
65:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU104 [GeForce RTX 2080] [10de:1e82] (rev a1)
65:00.1 Audio device [0403]: NVIDIA Corporation TU104 HD Audio Controller [10de:10f8] (rev a1)
65:00.2 USB controller [0c03]: NVIDIA Corporation TU104 USB 3.1 Host Controller [10de:1ad8] (rev a1)
65:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU104 USB Type-C UCSI Controller [10de:1ad9] (rev a1)
위 출력 결과를 이용해 설정 파일을 만듭니다.
여기에서는 VM 이 사용할 예정이므로 USB 는 제외하고 GPU 와 Audio Controller 만 추가하겠습니다.
# echo "options vfio-pci ids=10de:1e82,10de:10f8 disable_vga=1" > /etc/modprobe.d/vfio.conf
initramfs 를 업데이트하고 재부팅 합니다.
# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.8.4-2-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
# reboot
2. VM 에서 설정
1) PCI 드라이버 추가
Proxmox VE 웹 UI 에서 VM 설정을 진행합니다.
- 메뉴 : 하드웨어 > 추가 > 'PCI 디바이스' 를 선택합니다.
0000:65:00.0 / 1 / NVIDIA Corporation / TU104 [GeForce TRX 2080]
이런 형태의 장치입니다. 선택하고 추가한 후에 VM 을 시작합니다.
부팅이 되었으면 로그인하여 장치가 보이는 것을 확인합니다.
# lspci |grep -i nvidia
00:10.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2080] (rev a1)
2) NVIDIA 드라이버 설치
현재 시스템에서 사용 가능한 NVIDIA 드라이버 버전을 확인합니다.
# apt -y update
# apt -y install ubuntu-drivers-common alsa-utils
# ubuntu-drivers devices
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
== /sys/devices/pci0000:00/0000:00:10.0 ==
modalias : pci:v000010DEd00001E82sv000010DEsd000012B0bc03sc00i00
vendor : NVIDIA Corporation
model : TU104 [GeForce RTX 2080]
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-535 - distro non-free recommended
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
여기에서는 출력된 목록에서 추천 표시된 버전으로 설치해 보겠습니다.
# apt -y install nvidia-driver-535
설치가 되었으면 리부팅을 합니다.
# reboot
부팅 후 아래 명령으로 설치 여부와 NVIDIA 드라이버 버전에 맞는 CUDA 버전을 확인합니다.
(표시된 CUDA 버전은 설치되어 있는 버전이 아니고, 드라이버에 맞는 추천 버전이란 뜻입니다)
# nvidia-smi
Wed Jul 17 07:56:39 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 2080 Off | 00000000:00:10.0 Off | N/A |
| 28% 52C P8 19W / 215W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
NVIDIA 커널 모듈도 로드가 잘 되었는지 확인합니다.
# lsmod | grep nvidia
nvidia_uvm 1789952 0
nvidia_drm 90112 0
nvidia_modeset 1314816 1 nvidia_drm
video 73728 1 nvidia_modeset
nvidia 56827904 2 nvidia_uvm,nvidia_modeset
이제 위에서 확인된 CUDA 12.2 를 설치할 차례 입니다.
3) CUDA Toolkit 설치
NVIDIA 의 CUDA Toolkit 을 설치합니다.
CUDA Toolkit 에는 TensorFlow 가 GPU 에서 실행되는 데 필요한 모든 라이브러리가 포함되어 있습니다.
아래는 검색을 통해 찾은 URL 인데, 12.2 버전과 드라이버 535 버전이 맞으므로 다운로드를 하였습니다.
# wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
# chmod +x cuda_12.2.2_535.104.05_linux.run
# ./cuda_12.2.2_535.104.05_linux.run
처음 설치 화면이 뜨기까지 시간이 걸릴 수 있으며, 설치 과정은 Continue 선택 > accept 입력 > (미리 설치했으므로) 'Driver' 제외 및 나머지 기본값으로 Install 입니다.
파일 사이즈가 크기 때문에 여기에서도 시간이 다소 소요됩니다.
CUDA 설치가 완료되면, ~/.bashrc 파일에 경로를 추가하여 CUDA 바이너리에 접근할 수 있도록 합니다.
# echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
# echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
# source ~/.bashrc
설치된 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
4) cuDNN 설치
cuDNN 은 NVIDIA 의 GPU 가속 라이브러리로, TensorFlow 와 같은 딥러닝 프레임워크의 성능을 높이는 데 사용됩니다.
- 로그인하여 버전별 다운로드 가능 : https://developer.nvidia.com/rdp/cudnn-archive
- 구버전은 로그인 없이 다운로드 가능 : https://developer.download.nvidia.com/compute/redist/cudnn/
작업 PC 에서 파일을 다운로드 받아 서버에 업로드 하고 설치를 이어갑니다.
# dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
설치가 되고 출력 내용에 키를 설치하라고 나옵니다. 명령을 따라 실행합니다.
# sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-08A7D361-keyring.gpg /usr/share/keyrings/
# apt -y update
# apt -y install libcudnn8=8.9.7.29-1+cuda12.2
# apt -y install libcudnn8-samples=8.9.7.29-1+cuda12.2
설치된 버전을 확인합니다.
# cat /usr/include/cudnn_version.h |grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 7
5) Anaconda 설치
Anaconda 는 데이터 과학 및 머신 러닝을 위한 종합적인 Python 배포판으로, TensorFlow 와 같은 패키지를 손쉽게 설치하고 관리할 수 있습니다.
# wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
# chmod +x Anaconda3-2024.06-1-Linux-x86_64.sh
# ./Anaconda3-2024.06-1-Linux-x86_64.sh
설치 과정에서 ENTER 누르고 > accept 입력 > yes 입력 > yes 입력하면 설치됩니다.
추가된 명령을 사용하기 위해 환경설정을 다시 로드 합니다.
# source /root/.bashrc
버전을 확인합니다.
(base) root@test:~# python --version
Python 3.12.4
(base) root@test:~# conda --version
conda 24.5.0
sysdocu 라는 가상 환경을 생성합니다.
(base) root@test:~# conda create -n sysdocu
가상 환경 목록을 확인합니다.
(base) root@test:~# conda env list
생성된 가상 환경을 활성화 합니다.
(base) root@test:~# conda activate sysdocu
참고로 비활성화 하는 명령은 다음과 같습니다. (필요시 사용)
(sysdocu) root@test:~# conda deactivate
6) TensorFlow 설치
Anaconda 가상 환경에서 TensorFlow 설치를 이어갑니다.
(sysdocu) root@test:~# conda install tensorflow
현재 가상 환경에 설치된 패키지 목록을 확인합니다.
(sysdocu) root@test:~# conda list
3. 동작 테스트
코드를 실행할때 INFO 정보가 출력되는데, 결과와 같이 출력되어 보기에 좋지 않습니다.
우선, 기본적으로 오류가 아닐경우 출력하지 않도록 설정해 줍니다.
(0 = 모든 로그, 1 = 정보 로그, 2 = 경고 로그, 3 = 오류 로그)
(sysdocu) root@test:~# export TF_CPP_MIN_LOG_LEVEL=3
1) 버전 출력 테스트
가상 환경 내에 TensorFlow 설치가 완료되면, 가상 환경 내에서 Python 을 실행하고, 아래 명령을 순차적으로 입력하면 버전이 출력되는데, 이와 같이 TensorFlow 가 정상적으로 설치 되었는지 확인 할 수 있습니다.
(sysdocu) root@test:~# python
>>> import tensorflow as tf
print(tf.__version__)
2.12.0
2) 행렬 곱셈 테스트
이번에는 파일을 만들어서 실행해 보겠습니다.
(sysdocu) root@test:~# vi test.py
import tensorflow as tf # 두 개의 상수 행렬 정의 matrix1 = tf.constant([[3, 3]]) matrix2 = tf.constant([[2], [2]]) # 행렬 곱셈 수행 product = tf.matmul(matrix1, matrix2) # 결과 출력 print("Matrix 1:") print(matrix1.numpy()) print("Matrix 2:") print(matrix2.numpy()) print("Product:") print(product.numpy()) |
(sysdocu) root@test:~# python test.py
Matrix 1:
[[3 3]]
Matrix 2:
[[2]
[2]]
Product:
[[12]]
3) XOR 게이트 학습 테스트
아래 예제 파일을 만들어서 실행해 봅니다.
이 예제는 TensorFlow 를 사용하여 신경망을 구축하고 학습시키는 과정을 포함하고 있습니다.
(sysdocu) root@test:~# vi test2.py
import tensorflow as tf import numpy as np # XOR 데이터셋 정의 X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32) y = np.array([[0], [1], [1], [0]], dtype=np.float32) # 신경망 모델 정의 model = tf.keras.Sequential([ tf.keras.layers.Dense(2, input_dim=2, activation='sigmoid'), tf.keras.layers.Dense(1, activation='sigmoid') ]) # 모델 컴파일 model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.SGD(learning_rate=0.1), metrics=['binary_accuracy']) # 모델 학습 model.fit(X, y, epochs=1000, verbose=0) # 결과 예측 predictions = model.predict(X) print("Predictions:") print(predictions) |
(sysdocu) root@test:~# python test2.py
1/1 [==============================] - 0s 128ms/step
Predictions:
[[0.50881463]
[0.48036876]
[0.5206941 ]
[0.49291846]]
이렇게 결과가 잘 출력 된 것으로 보아 TensorFlow 가 잘 설치되었음을 알 수 있습니다.
'리눅스 > OS 일반' 카테고리의 다른 글
Ubuntu 24.04 에 Prometheus + Grafana 설치하기 (GPU 포함) (0) | 2024.09.05 |
---|---|
RockyLinux 9 에 Prometheus + Grafana 설치하기 (GPU 포함) (0) | 2024.09.03 |
VMware 가상서버 이미지를 Proxmox 로 이전하기 (0) | 2024.07.04 |
Debian 12.x 에서 MinIO (Object storage service) 를 파일시스템처럼 마운트하기 (0) | 2024.07.03 |
Ubuntu 24.04 에서 MinIO (Object storage service) 설치 및 설정 (0) | 2024.07.01 |