16.2. NVIDIA vGPU 장치 관리
vGPU 기능을 사용하면 물리적 NVIDIA GPU 장치를 중재된 장치라고 하는 여러 가상 장치로 나눌 수 있습니다
. 그런 다음 이러한 중재된 장치를 가상 GPU로 여러 VM(가상 머신)에 할당할 수 있습니다. 결과적으로 이러한 VM은 단일 물리적 GPU의 성능을 공유할 수 있습니다.
중재된 장치를 사용하거나 사용하지 않고 VM에 물리적 GPU를 할당하면 호스트에서 GPU를 사용할 수 없습니다.
16.2.1. NVIDIA vGPU 장치 설정
NVIDIA vGPU 기능을 설정하려면 GPU 장치용 NVIDIA vGPU 드라이버를 다운로드하고, 중재된 장치를 생성하고 이를 의도한 가상 머신에 할당해야 합니다. 자세한 지침은 아래를 참조하십시오.
사전 요구 사항
GPU는 vGPU 중재 장치를 지원합니다. vGPU 생성을 지원하는 NVIDIA GPU의 최신 목록은 NVIDIA vGPU 소프트웨어 설명서를 참조하십시오.
호스트가 사용 중인 GPU를 모르는 경우 lshw 패키지를 설치하고
lshw -C display
명령을 사용합니다. 다음 예제에서는 vGPU와 호환되는 NVIDIA Cryostat P4 GPU를 사용하는 시스템을 보여줍니다.# lshw -C display *-display description: 3D controller product: GP104GL [Tesla P4] vendor: NVIDIA Corporation physical id: 0 bus info: pci@0000:01:00.0 version: a1 width: 64 bits clock: 33MHz capabilities: pm msi pciexpress cap_list configuration: driver=vfio-pci latency=0 resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff
프로세스
- NVIDIA vGPU 드라이버를 다운로드하여 시스템에 설치합니다. 자세한 내용은 NVIDIA 설명서를 참조하십시오.
NVIDIA 소프트웨어 설치 프로그램이 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 파일을 생성하지 않은 경우 /etc/modprobe.d/ 에 모든 이름의
conf
파일을 생성하고 파일에 다음 행을 추가합니다.blacklist nouveau options nouveau modeset=0
현재 커널의 초기 램디스크를 다시 생성한 다음 재부팅합니다.
# dracut --force # reboot
커널이
nvidia_vgpu_vfio
모듈을 로드했으며nvidia-vgpu-mgr.service
서비스가 실행 중인지 확인합니다.# lsmod | grep nvidia_vgpu_vfio nvidia_vgpu_vfio 45011 0 nvidia 14333621 10 nvidia_vgpu_vfio mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1 # systemctl status nvidia-vgpu-mgr.service nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago Main PID: 1553 (nvidia-vgpu-mgr) [...]
또한 NVIDIA Ampere GPU 장치를 기반으로 vGPU를 생성하는 경우 가상 기능이 물리적 GPU에 대해 활성화되어 있는지 확인합니다. 자세한 내용은 NVIDIA 설명서 를 참조하십시오.
장치 UUID를 생성합니다.
# uuidgen 30820a6f-b1a5-4503-91ca-0c10ba58692a
감지된 GPU 하드웨어를 기반으로 중재된 장치의 구성으로 XML 파일을 준비합니다. 예를 들어 다음은 0000:01:00.0 PCI 버스에서 실행되는 NVIDIA Cryostat P4 카드에서
nvidia-63
vGPU 유형의 중재 장치를 구성하고 이전 단계에서 생성된 UUID를 사용합니다.<device> <parent>pci_0000_01_00_0</parent> <capability type="mdev"> <type id="nvidia-63"/> <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid> </capability> </device>
준비한 XML 파일을 기반으로 vGPU 중재 장치를 정의합니다. 예를 들면 다음과 같습니다.
# virsh nodedev-define vgpu-test.xml Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
선택 사항: 중재된 장치가 비활성으로 나열되어 있는지 확인합니다.
# virsh nodedev-list --cap mdev --inactive mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
생성한 vGPU 중재 장치를 시작합니다.
# virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
선택 사항: 중재된 장치가 활성 상태로 나열되어 있는지 확인합니다.
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
호스트가 재부팅 후 자동으로 시작하도록 vGPU 장치 설정
# virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Device mdev_d196754e_d8ed_4f43_bf22_684ed698b08b_0000_9b_00_0 marked as autostarted
vGPU 리소스를 공유하려는 VM에 중재된 장치를 연결합니다. 이렇게 하려면 이전에 기술된 UUID와 함께 VM의 XML 구성의 < devices/ > 섹션에 다음 행을 추가합니다.
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
각 UUID는 한 번에 하나의 VM에만 할당할 수 있습니다. 또한 VM에
virtio-vga
와 같은 QEMU 비디오 장치가 없는 경우 <hostdev
> 줄에ramfb='on'
매개변수도 추가합니다.- 할당된 VM에서 vGPU 미디어된 장치의 모든 기능을 사용하려면 VM에 NVIDIA vGPU 게스트 소프트웨어 라이센스를 설정합니다. 자세한 내용 및 지침은 NVIDIA Virtual GPU Software License Server User Guide 를 참조하십시오.
검증
생성한 vGPU의 기능을 쿼리하고 활성 및 영구으로 나열되는지 확인합니다.
# virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Name: virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Parent: pci_0000_01_00_0 Active: yes Persistent: yes Autostart: yes
VM을 시작하고 게스트 운영 체제가 mediated 장치를 NVIDIA GPU로 감지하는지 확인합니다. 예를 들어 VM에서 Linux를 사용하는 경우:
# lspci -d 10de: -k 07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1) Subsystem: NVIDIA Corporation Device 12ce Kernel driver in use: nvidia Kernel modules: nouveau, nvidia_drm, nvidia
확인된 문제
- RHEL 9 게스트 운영 체제를 사용하는 VM에 NVIDIA vGPU 미디어를 할당하면 현재 해당 VM의 Wayland 세션이 비활성화되고 대신 Xorg 세션을 로드합니다. 이는 NVIDIA 드라이버와 Wayland 간의 비호환성 때문입니다.
추가 리소스
- NVIDIA vGPU 소프트웨어 문서
-
man virsh
명령
16.2.2. NVIDIA vGPU 장치 제거
할당된 vGPU 미디어 장치 의 구성을 변경하려면 할당된 VM에서 기존 장치를 제거해야 합니다. 자세한 내용은 아래를 참조하십시오.
사전 요구 사항
- 장치를 제거하려는 VM이 종료됩니다.
프로세스
제거하려는 중재된 장치의 ID를 가져옵니다.
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
vGPU 미디어 장치의 실행 중인 인스턴스를 중지합니다.
# virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
선택 사항: 중재된 장치가 비활성화되었는지 확인합니다.
# virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Name: virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Parent: pci_0000_01_00_0 Active: no Persistent: yes Autostart: yes
VM의 XML 구성에서 장치를 제거합니다. 이렇게 하려면
virsh edit
유틸리티를 사용하여 VM의 XML 구성을 편집하고 mdev의 구성 세그먼트를 제거합니다. 세그먼트는 다음과 유사합니다.<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
중재된 장치를 중지하고 분리하면 삭제되지 않지만 정의된 대로 유지됩니다. 따라서 장치를 다시 시작하고 다른 VM에 연결할 수 있습니다.
선택 사항: 중지된 중재 장치를 삭제하려면 해당 정의를 제거합니다.
# virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
검증
장치를 중지하고 분리한 경우에만 중재된 장치가 비활성으로 나열되어 있는지 확인합니다.
# virsh nodedev-list --cap mdev --inactive mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
장치를 삭제한 경우에도 다음 명령이 해당 장치를 표시하지 않는지 확인합니다.
# virsh nodedev-list --cap mdev
추가 리소스
-
man virsh
명령
16.2.3. 시스템에 대한 NVIDIA vGPU 정보 얻기
사용 가능한 vGPU 기능의 기능을 평가하기 위해 다음과 같이 시스템에서 중재된 장치에 대한 추가 정보를 얻을 수 있습니다.
- 지정된 유형의 중재된 장치 수를 생성할 수 있음
- 시스템에 이미 구성된 중재된 장치는 무엇입니까.
프로세스
vGPU 미디어 장치를 지원할 수 있는 호스트에서 사용 가능한 GPU 장치를 보려면
virsh nodedev-list --cap mdev_types
명령을 사용합니다. 예를 들어 다음은 NVIDIA Quadro RTX6000 장치가 두 개 있는 시스템을 보여줍니다.# virsh nodedev-list --cap mdev_types pci_0000_5b_00_0 pci_0000_9b_00_0
특정 GPU 장치에서 지원하는 vGPU 유형과 추가 메타데이터를 표시하려면
virsh nodedev-dumpxml
명령을 사용합니다.# virsh nodedev-dumpxml pci_0000_9b_00_0 <device> <name>pci_0000_9b_00_0</name> <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path> <parent>pci_0000_9a_00_0</parent> <driver> <name>nvidia</name> </driver> <capability type='pci'> <class>0x030000</class> <domain>0</domain> <bus>155</bus> <slot>0</slot> <function>0</function> <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product> <vendor id='0x10de'>NVIDIA Corporation</vendor> <capability type='mdev_types'> <type id='nvidia-346'> <name>GRID RTX6000-12C</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>2</availableInstances> </type> <type id='nvidia-439'> <name>GRID RTX6000-3A</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>8</availableInstances> </type> [...] <type id='nvidia-440'> <name>GRID RTX6000-4A</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>6</availableInstances> </type> <type id='nvidia-261'> <name>GRID RTX6000-8Q</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>3</availableInstances> </type> </capability> <iommuGroup number='216'> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x3'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x1'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x2'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x0'/> </iommuGroup> <numa node='2'/> <pci-express> <link validity='cap' port='0' speed='8' width='16'/> <link validity='sta' speed='2.5' width='8'/> </pci-express> </capability> </device>
추가 리소스
-
man virsh
명령
16.2.4. NVIDIA vGPU용 원격 데스크탑 스트리밍 서비스
다음 원격 데스크탑 스트리밍 서비스는 NVIDIA vGPU 또는 NVIDIA GPU 패스스루가 활성화된 RHEL 9 하이퍼바이저에서 지원됩니다.
- HP ZCentral Remote Boost/Teradici
- NICE DCV
- Mechdyne TGX
지원 세부 정보는 적절한 벤더 지원 매트릭스를 참조하십시오.