Skip to main content

LXC 直通顯示卡

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

運行環境


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

  • 系統環境: Proxmox VE 7.0、Debian 10、Ubuntu 18.04

安裝或測試過程


Proxmox VE 設定及安裝驅動

  • 新增加 Nvidia 來源庫,以下的來源庫是 Debian 11 版本的來源庫
#bullseye backport
deb http://deb.debian.org/debian bullseye-backports main contrib non-free
deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free
  • 修改好來源庫之後要更新一下來源庫
apt update
  • 安裝 header 在安裝之前先檢查當下的核心版本
uname -a
  • 查詢出來結果如下

pve-vga-05.png

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

pve-vga-04.png

  • 會自動安裝當下的核心版本
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 上安裝顯示卡驅動
apt-get update
apt-get install -t bullseye-backports nvidia-driver nvidia-smi
  • 安裝完成後要增加關於 nvidia 模組 vim /etc/modules-load.d/nvidia.conf
nvidia-drm
nvidia
nvidia_uvm
  • 在確認一下其他檔案是否有增加過 nouveaunvidiafb 這兩個檔案,如果沒有的的話就在剛剛增加的設定檔上增加下面兩行指令
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

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


LXC模式直通設定

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

  • 在 LXC 服務下載驅動程式
wget https://tw.download.nvidia.com/XFree86/Linux-x86_64/460.91.03/NVIDIA-Linux-x86_64-460.91.03.run
  • 讓剛剛下載好的驅動程式能有執行權限
chmod +x NVIDIA-Linux-x86_64-460.91.03.run
  • 安裝時不要安裝核心服務,要下指令是無核心版本
sudo ./NVIDIA-Linux-x86_64-460.91.03.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

要注意一下如果使用到 PVE 7 的系統因 cgroup 已經更新到 cgroup2 ,所以在設定時要注意

  • 再開啟剛剛所設定的 LXC 服務,在下一段查詢的指令看是否正常
ls -al /dev/nvidia*
ls -al /dev/dri/*
nvidia-smi
  • 查詢出來的結果跟您剛剛在本機上的查詢結果要一樣,就表示您的 LXC 服務已可以直通顯卡並且有 GPU 功能

CUDA

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

  • 先安裝必要的套件

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

pve-vga-08.png

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

pve-vga-09.png

  • 在利用官方提供的測試功具
cuda-install-samples-11.2.sh ~

cd ~/NVIDIA_CUDA-11.2_Samples/5_Simulations/nbody

sudo apt-get install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libglfw3-dev libgles2-mesa-dev

GLPATH=/usr/lib make

./nbody numdevices=1 -benchmark

  那 BUBU 這一張顯卡的運算只有 6.1 分

pve-vga-10.png

備註





參考相關網頁