Wednesday, January 8, 2025

NVIDIA vGPU trong Proxmox

-

Tài liệu này cung cấp hướng dẫn cài đặt và cấu hình trình điều khiển vGPU NVIDIA trên Proxmox VE, phiên bản mới nhất là pve 7.4. Tuy nhiên, hướng dẫn này chỉ áp dụng cho các card hỗ trợ vGPU từ danh sách được liệt kê, cũng như các card GeForce hoặc một số card Quadro không được hỗ trợ vGPU.

Nếu bạn có một card hỗ trợ vGPU từ danh sách, bạn có thể tuân theo hướng dẫn cụ thể cho card đó. Tuy nhiên, nếu bạn đang sử dụng một card từ dòng GeForce hoặc một card Quadro không được chứng nhận cho vGPU, bạn sẽ cần tuân theo các hướng dẫn khác.

Quan trọng nhất là đọc kỹ tài liệu và tuân thủ các hướng dẫn cụ thể cho card GPU mà bạn đang sử dụng. Điều này đảm bảo rằng bạn cài đặt và cấu hình trình điều khiển vGPU NVIDIA đúng cách trên Proxmox VE của mình.

Dưới đây là một danh sách các card NVIDIA không được hỗ trợ vGPU, nhưng có thể được sử dụng với vGPU.

  • Hầu hết các card từ thế hệ Maxwell 2.0 (GTX 9xx, Quadro Mxxxx, Tesla Mxx) TRỪ GTX 970.
  • Tất cả các card từ thế hệ Pascal (GTX 10xx, Quadro Pxxxx, Tesla Pxx).
  • Tất cả các card từ thế hệ Turing (GTX 16xx, RTX 20xx, Txxxx).

Như vậy nếu bạn sử dụng card đồ họa từ thế hệ Ampere và Ada Lovelace của NVIDIA, bạn sẽ không thể sử dụng chúng với tính năng vGPU. Thông thường, tính năng vGPU chỉ được hỗ trợ trên một số card đồ họa cụ thể, được gọi là “vGPU qualified cards”. Những card này thường thuộc dòng Quadro hoặc Tesla và được NVIDIA chứng nhận cho việc sử dụng vGPU.

Tuy nhiên, trên các card không được chứng nhận vGPU như các card GeForce hoặc một số card Quadro không hỗ trợ vGPU, bạn có thể sử dụng vgpu_unlock_rs để vượt qua các hạn chế này và sử dụng tính năng vGPU trên những card này. Nhưng với các card từ thế hệ Ampere và Ada Lovelace, vgpu_unlock_rs không hoạt động, và vì vậy bạn sẽ không thể sử dụng tính năng vGPU trên những card này.

Lưu ý quan trọng trước khi bắt đầu.

  • Hướng dẫn này yêu cầu bạn đang có một cài đặt sạch của Proxmox VE 7.4.
  • Đừng sử dụng kernel linux opt-in 6.x, hãy sử dụng kernel chuẩn 5.15 mà Proxmox có sẵn theo mặc định.
  • Nếu bạn đã thử sử dụng GPU-passthrough trước đó, bạn phải hoàn nguyên tất cả các bước bạn đã thực hiện để cài đặt.
  • Khi bạn chỉ có một card GPU trong hệ thống của mình và không có iGPU (Integrated Graphics Processing Unit – Đơn vị xử lý đồ họa tích hợp). Khi hệ thống khởi động, màn hình console (hiển thị giao diện người dùng) sẽ không hiển thị bất kỳ đầu ra nào.
    • Điều này xảy ra vì màn hình console thông thường được kết nối trực tiếp với card GPU chính của hệ thống. Khi bạn sử dụng GPU đó để cung cấp vGPU cho các máy ảo, không còn sẵn sàng để gửi đầu ra tới màn hình console.
    • Trong trường hợp này, nếu bạn cần truy cập vào máy ảo của mình, bạn có thể sử dụng các phần mềm như Parsec hoặc Remote Desktop để truy cập từ xa và điều khiển máy ảo thông qua mạng.
    • Điều quan trọng là khi bạn đã cấu hình và kết nối thành công vGPU cho máy ảo, việc mất đầu ra trên màn hình console không ảnh hưởng đến khả năng hoạt động của máy ảo và khả năng sử dụng GPU ảo.
  • Hầu hết các bước có thể áp dụng cho các bản phân phối Linux khác, tuy nhiên tôi chỉ tập trung vào Proxmox VE trong hướng dẫn này.
  • Bạn chắc chắn phải sử dụng một phiên bản kernel Linux được hỗ trợ. Một phiên bản kernel trong khoảng từ 5.14 đến 6.0 sẽ hoạt động. Kernel mới hơn như 6.1 hoặc 6.2 không hoạt động vào thời điểm này.

Nếu bạn muốn biết thêm chi tiết về từng bước cài đặt và cấu hình trình điều khiển vGPU trên Proxmox VE, tôi khuyên bạn nên đọc kỹ tài liệu được cung cấp và tuân thủ các hướng dẫn phù hợp với hệ thống và card GPU của bạn.

Chú ý:
- Nếu bạn đang nâng cấp từ phiên bản trước của hướng dẫn này, bạn nên gỡ bỏ trình điều khiển cũ bằng cách chạy lệnh nvidia-uninstall trước tiên. Sau đó, bạn cũng phải đảm bảo rằng bạn đang sử dụng phiên bản mới nhất của vgpu_unlock-rs, nếu không, nó sẽ không hoạt động với trình điều khiển mới nhất.

- Để làm điều này, bạn có thể xóa thư mục /opt/vgpu_unlock-rs bằng cách chạy lệnh rm -rf /opt/vgpu_unlock-rs hoặc đi vào thư mục đó và chạy lệnh git pull để cập nhật mã nguồn từ repository. Sau đó, bạn cần biên dịch lại thư viện bằng lệnh cargo build --release.

- Việc thực hiện các bước trên đảm bảo rằng bạn gỡ bỏ trình điều khiển cũ và cập nhật vgpu_unlock-rs để tương thích với phiên bản mới nhất của trình điều khiển. Điều này quan trọng để đảm bảo sự tương thích và hoạt động ổn định của hệ thống khi bạn nâng cấp từ phiên bản trước của hướng dẫn.

Cài đặt các gói git, trình biên dịch và một số công cụ khác.

Trước tiên, bạn cần thêm kho dữ liệu community pve và loại bỏ kho dữ liệu enterprise (bạn có thể bỏ qua bước này nếu bạn có một đăng ký enterprise hợp lệ).

Để thực hiện điều này, hãy chạy các lệnh sau:

echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" >> /etc/apt/sources.list
rm /etc/apt/sources.list.d/pve-enterprise.list

Sau đó, bạn cần cập nhật và nâng cấp hệ thống:

apt update
apt dist-upgrade

Tiếp theo, chúng ta cần cài đặt một số gói khác như git, trình biên dịch và một số công cụ khác. Bạn có thể sử dụng lệnh sau để cài đặt các gói này:

apt install -y git build-essential dkms pve-headers mdevctl

Việc cài đặt các gói này là cần thiết để tiếp tục quá trình cài đặt và cấu hình vGPU trên Proxmox VE.

Biên dịch và tạo ra thư viện vgpu_unlock-rs.

Trước tiên, hãy sao chép kho lưu trữ này vào thư mục home của bạn (trong trường hợp này là /root/):

git clone https://gitlab.com/polloloco/vgpu-proxmox.git

Bạn cũng cần kho lưu trữ vgpu_unlock-rs:

cd /opt
git clone https://github.com/mbilker/vgpu_unlock-rs.git

Sau đó, cài đặt trình biên dịch Rust:

curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal

Bây giờ hãy làm cho Rust sẵn sàng trong biến môi trường $PATH của bạn (bạn chỉ cần làm điều này một lần đầu tiên sau khi cài đặt Rust):

source $HOME/.cargo/env

Tiếp theo, đi vào thư mục vgpu_unlock-rs và biên dịch thư viện. Tùy thuộc vào phần cứng và kết nối internet của bạn, việc này có thể mất một thời gian:

cd vgpu_unlock-rs/
cargo build --release

Việc này sẽ biên dịch và tạo ra thư viện vgpu_unlock-rs. Lưu ý rằng việc biên dịch có thể mất một thời gian tương đối dài, tùy thuộc vào tốc độ kết nối internet và hiệu suất phần cứng của bạn.

Cấu hình cho thư viện vgpu_unlock-rs.

Trước tiên, hãy tạo thư mục và tập tin cấu hình cho thư viện vgpu_unlock-rs:

mkdir /etc/vgpu_unlock
touch /etc/vgpu_unlock/profile_override.toml

Sau đó, tạo các thư mục và tệp cho systemd để tải thư viện vgpu_unlock-rs khi khởi động dịch vụ nvidia vgpu:

mkdir /etc/systemd/system/{nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d}
echo -e "[Service]\nEnvironment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpud.service.d/vgpu_unlock.conf
echo -e "[Service]\nEnvironment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpu-mgr.service.d/vgpu_unlock.conf

Các lệnh trên tạo ra các thư mục và tập tin cần thiết cho việc cấu hình và sử dụng thư viện vgpu_unlock-rs cùng với dịch vụ Nvidia vGPU.

Chú ý: Nếu bạn có một card hỗ trợ vGPU, bạn không cần kích hoạt phần mở khóa (unlock) vì nó có thể gây ra sự phức tạp không cần thiết và tăng khả năng gặp lỗi.

Để vô hiệu hóa phần mở khóa này trên card GPU đã hỗ trợ vgpu, hãy chạy lệnh sau:

echo "unlock = false" > /etc/vgpu_unlock/config.toml

Lệnh trên sẽ tạo ra tệp config.toml trong thư mục /etc/vgpu_unlock và đặt giá trị "unlock" thành false, từ đó vô hiệu hóa phần mở khóa.

Lưu ý rằng việc vô hiệu hóa phần mở khóa chỉ nên được thực hiện trên card GPU đã hỗ trợ vgpu. Nếu bạn không chắc chắn về tính tương thích của card GPU của mình, hãy tham khảo tài liệu hoặc trang web của nhà sản xuất card GPU để biết thông tin chi tiết về khả năng hỗ trợ vgpu.

Enabling IOMMU.

Kích hoạt IOMMU là tùy chọn không bắt buộc để vGPU hoạt động, nhưng nó không gây hại nếu bạn bật nó. Bạn có thể bỏ qua phần này, nhưng nếu bạn gặp sự cố sau này, hãy đảm bảo đã kích hoạt IOMMU.

Để kích hoạt IOMMU, bạn phải bật nó trong BIOS/UEFI của bạn. Do đó, vì nó phụ thuộc vào nhà sản xuất máy tính của bạn, tôi không thể cung cấp hướng dẫn cụ thể. Tuy nhiên, thông thường trên các hệ thống Intel, tùy chọn bạn đang tìm kiếm có thể có tên gọi như "Vt-d", còn trên các hệ thống AMD thì thường được gọi là "IOMMU".

Sau khi bật IOMMU trong BIOS/UEFI, bạn cũng phải bật nó trong kernel của bạn. Tùy thuộc vào cách hệ thống của bạn khởi động, có hai cách để làm điều đó.

Nếu bạn đã cài đặt hệ thống của bạn với ZFS-on-root và ở chế độ UEFI, thì bạn đang sử dụng systemd-boot. Trong trường hợp khác, bạn sẽ sử dụng GRUB, đây là cách phổ biến hơn nhiều, vì vậy nếu bạn không chắc chắn, bạn có thể đang sử dụng GRUB.

Tùy thuộc vào hệ thống khởi động của bạn, bạn cần chọn một trong hai tùy chọn sau đây:

GRUB:

Để thực hiện việc chỉnh sửa file /etc/default/grub theo hướng dẫn, làm theo các bước sau:

Mở file /etc/default/grub bằng trình chỉnh sửa văn bản (ví dụ: vi) bằng lệnh sau:

vi /etc/default/grub
  • Tìm dòng GRUB_CMDLINE_LINUX_DEFAULT="quiet" trong file và thêm tham số kernel vào sau “quiet” tùy theo hệ thống của bạn:
    • Đối với hệ thống Intel, thêm intel_iommu=on iommu=pt sau “quiet”.
    • Đối với hệ thống AMD, thêm amd_iommu=on iommu=pt sau “quiet”.

Ví dụ (cho hệ thống Intel):

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

Áp dụng các thay đổi bằng lệnh sau:

update-grub

Lệnh trên sẽ cập nhật cấu hình GRUB với các thay đổi mới. Sau khi hoàn thành, khởi động lại hệ thống để các thay đổi có hiệu lực.

Systemd-boot (UEFI + ZFS-on-root):

Để thực hiện việc chỉnh sửa file /etc/kernel/cmdline theo hướng dẫn, làm theo các bước sau:

Mở file /etc/kernel/cmdline bằng trình chỉnh sửa văn bản (ví dụ: vi) bằng lệnh sau:

vi /etc/kernel/cmdline

Tìm dòng chứa các tham số hiện tại của kernel. Đối với một cài đặt sạch, dòng này có thể giống như:

  • Thêm tham số kernel tương ứng cho hệ thống của bạn vào cuối dòng đó:
    • Đối với hệ thống Intel, thêm intel_iommu=on iommu=pt vào cuối dòng.
    • Đối với hệ thống AMD, thêm amd_iommu=on iommu=pt vào cuối dòng.

Ví dụ (cho hệ thống Intel):

root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on iommu=pt

Áp dụng các thay đổi bằng lệnh sau:

proxmox-boot-tool refresh

Lệnh trên sẽ cập nhật cấu hình khởi động cho kernel với các thay đổi mới. Sau khi hoàn thành, khởi động lại hệ thống để các thay đổi có hiệu lực.

Tải các module kernel cần thiết và chặn driver nouveau.

Để thực hiện các bước tải các module kernel cần thiết và chặn driver nouveau, làm theo các hướng dẫn sau:

Tải các module kernel bằng cách thêm các dòng sau vào tệp /etc/modules:

echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules

Dòng trên sẽ thêm các module vfio, vfio_iommu_type1, vfio_pcivfio_virqfd vào danh sách các module được tải tự động khi hệ thống khởi động.

Các module “vfio”, “vfio_iommu_type1”, “vfio_pci” và “vfio_virqfd” là các module kernel cung cấp bởi trình điều khiển VFIO (Virtual Function I/O) trong Linux. Chúng có các tác dụng sau:

  • vfio: Đây là module chính của trình điều khiển VFIO. Nó cung cấp giao diện để quản lý các thiết bị ảo (virtual devices) và cung cấp khả năng chia sẻ thiết bị phần cứng với các máy ảo trong môi trường ảo hóa.
  • vfio_iommu_type1: Đây là module dùng để hỗ trợ IOMMU (Input-Output Memory Management Unit) cho trình điều khiển VFIO. IOMMU là một tính năng trong các hệ thống máy tính modern, giúp xác định và quản lý việc truy cập dữ liệu của các thiết bị I/O. Module này cho phép VFIO sử dụng IOMMU để cung cấp bảo mật và cô lập tốt hơn cho các thiết bị ảo.
  • vfio_pci: Module này cung cấp hỗ trợ cho việc gắn kết (attach) và tách (detach) các thiết bị PCI với trình điều khiển VFIO. Nó cho phép VFIO quản lý việc truy cập và ảo hóa các thiết bị PCI, bao gồm cả card đồ họa NVIDIA để sử dụng với vGPU trên Proxmox VE.
  • vfio_virqfd: Module này cung cấp hỗ trợ cho việc quản lý các ngắt ảo (virtual interrupts) trong trình điều khiển VFIO. Nó cho phép VFIO gửi và nhận các tín hiệu ngắt ảo giữa các thiết bị ảo và các máy ảo.

Bằng cách thêm các module này vào tệp /etc/modules, bạn đảm bảo rằng chúng sẽ được tải và sử dụng trong quá trình khởi động hệ thống. Điều này là cần thiết để hỗ trợ vGPU trên Proxmox VE và đảm bảo tính ổn định và hiệu suất của hệ thống vGPU.

Chặn driver nouveau bằng cách thêm dòng sau vào tệp /etc/modprobe.d/blacklist.conf:

echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf

Dòng trên sẽ ngăn driver nouveau khởi động khi hệ thống khởi động.

Áp dụng cấu hình kernel bằng lệnh:

update-initramfs -u -k all

Lệnh trên sẽ cập nhật cấu hình kernel và initramfs với các thay đổi mới.

Khởi động lại hệ thống bằng lệnh:

reboot

Hệ thống sẽ khởi động lại để áp dụng các thay đổi và bắt đầu sử dụng cấu hình kernel mới.

Kiểm tra xem IOMMU đã được kích hoạt hay chưa?

Để kiểm tra xem IOMMU đã được kích hoạt hay chưa, làm theo các bước sau:

  • Chờ đợi cho máy chủ của bạn khởi động lại sau khi đã thực hiện các bước trước đó.
  • Mở một cửa sổ terminal với quyền root.
  • Gõ lệnh sau để kiểm tra kết quả:
dmesg | grep -e DMAR -e IOMMU

Dưới đây là ví dụ cho output lệnh trên.

[    0.009881] ACPI: DMAR 0x000000007BAFD000 0000A8 (v01 DELL   PE_SC3   00000001 DELL 00000001)
[    0.009915] ACPI: Reserving DMAR table memory at [mem 0x7bafd000-0x7bafd0a7]
[    0.127971] DMAR: IOMMU enabled
[    0.343405] DMAR: Host address width 46
[    0.343406] DMAR: DRHD base: 0x000000fbffc000 flags: 0x1
[    0.343411] DMAR: dmar0: reg_base_addr fbffc000 ver 1:0 cap d2078c106f0466 ecap f020df
[    0.343413] DMAR: RMRR base: 0x000000682bd000 end: 0x000000702c4fff
[    0.343415] DMAR: ATSR flags: 0x0
[    0.343417] DMAR-IR: IOAPIC id 8 under DRHD base  0xfbffc000 IOMMU 0
[    0.343418] DMAR-IR: IOAPIC id 9 under DRHD base  0xfbffc000 IOMMU 0
[    0.343419] DMAR-IR: HPET id 0 under DRHD base 0xfbffc000
[    0.343420] DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit.
[    0.343421] DMAR-IR: Use 'intremap=no_x2apic_optout' to override the BIOS setting.
[    0.343768] DMAR-IR: Enabled IRQ remapping in xapic mode
[    0.810460] DMAR: [Firmware Bug]: RMRR entry for device 03:00.0 is broken - applying workaround
[    0.810476] DMAR: No SATC found
[    0.810477] DMAR: dmar0: Using Queued invalidation
[    0.814173] DMAR: Intel(R) Virtualization Technology for Directed I/O

Kết quả sẽ hiển thị các dòng liên quan đến DMAR và IOMMU. Dòng quan trọng để xác định IOMMU đã được kích hoạt là dòng chứa thông tin "DMAR: IOMMU enabled". Nếu bạn thấy dòng như vậy, tức là IOMMU đã được kích hoạt trên hệ thống của bạn.

Tùy thuộc vào mainboard và CPU của bạn, kết quả có thể khác nhau, nhưng quan trọng là bạn cần tìm dòng có chứa thông tin "DMAR: IOMMU enabled".

Trình điều khiển NVIDIA.

Trong repo này, có các bản patches cho phép bạn sử dụng vGPU trên các card không hỗ trợ vGPU (consumer GPUs). Các bản patches này là các bản patches nhị phân, có nghĩa là mỗi bản vá chỉ hoạt động cho một phiên bản driver cụ thể. Tôi đã tạo các bản vá cho các phiên bản driver sau:

Bạn có thể chọn phiên bản nào để sử dụng, nhưng thông thường, nên sử dụng phiên bản mới nhất, được cập nhật nhất (trong trường hợp này là phiên bản 15.1). Tuy nhiên, với phiên bản 15.0, một số người dùng Proxmox đã gặp sự cố sau khi khởi động lại máy ảo nhiều lần, và duy nhất cách để giải quyết là khởi động lại toàn bộ máy chủ. Nếu bạn gặp vấn đề này, tôi khuyến nghị bạn hạ cấp xuống phiên bản 14.4. Nếu bạn có một card GPU được chứng nhận với vGPU, bạn cũng có thể sử dụng các phiên bản khác, vì bạn không cần phải patches driver. Tuy nhiên, bạn vẫn phải đảm bảo rằng chúng tương thích với phiên bản Proxmox và kernel của bạn. Tôi cũng không khuyến nghị sử dụng các phiên bản cũ hơn trừ khi bạn có yêu cầu cụ thể rất riêng.

Để tải driver vGPU, bạn cần truy cập vào NVIDIA Licensing Portal. Dưới đây là các bước thực hiện:

  • Truy cập trang web NVIDIA Licensing Portal tại địa chỉ: https://www.nvidia.com/en-us/drivers/vgpu-software-driver/.
  • Đăng ký để nhận đánh giá miễn phí và truy cập vào trang tải về. Lưu ý không sử dụng email cá nhân hoặc email từ nhà cung cấp dịch vụ miễn phí như gmail.com. Nếu bạn sử dụng các email như vậy, có thể bạn sẽ phải trải qua quá trình xem xét thủ công. Để đảm bảo thành công, tôi khuyến nghị sử dụng một tên miền tùy chỉnh cho địa chỉ email của bạn.
  • Sau khi đăng ký, bạn sẽ có quyền truy cập vào trang tải về. Tìm và tải về phiên bản driver vGPU mong muốn. Trong video hướng dẫn mẫu của tôi, tôi tải về phiên bản 15.1. Bạn có thể thay thế số phiên bản 15.1 bằng phiên bản mà bạn muốn.
  • Giải nén file zip sau khi tải về. Sao chép tệp tin có tên NVIDIA-Linux-x86_64-DRIVERVERSION-vgpu-kvm.run (phiên bản của driver là một chuỗi số ví dụ như 525.85.07) từ thư mục Host_Drivers vào thư mục /root/ trên máy chủ Proxmox của bạn bằng cách sử dụng các công cụ như FileZilla, WinSCP, scp hoặc rsync.

Từ đây trở đi, tôi sẽ sử dụng phiên bản driver 15.1, nhưng các bước thực hiện tương tự cho các phiên bản driver khác.

Ví dụ, khi chạy một lệnh như chmod +x NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm.run, bạn nên thay thế 525.85.07 bằng phiên bản driver mà bạn đang sử dụng (nếu bạn đang sử dụng phiên bản khác).

Tiếp theo bạn sẽ có 2 lựa chọn để cài đặt.

Lựa chọn 1: Trường hợp bạn có Vga có hỗ trợ vGPU.

Nếu bạn sử dụng một card được hỗ trợ vGPU, việc patches driver không cần thiết, vì vậy bạn không cần phải patching driver cho vga.

Bạn chỉ cần cài đặt gói driver như sau:

chmod +x NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm.run
./NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm.run --dkms

Để hoàn thành quá trình cài đặt, khởi động lại hệ thống:

reboot

Bây giờ sau khi cài đặt xong driver bạn hãy tiếp tới phần Xác nhận hoàn thành cài đặt Driver ở phía dưới.

Lựa chọn 2: Trường hợp bạn không có vga hỗ trợ vGPU.

Nếu bạn không sở hữu một card như Tesla P4 hoặc bất kỳ card khác từ danh sách này thì bạn phải Patching driver, các bước làm như sau:

Trên máy chủ Proxmox, hãy phân quyền để file có thể thực thi bằng lệnh dưới:

chmod +x NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm.run

Sau đó, tiến hành patch driver bằng lệnh sau:

./NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm.run --apply-patch ~/vgpu-proxmox/525.85.07.patch

Các file patch lấy ở đây, nhớ lựa chọn phiên bản driver phù hợp:

Điều này sẽ tạo ra nhiều dòng kết thúc bằng:

Self-extractible archive "NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm-custom.run" successfully created.

Bây giờ, bạn sẽ có một tệp có tên NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm-custom.run, đó là driver đã được patch.

Sau khi patch được áp dụng, bạn có thể cài đặt driver bằng lệnh:

./NVIDIA-Linux-x86_64-525.85.07-vgpu-kvm-custom.run --dkms

Trình cài đặt sẽ hỏi bạn: "Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later." Trả lời là Yes. Tùy thuộc vào phần cứng của bạn, quá trình cài đặt có thể mất một hoặc hai phút. Nếu mọi thứ diễn ra đúng, bạn sẽ nhìn thấy thông báo sau:

Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version: 525.85.07) is now complete.

Nhấp vào Ok để thoát khỏi trình cài đặt. Để hoàn tất quá trình cài đặt, khởi động lại máy:

reboot

Xác nhận hoàn thành cài đặt Driver.

Sau khi máy chủ đã khởi động lại, nhập lệnh sau vào shell để kiểm tra xem cài đặt driver đã thành công hay chưa:

nvidia-smi

Bạn sẽ nhận được kết quả tương tự như sau:

$ nvidia-smi
Wed Jul  5 13:52:20 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.14   Driver Version: 525.105.14   CUDA Version: N/A      |
|-------------------------------+----------------------+----------------------+
| 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  Tesla T4            On   | 00000000:04:00.0 Off |                    0 |
| N/A   48C    P8    16W /  70W |     83MiB / 15360MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Để xác minh xem việc mở khóa vGPU đã thành công hay không, nhập lệnh sau:

mdevctl types

Kết quả sẽ tương tự như sau:

0000:04:00.0
  nvidia-222
    Available instances: 0
    Device API: vfio-pci
    Name: GRID T4-1B
    Description: num_heads=4, frl_config=45, framebuffer=1024M, max_resolution=5120x2880, max_instance=16
  nvidia-223
    Available instances: 0
    Device API: vfio-pci
    Name: GRID T4-2B
    Description: num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=8
  nvidia-224
    Available instances: 0
    Device API: vfio-pci
    Name: GRID T4-2B4
    Description: num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=8
  nvidia-225
    Available instances: 0
    Device API: vfio-pci
    Name: GRID T4-1A
    Description: num_heads=1, frl_config=60, framebuffer=1024M, max_resolution=1280x1024, max_instance=16

--- Đã lược bỏ bớt ---

Nếu lệnh trên không trả về bất kỳ kết quả nào, tức là vGPU unlock không hoạt động.

Một lệnh khác bạn có thể thử để xem liệu card của bạn được nhận dạng là hỗ trợ vGPU hay không là:

nvidia-smi vgpu

Nếu mọi thứ diễn ra đúng với việc mở khóa, kết quả sẽ tương tự như sau:

$ nvidia-smi vgpu
Wed Jul  5 13:52:37 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.14             Driver Version: 525.105.14                |
|---------------------------------+------------------------------+------------+
| GPU  Name                       | Bus-Id                       | GPU-Util   |
|      vGPU ID     Name           | VM ID     VM Name            | vGPU-Util  |
|=================================+==============================+============|
|   0  Tesla T4                   | 00000000:04:00.0             |   0%       |
+---------------------------------+------------------------------+------------+

Tuy nhiên, nếu bạn nhận được kết quả sau, có nghĩa là đã xảy ra lỗi:

No supported devices in vGPU mode

Nếu bất kỳ lệnh nào trả về kết quả không đúng, bạn không thể tiếp tục.

vGPU overrides.

Tiếp theo, chúng ta đã tạo file /etc/vgpu_unlock/profile_override.toml ở phần trước và tôi chưa giải thích nó là gì. Bằng cách sử dụng file này, bạn có thể ghi đè lên nhiều thông số cho các phiên bản vGPU của bạn: Ví dụ, bạn có thể thay đổi độ phân giải tối đa, bật/tắt giới hạn tốc độ khung hình, bật/tắt hỗ trợ CUDA hoặc thay đổi kích thước vRAM của vGPU ảo của bạn. Nếu chúng ta nhìn vào đầu ra của mdevctl types, chúng ta sẽ thấy rất nhiều loại khác nhau mà chúng ta có thể chọn. Tuy nhiên, nếu chẳng hạn chúng ta chọn GRID RTX6000-4Q cho phép chúng ta có 4GB vRAM trong một VM, chúng ta bị khóa vào loại này cho tất cả các VM của chúng ta. Điều này có nghĩa là chúng ta chỉ có thể có các VM với dung lượng 4GB, không thể kết hợp các loại khác nhau để có một VM 4GB và hai VM 2GB.

Lưu ý quan trọng:
- Q profiles có thể gây ra hiệu suất kém trong các ứng dụng/trò chơi OpenGL. Để khắc phục vấn đề này, chuyển sang một hồ sơ A hoặc B tương đương (ví dụ: GRID RTX6000-4B).
- C profiles (ví dụ: GRID RTX6000-4C) chỉ hoạt động trên Linux, không thử sử dụng chúng trên Windows, điều đó sẽ không hoạt động - hoàn toàn không hoạt động.
- A profiles (ví dụ: GRID RTX6000-4A) SẼ KHÔNG hoạt động trên Linux, chúng chỉ hoạt động trên Windows.

Tất cả những thay đổi đó đều được thực hiện thông qua file cấu hình ghi đè. Kỹ thuật thì chúng ta vẫn bị khóa vào việc chỉ sử dụng một hồ sơ, nhưng bây giờ chúng ta có thể thay đổi kích thước vRAM của hồ sơ trên cơ sở từng VM. Vì vậy, dù chúng ta có ba phiên bản GRID RTX6000-4Q, một VM có thể có 4GB vRAM trong khi chúng ta có thể ghi đè kích thước vRAM cho hai VM còn lại chỉ 2GB.

Hãy xem ví dụ cấu hình ghi đè này (định dạng TOML)

[profile.nvidia-259]
num_displays = 1          # Max number of virtual displays. Usually 1 if you want a simple remote gaming VM
display_width = 1920      # Maximum display width in the VM
display_height = 1080     # Maximum display height in the VM
max_pixels = 2073600      # This is the product of display_width and display_height so 1920 * 1080 = 2073600
cuda_enabled = 1          # Enables CUDA support. Either 1 or 0 for enabled/disabled
frl_enabled = 1           # This controls the frame rate limiter, if you enable it your fps in the VM get locked to 60fps. Either 1 or 0 for enabled/disabled
framebuffer = 0x74000000
framebuffer_reservation = 0xC000000   # In combination with the framebuffer size
                                      # above, these two lines will give you a VM
                                      # with 2GB of VRAM (framebuffer + framebuffer_reservation = VRAM size in bytes).
                                      # See below for some other sizes

[vm.100]
frl_enabled = 0
# You can override all the options from above here too. If you want to add more overrides for a new VM, just copy this block and change the VM ID

Ở đây có hai khối, khối đầu tiên là [profile.nvidia-259] và khối thứ hai là [vm.100]. Khối đầu tiên áp dụng ghi đè cho tất cả các phiên bản VM của loại nvidia-259 (đó là GRID RTX6000-4Q) và khối thứ hai áp dụng ghi đè chỉ cho một VM cụ thể, VM đó có ID VM Proxmox100. ID VM Proxmox là số giống như bạn thấy trong giao diện web Proxmox, bên cạnh tên VM. Bạn không cần chỉ định tất cả các tham số, chỉ cần những tham số bạn cần/mong muốn. Có một số tham số khác mà tôi chưa đề cập ở đây, bạn có thể tìm thấy chúng bằng cách xem mã nguồn của repo vgpu_unlock-rs.

Đối với một VM chơi game từ xa đơn giản với độ phân giải 1080p, tôi khuyến nghị sử dụng cái như sau:

[profile.nvidia-259] # choose the profile you want here
num_displays = 1
display_width = 1920
display_height = 1080
max_pixels = 2073600

Kích thước VRAM phổ biến.

Dưới đây là một số kích thước VRAM phổ biến mà bạn có thể muốn sử dụng:

512MB.

framebuffer = 0x1A000000
framebuffer_reservation = 0x6000000

1G.

framebuffer = 0x38000000
framebuffer_reservation = 0x8000000

2G.

framebuffer = 0x74000000
framebuffer_reservation = 0xC000000
  • 3G:
framebuffer = 0xB0000000
framebuffer_reservation = 0x10000000
  • 4G:
framebuffer = 0xEC000000
framebuffer_reservation = 0x14000000
  • 5G:
framebuffer = 0x128000000
framebuffer_reservation = 0x18000000
  • 6G:
framebuffer = 0x164000000
framebuffer_reservation = 0x1C000000
  • 8G:
framebuffer = 0x1DC000000
framebuffer_reservation = 0x24000000
  • 10G:
framebuffer = 0x254000000
framebuffer_reservation = 0x2C000000
  • 12G:
framebuffer = 0x2CC000000
framebuffer_reservation = 0x34000000
  • 16G:
framebuffer = 0x3BC000000
framebuffer_reservation = 0x44000000
  • 20G:
framebuffer = 0x4AC000000
framebuffer_reservation = 0x54000000
  • 24G:
framebuffer = 0x59C000000
framebuffer_reservation = 0x64000000
  • 32G:
framebuffer = 0x77C000000
framebuffer_reservation = 0x84000000
  • 48G:
framebuffer = 0xB2D200000
framebuffer_reservation = 0xD2E00000

Trong cấu hình của bạn, giá trị của “framebuffer” và “framebuffer_reservation” luôn bằng tổng kích thước VRAM tính bằng byte. Điều này có nghĩa là bạn có thể đặt giá trị của hai tham số này sao cho tổng của chúng bằng kích thước VRAM của bạn.

“framebuffer” đại diện cho kích thước bộ nhớ đệm hình ảnh, trong đó dữ liệu hình ảnh được lưu trữ. “framebuffer_reservation” là một tham số liên quan đến việc đặt giới hạn cho kích thước bộ nhớ đệm hình ảnh mà mỗi VM có thể sử dụng.

Khi bạn cộng tổng giá trị của “framebuffer” và “framebuffer_reservation”, bạn sẽ có tổng kích thước VRAM của bạn. Điều này đảm bảo rằng mỗi VM có thể sử dụng VRAM được chỉ định mà không vượt quá giới hạn đã đặt.

Ví dụ: Nếu bạn muốn mỗi VM có 4GB VRAM, bạn có thể đặt giá trị “framebuffer” và “framebuffer_reservation” là 4GB tính bằng byte (4GB * 1024 * 1024 * 1024).

Chú ý rằng giá trị VRAM được chỉ định trong cấu hình này phải phù hợp với khả năng của card GPU vật lý và giới hạn vGPU mà bạn đang sử dụng.

Để thêm một vGPU vào máy ảo Proxmox.

Để thêm một vGPU vào máy ảo Proxmox, làm theo các bước sau:

  • Truy cập vào giao diện web Proxmox, sau đó chọn máy ảo của bạn.
  • Chọn tab “Hardware”.
  • Nhấp vào “Add” và chọn “PCI Device”.
  • Bạn sẽ thấy danh sách các thiết bị PCI có sẵn. Chọn GPU của bạn, và chắc chắn rằng cột “Mediated Devices” có giá trị “Yes” cho thiết bị đó.
  • Bây giờ bạn cũng có thể chọn “MDev Type”. Hãy chọn loại vGPU bạn muốn sử dụng. Nếu bạn không nhớ loại nào bạn muốn chọn, bạn có thể xem danh sách tất cả các loại có sẵn bằng cách chạy lệnh “mdevctl types” trong terminal.
  • Nhấp vào “Add” để hoàn thành.
  • Khởi động máy ảo và cài đặt các driver cần thiết cho vGPU. Sau khi cài đặt driver, tắt máy ảo.
  • Để loại bỏ bộ điều khiển hiển thị ảo, chọn “Display” trong phần “Hardware” và chọn “none (none)”. LƯU Ý: Chỉ thực hiện bước này nếu bạn có một cách khác để truy cập vào máy ảo như Parsec hoặc Remote Desktop, vì Proxmox Console sẽ không hoạt động nữa.
  • Bây giờ bạn đã có một máy ảo với vGPU sử dụng. Hãy tận hưởng máy ảo mới của bạn 🙂

Lưu ý khi bạn thay đổi các thông số cho vCPU ví dụ như dung lượng vGPU, profile, độ phân giải,… bạn phải tắt máy ảo rồi mới thay đổi và khi bạn start lại máy ảo bạn có thể gặp lỗi như hình dưới.

Lỗi Stop code “VIDEO MEMORY MANAGEMENT INTERNAL” thông thường cho biết có vấn đề liên quan đến vGPU trên máy tính của bạn do chúng ta thay đổi thông số vGPU. Điều này cho thấy có thể có sự cố với card đồ họa hoặc các trình điều khiển của nó, gây ra lỗi khi truy cập hoặc quản lý bộ nhớ video.

Để khắc phục vấn đề này, bạn có thể thử các bước sau đây:

  • Khởi động lại máy tính: Trong một số trường hợp, việc khởi động lại có thể sửa các sự cố tạm thời hoặc xung đột.
  • Cập nhật trình điều khiển đồ họa: Truy cập trang web của nhà sản xuất card đồ họa của bạn và tải về các trình điều khiển mới nhất có sẵn. Cài đặt chúng và khởi động lại máy tính.
  • Kiểm tra cập nhật Windows: Đảm bảo hệ điều hành của bạn được cập nhật. Các bản cập nhật Windows thường bao gồm các sửa lỗi và cải tiến có thể giải quyết các vấn đề tương thích.
  • Chạy kiểm tra bộ nhớ: Windows có một công cụ tích hợp gọi là Windows Memory Diagnostic có thể giúp bạn kiểm tra lỗi bộ nhớ. Gõ “Windows Memory Diagnostic” vào thanh tìm kiếm, chọn công cụ và làm theo hướng dẫn trên màn hình.
  • Kiểm tra quá nhiệt: Quá nhiệt cũng có thể gây ra vấn đề với bộ nhớ video. Đảm bảo hệ thống làm mát của máy tính, bao gồm quạt và lỗ thông hơi, sạch sẽ và hoạt động đúng cách.

Nếu những bước này không giải quyết được vấn đề, có thể hữu ích để liên hệ với bộ phận hỗ trợ của nhà sản xuất máy tính hoặc một chuyên gia hỗ trợ kỹ thuật để được trợ giúp thêm. Họ có thể cung cấp hướng dẫn cụ thể dựa trên cấu hình phần cứng của bạn và giúp chẩn đoán và khắc phục vấn đề.

Licensing.

Thường thì việc sử dụng vGPU yêu cầu một giấy phép, nhưng may mắn thay, cộng đồng đã tìm ra một số cách để vượt qua điều đó. Trước đây, việc giả mạo vGPU để trở thành một GPU Quadro từng rất phổ biến, nhưng tôi không khuyến nghị nữa. Tôi cũng đã loại bỏ các phần liên quan từ hướng dẫn này. Nếu vì bất kỳ lý do gì mà bạn vẫn muốn làm điều đó, bạn có thể xem lại lịch sử commit để tìm hướng dẫn về cách sử dụng.

Cách được khuyến nghị để vượt qua giấy phép là thiết lập máy chủ giấy phép của riêng bạn. Làm theo hướng dẫn ở đây (hoặc ở đây nếu liên kết kia không hoạt động).

Các sự cố phổ biến.

Hầu hết các vấn đề có thể được giải quyết bằng cách đọc hướng dẫn rất cẩn thận. Dưới đây là một số vấn đề phổ biến và cách giải quyết:

  • Driver NVIDIA không cài đặt/không tải được.
    • Nếu bạn đã sử dụng gpu passthrough trước đó, hãy hoàn tác tất cả các bước bạn đã thực hiện hoặc bắt đầu với một cài đặt Proxmox mới. Nếu bạn chạy lệnh lspci -knnd 10de: và thấy vfio-pci dưới Kernel driver in use: thì bạn phải khắc phục điều đó.
    • Đảm bảo rằng bạn đang sử dụng một phiên bản kernel được hỗ trợ (kiểm tra bằng lệnh uname -a).
  • Hiệu suất OpenGL của tôi rất tệ, tôi có thể làm gì?
    • Xem lại phần lưu ý quan trọng ở trên.
  • Lệnh mdevctl types không xuất hiện kết quả, phải làm sao để sửa?
    • Đảm bảo rằng bạn không tắt chức năng mở khóa nếu bạn sử dụng GPU không có hỗ trợ vGPU.

Tài liệu tham khảo:

Tổng hợp một số link tải driver:

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories