如何通过NVIDIA GPU到Proxmox VE 8容器进行CUDA/AI加速和媒体转码
如果你在Proxmox VE服务器上安装了NVIDIA GPU,你可以将它传递给Proxmox VE LXC容器,并在容器中使用它来进行CUDA/AI加速(即TensorFlow, PyTorch)。你也可以在Proxmox VE LXC容器中使用NVIDIA GPU进行媒体转码、视频流等,并安装Plex media Server或NextCloud(例如)。
在本文中,我们将向您展示如何将NVIDIA GPU传递到Proxmox VE 8 LXC容器,以便您可以将其用于CUDA/AI加速,媒体转码或其他需要NVIDIA GPU的任务。
内容主题:
- 在Proxmox VE 8上安装NVIDIA GPU驱动
- 确保Proxmox VE 8自动加载NVIDIA GPU内核模块
- 创建用于NVIDIA GPU直通的Proxmox VE 8 LXC容器
- 在Promox VE 8上配置NVIDIA GPU直通的LXC容器
- 在Proxmox VE 8 LXC容器上安装NVIDIA GPU驱动
- 在Proxmox VE 8 LXC容器上安装NVIDIA CUDA和cuDNN
- 检查Proxmox VE 8 LXC容器上NVIDIA CUDA加速是否正常工作
- 结论
- 参考文献。
在Proxmox VE 8上安装NVIDIA GPU驱动
要将NVIDIA GPU直通到Proxmox VE LXC容器,必须在Proxmox VE 8服务器上安装NVIDIA GPU驱动程序。如果您在Proxmox VE 8服务器上安装最新版本的官方NVIDIA GPU驱动程序时需要任何帮助,请阅读本文。
确保Proxmox VE 8自动加载NVIDIA GPU内核模块
一旦在Proxmox VE 8服务器上安装了NVIDIA GPU驱动程序,您必须确保在启动时自动加载NVIDIA GPU内核模块。
首先,在/etc/modules-load目录下创建一个类似“nvidia.conf”的新文件。D / "目录,然后用nano文本编辑器打开它。
$ nano /etc/modules-load.d/nvidia.conf
添加以下行,按+ X + Y保存“nvidia.conf”文件:
英伟达
nvidia_uvm
为了使修改生效,需要更新initramfs文件,命令如下:
$ update-initramfs
由于某些原因,Proxmox VE 8没有在“/dev/”目录下创建所需的NVIDIA GPU设备文件。如果没有这些设备文件,Promox VE 8 LXC容器将无法使用NVIDIA GPU。
为了确保Proxmox VE 8在启动时在“/dev/”目录下创建NVIDIA GPU设备文件,请在“/etc/udev/rules”目录下创建一个udev规则文件“70-nvidia.rules”。D / "目录,用nano文本编辑器打开,如下所示:
$ nano /etc/udev/rules.d/70-nvidia.rules
在“70-nvidia.rules”文件中输入以下几行,然后按+ X + Y保存文件:
在/dev/*中创建必要的NVIDIA设备文件
KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*'"
KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm* "
为使更改生效,请重新启动Proxmox VE 8服务器,如下所示:
美元重新启动
一旦你的Proxmox VE 8服务器启动,NVIDIA内核模块应该会自动加载,如下面的截图所示:
$ lsmod | grep nvidia
所需的NVIDIA设备文件也应该填充在Proxmox VE 8服务器的“/dev”目录中。注意NVIDIA设备文件的CGroup id。你必须允许那些CGroup id在LXC容器上,你想从你的Proxmox VE 8服务器通过NVIDIA gpu。在本例中,CGroup id分别为195,237和226。
$ ls -lh /dev/nvidia*
$ ls -lh /dev/dri
创建用于NVIDIA GPU直通的Proxmox VE 8 LXC容器
我们在本文中使用了Ubuntu 22.04 LTS Proxmox VE 8 LXC容器进行演示,因为NVIDIA CUDA和NVIDIA cuDNN库很容易从Ubuntu软件包存储库安装到Ubuntu 22.04 LTS上,并且更容易测试NVIDIA CUDA加速是否工作。如果您愿意,也可以使用其他Linux发行版。在这种情况下,NVIDIA CUDA和NVIDIA cuDNN安装命令会有所不同。请确保按照NVIDIA CUDA和NVIDIA cuDNN的安装说明安装所需的Linux发行版。
如果在创建Proxmox VE 8 LXC容器方面需要任何帮助,请阅读本文。
在Promox VE 8上配置NVIDIA GPU直通的LXC容器
为NVIDIA GPU直通配置LXC容器(假设是容器102),使用nano文本编辑器从Proxmox VE shell打开LXC容器配置文件,如下所示:
$ nano /etc/pve/lxc/102.conf
在LXC容器配置文件的末尾输入以下几行:
Lxc.cgroup.devices.allow: c 195:* RWM
Lxc.cgroup.devices.allow: c 237:* RWM
Lxc.cgroup.devices.allow:* RWM
lxc.mount.entry: /dev/nvidia0 dev / nvidia0 没有绑定,可选的,创建=文件
Lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
Lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset
Lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm 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 没有绑定,可选,创建= dir
确保替换LXC容器配置文件中“LXC . CGroup .devices.allow”行中的CGroup id。完成后,按+ X后跟“Y”,保存LXC容器配置文件。
现在,从Proxmox VE 8指示板启动LXC容器。
如果NVIDIA GPU直通成功,LXC容器应该启动没有任何错误,你应该在容器的“/dev”目录中看到NVIDIA设备文件。
$ ls -lh /dev/nvidia*
$ ls -lh /dev/dri
在Proxmox VE 8 LXC容器上安装NVIDIA GPU驱动
注意:我们在Proxmox VE 8服务器上使用Ubuntu 22.04 LTS LXC容器进行演示。如果您在LXC容器上使用另一个Linux发行版,那么您的命令将与我们的略有不同。因此,请确保根据您在容器上使用的Linux发行版调整命令。
您可以使用“NVIDIA -smi”命令找到安装在Proxmox VE 8服务器上的NVIDIA GPU驱动程序版本。正如您所看到的,我们在Proxmox VE 8服务器上安装了NVIDIA GPU驱动程序版本535.146.02。因此,我们也必须在LXC容器上安装NVIDIA GPU驱动程序版本535.146.02。
nvidia-smi美元
首先,在LXC容器上安装CURL,如下所示:
$ apt update && apt install curl -y
CURL应该安装在LXC容器上。
要安装NVIDIA GPU驱动版本535.146.02(假设),请导出NVIDIA_VERSION环境变量并运行CURL命令(在容器上)下载所需版本的NVIDIA GPU驱动安装文件。
$ export NVIDIA_VERSION="535.146.02"
$ curl - o "https://us.download.nvidia.com/XFree86/Linux-x86_64/${NVIDIA_VERSION}/NVIDIA-Linux-x86_64-${NVIDIA_VERSION}.run"
正确版本的NVIDIA GPU驱动安装文件应该下载到LXC容器上,如下面的截图所示:
现在,给容器上的NVIDIA GPU驱动安装文件添加一个可执行权限,如下所示:
$ chmod +x NVIDIA-Linux-x86_64-535.146.02.run
要在容器上安装NVIDIA GPU驱动程序,请运行NVIDIA GPU驱动程序安装文件,其中带有“-no-kernel-module”选项,如下所示:
$ ./NVIDIA-Linux-x86_64-535.146.02.run——no-kernel-module
看到此选项后,选择“OK”并按下。
选择“OK”并按。
选择“Yes”并按。
选择“OK”并按。
LXC容器上正在安装NVIDIA GPU驱动程序。这需要几秒钟才能完成。
看到这个提示后,选择“Yes”并按下。
选择“OK”并按。LXC容器上需要安装NVIDIA GPU驱动程序。
在LXC容器上执行“NVIDIA -smi”命令,确认NVIDIA GPU驱动是否安装并正常工作。正如您所看到的,LXC容器上安装了NVIDIA GPU驱动程序版本535.146.02(与Proxmox VE 8服务器上安装的版本相同),它正确检测了我们的NVIDIA RTX 4070 GPU。
nvidia-smi美元
在Proxmox VE 8 LXC容器上安装NVIDIA CUDA和cuDNN
注意:我们在Proxmox VE 8服务器上使用Ubuntu 22.04 LTS LXC容器进行演示。如果您在LXC容器上使用另一个Linux发行版,那么您的命令将与我们的略有不同。因此,请确保根据您在容器上使用的Linux发行版调整命令。
要在Ubuntu 22.04 LTS Proxmox VE 8容器上安装NVIDIA CUDA和cuDNN,请在容器上运行以下命令:
nvidia-cudn工具包
确认安装,按“Y”,再按。
正在下载和安装所需的软件包。这需要一段时间才能完成。
看到此窗口后,选择“OK”并按下。
选择“I Agree”并按。
安装应该继续。
安装程序正在从NVIDIA下载NVIDIA cuDNN库存档。这是一个大文件,所以需要很长时间才能完成。
一旦下载了NVIDIA cuDNN库存档,安装应该像往常一样继续。
此时,NVIDIA CUDA和cuDNN应该安装在Ubuntu 22.04 LTS Proxmox VE 8 LXC容器上。
检查Proxmox VE 8 LXC容器上NVIDIA CUDA加速是否正常工作
要验证NVIDIA CUDA是否正确安装,请在Proxmox VE 8容器上检查“nvcc”命令是否可用,如下所示:
$ NVCC—版本
正如您所看到的,我们在Proxmox VE 8容器上安装了NVIDIA CUDA 11.5。
现在,让我们编写、编译并运行一个简单的CUDA C程序,看看是否一切正常。
首先,在Proxmox VE 8容器上创建一个“~/code”项目目录,以保持文件的组织。
$ mkdir ~/code
进入“~/code”项目目录,如下所示:
$ CD ' /code
创建一个像“hello”这样的新文件。在Proxmox VE 8容器的“~/code”目录下,使用nano文本编辑器打开它:
$ nano hello.cu
在“hello. xml”中输入以下代码行。铜”文件:
# include
__global__ void sayHello() {
printf("来自GPU的Hello world !n");
}
Int main() {
printf("Hello world from CPU!n");
sayHello ();
cudaDeviceSynchronize ();
返回0;
}
完成后,按+ X,然后按“Y”,保存“hello”。铜”文件。
编译“hello。在Proxmox VE 8容器上运行“cua”CUDA程序,执行以下命令:
$ NVCC你好。Cu -o你好
现在,您可以在Proxmox VE 8容器上运行“hello”CUDA程序,如下所示:
美元。/你好
如果Proxmox VE 8容器可以使用NVIDIA GPU进行NVIDIA CUDA加速,程序将打印如下截图所示的两行。
如果不能从Proxmox VE 8容器访问NVIDIA GPU,程序将只打印第一行“Hello world from the CPU!”,而不是第二行。
结论
在本文中,我们向您展示了如何将NVIDIA GPU从Proxmox VE 8主机传递到Proxmox VE 8 LXC容器。我们还展示了如何在Proxmox VE 8容器上安装与Proxmox VE主机相同版本的NVIDIA GPU驱动程序。最后,我们向您展示了如何在Ubuntu 22.04 LTS Proxmox VE 8容器上安装NVIDIA CUDA和NVIDIA cuDNN,并在Proxmox VE 8容器上编译和运行一个简单的NVIDIA CUDA程序。
引用:
- 深度学习之旅:Nvidia GPU传递到LXC容器|作者:many andr
- ratsimbazafy | Medium - 如何在Ubuntu 22.04 LTS上安装CUDA