23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
요즘 온프레미스 환경에서 다양한 IT 인프라 구축을 진행하고 있습니다. 특히, 여러 개발자가 GPU 서버 자원을 공유할 수 있는 환경 구성이 필요해지고 있습니다.
GPU를 포함하는 VM생성을 통해서 GPU가 요구되는 렌더링 개발 환경을 개발자들에게 제공해 주어야 합니다.
이러한 요구사항을 충족하기 위한 방법 중 하나로 KVM GPU 패스스루 방식을 소개하고자 합니다.
KVM GPU 패스스루는 가상 머신(VM)이 호스트 시스템의 물리적 GPU에 직접 접근할 수 있도록 하는 기술입니다.
이를 통해 VM은 GPU의 모든 성능을 활용하여 그래픽 집약적인 작업을 수행할 수 있습니다. 이 기술은 주로 게임, 머신 러닝, 3D 렌더링 등에서 사용됩니다.
특징
직접 접근: VM은 GPU에 직접 접근하여 하드웨어 가속을 통해 성능을 극대화합니다.
IOMMU 지원: 이 기술은 IOMMU(입출력 메모리 관리 장치)를 활용하여 GPU와 VM 간의 격리를 보장합니다.
하드웨어 독립성: GPU 패스스루는 특정 하드웨어에 의존하지 않으며, 다양한 GPU와 호환됩니다.
크게 3개 Part의 구축 절차로 정리해 볼 수 있습니다.
Part1 : 하드웨어 기반 설정
Part2 : 드라이버 설정과 바인딩
Part3 : VM 설정
목적: 하드웨어 레벨에서 가상화 기술과 IOMMU 기능을 활성화하여 GPU 패스스루의 기반을 마련합니다.
SVM(AMD-V) 및 IOMMU(AMD-Vi)를 활성화함으로써 가상 머신이 하드웨어 리소스를 직접 사용할 수 있도록 합니다.
SVM(AMD-V) 및 IOMMU(AMD-Vi) 활성화:
부팅 시 BIOS/UEFI 설정 화면에 진입하여 아래 항목을 찾아 "Enabled"로 설정해야 합니다.
SVM(또는 AMD Virtualization):
- BIOS/UEFI에서 "CPU Configuration" 또는 "Advanced" 메뉴로 이동합니다.
- "SVM Mode" 또는 "Secure Virtual Machine" 또는 "AMD-V" 항목을 "Enabled"로 설정합니다.
IOMMU(AMD-Vi):
- BIOS/UEFI에서 "IOMMU" 또는 "AMD IOMMU" 항목을 "Enabled"로 설정합니다 (지원되는 경우).
이 설정은 가상화 기술을 활성화하여 VM이 하드웨어 리소스를 직접 사용할 수 있도록 합니다.
목적: Linux 커널이 IOMMU와 VFIO를 올바르게 인식하고 GPU를 격리할 수 있도록 설정합니다.
이를 통해 패스스루 모드에서 GPU와 오디오 장치의 성능을 최적화하고, 필요한 장치의 PCI ID를 지정하여 가상 머신에 할당할 수 있습니다.
/etc/default/grub 파일을 다음과 같이 수정합니다:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on iommu=pt vfio-pci.ids=1002:13c0,1002:1640 nomodeset console=ttyS0,38400n8 console=tty0"
GRUB_CMDLINE_LINUX="amd_iommu=on"파라미터 설명:
amd_iommu=on: IOMMU를 활성화합니다.
iommu=pt: 패스스루 모드로 성능을 최적화합니다.
vfio-pci.ids=1002:13c0,1002:1640: 패스스루할 GPU 및 오디오 장치의 PCI ID를 지정합니다.
설정 적용:
sudo update-grub
sudo update-initramfs -u
sudo reboot목적: GPU와 관련 장치들이 올바른 IOMMU 그룹에 분리되어 있는지 확인하여 패스스루가 원활하게 이루어질 수 있도록 합니다.
이를 통해 GPU와 오디오 장치가 독립된 그룹에 있을 경우 패스스루 성능이 향상됩니다.
아래 명령으로 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이상적인 결과 예시:
IOMMU Group 22 0c:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:13c0] (rev c5)
IOMMU Group 23 0c:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:1640]GPU(0c:00.0)와 오디오(0c:00.1)가 독립된 그룹에 있으면 패스스루에 유리합니다.
그룹이 합쳐져 있는 경우 해결책:
GRUB에 ACS 오버라이드 파라미터 추가:
pcie_acs_override=downstream,multifunction목적: VFIO 드라이버가 네이티브 GPU 드라이버보다 먼저 로딩되어 GPU를 점유하게 하여 가상 머신이 GPU에 직접 접근할 수 있도록 합니다.
/etc/modprobe.d/vfio.conf 파일을 생성하거나 편집하여 다음 내용을 추가합니다:
options vfio-pci ids=10de:2c02,10de:22e9,1002:13c0,1002:1640
softdep nvidia pre: vfio-pci
softdep nouveau pre: vfio-pci
softdep amdgpu pre: vfio-pci설명:
options vfio-pci ids=: 특정 PCI ID의 장치를 VFIO에 직접 바인딩합니다.
softdep는 amdgpu 및 radeon 드라이버보다 vfio-pci가 먼저 바인딩되도록 설정합니다.
목적: 부팅 시 VFIO 모듈이 자동으로 로딩되도록 설정하여 시스템 시작 시 GPU 패스스루를 지원합니다.
/etc/initramfs-tools/modules 또는 /etc/modules-load.d/vfio.conf에 아래 내용을 추가합니다:
vfio
vfio_pci
vfio_iommu_type1
vfio_virqfd목적: 호스트에서 GPU를 사용하지 않도록 네이티브 드라이버를 완전히 차단하여 GPU가 가상 머신에 전적으로 할당될 수 있도록 보장합니다.
/etc/modprobe.d/blacklist.conf에 다음 내용을 추가합니다:
blacklist nouveau
blacklist nvidia
blacklist nvidia_drm
blacklist nvidiafb
blacklist snd_hda_intel설정 적용:
sudo update-initramfs -u
sudo rebootIOMMU 활성화 확인:
dmesg | grep -i iommuGPU/오디오 바인딩 확인:
lspci -nnk | grep -A 3 -E '1002:13c0|1002:1640'정상 바인딩 결과 예시:
0c:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:13c0] (rev c5)
Subsystem: ASUSTeK Computer Inc. Device [1043:8877]
Kernel driver in use: vfio-pci
Kernel modules: amdgpu
0c:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:1640]
Subsystem: ASUSTeK Computer Inc. Device [1043:8877]
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel(둘 다 vfio-pci로 바인딩되어야 합니다.)
목적: 원격에서 VM을 관리할 수 있는 환경을 구축하는 것입니다. 호스트에 GPU가 없기 때문에 GUI를 사용할 수 없으며, CLI 기반으로 VM을 관리합니다.
이를 통해 사용자는 원격으로 VM을 효율적으로 시작하고 제어할 수 있으며, 필요한 도구와 인증 설정을 통해 안전하게 접근할 수 있습니다.
원격 virt-manager 설정:
관리 PC에서 필요한 도구 설치:
# macOS 예시
brew install virt-manager
brew install virt-viewer
brew install ssh-askpass # GUI 비밀번호 입력을 위해 필요SSH 키 기반 인증 설정:
ssh-keygen -t ed25519 -C "virt-manager-access"
ssh-copy-id dtd@172.23.255.95원격 virt-manager 접속:
virt-manager -c 'qemu+ssh://계정@서버IP/system'A. VM 생성
GUI가 가능한 원격에서 virt-manager로 VM을 생성합니다.
B. VM에 패스스루 장치 추가
새로운 가상 머신 생성 과정에서:
'5단계: 설치 시작 준비'에서 '설치 전에 사용자 설정'을 선택하여 생성합니다.
'설치 시작' 전에 '하드웨어 추가'가 가능한 화면으로 전환합니다.
하드웨어 추가 버튼을 클릭하여 'PCI 호스트 장치'를 선택하여 추가합니다.
장치 드라이버 설치
VM 내부에서 GPU 장치 드라이버를 설치한 후, 정상적으로 인식되는지 확인합니다:
NVIDIA GPU의 경우: 최신 GeForce 또는 Studio 드라이버 설치
AMD GPU의 경우: 최신 Adrenalin 드라이버 설치
패스스루 성공 여부 확인
물리적 확인: VM 실행 후, 모니터(패스스루 GPU에 연결)에 화면 출력이 정상적으로 나타나야 합니다.
소프트웨어 확인: VM 내부에서 GPU 드라이버 설치 및 정상 인식 확인이 필요합니다.
Windows: 장치 관리자에서 GPU 정상 인식 확인
구축 과정 상에 서버 호스트가 GPU를 사용할 수 없게 하는 단계가 진행된 후부터는 원격 컴퓨터에서 virt-manager를 통해서 서버를 제어해야 하는 과정에서 설정 오류가 있어 여러 번의 파워 부팅을 해야 했습니다.
제공드린 구축 단계에 따라 차근차근 진행하신다면 여러 번의 파워 부팅을 하는 수고로움은 덜 수 있을 것으로 기대해 봅니다.
호스트에서 GPU가 여전히 기본 드라이버에 바인딩되어 있을 수 있습니다.
# 현재 GPU 상태 확인
lspci -nnk | grep -A3 VGA
lspci -nnk | grep -A3 NVIDIA # 또는 AMD
# vfio-pci에 바인딩되어 있는지 확인
ls /sys/bus/pci/drivers/vfio-pci/GPU를 vfio-pci 드라이버에 바인딩해야 합니다:
# GPU의 PCI ID 확인
lspci -nn | grep VGA
lspci -nn | grep Audio # GPU 오디오 컨트롤러
# /etc/modprobe.d/vfio.conf 파일 생성/수정
echo "options vfio-pci ids=10de:xxxx,10de:yyyy" >> /etc/modprobe.d/vfio.conf
# xxxx, yyyy는 실제 GPU와 오디오의 PCI ID
# initramfs 업데이트
update-initramfs -u# /etc/modprobe.d/blacklist.conf에 추가
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf # NVIDIA의 경우
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia_drm" >> /etc/modprobe.d/blacklist.confvirt-manager에서 생성한 VM의 XML을 확인해보세요:
virsh dumpxml VM이름특히 다음 부분들을 확인하세요:
<features> 섹션에 <hyperv> 또는 <kvm> 설정
PCI 디바이스의 정확한 주소 매핑
호스트와 게스트 간 PCI 주소 충돌
# libvirt 로그 확인
journalctl -u libvirtd -f
# qemu 로그 확인
tail -f /var/log/libvirt/qemu/VM이름.log
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.