목차
- GPU 패스스루, 처음엔 저도 막막했습니다
- GPU 패스스루(Passthrough)란 뭔가요?
- 사전 준비: 하드웨어 호환성 확인
- 필수 확인 사항
- Proxmox VE GPU 패스스루 설정: 단계별 가이드
- 1단계: GRUB 부트로더에 IOMMU 활성화
- 2단계: VFIO 커널 모듈 로드 설정
- 3단계: GPU를 VFIO에 바인딩
- 4단계: Proxmox VM 설정
- 5단계: Windows VM에서 드라이버 설치
- ⚠️ 삽질 모음: 이런 문제들 겪으실 수 있어요
- 문제 1: NVIDIA Code 43 오류
- 문제 2: IOMMU 그룹 분리 문제 (ACS Override)
- 문제 3: 재부팅 후 VM이 GPU를 못 찾는 경우
- AI 워크로드 최적화: Proxmox에서 다르게 접근하기
- ✅ 설정 완료 후 검증 방법
- 호스트 측 검증
- VM 내부(Windows) 검증
- AI 워크로드 검증 (Linux VM)
- 마무리: Proxmox GPU 패스스루 설정 완벽 가이드
- 자주 묻는 질문 (FAQ)
- Q. RTX 4090도 Proxmox GPU 패스스루가 되나요?
- Q. 하나의 GPU를 여러 VM이 동시에 쓸 수 있나요?
- Q. 패스스루 후 호스트에서 GPU를 모니터로 쓸 수 있나요?
- Q. Proxmox 8 버전에서도 동일하게 적용되나요?
GPU 패스스루, 처음엔 저도 막막했습니다
홈랩을 운영하다 보면 언젠가 한 번쯤 이런 생각이 드시죠. "Proxmox VE에서 GPU를 VM에 직접 붙여서 쓸 수 있지 않을까?" 저도 딱 그 생각으로 시작했거든요. RTX 3080을 꽂아놓고 VM 하나는 게임용, 다른 하나는 AI 학습용으로 쓰고 싶었는데... 처음엔 진짜 삽질 좀 했습니다 ㅎㅎ
IOMMU 설정이 뭔지도 몰랐고, VFIO 드라이버가 왜 필요한지도 감이 없었어요. 근데 막상 해보니까 순서대로 따라가면 생각보다 어렵지 않더라고요. 오늘은 제가 직접 삽질하면서 정리한 Proxmox GPU 패스스루 설정 방법을 처음부터 끝까지 공유해드리려고 합니다. 게임 VM이든 AI 워크로드용 VM이든, 이 가이드 하나면 충분히 따라오실 수 있을 거예요.
▲ Proxmox VE에서 GPU 패스스루가 동작하는 전체 구조. 호스트 OS는 GPU를 직접 쓰지 않고, VFIO를 통해 VM에 전달합니다.
GPU 패스스루(Passthrough)란 뭔가요?
쉽게 말해서, 물리 GPU를 가상머신(VM)이 마치 실제 자기 하드웨어인 것처럼 직접 쓸 수 있게 해주는 기술이에요. 일반적인 가상화에서는 GPU를 소프트웨어로 에뮬레이션하거나, Virtio 같은 반가상화 드라이버를 써서 성능 손실이 꽤 있거든요.
근데 Proxmox GPU 패스스루를 쓰면? 거의 베어메탈(Bare-metal, 운영체제 없이 하드웨어에 직접 설치한 환경) 수준의 GPU 성능이 나와요. 실제로 제가 테스트해봤을 때 3D Mark 점수가 네이티브 대비 98% 수준이 나왔거든요. 이거 처음 봤을 때 진짜 "오, 이게 되네" 싶었습니다.
핵심 기술 두 가지만 기억하시면 됩니다:
- IOMMU (Input-Output Memory Management Unit): CPU와 메인보드가 지원해야 하는 하드웨어 기능. Intel은 VT-d, AMD는 AMD-Vi라고 부릅니다. 쉽게 말해 "VM이 특정 하드웨어만 독점적으로 쓸 수 있게 격리해주는 기능"이에요.
- VFIO (Virtual Function I/O): Linux 커널의 드라이버 프레임워크. 실제 GPU 드라이버 대신 이 녀석이 GPU를 잡아서 VM에게 넘겨주는 역할을 합니다.
이 두 가지가 핵심이에요. IOMMU가 하드웨어 레벨 격리를 해주고, VFIO가 그 격리된 장치를 VM에 연결해주는 구조죠.
사전 준비: 하드웨어 호환성 확인
설정 들어가기 전에 먼저 체크해야 할 것들이 있어요. 여기서 막히면 아무것도 안 되거든요. 저도 처음에 이 확인을 건너뛰었다가 몇 시간 날린 적 있습니다 ㅠㅠ
필수 확인 사항
- CPU 가상화 지원 확인: Intel VT-d 또는 AMD-Vi 지원 여부
- 메인보드 BIOS에서 IOMMU 활성화: 대부분 "Intel Virtualization for Directed I/O" 또는 "AMD IOMMU" 옵션으로 있음
- GPU 종류 확인: NVIDIA의 경우 Consumer GPU(RTX/GTX)는 Code 43 오류 이슈가 있어서 추가 설정 필요 (뒤에서 다룰게요)
- GPU가 별도 IOMMU 그룹에 있는지 확인: 같은 그룹에 다른 중요한 장치가 묶여 있으면 복잡해집니다
IOMMU 그룹 확인하는 명령어는 이거예요. Proxmox 호스트에서 실행하시면 됩니다:
#!/bin/bash
# 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
실행하면 이런 식으로 나와요. GPU가 혼자 또는 HDMI 오디오 장치랑만 같은 그룹에 있으면 이상적입니다:
IOMMU Group 14 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3080] [10de:2206]
IOMMU Group 14 01:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef]
Proxmox VE GPU 패스스루 설정: 단계별 가이드
자, 이제 본격적으로 Proxmox GPU 패스스루 설정을 시작해볼게요. Proxmox VE 8.x 기준으로 작성했습니다. 7.x도 거의 동일한데, 일부 파일 경로가 다를 수 있어요.
1단계: GRUB 부트로더에 IOMMU 활성화
먼저 Proxmox 호스트의 GRUB 설정을 수정해야 해요. /etc/default/grub 파일을 열어서 수정합니다:
# Intel CPU의 경우
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# AMD CPU의 경우
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
💡 팁: iommu=pt 옵션(Passthrough mode)을 꼭 같이 넣어주세요. 이게 있어야 IOMMU를 사용하지 않는 장치들의 성능 저하를 막을 수 있거든요. 저도 처음엔 이걸 빠뜨렸다가 네트워크 속도가 뚝 떨어지는 경험을 했습니다.
# GRUB 업데이트
update-grub
2단계: VFIO 커널 모듈 로드 설정
/etc/modules 파일에 VFIO 관련 모듈을 추가해줍니다:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
3단계: GPU를 VFIO에 바인딩
이게 핵심이에요. GPU의 PCI ID를 확인해서 VFIO 드라이버가 이 GPU를 잡도록 설정합니다.
먼저 GPU의 PCI ID를 확인합니다:
lspci -nn | grep -i nvidia
# 또는 AMD GPU의 경우
lspci -nn | grep -i amd
출력 예시:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [10de:2206]
01:00.1 Audio device [0403]: NVIDIA Corporation HD Audio [10de:1aef]
여기서 [10de:2206]과 [10de:1aef]가 PCI ID예요. 이걸 /etc/modprobe.d/vfio.conf 파일에 등록합니다:
options vfio-pci ids=10de:2206,10de:1aef disable_vga=1
그리고 NVIDIA 드라이버가 먼저 GPU를 잡아버리지 못하도록 블랙리스트에 등록합니다. /etc/modprobe.d/blacklist.conf에 추가:
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist nvidia_drm
설정 적용 후 재부팅합니다:
update-initramfs -u -k all
reboot
재부팅 후 VFIO가 GPU를 제대로 잡았는지 확인:
lspci -nnk -d 10de:2206
# Kernel driver in use: vfio-pci 라고 나오면 성공!
▲ Proxmox VE 웹 인터페이스에서 VM에 GPU를 PCI 장치로 추가하는 화면. "All Functions"와 "Primary GPU" 옵션 설정이 핵심입니다.
4단계: Proxmox VM 설정
이제 VM에 GPU를 붙일 차례예요. Proxmox 웹 UI에서 해도 되고, 명령어로 해도 됩니다. 저는 명령어가 더 정확해서 선호하는 편이에요.
VM 설정 파일 /etc/pve/qemu-server/[VM ID].conf에 다음 내용을 추가합니다:
# 기본 VM 설정
cpu: host,hidden=1,flags=+pcid
bios: ovmf
machine: q35
# GPU 패스스루 설정 (VMID 100 기준)
hostpci0: 0000:01:00,allFunctions=1,pcie=1,rombar=1,x-vga=1
# 가상 디스플레이는 none으로 (GPU 직접 쓸 거니까)
vga: none
⚠️ 중요한 포인트! 몇 가지 옵션 설명드릴게요:
- cpu: host,hidden=1: NVIDIA Consumer GPU의 Code 43 오류 방지. VM에게 가상화 환경임을 숨겨줍니다
- bios: ovmf: UEFI 펌웨어. GPU 패스스루에는 OVMF(Open Virtual Machine Firmware)가 거의 필수에요
- machine: q35: PCIe 지원이 되는 칩셋 에뮬레이션 타입
- allFunctions=1: GPU와 HDMI 오디오 등 연관 함수를 모두 같이 패스스루
5단계: Windows VM에서 드라이버 설치
VM을 부팅하면 처음에는 디스플레이가 안 보여서 당황할 수 있어요. 이건 정상입니다! 처음 부팅 때는 Proxmox 웹 콘솔(noVNC)로 접속해서 Windows를 설치하고, 이후 NVIDIA 드라이버를 설치하면 돼요.
Windows 설치 후 장치 관리자에서 GPU가 제대로 잡혔는지 확인하고, NVIDIA 공식 사이트에서 드라이버를 받아 설치합니다. 드라이버 설치 완료 후 재부팅하면 GPU가 정상 작동하는 걸 확인할 수 있어요.
⚠️ 삽질 모음: 이런 문제들 겪으실 수 있어요
제가 진짜 고생했던 문제들이에요. 미리 알고 계시면 시간을 많이 아낄 수 있습니다.
문제 1: NVIDIA Code 43 오류
Consumer GPU(RTX/GTX 시리즈)는 VM 환경을 감지하면 드라이버가 Code 43 오류를 내뿜어요. NVIDIA가 의도적으로 막아놓은 거거든요 (Quadro나 Tesla는 이런 제한 없어요).
해결 방법: 위에서 언급한 hidden=1 옵션에 더해서, VM 설정 파일에 다음을 추가합니다:
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NvidiaFTW,kvm=off'
hv_vendor_id 값은 아무 문자열이나 넣어도 되는데, 12자 이내여야 해요. 이렇게 하면 VM이 가상화 환경임을 NVIDIA 드라이버가 눈치채지 못합니다.
문제 2: IOMMU 그룹 분리 문제 (ACS Override)
가끔 GPU가 다른 장치들이랑 같은 IOMMU 그룹에 묶여 있는 경우가 있어요. 이럴 때 패스스루를 하면 같은 그룹의 다른 장치들도 VM에 넘겨야 하는 문제가 생기죠.
해결 방법: ACS(Access Control Services) 오버라이드 패치를 사용합니다. Proxmox에서는 커널 파라미터로 해결할 수 있어요:
# /etc/default/grub 수정
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
⚠️ 단, ACS 오버라이드는 보안상 위험이 있을 수 있으니 홈랩 환경에서만 사용 권장합니다.
문제 3: 재부팅 후 VM이 GPU를 못 찾는 경우
이건 VFIO 모듈이 NVIDIA 드라이버보다 늦게 로드되어서 생기는 문제예요. /etc/modprobe.d/vfio.conf에 다음을 추가하면 해결됩니다:
softdep nvidia pre: vfio-pci
softdep nouveau pre: vfio-pci
AI 워크로드 최적화: Proxmox에서 다르게 접근하기
게임 VM은 단일 VM에 GPU 하나를 통째로 주면 끝인데, AI 워크로드 Proxmox 환경에서는 조금 다른 접근이 필요할 수 있어요. 특히 여러 VM이 GPU를 나눠 써야 하는 경우에는 MIG(Multi-Instance GPU)나 vGPU 같은 옵션도 고려해볼 수 있거든요.
| 방식 | 성능 | VM 수 | 적합한 용도 | 비고 |
|---|---|---|---|---|
| GPU 패스스루 | ★★★★★ | 1개 VM 독점 | 게임, 단일 AI 학습 | 무료, 설정 복잡 |
| vGPU | ★★★★☆ | 여러 VM 공유 | AI 추론, VDI | 라이선스 비용 발생 |
| MIG | ★★★★☆ | 최대 7개 분할 | AI 추론, 멀티 테넌트 | A100/H100만 지원 |
| 소프트웨어 에뮬레이션 | ★☆☆☆☆ | 제한 없음 | 테스트 용도만 | 무료, 성능 매우 낮음 |
AI 워크로드를 Proxmox에서 돌릴 때 제가 실제로 쓰는 설정을 공유드릴게요. GPU 패스스루 VM에서 CUDA 작업을 할 때 성능을 최대화하는 CPU 핀닝(CPU Pinning, 특정 VM의 CPU를 물리 코어에 고정하는 기술) 설정입니다:
# VM 설정 파일에 추가
# 8코어 CPU 핀닝 예시 (물리 코어 0-7을 VM에 할당)
cpuunits: 1024
numa: 1
# 명령어로 CPU 핀닝 설정
qm set 100 --cpu host --cores 8 --sockets 1
# HugePages 설정 (메모리 성능 향상)
# /etc/sysctl.conf에 추가
vm.nr_hugepages = 4096
▲ Proxmox GPU 패스스루 환경에서 AI 학습 워크로드 성능 비교. 패스스루 방식이 네이티브 대비 95% 이상의 성능을 보여줍니다.
✅ 설정 완료 후 검증 방법
설정이 다 끝났다면 제대로 됐는지 확인해봐야죠. 제가 항상 하는 검증 순서를 알려드릴게요.
호스트 측 검증
# IOMMU가 활성화됐는지 확인
dmesg | grep -e DMAR -e IOMMU
# "IOMMU enabled" 메시지가 보이면 OK
# VFIO가 GPU를 잡았는지 확인
lspci -nnk | grep -A 3 "NVIDIA"
# "Kernel driver in use: vfio-pci" 가 나와야 함
# IOMMU 그룹 확인
find /sys/kernel/iommu_groups/ -type l | sort -V
VM 내부(Windows) 검증
- 장치 관리자에서 GPU가 정상 인식되는지 확인 (노란 느낌표 없어야 함)
- GPU-Z 툴로 실제 GPU 정보가 올바르게 표시되는지 확인
- 3D Mark 벤치마크로 성능 측정 (네이티브 대비 95% 이상이면 성공)
AI 워크로드 검증 (Linux VM)
# NVIDIA 드라이버 및 CUDA 확인
nvidia-smi
# PyTorch에서 GPU 인식 확인
python3 -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
# GPU 메모리 대역폭 테스트
nvidia-smi dmon -s u
🎉 드디어 됐다! 저도 처음 nvidia-smi에서 RTX 3080이 뜨는 거 봤을 때 얼마나 기뻤는지 모릅니다. 몇 시간의 삽질이 한 번에 보상받는 느낌이랄까요.
마무리: Proxmox GPU 패스스루 설정 완벽 가이드
▲ Proxmox VE GPU 패스스루 설정 전체 과정 요약. BIOS → GRUB → VFIO → VM 설정 순서로 진행하면 됩니다.
오늘 다룬 내용을 간단히 정리해드릴게요:
- ✅ BIOS에서 IOMMU(VT-d/AMD-Vi) 활성화
- ✅ GRUB에
intel_iommu=on iommu=pt파라미터 추가 - ✅ VFIO 모듈 등록 및 GPU PCI ID 바인딩
- ✅ NVIDIA 드라이버 블랙리스트 처리
- ✅ VM을 Q35 + OVMF 조합으로 설정
- ✅ Consumer GPU는
hidden=1+hv_vendor_id로 Code 43 우회
솔직히 말씀드리면, GPU 패스스루는 처음 한 번 성공하고 나면 그다음부터는 별거 아니에요. 근데 그 처음 한 번이 진짜 험난하죠 ㅎㅎ 이 가이드가 그 험난한 여정을 조금이라도 줄여드렸으면 좋겠습니다.
AI 워크로드로 활용하실 분들은 다음 단계로 Proxmox에서 Kubernetes 클러스터를 구성하고 GPU 노드를 연결하는 방법도 다룰 예정이에요. 그쪽이 진짜 재미있거든요. 그리고 vGPU 설정에 관심 있으신 분들은 이전 글에서 NVIDIA GRID 드라이버 설치 방법도 다뤘으니 참고해보세요.
혹시 설정하다가 막히는 부분 있으시면 댓글로 남겨주세요. 제가 겪어본 삽질은 거의 다 공유해드릴 수 있을 것 같습니다 😄
자주 묻는 질문 (FAQ)
Q. RTX 4090도 Proxmox GPU 패스스루가 되나요?
네, 됩니다! 다만 RTX 40 시리즈는 PCIe 5.0을 쓰는데, 메인보드와 Proxmox 버전에 따라 일부 추가 설정이 필요할 수 있어요. 기본 흐름은 동일합니다.
Q. 하나의 GPU를 여러 VM이 동시에 쓸 수 있나요?
일반 패스스루로는 불가능해요. 동시에 여러 VM이 쓰려면 NVIDIA vGPU(유료 라이선스) 또는 A100/H100의 MIG 기능을 사용해야 합니다.
Q. 패스스루 후 호스트에서 GPU를 모니터로 쓸 수 있나요?
VFIO에 바인딩된 GPU는 호스트에서 사용할 수 없어요. 보통 온보드 그래픽이나 별도 저가형 GPU를 호스트 디스플레이용으로 쓰고, 메인 GPU는 패스스루용으로 분리하는 방식을 많이 씁니다.
Q. Proxmox 8 버전에서도 동일하게 적용되나요?
네, 이 가이드는 Proxmox VE 8.x 기준으로 작성됐습니다. 7.x도 거의 동일하고, 6.x는 일부 모듈 이름이 다를 수 있어요.
'IT > Proxmox' 카테고리의 다른 글
| [Proxmox] Proxmox VE 백업 및 복원 전략: 안전한 가상 환경 운영 가이드 (1) | 2026.04.19 |
|---|---|
| [Proxmox] Proxmox VE ZFS 스토리지 최적화: 성능과 안정성 동시 확보 가이드 (2) | 2026.04.19 |
| [Proxmox] Proxmox 클러스터 HA 설정: 고가용성 구성 완벽 가이드 2026 (1) | 2026.04.17 |
| [Proxmox] 리눅스 커널 7.0 출시 현황과 6.x 최신 동향 완벽 가이드 (1) | 2026.04.15 |
| [Proxmox] 커널 패닉 해결: 부팅 오류 트러블슈팅 완벽 가이드 (0) | 2026.04.15 |
| [Kubernetes] 사용자 네임스페이스 GA: UID/GID 매핑으로 컨테이너 보안 강화하기 (0) | 2026.04.12 |