当前位置: 首页 > 知识库问答 >
问题:

如何使用snapd的lxd/lxc容器在centos/rhel/ol8上启用gpu直通?

归星驰
2023-03-14

我在CentOS上部署LXC的指南是安装snapd的lxdhttps://www.cyberciti.biz/faq/set-up-use-lxd-on-centos-rhel-8-x/

SnapD是一种服务,允许安装基于debian/ubuntu的包,逻辑是lxd是该平台上最新的。

嗯。如果更容易启用gpu直通,我愿意安装替代版本。

最终,我将尝试构建一个容器环境,在这个环境中,我可以运行最新版本的python和jupyter,它支持gpu。

我有一些关于如何启用gpu直通的指南。

https://theorangeone.net/posts/lxc-nvidia-gpu-passthrough/
https://www.reddit.com/r/Proxmox/comments/glog5j/lxc_gpu_passthrough/

我在ol8主机上添加了以下内核模块

/etc/modules-load.d/vfio-pci.conf
    # Nvidia modules
    nvidia
    nvidia_uvm

#noticed snapd has a modules file I can't edit  

/var/lib/snapd/snap/core18/1988/etc/modules-load.d/modules.conf
            

然后修改grub

nano /etc/default/grub 
    #https://access.redhat.com/documentation/en-us/red_hat_virtualization/4.1/html/installation_guide/appe-configuring_a_hypervisor_host_for_pci_passthrough
    GRUB_CMDLINE_LINUX
    #iommu=on amd_iommu=on
    iommu=pt amd_iommu=pt
            
grub2-mkconfig -o /boot/grub2/grub.cfg

然后添加了udev规则

    nano /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*'"

#reboot

然后添加gpu到lxc.conf

ls -l /dev/nvidia*

# Allow cgroup access
lxc.cgroup.devices.allow: c 195:* rwm
lxc.cgroup.devices.allow: c 243:* rwm

nano /var/snap/lxd/common/lxd/logs/nvidia-test/lxc.conf
        

# Pass through device files
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 ind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file

我启动的lxc容器内部(ol8)

#installed nvidia-driver that comes with nvidia-smi
    nvidia-driver-cuda-3:460.32.03-1.el8.x86_64
    
#installed cuda
    cuda-11-2-11.2.2-1.x86_64

当我去运行nvidia smi时

[root@nvidia-test ~]# nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

因为我不能编辑SNAPD模块文件,以为手动复制英伟达内核模块文件,并使用它们(用MMODESPORE决定-显示依赖)

[root@nvidia-test ~]# insmod nvidia.ko.xz NVreg_DynamicPowerManagement=0x02
insmod: ERROR: could not insert module nvidia.ko.xz: Function not implemented

我的容器中有一些诊断信息

[root@nvidia-test ~]# find /sys | grep dmar
find: '/sys/kernel/debug': Permission denied
find: '/sys/fs/pstore': Permission denied
find: '/sys/fs/fuse/connections/59': Permission denied
[root@nvidia-test ~]# lspci | grep -i nvidia
05:00.0 VGA compatible controller: NVIDIA Corporation GP107GL [Quadro P1000] (rev a1)
05:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)

所以我还有别的事要做吗?我应该删除snapd lxd并使用OL8提供的默认lxc吗?

共有2个答案

罗韬
2023-03-14

找到了答案

#https://ubuntu.com/blog/nvidia-cuda-inside-a-lxd-container

lxc config device add cuda gpu gpu
高运诚
2023-03-14

通过创建LXDGPU设备,可以使用GPU传递到LXD容器。此gpu设备将共同执行所有必要的任务,以将gpu公开给容器,包括您在上面明确进行的配置。

这里是所有额外参数的留档(例如,如果有一个以上的GPU,如何区分),https://linuxcontainers.org/lxd/docs/master/instances#type-gpu

在最简单的形式中,您可以对现有容器运行以下操作,以将默认GPU添加到容器中。

lxc config device add mycontainer mynvidia gpu

当您在NVidia容器中添加GPU时,您还需要将相应的NVidia运行时添加到容器中(以便它与主机上的内核版本相匹配!)。在容器中,我们不需要(也不能)添加内核驱动程序,但我们需要添加运行时(库、实用程序和其他软件)。LXD负责这一点,并正在为您下载NVidia容器运行时的适当版本,并将其附加到容器。下面是一个完整的示例,它在启用NVidia运行时时创建一个容器,然后将NVidia GPU设备添加到该容器中。

$ lxc launch ubuntu: mycontainer -c nvidia.runtime=true -c nvidia.driver.capabilities=all
Creating mycontainer
Starting mycontainer
$ lxc config device add mycontainer mynvidia gpu
Device mynvidia added to mycontainer
$ lxc shell mycontainer
root@mycontainer:~# nvidia-smi 
Mon Mar 15 13:37:24 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.102.04   Driver Version: 450.102.04   CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
...
$ 

如果您经常创建这样的GPU容器,那么可以使用GPU配置创建LXD配置文件。然后,如果您想要一个GPU容器,您可以使用nvidia配置文件启动容器,也可以将nvidia配置文件应用于现有容器,从而使其成为GPU容器!

$ cat mynvidiaLXDprofile.txt
config:
  nvidia.driver.capabilities: all
  nvidia.runtime: "true"
description: ""
devices:
  mygpu:
    type: gpu
name: nvidia
used_by: []
$ lxc profile create nvidia
Profile nvidia created
$ lxc profile edit nvidia < mynvidiaLXDprofile.txt
$ lxc launch ubuntu:20.04 mycontainer --profile default --profile nvidia
Creating mycontainer
Starting mycontainer
$ 

我们一直在使用LXD的snap包来完成上述所有说明。

 类似资料:
  • 我正在使用Ubuntu18:04和lxc/lxd蒸汽容器。它工作得很好,我遵循了本教程,并对网络内容做了一些更改。 https://blog.simos.info/running-steam-in-a-lxd-system-container/ 蒸汽适用于opengl游戏,但不适用于沃肯游戏。卢特里斯也一样。 主办方: 集装箱侧: ubuntu@steam:~$vulkaninfo OpenGL工

  • 我正在ubuntu 14.04上试验lxc。为了管理几个lxc实例,我使用python3lxc。使用pyhthon3 lxc,我确实无法克隆现有容器: 相应地, /var/lib/lxc.vanilla_clone没有根基使用 很好。(python3和lxc克隆,两者都是从sudo开始的。)这是python3_lxc中的一个bug或限制,还是我遗漏了什么? 事后思考:使用lxc。容器create需

  • 本文向大家介绍如何在RHEL 7.x / CentOS 7.x上使用Fail2Ban保护SSHD,包括了如何在RHEL 7.x / CentOS 7.x上使用Fail2Ban保护SSHD的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将学习如何在CentOS 7上使用Fail2ban安装和配置以确保SSH连接的安全,因为我们所有人都使用受保护的SSH连接到服务器,并且SSH会暴露于Inte

  • 我已经追了差不多一个星期了,都不能让它起作用。我已经在我的Ubuntu14.04笔记本电脑上安装了Docker1.0.1。当我启动RHEL/Fedora/CentOS容器并安装sshd时,我无法建立ssh连接。用Ubuntu容器做同样的事情很好。 以下是ssh尝试的调试输出: 用于连接到容器的命令:ssh mb@localhost-p 14022

  • 本文向大家介绍如何在CentOS / RHEL上使用EPEL存储库启用和安装第三方软件包,包括了如何在CentOS / RHEL上使用EPEL存储库启用和安装第三方软件包的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将尝试学习如何为Linux添加EPEL存储库。EPEL(企业Linux的额外软件包)是Fedora社区团队提供的基于开源和免费社区的开源存储库,它为Linux发行版提供了高质

  • 我已经看到了很多关于docker设置之类的东西,使用运行ES的unpriv容器。基本上,我不想建立一个简单的“prod集群”。总共有两个节点,一个物理节点(用于数据),一个用于Injest/Master(LXD容器)。 我遇到的问题是使用作为配置选项来锁定容器主/注入节点上的内存(避免交换)。 现在,考虑到ES用户不能调整主机上的u限制,这是有意义的。鉴于我知道这是危险的,有没有一种方法/如何确保