如何通过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的任务。

内容主题:

  1. 在Proxmox VE 8上安装NVIDIA GPU驱动
  2. 确保Proxmox VE 8自动加载NVIDIA GPU内核模块
  3. 创建用于NVIDIA GPU直通的Proxmox VE 8 LXC容器
  4. 在Promox VE 8上配置NVIDIA GPU直通的LXC容器
  5. 在Proxmox VE 8 LXC容器上安装NVIDIA GPU驱动
  6. 在Proxmox VE 8 LXC容器上安装NVIDIA CUDA和cuDNN
  7. 检查Proxmox VE 8 LXC容器上NVIDIA CUDA加速是否正常工作
  8. 结论
  9. 参考文献。

在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