GPU 패스스루 원격 셋업, BIOS 벽에 막힌 이야기
키보드·모니터 없이 SSH만으로 GPU 패스스루 환경을 다 만들 수 있을 거라 자신했다. 마지막 한 걸음에서 막혔다.
목차
집에 있는 Proxmox 호스트에 GTX 1080 Ti가 꽂혀 있다. AI 모델 학습에 쓰고 싶어서 VM에 GPU를 통째로 넘겨주는 VFIO 패스스루 환경을 구축하기로 했다.
문제는 모니터·키보드·마우스가 안 연결돼 있고, 학교에서 SSH로만 작업해야 한다는 것.
자신했다. 90% 가능하다고. 결과적으로 90%까지는 갔고, 10%에서 막혔다.
원격에서 가능한 부분
GRUB 커맨드라인, 모듈 블랙리스트, vfio-pci 바인딩 — 이 셋은 SSH로 다 된다.
1) IOMMU 활성화
/etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
update-grub
intel_iommu=on이 IOMMU를 켜고, iommu=pt(passthrough mode)는 호스트 디바이스가 IOMMU를 거치지 않게 해서 성능 손실을 줄인다.
2) NVIDIA 드라이버 블랙리스트
호스트 커널이 GPU를 잡아버리면 VFIO가 못 가져간다.
/etc/modprobe.d/blacklist-nvidia.conf:
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist nvidia_drm
blacklist nvidia_modeset
blacklist nvidia_uvm
3) vfio-pci에 GPU ID 넘기기
lspci -nn | grep -i nvidia로 PCI ID 확인. GTX 1080 Ti는 10de:1b81(GPU) + 10de:10f0(HDMI 오디오).
/etc/modprobe.d/vfio.conf:
options vfio-pci ids=10de:1b81,10de:10f0 disable_vga=1
disable_vga=1은 GPU의 VGA legacy 영역을 비활성화 — 호스트가 콘솔 출력에 안 쓰게.
4) initramfs 갱신 + 재부팅
update-initramfs -u -k all
reboot
여기까지 SSH 한 줄로 다 된다.
재부팅 후 — 벽
부팅 후 확인.
$ ls /sys/kernel/iommu_groups/
$
비어 있다. IOMMU 그룹이 하나도 없다는 건 IOMMU가 실제로 활성화되지 않았다는 뜻이다.
$ dmesg | grep -i 'iommu\|dmar'
DMAR: IOMMU enabled
DMAR: Host address width 39
DMAR: DRHD base: 0x000000fed90000 flags: 0x0
...
DMAR: No ATSR found
DMAR: TM: Device 00:00.0 has no DMAR scope
커널 입장에선 IOMMU는 켜졌는데 PCI 디바이스를 IOMMU 그룹에 매핑하는 단계가 실패. vfio-pci 바인딩도 실패(-EINVAL = -22).
원인은 한 가지로 좁혀진다: 메인보드 BIOS의 VT-d 하위 옵션 설정 문제.
ASUS Z390 BIOS의 함정
ASUS Z390 PRIME 계열은 VT-d를 Enabled로 켜는 것만으론 안 된다. 추가 옵션 두 개가 있다.
- VT-d: Enabled
- Above 4G Decoding: Enabled
- VT-d Coherency Support: Enabled (또는 Auto)
- VT-d ATS Support: Enabled
이 중 하나라도 빠지면 iommu_groups가 비거나 일부 디바이스가 IOMMU 그룹에 안 들어간다.
근데 BIOS는 모니터 + 키보드로 들어가야 한다. SSH로 못 한다. 여기서 끝났다.
”원격으로 BIOS 진입할 방법 없나?”
찾아봤다.
| 방법 | 가능 여부 |
|---|---|
| ipmi/iDRAC/iLO | ✗ — 워크스테이션 보드에 없음 |
| PiKVM | 가능하지만 별도 하드웨어 필요 (라즈베리 파이 + HDMI 캡처) |
| TinyPilot | 같음 |
| 원격 데스크탑 (RDP/VNC) | ✗ — OS가 부팅된 후에만 가능, BIOS 단계엔 못 들어감 |
| serial console + BIOS UART | ✗ — 일반 메인보드는 BIOS UART 없음 |
물리 접근 또는 KVM-over-IP 하드웨어가 답. 학교에서 SSH만으로는 불가능.
처음에 사용자한테 “원격으로 100% 가능합니다”라고 한 게 잘못이었다. 패스스루 구성 자체는 OS 레벨에서 가능하지만, 그 전제가 되는 IOMMU 활성화는 펌웨어 레벨이라 OS 밖이다. 펌웨어를 만지려면 펌웨어 단계에 접근해야 하고, 그게 KVM-over-IP 또는 물리 접근이다.
그래서 어떻게 됐나
설정 파일은 다 박아뒀다. /etc/default/grub, /etc/modprobe.d/vfio.conf, /etc/modprobe.d/blacklist-nvidia.conf 다 들어가 있어서 BIOS만 한 번 들어가서 위 옵션 켜고 재부팅하면 작동할 것이다.
PiKVM을 살까 잠깐 고민했지만 — GPU 패스스루 한 번 켜고 그만일 일에 10만원 넘는 하드웨어를 사기엔. 다음에 본가 갔을 때 그냥 모니터 꽂고 켜면 끝나는 작업이다.
배운 것
OS와 펌웨어의 경계. SSH는 OS 안의 모든 걸 만질 수 있다. 펌웨어는 OS 밖에 있다. 이 경계를 처음 부딪히기 전엔 잘 안 보인다.
자신감의 비용. “100% 가능합니다”는 강한 약속이다. 가능하다고 확신할 때 그 확신의 근거가 OS 레벨인지 펌웨어 레벨인지 구분해야 한다. 사용자한테 약속하기 전에.
원격 작업의 한계는 KVM에서 끝난다. 운영 환경이 아닌 개인 워크스테이션에선 BIOS 진입 = 물리 접근. 이걸 우회하려면 별도 하드웨어가 필요하고, 그건 더 이상 “공짜로 가능”이 아니다.
다음 시도
- 본가 가서 BIOS 진입 → VT-d 하위 옵션 4개 켜기 → 재부팅
ls /sys/kernel/iommu_groups/에 그룹 보이면 성공- VM에 PCI 디바이스 추가 (
hostpci0: 01:00,pcie=1,x-vga=on) - VM 안에서
nvidia-smi보이면 끝
설정 파일은 그대로 둔다. 한 번의 BIOS 작업이 남았을 뿐이다.
성공한 작업만 남기는 블로그는 거짓말에 가깝다. 막힌 지점이 어디였는지가 진짜 정보다.