kiến thức Hướng dẫn passthrough iGPU AMD vào Promox Virtual Machine

  • Người tạo chủ đề Người tạo chủ đề vstevenphan
  • Ngày bắt đầu Ngày bắt đầu

vstevenphan

Senior Member
Chào, mình biết nhiều bạn đang muốn tận dụng passthrough iGPU của AMD vào máy ảo để khai thác hết iGPU. iGPU của AMD càng ngày càng mạnh, thậm chí có thể thay thế luôn card rời để xử lí nhiều tác vụ. Các mẫu minipc mạnh cũng kèm CPU có card tích hợp AMD. Do đó nay mình viết bài chia sẻ cách passthrough iGPU AMD trên Promox cho anh em nào chưa làm được. Nếu làm thành công "buy me a coffee" bên dưới là okila rồi (: Để có động lực viết tiếp nhiều hướng dẫn hay và hấp dẫn nữa. Bài này chỉ hướng dẫn passthrough, các bài như cài đặt Promox và vấn đề khác liên quan mình sẽ đăng sau.
Trong bài dưới lấy ví dụ passthrough iGPU 780m trên 8700G
Nôm na passthrough là cùng 1 con miniPC, bạn có thể tạo Linux server, Android, Windows, chạy tá lả docker, NAS,...bạn muốn "GÁN" iGPU hay GPU của phần cứng cho 1 máy ảo cụ thể. Dưới đây là Windows.

BƯỚC 1: BIOS

Bios mỗi hãng sẽ khác nhau một tí ở câu chữ, nên bạn xem các tính năng dưới đây tương tự mà chỉnh cho đúng.
SVM Mode: Enabled - Bật ảo hóa
Primary Video Adapter: External Graphic - Xuất hình chính chọn card
IOMMU: Enabled (Quan trọng)
iGPU Configuration: UMA_Auto
iGPU cũng phải bật song song với card rời nhé, nếu có option Multiple Display/Monitor thì chọn Enabled, hoặc iGPU chọn Force

BƯỚC 2:
Bạn chỉnh SSH vào PVE Promox, hoặc tại trang chọn PVE (Tên Promox host), và Shell
1744977164006.png

Soạn:​
nano /etc/default/grub​
Tại đây bạn chú ý dòng: GRUB_CMDLINE_LINUX_DEFAULT="quiet"
Chỉnh nó thành GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt". Không thêm gì thêm nữa nhé, nhiều bài hướng dẫn chỉnh tùm lum. Nhưng với Promox mới nhất chỉ vậy là đủ
Bạn Ctrl+O rồi bấm Enter save lại và Ctrl+X thoát file
Soạn​
Để update lại grub mới
Tiện tay thì check luôn xem IOMMU đã bật chưa bằng​
dmesg | grep -e DMAR -e IOMMU​
Hiện như hình dưới là ok
1744977731066.png

Tại Promox, nó sẽ chia PCI theo ID, bạn sẽ xác định ID của iGPU passthrough bằng​
lspci -nn | grep -e 'AMD/ATI'​
Trong trường hợp của mình
1744977850973.png

ID nó sẽ là 1002:15f và 1002:1640, lưu lại cái này nhé
Chỉnh VFIO​
echo "vfio" >> /etc/modules​
echo "vfio_iommu_type1" >> /etc/modules​
echo "vfio_pci" >> /etc/modules​
Kế tiếp, kết nối VFIO với cái ID nãy mình kêu bạn nhớ đó, cách nhau bởi dấu phẩy​
echo "options vfio-pci ids=1002:15f,1002:1640," >> /etc/modprobe.d/vfio.conf​
Thêm cái này để chắc là VFIO bắt được cái PCI​
echo "softdep amdgpu pre: vfio-pci" >> /etc/modprobe.d/vfio.conf​
echo "softdep radeon pre: vfio-pci" >> /etc/modprobe.d/vfio.conf​
echo "softdep snd_hda_intel pre: vfio-pci" >> /etc/modprobe.d/vfio.conf​

Thiệt ra là như vậy cũng được rồi, hoặc có cách là blacklist iGPU, này bạn muốn passthrough GPU Nvidia, Intel gì đó thì thêm vào blacklist cũng được. Mấy lệnh phía dưới là optional nhé​
echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia*" >> /etc/modprobe.d/blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf​
Update lại hết​
update-initramfs -u -k all​
Rồi reboot​

BƯỚC 3:
Tách BIOS
Bạn tải file BIOS của mainboard bạn về, main đang chạy bios nào thì tải về phiên bản đó. Giải nén nó nếu file BIOS ở dạng ZIP, nó sẽ có 1 file BIOS như này (cái file nặng nhất)
1744986982396.png

Sau đó tải cái phần mềm này về
Tải file ZIP
Giải nén nó ra bằng 7zip, giải nén mặc định Win bị lỗi
Bạn copy cái file BIOS ở trên quăng vào thư mục phần mềm đã giải nén, bạn chạy Run as Administrator cái file UBU
1744987115367.png

Đợi 1 chút để nó detect file BIOS
1744987204756.png

Sau khi detect được xong thì nó sẽ list ra nhiều cái như hình bên dưới
1744987263747.png

Chọn số 2 cho mình rồi bấm Enter
Tại mục kế tiếp chọn X, bấm Enter để Extract
1744987375534.png

Đọc tới đây ngại gì mà không "buy a coffee for me" ủng hộ tinh thần nào bạn (:
1744987730808.png

Xem tiếp hướng dẫn bên dưới nha!​
 

Tệp đính kèm

  • 1744987056955.png
    1744987056955.png
    21,5 KB · Lượt xem: 44
Sửa lần cuối:
Bấm nút bất kì, hay thoát ra cũng được. Vậy là xong rồi đó, lúc này thư mục sẽ xuất hiện thêm 1 folder Extracted nữa
1744987686641.png

Trong folder Extracted\GOP\3.8.8_NoSign sẽ có file AMDGopDriver.efi. Nhớ file này
Và trong folder VBIOS còn lại sẽ có file .dat hoặc .bin cái iGPU của bạn, của mình là
1744987797632.png

Nhớ file này luôn
File AMDGopDriver.efi chúng ra cần phải đổi 1 chút
Bạn tải phần mềm này về
Link tải ở đây, bấm góc chọn download
Sau khi tải về bạn sẽ có file EfiRom.exe, bỏ nó vô 1 thư mục bạn tạo, copy cái file AMDGopDriver.efi vào chung thư mục này
1744988291303.png

Bạn bật CMD lên (kiếm trong nút start windows). Chọn Run As Adminstrator, cd tới thư mục chứa 2 file như hình
1744988449195.png

Sau đó nhập chạy lệnh
EfiRom.exe -f VendorId -i DeviceId -e AMDGopDriver.efi -o AMDGopDriver.rom
Cái VendorID và DeviceID bạn lấy tại lspci -nn | grep -e 'AMD/ATI' trong Promox lúc nãy, nhớ cái ID thứ 2 của Audio Controller không?
Của mình là 1002:1640
Nên nguyên lệnh hoàn chỉnh của mình sẽ là
EfiRom.exe -f 1002 -i 1640 -e AMDGopDriver.efi -o AMDGopDriver.rom

1744989905040.png

Lúc này folder sẽ có file AMDGopDriver.rom
1744989938784.png

BƯỚC 4: Cài Windows
Bạn tải file ISO Windows 11 hoặc ISO Windows nào bạn muốn cài
Mình dùng bản Windows Server tại đây
Bạn tải Virtio Win bản mới nhất tại đây (chọn cái ISO nhé)
1745036364318.png

Xong xuôi bạn Upload hết 2 files ISO vào Promox nhé
1745036462907.png

Đọc tới đây ngại gì mua cho mình 1 ly cà phê nào (:
1745036497569.png
 

Tệp đính kèm

  • 1744988524874.png
    1744988524874.png
    2,3 KB · Lượt xem: 45
Sửa lần cuối:
Chuẩn bị 2 file ISO xong xuôi, giờ mình tiến hành tạo máy ảo Windows, bạn chọn Create VM góc trên cùng bên phải, hoặc chuột phải vào PVE-tên host Promox của bạn chọn Create VM
1745037178907.png

Mục đầu tiên không có gì quan trọng, chọn tên và ID cho VM thôi
1745037264832.png

Tại mục OS, bạn chọn ISO đầu tiên dẫn đến ISO của Windows
Tick vào add additional drive....chọn virtio-win như hình
1745037313503.png

Mục system thì chọn như hình
1745037594006.png

Phần Disks thì như này, bạn tùy chỉnh dung lượng VM (máy ảo) cho phù hợp với nhu cầu
1745040863195.png

Tab kế tiếp CPU thì chọn lượng CPU cho máy ảo, này mạnh yếu tùy bạn chỉnh, CPU càng mạnh thì chỉnh được càng cao, phần kế bên chọn host
1745040931421.png

Phần memory RAM cũng vậy, tùy cấu hình phần cứng của bạn mà đặt sao cho phù hợp, lưu ý là nên dành tầm 2-4GB Ram cho riêng Promox, đừng set 100%, và nếu còn chạy VM khác nữa thì nhớ chừa RAM cho bọn nó. RAM trong Promox không bao giờ là dư cả, nên sẵn mấy bạn đang định build Promox Server, ít nhất nên nhét cho nó 64GB RAM nhé! Thà dư đừng thiếu. CPU có thể share được, chứ RAM mà share thì tụi VM nó cạnh tranh giành RAM nhau mệt lắm. Dẫn đến tắt VM hoặc lag cũng không xài được. Do đó, mình cũng tắt balloning luôn để cho nó hoạt động ổn định nhất. 1GB RAM = 1024MB, cứ như vậy mà nhân lên nhé!
1745041172521.png

Phần Network cứ để mặc định hen, cấu hình nâng cao chỗ Network này mình sẽ nói chi tiết ở các phần hướng dẫn sau. Mà dĩ nhiên nhiên là phải có động lực ủng hộ mới viết tiếp được. Hehe
1745041295145.png

Mục cuối mình chỉ check lại các thông số đã ok chưa thôi, ổn rồi thì bấm Finish là xong hén!
1745041391701.png

Cơ bản vậy là xong phần tạo VM, again, đọc tới đây mà chưa mua cà phê cho tớ thì...
1745041479232.png

Kéo xuống dưới để đọc thêm hướng dẫn​
 
Sửa lần cuối:
bên Promo có sp nào tương đương vmware workstation không bạn
 
bác làm cái passthought IGPU này vào Xpenlogy đi, của intel càng tốt ạ
 
bên Promo có sp nào tương đương vmware workstation không bạn
proxmox thực ra là cái shell + kernel chạy trên debian, cái vm ở dưới là sử dụng qemu để chạy

nếu bạn cần chạy trên desktop linux thì có nhiều lựa chọn
chăm gõ thì dùng thẳng qemu trên linux luôn
lười gõ thì có thể dùng virt-manager thì sẽ có cái front-end cho qemu xài cũng tiện (Virtual Machine Manager (https://virt-manager.org/))
ngoài ra thì bạn có thể tham khảo thêm danh sách các client cho libvirt ở trên arch wiki: libvirt - ArchWiki (https://wiki.archlinux.org/title/Libvirt#Client)
còn nếu bạn chạy windows thì xài oracle virtualbox ấy.
 
Cho chạy VM, vào vào console để xem xuất hình. Chọn Console ở đây hoặc đây đều được
1745041788250.png

Tiến hành cài win như bình thường nhé
1745052609309.png

Tới đây bạn chọn load driver
1745052784365.png

Và trong mục AMD64 chọn driver phù hợp với phiên bản Win
1745052824456.png

Bấm Install, sau đó bạn load tiếp Driver network cho mình ở mục NetKVM, chọn đúng thư mục phù hợp với phiên bản win
1745053120531.png

Load hết Driver xong thì bấm Next để cài Win
1745053184101.png

Install

1745053207999.png

Trong lúc chờ cài Win, bạn dùng WinSCP hoặc phần mềm tương tự truy cập vào Promox host SCP
1745054666095.png

Bạn vào thư mục usr/share/kvm quăng 2 cái file bios nãy mình kêu bạn extract, cái .rom này và file .dat hoặc .bin của iGPU
1745054754361.png

Cà phê cà phê
1745054813725.png
 
Sửa lần cuối:
File này đây
1745054872633.png

Khi cài Win thành công thì bạn vào Start để bật Remote Connection lên nhé
1745054971193.png

Sau đó thử vào Remote Desktop Connection trên máy gõ Remote Desktop Connection điền User và Password của bạn vô và connect thử xem vào thành công không
1745055092053.png

Nếu thành công thì bạn sẽ shutdown cái VM đi, shutdown xong chúng ta sẽ chỉnh 1 số cái tại VM Win, chọn Add, chọn Raw Device và chọn iGPU bạn muốn passthrough, chú ý mấy cái tích mình đánh dấu, bỏ tích allfunctions đi
1745056609719.png

Làm tương tự với cái Audio Controller nhé, nhưng bỏ cái primary GPU, all functions đi
1745056755479.png

Sau đó vào Shell gõ​
nano /etc/pve/qemu-server/<VM_ID>.conf​
Với VM_ID là ID của VM Win
Của mình sẽ là​
nano /etc/pve/qemu-server/101.conf​
Chú ý dòng này
1745056846773.png

Mình sẽ edit thành
hostpci0: 0000:0f:00.0,pcie=1,romfile=vbios_15BF.dat,x-vga=1
hostpci1: 0000:0f:00.1,pcie=1,romfile=AMDGopDriver.rom
Chỗ Display chọn None
1745057580598.png

Mình tiến hành reboot lại PVE
Vào VM Win, để Win tự động update driver iGPU cho AMD là xong nhé
Thành quả:
1745072031330.png

Tới đây cơ bản là xong rồi đó, bạn nào vào Win không thấy iGPU có thể thử vào Device Manager để kiểm tra xem driver AMD ngay phần display có bật lên không, nếu không bật thì enable nó lên. Còn nếu có hình dấu chấm than thì thử reset lại promox host PVE.
CHÚ Ý: Passthrough iGPU hay card rời AMD nó có 1 cái reset bug khá là khó chịu. Cụ thể khi bạn reboot VM Win, Win cập nhật,...thì mặc định iGPU nó sẽ mất, không dính tới VM nữa. Mình phải reboot lại nguyên cái PVE Promox HOST thì khởi động lại Windows nó mới ăn iGPU. Bug này khá là phiền nhưng mình có 2 cách khắc phục VĨNH VIỄN. Không còn reset bug nữa. Mình sẽ viết ở bài tới.
Dĩ nhiên là xem có ai mua cà phê cho mình không mới có động lực viết bài tiếp chứ, hehe. Chứ viết bài cũng tốn thời gian, rồi demo hình ảnh quá chi tiết cho mí fen mà
Bạn có thể cà phê mình tại đây, của ít lòng nhiều là được
1745072371891.png
 
Sửa lần cuối:
thớt bổ ích
EB2RUU6.gif

Mình cũng debug với chatGPT để passthrough được iGPU cho con i9-13900H.
đang mò vụ split GPU
 
các bác cho e hỏi là ở ngoài proxmox e đã tăng size cái ổ lên rồi. vào xpen cũng nhận rồi thì làm sao để resize nó luôn nhỉ
này là nhận đủ 70gb.
1745422345387.png

mà chỗ này vẫn 49gb( đúng là khoảng 60gb)
1745422388092.png
 
bác có passthought đc vào xpen k ? em làm mãi k đc, đc vụ vào LXC rồi mà vào VM khoai vãi IGPU
bạn dùng chat GPT nó làm cho.
mình nhờ nó mới passthrough được con iGPU cho VM Ubuntu để transcode Plex Media Server.

Còn Xpen thì cũng chỉ là 1 VM, gán PCI vào bước cuối cùng thôi. VM nào cũng giống nhau. Bạn phải config xong xuôi đã.

Có quá nhiều rules hơn các document trên mạng nên phải debug rất mệt mỏi. May là ChatGPT nó điêu luyện debug giúp mình.
 
split cho LXC, chớ split cho VMs thấy hướng dẫn chua lòm.
hướng dẫn thì có chatGPT hỗ trợ rồi, chỉ kẹt cái main và chip không phải con nào cũng hỗ trợ split thôi.
Thật ra split cũng chính đáng.

Ví dụ mình có VM Ubuntu chạy Plex Media Server dùng iGPU transcode nhưng cũng ít khi dùng đến nhưng uptime always thì mình muốn khi cần có thể cho VM chạy Win11 hoặc NVR sử dụng. Chứ mỗi lần cần lại shutdown VM, gỡ pcie rồi qua VM khác gán lại. Shutdown rồi Start VM qua lại phiền quá.
 
Làm gì phải gỡ gắn. Dùng hook (1) Khi start cái VM nào thì nó gắn Device vào VM đó, (2) khi shutdown thì VM thì nó tự gỡ Device trả lại Host.
 

Thống kê chủ đề

Ngày tạo
vstevenphan,
Người trả lời cuối
ninhpham.au,
Trả lời
28
Lượt xem
8.733
Quay lại
Lên đầu trang