15.2. NVIDIA vGPU 장치 관리

vGPU 기능을 사용하면 물리적 NVIDIA GPU 장치를 중재 장치라고 하는 여러 가상 장치로 나눌 수 있습니다. 그런 다음 이러한 중재된 장치를 가상 GPU로 여러 VM(가상 머신)에 할당할 수 있습니다. 결과적으로 이러한 VM은 단일 물리 GPU의 성능을 공유할 수 있습니다.

중요

중재 장치를 사용하거나 사용하지 않고 VM에 물리적 GPU를 할당하면 호스트가 GPU를 사용할 수 없습니다.

15.2.1. NVIDIA vGPU 장치 설정

NVIDIA vGPU 기능을 설정하려면 GPU 장치에 대해 NVIDIA vGPU 드라이버를 다운로드하여 중재 장치를 생성하여 원하는 가상 머신에 할당해야 합니다. 자세한 지침은 아래를 참조하십시오.

사전 요구 사항

  • GPU는 vGPU 중재 장치를 지원합니다. vGPU 생성을 지원하는 NVIDIA GPU의 최신 목록은 NVIDIA vGPU 소프트웨어 설명서를 참조하십시오.

    • 호스트가 사용 중인 GPU를 모르는 경우 lshw 패키지를 설치하고 lshw -C display 명령을 사용하십시오. 다음 예에서는 해당 시스템이 NVIDIAether P4 GPU를 사용하며 vGPU와 호환되는 것입니다.

      # 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

절차

  1. NVIDIA vGPU 드라이버를 다운로드하여 시스템에 설치합니다. 자세한 내용은 NVIDIA 문서를 참조하십시오.
  2. NVIDIA 소프트웨어 설치 관리자가 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 파일을 생성하지 않은 경우 /etc/modprobe.d/ 에 이름의 conf 파일을 생성하고 파일에 다음 행을 추가합니다.

    blacklist nouveau
    options nouveau modeset=0
  3. 현재 커널의 초기 램디스크를 다시 생성한 다음 재부팅합니다.

    # dracut --force
    # reboot
  4. 커널이 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 문서 를 참조하십시오.

  5. 장치 UUID를 생성합니다.

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
  6. 감지된 GPU 하드웨어에 따라 중재된 장치의 구성으로 XML 파일을 준비합니다. 예를 들어, 다음은 0000:01:00.0 PCI 버스에서 실행되고 이전 단계에서 생성된 UUID를 사용하는 NVIDIA Tesla P4 카드에서 중재된 nvidia-63 vGPU 유형의 중재 장치를 구성합니다.

    <device>
        <parent>pci_0000_01_00_0</parent>
        <capability type="mdev">
            <type id="nvidia-63"/>
            <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid>
        </capability>
    </device>
  7. 준비한 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
  8. 선택 사항: 중재 장치가 비활성으로 나열되는지 확인합니다.

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  9. 생성한 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
  10. 선택 사항: 중재 장치가 활성 상태로 나열되어 있는지 확인합니다.

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  11. 호스트가 재부팅된 후 자동으로 시작하도록 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
  12. 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' 매개변수도 추가합니다.

  13. 할당된 VM에서 사용할 수 있는 vGPU 조정 장치의 모든 기능을 사용하려면 VM에서 NVIDIA vGPU 게스트 소프트웨어 라이선스를 설정합니다. 자세한 내용 및 지침은 NVIDIA Virtual GPU 소프트웨어 라이센스 서버 사용자 가이드를 참조하십시오.

검증

  1. 생성한 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
  2. VM을 시작하고 게스트 운영 체제가 중재 장치를 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 간의 비호환성 때문입니다.

추가 리소스