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

May 6, 2025 - 21:09
 0
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 ü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:

Proxmox PCI-E

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.