
NVIDIA GeForce RTX 3070 Ti가 오류 없이 사용중인 걸 볼 수 있음
VM에서 채굴, 머신러닝 등의 작업으로 인하여 GPU가 필요한 경우가 있고, 이러한 경우에 GPU Passthrough를 사용한다. 나같은 경우는 단순하게 게임을 위해 GPU passthrough를 구성하게 되었다.
GPU passthrough를 사용하면 서버 호스트에서는 모니터 사용이 불가하지만, Proxmox는 WebUI와 shell로 모든 부분이 커버가 가능하고 딱히 필요도 없기 때문에 설정해주었다.
VM + GPU passthrough + Parsec 조합이기 때문에 퍼포먼스가 얼마나 나올지 걱정이긴 하지만, 요즘엔 게임도 잘 안하고 PC방도 근처에 있기 때문에 실패해도 크게 상관 없을 듯 하다 ㅎㅎ
우선 GPU 패스스루를 구현하려면, 아래 요구사항을 충족해야 한다.
1. CPU가 IOMMU (Intel VT-d 또는 AMD-Vi)를 지원해야 함
2. 메인보드 BIOS에서 IOMMU 및 VT-d/AMD-V 활성화가 가능해야 함
또한 설정 전 GPU 장치 ID를 확인해야 한다.
lspci | grep VGA 명령어로 확인.
아래 기능 활성화
/etc/default/grub에서 GRUB_CMDLINE_LIUNX_DEFAULT 부분을 아래와 같이 수정
Intel CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
AMD CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
설정 후 update-grub, reboot 명령어 수행
lspci -nnk | grep -A2 VGA 명령어로 GPU ID 확인

대괄호로 감싸져 있는 [10de:2482], [1458:408e]가 GPU ID임
확인 후 아래 명령어 입력
echo "options vfio-pci ids=10de:2482,1458:408e" > /etc/modprobe.d/vfio.conf
id는 본인 GPU ID 값으로 작성 후 update-initramfs -u -k all, reboot 명령어 수행
Shell에서 설정. (VM ID는 100이라고 가정)
/etc/pve/qemu-server/100.conf에서 아래 내용 추가
hostpci0: 2b:00.0,pcie=1,x-vga=1 # 만약 존재한다면 이 값으로 수정
machine: q35 # 만약 존재한다면 이 값으로 수정
cpu: host, hidden=1,flags=+pcid # 만약 존재한다면 이 값으로 수정
2b:00.0: GPU의 PCI ID (lspci로 확인한 맨 앞의 값)
x-vga=1: GPU 콘솔 초기화 (NVIDIA 카드에서 필수)
hidden=1: NVIDIA 드라이버에서 가상 환경 탐지 방지
NVIDIA GPU의 경우 가상 환경에서 Error 43을 띄우기 때문에 아래 설정을 적용해줘야 한다.
같은 파일에서 아래 내용 추가.
args: -cpu 'host,kvm=off,vmx=off'
macOS(클라이언트) - Windows 10 VM(호스트) 환경으로 구성


이 외 설정은 본인 입맛이에요
테스트로 게임 몇 판을 해 봤는데 상상 이상으로 구동이 잘 되었습니다.
게임도 하고 서버도 돌리고 싶은 고사양 PC + 가난뱅이 학생 or 직장인은 이런 방법으로 본인의 온프레미스 서버를 구축해 보는 것도 나쁘지 않을 것 같아요.물론 지금은 서버에서 돌아가는 서비스도 없고, 게임 하나만 하고 있기 때문에 가용성이 어느 정도 나올지는 모르겠지만 지속적으로 벨로그에 소식을 알리겠습니다...