1. 개요
KVM에서 pGPU 설정하여 VM에서 GPU를 사용할 수 있도록 설정합니다.
2. 버전
Rocky 9.4 Minimal
3. 참고 링크
3-1. [Rocky] KVM 설치
3-2. [Rocky] KVM VM 생성(Linux) – GUI, CLI
3-3. [Rocky] KVM VM 생성(Windows) – GUI, CLI
3-4. [Rocky] KVM NAT 생성 및 삭제
3-5. [Rocky] KVM Bridge 설정
3-6. [Rocky] KVM VirtIO 설정(Windows VM 생성)
4. 내용
4-1. pGPU(Passthrough GPU) 란?
실제 GPU(그래픽 처리 장치)를 가상 머신(VM)에 직접 할당하여 사용하는 방식입니다.
일반적인 가상화 환경에서는 GPU가 호스트 머신에서 공유되어 여러 VM이 사용할 수 있지만, pGPU 설정을 통해 GPU 자원을 특정 VM에 전용으로 할당할 수 있습니다.
VM은 마치 물리 서버처럼 GPU를 직접 접근하여 고성능 그래픽 처리가 필요한 작업이나 머신러닝과 같은 작업을 수행할 수 있습니다.
5. Nouveau
5-1. Nouveau 블랙리스트 설정
# cp /etc/default/grub /etc/default/grub.org
# sed -i ‘s@GRUB_CMDLINE_LINUX=”@GRUB_CMDLINE_LINUX=”modprobe.blacklist=nouveau @g’ /etc/default/grub
# cat << EOL >> /etc/modprobe.d/nouveau-blacklist.conf
blacklist nouveau
options nouveau modeset=0
EOL
6. 호스트에서 GPU 분리
GPU가 호스트 커널 드라이버에 바인딩 된 경우 GPU를 가상 머신에 추가할 수 없습니다.
가상 머신에 GPU 장치를 추가하기 전에 GPU 장치를 바인딩 해제합니다.
6-1. 장치 슬롯 이름과 ID 식별
장치 슬롯 이름: 000:31:00.0
그래픽 컨트롤러 vendor-id:device-id: 10de:20f1
# lspci -Dnn | grep -i NVIDIA
0000:31:00.0 3D controller [0302]: NVIDIA Corporation GA100 [A100 PCIe 40GB] [10de:20f1] (rev a1)
0000:b1:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:26b9] (rev a1)
6-2. 호스트에서 GPU 장치를 사용하지 못하게 설정
intel_iommu: IOMMU를 활성화하여, PCI 패스스루가 가능하게 설정합니다.
vfio-pci: VFIO 프레임워크의 PCI 드라이버를 사용하여 PCI 장치를 관리합니다.
ids: 패스스루할 특정 PCI 장치의 벤더 ID와 디바이스 ID를 지정합니다.
pci-stub.ids: NVIDIA 장치를 호스트 시스템에서 예약하여, 해당 장치를 가상 머신에 패스스루할 수 있게 설정합니다.
# lspci -nn | grep NVIDIA
31:00.0 3D controller [0302]: NVIDIA Corporation GA100 [A100 PCIe 40GB] [10de:20f1] (rev a1)
# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=6e95fbbb-535d-4d78-946c-b51a2c2eb6b2 nomodeset biosdevname=0 net.ifnames=0 modprobe.blacklist=nouveau intel_iommu=on pci-stub.ids=10de:20f1 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
# grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
7. 확인
7-1. 커널 부팅 명령줄 매개변수 확인
# cat /proc/cmdline
BOOT_IMAGE=(hd0,gpt3)/boot/vmlinuz-4.18.0-425.3.1.el8.x86_64 root=UUID=7eb8cbd9-b881-45c1-9670-1c4a4354132b ro modprobe.blacklist=nouveau crashkernel=auto resume=UUID=6e95fbbb-535d-4d78-946c-b51a2c2eb6b2 nomodeset biosdevname=0 net.ifnames=0 rhgb quiet intel_iommu=on pci-stub.ids=10de:20f1
7-2. IOMMU 활성화 확인
# dmesg | grep -E “DMAR|IOMMU” | grep enabled
[ 0.000000] DMAR: IOMMU enabled
7-3. GPU에 올바른 커널 드라이버가 사용 중인지 확인
# lspci -nnk | grep -A 2 NVIDIA
libkmod: kmod_config_parse: /etc/modprobe.d/vfio-pci.conf line 1: ignoring bad line starting with 'vfio-pci'
31:00.0 3D controller [0302]: NVIDIA Corporation GA100 [A100 PCIe 40GB] [10de:20f1] (rev a1)
Subsystem: NVIDIA Corporation Device [10de:145f]
Kernel driver in use: pci-stub
Kernel modules: nouveau
7-4. 가상 머신에 GPU 연결

- Add Hardware를 클릭합니다.

- PCI Host Device를 클릭합니다.
- Passthrough 설정한 GPU를 선택합니다.
- Finish를 클릭합니다.

- 장착된 GPU를 확인합니다.
7-5. VM 확인
# lspci | grep NVIDIA
08:00.0 3D controller: NVIDIA Corporation GA100 [A100 PCIe 40GB] (rev a1)
# nvidia-smi
+---------------------------------------------------------------------------------------+
| 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 A100-PCIE-40GB Off | 00000000:08:00.0 Off | Off |
| N/A 67C P0 53W / 250W | 0MiB / 40960MiB | 42% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
“[Rocky] KVM pGPU 설정”에 대한 1개의 생각