Proxmox Üzerinde NVIDIA GPU Passthrough Yapılandırması [Homelab]
Günümüzde homelab sistemlerinde local AI eğitimi ve kullanımı gibi konular oldukça önem kazanıyor. Bu rehberde homelab (ev sunucusu) sistemlerinizde sunucunuza takılı NVIDIA ekran kartını sanal makineye nasıl aktaracağınızı göreceksiniz. Gereksinimler: Bu kılavuz boyunca standart bir proxmox kurulumu yapmış olduğunuzu, temel proxmox yönetim işlemlerine hakim olduğunuzu ve Microcode benzeri post-install aşamalarınızı tamamladığınızı varsayacağım. Standart bir proxmox kurulumu yaptığınız hostta aşağıdaki özelliklerin var olduğuna / açık olduğundan emin olun: VT-d, interrupt mapping, UEFI BIOS. Kılavuz Boyunca Kullanacağım Sistem Anakart: MSI H110M PRO-D İşlemci: Intel Core I3 7100 Ekran Kartı: NVIDIA GTX 1050 Tİ RAM: 8GB DDR4 2133MHZ Proxmox Versiyonu: PVE Virtual Environment 8.3.0 Konuk İşletim Sistemi : Fedora 41 Server Edition Başlangıç Adım 1 : GRUB Önyükleyisinin Yapılandırılması Proxmox sunucunuza SSH yapın veya web arayüzünde Node sekmesi altındaki Shell terminalini açın. İşlemleri, root veya sudoers grubuna üye bir kullanıcı ile "sudo" yetkisi ile yapmalısınız. vi /etc/default/grub Bu satırı arayın: GRUB_CMDLINE_LINUX_DEFAULT= Sonrasında CPU markanıza göre ayarlayın: Intel GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" AMD GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on" Eğer passthrough başarısız olursa, bu satıra ek komutlar girmeniz gerekebilir. Bu ek parametreler, Proxmox’un sistemdeki GPU’ları kendi amaçları için kullanmamasını sağlar ve her PCI aygıtının ayrı bir IOMMU grubunda yer almasına yardımcı olur. Bu önemlidir çünkü, örneğin IOMMU grup 1 içerisinde GPU’nuzla birlikte CPU da yer alıyorsa, GPU geçişi başarısız olur. Ben bu yapılandırmayı kullanıyorum: GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=vesafb:off,efifb:off" /etc/default/grub dosyasını düzenleyip kaydettikten sonra aşağıdaki komutu çalıştırın: update-grub Adım 2 : VFIO Modülleri Proxmox sistemimizde bazı VFIO modüllerine ihtiyaç vardır. VFIO (Virtual Function I/O) modülleri, fiziksel donanım aygıtlarının sanal makineler tarafından doğrudan ve güvenli şekilde kullanılabilmesini sağlayan Linux çekirdek bileşenleridir. /etc/modules dosyasını açın : vi /etc/modules Aşağıdaki girdileri dosyanın içine yazın: vfio vfio_iommu_type1 vfio_pci vfio_virqfd Kaydedip çıkabilirsiniz. Adım 3: IOMMU Interrupt Remapping IOMMU Interrupt Remapping, fiziksel aygıtların gönderdiği kesme sinyallerinin sanal ortamlarda güvenli ve doğru şekilde işlemciye yönlendirilmesini sağlayan bir güvenlik ve izolasyon mekanizmasıdır. Aşağıdaki komutu çalıştırın: echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf vfio_iommu_type1 modülüne ait allow_unsafe_interrupts=1 parametresi, interrupt yönlendirmesi desteklenmeyen sistemlerde passthrough yapılabilmesi için güvenli olmayan interruptlara izin verir. Aşağıdaki komutu çalıştırın: echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf kvm modülüne ait ignore_msrs=1 parametresi, sanal makinede MSR (Model-Specific Register) hatalarının göz ardı edilmesini sağlayarak uyumluluk ve kararlılık artırır. Adım 4: Sürücüleri Kara Listeye Almak PCI Passthrough işleminin başarılı olması için bu kartların proxmox tarafından init edilmemesi gerekir. Aşağıdaki komutları çalıştırarak ekran kartı sürücülerini kara listeye alın: echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf Adım 5: Ekran Kartının VFIO İçine Eklenmesi Aşağıdaki komutu çalıştırın: lspci -v Komutun çıktısında ekran kartınızı işaret eden satırları bulun. Şuna benzemelidir: 01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1) (prog-if 00 [VGA controller]) 01:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1) Aşağıdaki komutu çalıştırın ! Komuttaki rakamları, kendi çıktınızda bulunan rakamlar ile değiştirin ! : lspci -n -s 01:00 Bu komut ekran kartınızın vendor bilgilerini çıkartmalıdır: 01:00.0 0300: 10de:1c82 (rev a1) 01:00.1 0403: 10de:0fb9 (rev a1) Vendor bilgilerimi not alıyorum : 10de:1c82 ve 10de:0fb9. Şimdi Vendor bilgilerimizi VFIO içine ekleyelim: ! Komuttaki rakamları, kendi çıktınızda bulunan rakamlar ile değiştirin ! : echo "options vfio-pci ids=10de:1c82,10de:0fb9 disable_vga=1"> /etc/modprobe.d/vfio.conf Ardından aşağıdaki komutu çalıştırın: update-initramfs -u Ve yeniden başlatın: reboot now Proxmox artık GPU Passthrough için hazır. Ekran Kartının Bir Sanal Makineye Aktarılması Bir adet sanal makine oluşturun. Ben Fedora Server 41 template üzeri
![Proxmox Üzerinde NVIDIA GPU Passthrough Yapılandırması [Homelab]](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjs21gdlp50h35o8eup2.png)
Günümüzde homelab sistemlerinde local AI eğitimi ve kullanımı gibi konular oldukça önem kazanıyor. Bu rehberde homelab (ev sunucusu) sistemlerinizde sunucunuza takılı NVIDIA ekran kartını sanal makineye nasıl aktaracağınızı göreceksiniz.
Gereksinimler:
Bu kılavuz boyunca standart bir proxmox kurulumu yapmış olduğunuzu, temel proxmox yönetim işlemlerine hakim olduğunuzu ve Microcode benzeri post-install aşamalarınızı tamamladığınızı varsayacağım.
Standart bir proxmox kurulumu yaptığınız hostta aşağıdaki özelliklerin var olduğuna / açık olduğundan emin olun:
- VT-d,
- interrupt mapping,
- UEFI BIOS.
Kılavuz Boyunca Kullanacağım Sistem
Anakart: MSI H110M PRO-D
İşlemci: Intel Core I3 7100
Ekran Kartı: NVIDIA GTX 1050 Tİ
RAM: 8GB DDR4 2133MHZ
Proxmox Versiyonu: PVE Virtual Environment 8.3.0
Konuk İşletim Sistemi : Fedora 41 Server Edition
Başlangıç
Adım 1 : GRUB Önyükleyisinin Yapılandırılması
Proxmox sunucunuza SSH yapın veya web arayüzünde Node sekmesi altındaki Shell terminalini açın.
İşlemleri, root veya sudoers grubuna üye bir kullanıcı ile "sudo" yetkisi ile yapmalısınız.
vi /etc/default/grub
Bu satırı arayın:
GRUB_CMDLINE_LINUX_DEFAULT=
Sonrasında CPU markanıza göre ayarlayın:
Intel
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
AMD
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
Eğer passthrough başarısız olursa, bu satıra ek komutlar girmeniz gerekebilir.
Bu ek parametreler, Proxmox’un sistemdeki GPU’ları kendi amaçları için kullanmamasını sağlar ve her PCI aygıtının ayrı bir IOMMU grubunda yer almasına yardımcı olur. Bu önemlidir çünkü, örneğin IOMMU grup 1 içerisinde GPU’nuzla birlikte CPU da yer alıyorsa, GPU geçişi başarısız olur.
Ben bu yapılandırmayı kullanıyorum:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=vesafb:off,efifb:off"
/etc/default/grub dosyasını düzenleyip kaydettikten sonra aşağıdaki komutu çalıştırın:
update-grub
Adım 2 : VFIO Modülleri
Proxmox sistemimizde bazı VFIO modüllerine ihtiyaç vardır.
VFIO (Virtual Function I/O) modülleri, fiziksel donanım aygıtlarının sanal makineler tarafından doğrudan ve güvenli şekilde kullanılabilmesini sağlayan Linux çekirdek bileşenleridir.
/etc/modules dosyasını açın :
vi /etc/modules
Aşağıdaki girdileri dosyanın içine yazın:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
Kaydedip çıkabilirsiniz.
Adım 3: IOMMU Interrupt Remapping
IOMMU Interrupt Remapping, fiziksel aygıtların gönderdiği kesme sinyallerinin sanal ortamlarda güvenli ve doğru şekilde işlemciye yönlendirilmesini sağlayan bir güvenlik ve izolasyon mekanizmasıdır.
Aşağıdaki komutu çalıştırın:
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
vfio_iommu_type1 modülüne ait allow_unsafe_interrupts=1 parametresi, interrupt yönlendirmesi desteklenmeyen sistemlerde passthrough yapılabilmesi için güvenli olmayan interruptlara izin verir.
Aşağıdaki komutu çalıştırın:
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
kvm modülüne ait ignore_msrs=1 parametresi, sanal makinede MSR (Model-Specific Register) hatalarının göz ardı edilmesini sağlayarak uyumluluk ve kararlılık artırır.
Adım 4: Sürücüleri Kara Listeye Almak
PCI Passthrough işleminin başarılı olması için bu kartların proxmox tarafından init edilmemesi gerekir.
Aşağıdaki komutları çalıştırarak ekran kartı sürücülerini kara listeye alın:
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
Adım 5: Ekran Kartının VFIO İçine Eklenmesi
Aşağıdaki komutu çalıştırın:
lspci -v
Komutun çıktısında ekran kartınızı işaret eden satırları bulun. Şuna benzemelidir:
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1) (prog-if 00 [VGA controller])
01:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)
Aşağıdaki komutu çalıştırın ! Komuttaki rakamları, kendi çıktınızda bulunan rakamlar ile değiştirin ! :
lspci -n -s 01:00
Bu komut ekran kartınızın vendor bilgilerini çıkartmalıdır:
01:00.0 0300: 10de:1c82 (rev a1)
01:00.1 0403: 10de:0fb9 (rev a1)
Vendor bilgilerimi not alıyorum : 10de:1c82 ve 10de:0fb9.
Şimdi Vendor bilgilerimizi VFIO içine ekleyelim: ! Komuttaki rakamları, kendi çıktınızda bulunan rakamlar ile değiştirin ! :
echo "options vfio-pci ids=10de:1c82,10de:0fb9 disable_vga=1"> /etc/modprobe.d/vfio.conf
Ardından aşağıdaki komutu çalıştırın:
update-initramfs -u
Ve yeniden başlatın:
reboot now
Proxmox artık GPU Passthrough için hazır.
Ekran Kartının Bir Sanal Makineye Aktarılması
Bir adet sanal makine oluşturun. Ben Fedora Server 41 template üzerinden klonladım.
Sanal makinenizi oluşturduktan sonra hemen boot etmeyin.
Sanal makinemizi oluşturduktan sonra proxmox shell üzerinden sanal makinemizin ID'si ile yapılandırma dosyasına erişin:
nano /etc/pve/qemu-server/.conf
Üç adet satırı ekleyin (varsa eskilerini silin):
machine: q35
cpu: host,hidden=1,flags=+pcid
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off'
Kaydedip çıkın.
Ardından Proxmox web arayüzü üzerinden sanal makinenizin hardware sekmesine gelin ve "Add" seçeneği ile bir adet PCI kartı ekleyin.
RAW device olarak ekran kartınızı seçin. Ardından şu seçenekleri işaretleyin:
All Functions: YES
Rom-Bar: YES
Primary GPU: NO
PCI-Express: YES
Ardından makineyi başlatın.
Sanal Makine Üzerinde Ekran Kartı Kurulumu
Sanal makinenizin genel güncellemelerini yapın:
dnf update
Ardından restart edin:
reboot now
Şimdi açık kaynak NVIDIA nouveau sürücüsünün yüklenmiş olmasını bekleriz. -İstediğimiz bir durum değil.-
Kontrol etmek için aşağıdaki komutu çalıştırın:
lsmod | grep -E 'nvidia|nouveau'
Aşağıdaki gibi bir çıktı vermiş ise nouveau sürücüsü yüklenmiştir:
nouveau 3874816 0
drm_ttm_helper 16384 1 nouveau
ttm 122880 2 drm_ttm_helper,nouveau
video 81920 1 nouveau
gpu_sched 65536 1 nouveau
i2c_algo_bit 20480 1 nouveau
drm_gpuvm 45056 1 nouveau
drm_exec 12288 2 drm_gpuvm,nouveau
mxm_wmi 12288 1 nouveau
wmi 32768 3 video,mxm_wmi,nouveau
drm_display_helper 311296 1 nouveau
Şimdi tescilli NVIDIA sürücülerini yüklemelisiniz.
Öncelikle tescilli rpmfusion reposunu yükleyin.
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-41.noarch.rpm
Ardından aşağıdaki komutu çalıştırarak tescilli NVIDIA sürücüsünü yükleyin:
sudo dnf install akmod-nvidia
İşlem tamamlandıktan sonra top komutu ile processlerimizi izleyin:
top
Komut tamamlansa bile akmod derlemeye devam ediyor:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
35278 akmods 20 0 167292 140140 15692 R 25.8 3.5 0:00.78 cc1
35284 akmods 20 0 84260 55884 14296 R 7.6 1.4 0:00.23 cc1
akmods kullanıcılı processlerin bitmesini bekleyin. Bittikten sonra kaybolacaklardır.
Tekrar restart edelim.
reboot now
Fedora Server 41 tekrar açıldıktan sonra tescilli sürücülerin yüklenmiş olduğunu doğrulamak için aşağıdaki komutu çalıştırın:
lsmod | grep -E 'nvidia|nouveau'
Aşağıdaki gibi çıktı vermelidir:
nvidia_drm 151552 0
nvidia_modeset 1830912 1 nvidia_drm
nvidia_uvm 3997696 0
nvidia 97165312 2 nvidia_uvm,nvidia_modeset
drm_ttm_helper 16384 1 nvidia_drm
video 81920 1 nvidia_modeset
Ardından nvidia-smi aracını kullanabilmek için gerekli paketleri yükleyin:
sudo dnf install xorg-x11-drv-nvidia-cuda
ve çalıştırın:
nvidia-smi
Aşağıdaki gibi çıktı vermelidir:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.144 Driver Version: 570.144 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1050 Ti Off | 00000000:01:00.0 Off | N/A |
| 0% 48C P8 N/A / 72W | 3MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
İşlemimiz tamamlanmıştır.
Sonuç
Rehber boyunca Proxmox üzerinde GPU Passthrough altyapısına uygun hale getirmeyi, sanal makineye fiziksel GPU atamasını gerçekleştirmeyi ve sanal makine içerisinde gerekli sürücü kurulumlarını adım adım ele aldık.
Sanal makine üzerinde GPU ile AI çalıştırılması gibi sonraki yazılarıma ilgi duyuyorsanız takipte kalın.