跳到主內容

LXC 直通顯示卡 - PVE 8

  BUBU 因之前寫過一篇如何在 kvm 模式下直接顯示卡那是在 Windows 環境下去操作,這次剛好有朋友要使用 Linux 的環境下運行 GPU 的服務,那剛好想說看是否可以用 PVE 下的 LXC 服務是否可直通顯示卡,有在網路上找到一篇教學是可以是可以執行的,測試過是可以運行我先把這整個過程都記錄。

2024.06.30 修改版本為 Proxmox VE 8 版,設定流程異動

運行環境


  環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: Proxmox VE 8.0

測試過程


Proxmox VE 設定及安裝驅動

  • 安裝 header 在安裝之前先檢查當下的核心版本
uname -a
  • 查詢出來結果如下

  • 在用 pve-header 查詢核心版本
apt-cache search pve-header
  • 查詢出來的版本,看是否有與 uname -a 查出來的版本一樣

  • 會自動安裝當下的核心版本
apt install pve-headers-$(uname -r)
  • 安裝 dkms 如果沒有安裝這個在安裝驅動會容易報錯
apt update
apt install dkms -y
  • 查詢是否有 nvidia 的顯卡
lspci | grep -i nvidia
  • 查詢結果如下

pve-vga-06.png

  • 再用另一個指詢查詢 nvidia
lspci -vvv |grep -i -A 20 nvidia
  • 查詢結果如下,但是要確認一下紅色框框內的資訊是否有正常顯示出這樣子的畫面,如果沒有正常顯示出這樣子的畫面有可能會無法正常安裝

pve-vga-07.png

  • 在 PVE 上安裝顯示卡驅動,到 NVIDIA 驅動下載對應的顯示卡驅動
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.90.07/NVIDIA-Linux-x86_64-550.90.07.run
  • 將剛剛下載好的驅動程式給序執行權限
chmod +x NVIDIA-Linux-x86_64-550.90.07.run
  • 安裝 gcc 套件不然驅動會無法安裝
apt install gcc make -y
  • 安裝 NVIDIA 驅動
./NVIDIA-Linux-x86_64-550.90.07.run --dkms
  • 安裝完成後要增加關於 nvidia 模組 vim /etc/modules-load.d/nvidia.conf
nvidia-drm
nvidia
nvidia_uvm
blacklist nouveau
blacklist nvidiafb
  • 更新模組資訊
update-initramfs -u -k all
  • 新增加規則 vim /etc/udev/rules.d/70-nvidia.rules
KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 666 /dev/nvidia*'"
KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*'"
  • 以上流程都設定完之後重開 PVE 主機

  • 驗證剛剛安裝的驅動是否都正常

  • 第一個指令

ls -al /dev/nvidia*
  • 結果如下

pve-vga-01.png

  • 第二個指令
ls -al /dev/dri/*
  • 結果如下

pve-vga-02.png

  • 第三個指令
nvidia-smi
  • 結果如下

pve-vga-03.png

  • PVE 自動啟動 NVIDIA 持久模式 Persistence-Mvim /etc/rc.local
sudo nvidia-smi -pm 1

  以上流程確認完之後就開始開一台 LXC 服務運行


LXC模式直通設定

  要讓 LXC 服務上直通顯卡,這上面的驅動要跟本機上的驅動要一樣例如我目前安裝的版臺是 460.91.03 ,到時再去官方查下載的載點。

  • 在 LXC 服務下載驅動程式
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.90.07/NVIDIA-Linux-x86_64-550.90.07.run
  • 讓剛剛下載好的驅動程式能有執行權限
chmod +x NVIDIA-Linux-x86_64-550.90.07.run
  • 安裝時不要安裝核心服務,要下指令是無核心版本
sudo ./NVIDIA-Linux-x86_64-550.90.07.run --no-kernel-module
  • 安裝完 LXC 上的驅動,就先把 LXC 先關機,進到 PVE 去修改設定檔,以下是我所填加的指令,要注意一下數字是不是跟您在本機上查詢是否一樣,設定完成之後存檔,設定檔位置在 vim /etc/pve/lxc/XXX.conf
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 234:* rwm
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
  • 再開啟剛剛所設定的 LXC 服務,在下一段查詢的指令看是否正常
ls -al /dev/nvidia*
ls -al /dev/dri/*
nvidia-smi
  • 查詢出來的結果跟您剛剛在本機上的查詢結果要一樣,就表示您的 LXC 服務已可以直通顯卡並且有 GPU 功能

CUDA

  安裝 CUDA 功能
  • 首先到 Nvidia 官網取得套件載點,會建議以 nvidia-smi 所查詢出來的版本下去安裝

  • 先安裝必要的套件

sudo apt update && sudo apt-get install gcc g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev -y
  • 因我目前所查到的版本是 12.4 版,我從官方下載該版本
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
  • 執行安裝 cuda 套件
sudo sh cuda_12.4.0_550.54.14_linux.run
  • 在安裝過程中不要選擇安裝驅動程式,請參考下面圖示,取消後就選擇安裝,安裝時會需要一點時間

  • 如果下 nvcc -V 查不到,因為環境變數沒有設定好,那請在 .bashrc 這裡新增兩行環境變數(請注意在安裝完成後畫面會顯示您要增加的路徑),我不確定路徑是否會與我相同要注意
export PATH=/usr/local/cuda-12.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH
  • 設定完環境變數,如果要立刻生效請下
. .bashrc
  • 在再下一次 nvcc -V 這樣子就會出現目前的資訊

備註





參考相關網頁