PCI 패스스루 사용¶
PCI 패스스루는 물리 NPU를 하나의 VM에 직접 할당하는 방식입니다. 이 모드에서는 할당된 VM에서 실행되는 드라이버만 NPU에 독점적으로 접근하며, NPU는 VM 간에 공유되지 않습니다.
IOMMU 활성화 및 권장 커널 파라미터 구성¶
먼저 서버 플랫폼의 BIOS에서 다음 설정을 활성화합니다.
- IOMMU(Intel VT-d / AMD-Vi)
BIOS 메뉴 이름과 구성 절차는 시스템 제조사에 따라 일부 다를 수 있습니다.
PCI 패스스루는 IOMMU를 통해 VM에 할당된 NPU 장치의 DMA 접근을 격리하여 호스트 및 다른 VM의 메모리를 보호합니다. IOMMU가 비활성화된 경우 PCI 패스스루가 동작하지 않습니다.
Note
현재 지원되는 배포판의 기본 커널에는 IOMMU가 이미 활성화되어 있습니다.
NPU PCI 패스스루 환경에서 권장하는 커널 파라미터는 다음과 같으며, /etc/default/grub의 GRUB_CMDLINE_LINUX에 추가합니다.
Note
아래 예시는 Intel 프로세서 기반 서버 기준입니다. AMD 프로세서에서는 intel_iommu=on을 빼면 됩니다. BIOS에서 AMD-Vi를 켜면 IOMMU가 활성화됩니다. 또한 서버와 장착된 카드에 따라 일부 커널 파라미터가 달라질 수 있습니다.
GRUB 설정을 업데이트하고 재부팅합니다.
재부팅한 뒤 파라미터가 반영되었는지 확인합니다.
Linux KVM에서 PCI 패스스루 사용하기¶
virsh 명령으로 Ubuntu Linux KVM에서 NPU 패스스루를 구성할 수 있습니다.
NPU 패스스루를 구성하기 전에 다음 사전 요구 사항을 충족해야 합니다.
- Ubuntu Linux KVM이 설치되어 있어야 합니다(
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils). - VM의 머신 타입은 q35여야 합니다. q35는 PCIe 버스 구조를 그대로 에뮬레이션하므로 NPU 패스스루에 필요합니다.
- 게스트의 64비트 MMIO 주소 공간이 VM에 할당할 카드에 맞게 아래 크기 이상 확보되어 있어야 합니다. 같은 VM에 카드를 여러 장 할당하면 카드 수에 비례해 늘립니다. 호스트 BIOS에서 Above 4G Decoding도 켜야 합니다.
RBLN-CR13 카드당 512 GB를 확보합니다.
RBLN-CA25 카드당 128 GB를 확보합니다.
virsh로 VM에 NPU 패스스루 구성¶
이 절차에서는 q35 머신 타입으로 구성된 기존 VM에 NPU를 패스스루로 할당하는 방법을 다룹니다. VM 생성과 기본 구성은 이 문서에서 다루지 않습니다. 해당 내용은 Ubuntu Server - Virtual Machine Manager 및 libvirt - PCI passthrough of host devices에서 확인할 수 있습니다.
-
패스스루 모드로 VM에 할당할 NPU의 PCI 주소(BDF)를 확인합니다.
다음 예시에서 NPU의 PCI 장치 BDF는
1b:00.0입니다. -
1단계에서 확인한 BDF를
domain,bus,slot,function형식으로 변환하여 XML에 지정하고, 해당 XML 파일을 사용하여 NPU 장치를 VM에 할당합니다.RBLN-CR13은 카드 하나가 PCI 장치 1개이므로
<hostdev>하나면 됩니다.RBLN-CA25는 카드 하나가 PCI 장치 4개이므로 4개를 모두 같은 VM에 할당합니다. RBLN-CA22는 카드 하나가 PCI 장치 1개이므로
<hostdev>하나면 됩니다.Note
virsh edit으로 VM XML을 직접 편집하여<hostdev>항목을 추가해도 동일하게 구성할 수 있습니다. -
NPU가 할당된 VM을 시작합니다.
-
VM에 접속하여 NPU가 정상적으로 할당되었는지 확인합니다.
게스트에서 다음 명령으로 BAR 할당을 확인합니다.
Region 0에 메모리 주소가 할당되어 있고[size=256G]로 표시되는지 확인합니다. 커널 로그에서 해당 장치에no space for등의 BAR 할당 오류가 없는지 확인합니다.
다음 단계¶
NPU를 VM에 할당한 뒤에는 RBLN 드라이버 설치 가이드에 따라 게스트 OS에 RBLN 드라이버를 설치합니다. 호스트에는 VM에 할당한 NPU용 RBLN 드라이버를 설치할 필요가 없습니다. 게스트 OS와 커널은 지원 버전 표에 있는 버전을 사용해야 합니다.
드라이버를 설치하면 게스트에서 rbln-smi로 VM에 할당된 NPU를 확인할 수 있습니다.