- LINUX

[Rocky] KVM pGPU 설정






1. 개요

KVM에서 pGPU 설정하여 VM에서 GPU를 사용할 수 있도록 설정합니다.







2. 버전

Rocky 9.4 Minimal







3. 참고 링크





3-1. [Rocky] KVM 설치

YouTube
Blog




3-2. [Rocky] KVM VM 생성(Linux) – GUI, CLI

YouTube
Blog




3-3. [Rocky] KVM VM 생성(Windows) – GUI, CLI

YouTube
Blog




3-4. [Rocky] KVM NAT 생성 및 삭제

YouTube
Blog




3-5. [Rocky] KVM Bridge 설정

YouTube
Blog




3-6. [Rocky] KVM VirtIO 설정(Windows VM 생성)

YouTube
Blog







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 연결

  1. Add Hardware를 클릭합니다.


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


  1. 장착된 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                                                           |
+---------------------------------------------------------------------------------------+



seuheu

최근 게시물

[Linux] Rocky Linux 9.5 NFS 구성 및 테스트 가이드 (rw/ro + root_squash 비교)

https://youtu.be/n8-wlkZiqio 1. 개요 NFS(Network File System)를 설치하고, rw/ro 및 root_squash 옵션에 따른 접근 제어와 성능을 테스트하는 방법을 정리한 가이드입니다.…

%일 전

[Linux] Rocky Linux 9.5 Cron 설정 및 테스트 방법

https://youtu.be/4MVxzmepY3s 1. 개요 리눅스에서 정기적으로 실행되는 작업(백업, 로그 정리, 모니터링 등)은 cron 서비스를 통해 자동화할 수 있습니다.…

%일 전

[Linux] Rocky Linux 9.5 계정 관리 (생성 · 권한 · 잠금 · 삭제) 정리

https://youtu.be/vPfxWFBE1yc 1. 개요 리눅스 서버를 운영할 때 사용자 계정 생성, 비밀번호 설정, 권한 부여, 계정…

%일 전

[Linux] Rocky Linux 9.5 Chrony로 시간 동기화 설정하기

https://youtu.be/Gvp2XwBfoKw 1. 개요 리눅스 서버에서는 시스템 시간(OS 시간) 과 하드웨어 시간(RTC, Real-Time Clock) 을 동기화하는 것이 매우 중요합니다. 클러스터…

%일 전

[Linux] Rocky Linux 9.5 리눅스 시간 관리 입문: 하드웨어(RTC)와 시스템(OS) 시간 개념부터 동기화까지

https://youtu.be/pt9qhawl8LY 1. 개요 리눅스 서버에서는 시스템 시간(OS 시간) 과 하드웨어 시간(RTC, Real-Time Clock) 을 모두 관리할 수 있습니다. 운영체제의…

%일 전

[Linux] Rocky Linux 9.5 타임존(Timezone)이 뭐예요? 리눅스 시간 확인과 변경 방법

https://youtu.be/iPdHGXh7DUg 1. 개요 서버 운영 시 시스템 시간이 올바르게 설정되어 있지 않으면 로그 분석, 모니터링,…

%일 전