← ~/notes · 3 min read

GPU 패스스루 원격 셋업, BIOS 벽에 막힌 이야기

키보드·모니터 없이 SSH만으로 GPU 패스스루 환경을 다 만들 수 있을 거라 자신했다. 마지막 한 걸음에서 막혔다.

목차
  1. 원격에서 가능한 부분
  2. 1) IOMMU 활성화
  3. 2) NVIDIA 드라이버 블랙리스트
  4. 3) vfio-pci에 GPU ID 넘기기
  5. 4) initramfs 갱신 + 재부팅
  6. 재부팅 후 — 벽
  7. ASUS Z390 BIOS의 함정
  8. ”원격으로 BIOS 진입할 방법 없나?”
  9. 그래서 어떻게 됐나
  10. 배운 것
  11. 다음 시도

집에 있는 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 작업이 남았을 뿐이다.


성공한 작업만 남기는 블로그는 거짓말에 가깝다. 막힌 지점이 어디였는지가 진짜 정보다.