데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      KVM GPU 패스스루 구축

      broccoli 25.06.10
      1,939 3 1
      DEVOTEE 요약
      KVM GPU 패스스루는 가상 머신이 호스트의 물리적 GPU를 직접 활용할 수 있도록 하는 기술로, GPU를 요구하는 고성능 작업 환경에서 유용합니다. 이를 위해 하드웨어 설정(BIOS/UEFI 가상화 활성화, IOMMU 설정), 드라이버 설정(VFIO 바인딩, 네이티브 드라이버 차단) 및 VM 설정(특정 GPU의 패스스루 추가와 드라이버 설치)을 단계적으로 진행해야 합니다. GPU 패스스루 환경 구축 시 호스트의 GPU 사용 제한과 원격 관리 필요성이 발생하므로 설정 오류를 최소화하려는 주의가 필요합니다.
      DEVOTEE 추천 블로그

      요즘 온프레미스 환경에서 다양한 IT 인프라 구축을 진행하고 있습니다. 특히, 여러 개발자가 GPU 서버 자원을 공유할 수 있는 환경 구성이 필요해지고 있습니다.

      GPU를 포함하는 VM생성을 통해서 GPU가 요구되는 렌더링 개발 환경을 개발자들에게 제공해 주어야 합니다.

      이러한 요구사항을 충족하기 위한 방법 중 하나로 KVM GPU 패스스루 방식을 소개하고자 합니다.


      개요

      KVM GPU 패스스루는 가상 머신(VM)이 호스트 시스템의 물리적 GPU에 직접 접근할 수 있도록 하는 기술입니다.

      이를 통해 VM은 GPU의 모든 성능을 활용하여 그래픽 집약적인 작업을 수행할 수 있습니다. 이 기술은 주로 게임, 머신 러닝, 3D 렌더링 등에서 사용됩니다.

      특징

      • 직접 접근: VM은 GPU에 직접 접근하여 하드웨어 가속을 통해 성능을 극대화합니다.

      • IOMMU 지원: 이 기술은 IOMMU(입출력 메모리 관리 장치)를 활용하여 GPU와 VM 간의 격리를 보장합니다.

      • 하드웨어 독립성: GPU 패스스루는 특정 하드웨어에 의존하지 않으며, 다양한 GPU와 호환됩니다.

      크게 3개 Part의 구축 절차로 정리해 볼 수 있습니다.

      • Part1 : 하드웨어 기반 설정

      • Part2 : 드라이버 설정과 바인딩

      • Part3 : VM 설정


      Part1 : 하드웨어 기반 설정

      1.1 BIOS/UEFI 설정

      목적: 하드웨어 레벨에서 가상화 기술과 IOMMU 기능을 활성화하여 GPU 패스스루의 기반을 마련합니다.

      SVM(AMD-V) 및 IOMMU(AMD-Vi)를 활성화함으로써 가상 머신이 하드웨어 리소스를 직접 사용할 수 있도록 합니다.

      SVM(AMD-V) 및 IOMMU(AMD-Vi) 활성화:

      부팅 시 BIOS/UEFI 설정 화면에 진입하여 아래 항목을 찾아 "Enabled"로 설정해야 합니다.

      • SVM(또는 AMD Virtualization):

        - BIOS/UEFI에서 "CPU Configuration" 또는 "Advanced" 메뉴로 이동합니다.

        - "SVM Mode" 또는 "Secure Virtual Machine" 또는 "AMD-V" 항목을 "Enabled"로 설정합니다.

      • IOMMU(AMD-Vi):

        - BIOS/UEFI에서 "IOMMU" 또는 "AMD IOMMU" 항목을 "Enabled"로 설정합니다 (지원되는 경우).

      이 설정은 가상화 기술을 활성화하여 VM이 하드웨어 리소스를 직접 사용할 수 있도록 합니다.


      1.2 커널 파라미터 및 GRUB 설정

      목적: Linux 커널이 IOMMU와 VFIO를 올바르게 인식하고 GPU를 격리할 수 있도록 설정합니다.

      이를 통해 패스스루 모드에서 GPU와 오디오 장치의 성능을 최적화하고, 필요한 장치의 PCI ID를 지정하여 가상 머신에 할당할 수 있습니다.

      /etc/default/grub 파일을 다음과 같이 수정합니다:

      GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on iommu=pt vfio-pci.ids=1002:13c0,1002:1640 nomodeset console=ttyS0,38400n8 console=tty0"
      GRUB_CMDLINE_LINUX="amd_iommu=on"

      파라미터 설명:

      • amd_iommu=on: IOMMU를 활성화합니다.

      • iommu=pt: 패스스루 모드로 성능을 최적화합니다.

      • vfio-pci.ids=1002:13c0,1002:1640: 패스스루할 GPU 및 오디오 장치의 PCI ID를 지정합니다.

      설정 적용:

      sudo update-grub
      sudo update-initramfs -u
      sudo reboot


      1.3 IOMMU 그룹 확인

      목적: GPU와 관련 장치들이 올바른 IOMMU 그룹에 분리되어 있는지 확인하여 패스스루가 원활하게 이루어질 수 있도록 합니다.

      이를 통해 GPU와 오디오 장치가 독립된 그룹에 있을 경우 패스스루 성능이 향상됩니다.

      아래 명령으로 IOMMU 그룹을 확인합니다:

      for d in /sys/kernel/iommu_groups/*/devices/*; do 
          n=${d#*/iommu_groups/*}; n=${n%%/*}
          printf 'IOMMU Group %s ' "$n"
          lspci -nns "${d##*/}"
      done

      이상적인 결과 예시:

      IOMMU Group 22 0c:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:13c0] (rev c5)
      IOMMU Group 23 0c:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:1640]

      GPU(0c:00.0)와 오디오(0c:00.1)가 독립된 그룹에 있으면 패스스루에 유리합니다.

      그룹이 합쳐져 있는 경우 해결책:

      GRUB에 ACS 오버라이드 파라미터 추가:

      pcie_acs_override=downstream,multifunction


      Part2 : 드라이버 설정과 바인딩

      2.1 VFIO-PCI 드라이버 설정

      목적: VFIO 드라이버가 네이티브 GPU 드라이버보다 먼저 로딩되어 GPU를 점유하게 하여 가상 머신이 GPU에 직접 접근할 수 있도록 합니다.

      /etc/modprobe.d/vfio.conf 파일을 생성하거나 편집하여 다음 내용을 추가합니다:

      options vfio-pci ids=10de:2c02,10de:22e9,1002:13c0,1002:1640
      softdep nvidia pre: vfio-pci
      softdep nouveau pre: vfio-pci
      softdep amdgpu pre: vfio-pci

      설명:

      • options vfio-pci ids=: 특정 PCI ID의 장치를 VFIO에 직접 바인딩합니다.

      • softdep는 amdgpu 및 radeon 드라이버보다 vfio-pci가 먼저 바인딩되도록 설정합니다.


      2.2 VFIO 모듈 로딩 설정

      목적: 부팅 시 VFIO 모듈이 자동으로 로딩되도록 설정하여 시스템 시작 시 GPU 패스스루를 지원합니다.

      /etc/initramfs-tools/modules 또는 /etc/modules-load.d/vfio.conf에 아래 내용을 추가합니다:

      vfio
      vfio_pci
      vfio_iommu_type1
      vfio_virqfd


      2.3 네이티브 드라이버 블랙리스트

      목적: 호스트에서 GPU를 사용하지 않도록 네이티브 드라이버를 완전히 차단하여 GPU가 가상 머신에 전적으로 할당될 수 있도록 보장합니다.

      /etc/modprobe.d/blacklist.conf에 다음 내용을 추가합니다:

      blacklist nouveau
      blacklist nvidia
      blacklist nvidia_drm
      blacklist nvidiafb
      blacklist snd_hda_intel


      2.4 설정 적용 및 검증

      설정 적용:

      sudo update-initramfs -u
      sudo reboot

      IOMMU 활성화 확인:

      dmesg | grep -i iommu

      GPU/오디오 바인딩 확인:

      lspci -nnk | grep -A 3 -E '1002:13c0|1002:1640'

      정상 바인딩 결과 예시:

      0c:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:13c0] (rev c5)
          Subsystem: ASUSTeK Computer Inc. Device [1043:8877]
          Kernel driver in use: vfio-pci
          Kernel modules: amdgpu
      0c:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:1640]
          Subsystem: ASUSTeK Computer Inc. Device [1043:8877]
          Kernel driver in use: vfio-pci
          Kernel modules: snd_hda_intel

      (둘 다 vfio-pci로 바인딩되어야 합니다.)


      Part3 : VM 설정

      3.1 VM 관리 환경 구성

      목적: 원격에서 VM을 관리할 수 있는 환경을 구축하는 것입니다. 호스트에 GPU가 없기 때문에 GUI를 사용할 수 없으며, CLI 기반으로 VM을 관리합니다.

      이를 통해 사용자는 원격으로 VM을 효율적으로 시작하고 제어할 수 있으며, 필요한 도구와 인증 설정을 통해 안전하게 접근할 수 있습니다.

      • 원격 virt-manager 설정:

        관리 PC에서 필요한 도구 설치:

        # macOS 예시
        brew install virt-manager
        brew install virt-viewer
        brew install ssh-askpass  # GUI 비밀번호 입력을 위해 필요

        SSH 키 기반 인증 설정:

        ssh-keygen -t ed25519 -C "virt-manager-access"
        ssh-copy-id dtd@172.23.255.95

        원격 virt-manager 접속:

        virt-manager -c 'qemu+ssh://계정@서버IP/system'


      3.2 VM 생성 및 패스스루 장치 추가

      A. VM 생성

      • GUI가 가능한 원격에서 virt-manager로 VM을 생성합니다.

      B. VM에 패스스루 장치 추가

      • 새로운 가상 머신 생성 과정에서:

        • '5단계: 설치 시작 준비'에서 '설치 전에 사용자 설정'을 선택하여 생성합니다.

        • '설치 시작' 전에 '하드웨어 추가'가 가능한 화면으로 전환합니다.

        • 하드웨어 추가 버튼을 클릭하여 'PCI 호스트 장치'를 선택하여 추가합니다.


      3.3 VM 내부 설정 및 검증

      • 장치 드라이버 설치

        • VM 내부에서 GPU 장치 드라이버를 설치한 후, 정상적으로 인식되는지 확인합니다:

          • NVIDIA GPU의 경우: 최신 GeForce 또는 Studio 드라이버 설치

          • AMD GPU의 경우: 최신 Adrenalin 드라이버 설치

      • 패스스루 성공 여부 확인

        • 물리적 확인: VM 실행 후, 모니터(패스스루 GPU에 연결)에 화면 출력이 정상적으로 나타나야 합니다.

        • 소프트웨어 확인: VM 내부에서 GPU 드라이버 설치 및 정상 인식 확인이 필요합니다.

          • Windows: 장치 관리자에서 GPU 정상 인식 확인


      결론

      구축 과정 상에 서버 호스트가 GPU를 사용할 수 없게 하는 단계가 진행된 후부터는 원격 컴퓨터에서 virt-manager를 통해서 서버를 제어해야 하는 과정에서 설정 오류가 있어 여러 번의 파워 부팅을 해야 했습니다.

      제공드린 구축 단계에 따라 차근차근 진행하신다면 여러 번의 파워 부팅을 하는 수고로움은 덜 수 있을 것으로 기대해 봅니다.



      부록 : KVM GPU 패스스루 체크리스트

      1. GPU 드라이버 바인딩 문제

      호스트에서 GPU가 여전히 기본 드라이버에 바인딩되어 있을 수 있습니다.

      # 현재 GPU 상태 확인
      lspci -nnk | grep -A3 VGA
      lspci -nnk | grep -A3 NVIDIA  # 또는 AMD
      
      # vfio-pci에 바인딩되어 있는지 확인
      ls /sys/bus/pci/drivers/vfio-pci/

      2. VFIO 바인딩 설정

      GPU를 vfio-pci 드라이버에 바인딩해야 합니다:

      # GPU의 PCI ID 확인
      lspci -nn | grep VGA
      lspci -nn | grep Audio  # GPU 오디오 컨트롤러
      
      # /etc/modprobe.d/vfio.conf 파일 생성/수정
      echo "options vfio-pci ids=10de:xxxx,10de:yyyy" >> /etc/modprobe.d/vfio.conf
      # xxxx, yyyy는 실제 GPU와 오디오의 PCI ID
      
      # initramfs 업데이트
      update-initramfs -u

      3. 호스트 디스플레이 드라이버 블랙리스트

      # /etc/modprobe.d/blacklist.conf에 추가
      echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf  # NVIDIA의 경우
      echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
      echo "blacklist nvidia_drm" >> /etc/modprobe.d/blacklist.conf

      4. VM XML 설정 확인

      virt-manager에서 생성한 VM의 XML을 확인해보세요:

      virsh dumpxml VM이름

      특히 다음 부분들을 확인하세요:

      • <features> 섹션에 <hyperv> 또는 <kvm> 설정

      • PCI 디바이스의 정확한 주소 매핑

      • 호스트와 게스트 간 PCI 주소 충돌

      5. 구체적인 에러 로그 확인

      # libvirt 로그 확인
      journalctl -u libvirtd -f
      
      # qemu 로그 확인
      tail -f /var/log/libvirt/qemu/VM이름.log

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      broccoli 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기