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
- 查詢結果如下
- 再用另一個指詢查詢
nvidia
lspci -vvv |grep -i -A 20 nvidia
- 查詢結果如下,但是要確認一下紅色框框內的資訊是否有正常顯示出這樣子的畫面,如果沒有正常顯示出這樣子的畫面有可能會無法正常安裝
- 在 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*
- 結果如下
- 第二個指令
ls -al /dev/dri/*
- 結果如下
- 第三個指令
nvidia-smi
- 結果如下
- PVE 自動啟動
NVIDIA
持久模式Persistence-M
:vim /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
這樣子就會出現目前的資訊