NVIDIA Container Toolkit&容器工具安装配置指南

打印 上一主题 下一主题

主题 766|帖子 766|积分 2298

目录

一、安装
1.1 先决条件
1.2 使用 Apt 安装
1.3 使用 Yum 或 Dnf 安装
1.4 使用 Zypper 安装
二、配置
2.1 先决条件
2.2 配置 Docker
2.2.1 无根模式
2.3 配置 containerd(实用于 Kubernetes)
2.4 配置 containerd(用于 nerdctl)
2.5 配置 CRI-O
2.6 配置 Podman
三、运行工作负载示例
3.1 使用 Docker 运行工作负载示例
3.2 使用 Podman 运行示例工作负载
3.3 使用 containerd 或 CRI-O 运行示例工作负载
四、故障排除
4.1 使用 Docker 进行故障排除
生成调试日志
生成核心转储
共享调试信息
运行 apt update 时出现为选项 Signed-By 设置的值冲突错误
在 SELinux 下运行 nvidia-docker 包装器时出现权限被拒绝错误
NVML:权限不足和 SELinux


一、安装

1.1 先决条件

为您的 Linux 发行版安装 NVIDIA GPU 驱动步调。NVIDIA 建议使用您发行版的包管理器来安装驱动步调。
有关通过包管理器安装驱动步调的信息,请参阅 NVIDIA 驱动步调安装快速入门指南。
别的,您也可以通过下载 .run 安装步调来安装驱动步调。请参阅 NVIDIA 官方驱动步调页面。
1.2 使用 Apt 安装

配置生产仓库:
  1. #curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  2.   && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  3.     sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  4.     sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
复制代码
可选地,配置仓库以使用实验性包:
  1. #sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
复制代码
从仓库更新包列表:
  1. #sudo apt-get update
复制代码
安装 NVIDIA 容器工具包:
  1. sudo apt-get install -y nvidia-container-toolkit
复制代码
1.3 使用 Yum 或 Dnf 安装

配置生产仓库:
  1. curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  2.   sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
复制代码
可选地,配置仓库以使用实验性包:
  1. sudo yum-config-manager --enable nvidia-container-toolkit-experimental
复制代码
安装 NVIDIA 容器工具包:
  1. sudo yum install -y nvidia-container-toolkit
复制代码
1.4 使用 Zypper 安装

配置生产仓库:
  1. sudo zypper ar https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo
复制代码
可选地,配置仓库以使用实验性包:
  1. sudo zypper modifyrepo --enable nvidia-container-toolkit-experimental
复制代码
安装 NVIDIA 容器工具包包:
  1. sudo zypper --gpg-auto-import-keys install -y nvidia-container-toolkit
复制代码
二、配置

2.1 先决条件

您已安装了支持的容器引擎(Docker、Containerd、CRI-O、Podman)。
您已安装 NVIDIA 容器工具包。
2.2 配置 Docker

1、通过使用 nvidia-ctk 命令配置容器运行时:
  1. sudo nvidia-ctk runtime configure --runtime=docker
复制代码
nvidia-ctk 命令将修改主机上的 /etc/docker/daemon.json 文件。该文件已更新,以便 Docker 可以使用 NVIDIA 容器运行时。
2、重启 Docker 守护进程:
  1. sudo systemctl restart docker
复制代码
2.2.1 无根模式

要为运行在无根模式下的 Docker 配置容器运行时,请按照以下步骤进行:
1、通过使用 nvidia-ctk 命令配置容器运行时:
  1. nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json
复制代码
2、重启无根 Docker 守护进程:
  1. systemctl --user restart docker
复制代码
3、使用 sudo nvidia-ctk 命令配置 /etc/nvidia-container-runtime/config.toml:
  1. sudo nvidia-ctk config --set nvidia-container-cli.no-cgroups --in-place
复制代码
2.3 配置 containerd(实用于 Kubernetes)

1、通过使用 nvidia-ctk 命令配置容器运行时:
  1. sudo nvidia-ctk runtime configure --runtime=containerd
复制代码
nvidia-ctk 命令将修改主机上的 /etc/containerd/config.toml 文件。该文件已更新,以便 containerd 可以使用 NVIDIA 容器运行时。
2、重启 containerd:
  1. sudo systemctl restart containerd
复制代码
2.4 配置 containerd(用于 nerdctl)

无需额外配置。您可以直接运行 nerdctl run --gpus=all,无论是以 root 身份还是非 root 身份。您不需要为 Kubernetes 运行上述提到的 nvidia-ctk 命令。
另请参阅 nerdctl 文档。
2.5 配置 CRI-O

通过使用 nvidia-ctk 命令配置容器运行时:
  1. sudo nvidia-ctk runtime configure --runtime=crio
复制代码
nvidia-ctk 命令将修改主机上的 /etc/crio/crio.conf 文件。该文件已更新,以便 CRI-O 可以使用 NVIDIA 容器运行时。
2、重启 CRI-O 守护进程:
  1. sudo systemctl restart crio
复制代码
2.6 配置 Podman

对于 Podman,NVIDIA 建议使用 CDI 访问容器中的 NVIDIA 装备。
三、运行工作负载示例

3.1 使用 Docker 运行工作负载示例

在安装和配置工具包以及安装 NVIDIA GPU 驱动步调后,您可以通过运行示例工作负载来验证您的安装。
运行示例 CUDA 容器:
  1. sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
复制代码
您的输出应雷同于以下内容:
  1. +-----------------------------------------------------------------------------+
  2. | NVIDIA-SMI 535.86.10    Driver Version: 535.86.10    CUDA Version: 12.2     |
  3. |-------------------------------+----------------------+----------------------+
  4. | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
  5. | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
  6. |                               |                      |               MIG M. |
  7. |===============================+======================+======================|
  8. |   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
  9. | N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
  10. |                               |                      |                  N/A |
  11. +-------------------------------+----------------------+----------------------+
  12. +-----------------------------------------------------------------------------+
  13. | Processes:                                                                  |
  14. |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
  15. |        ID   ID                                                   Usage      |
  16. |=============================================================================|
  17. |  No running processes found                                                 |
  18. +-----------------------------------------------------------------------------+
复制代码
3.2 使用 Podman 运行示例工作负载

在安装和配置工具包(包括生成 CDI 规范)以及安装 NVIDIA GPU 驱动步调后,您可以通过运行示例工作负载来验证您的安装。
运行示例 CUDA 容器:
  1. podman run --rm --security-opt=label=disable \
  2.    --device=nvidia.com/gpu=all \
  3.    ubuntu nvidia-smi
复制代码
您的输出应雷同于以下内容:
  1. +-----------------------------------------------------------------------------+
  2. | NVIDIA-SMI 535.86.10    Driver Version: 535.86.10    CUDA Version: 12.2     |
  3. |-------------------------------+----------------------+----------------------+
  4. | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
  5. | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
  6. |                               |                      |               MIG M. |
  7. |===============================+======================+======================|
  8. |   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
  9. | N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
  10. |                               |                      |                  N/A |
  11. +-------------------------------+----------------------+----------------------+
  12. +-----------------------------------------------------------------------------+
  13. | Processes:                                                                  |
  14. |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
  15. |        ID   ID                                                   Usage      |
  16. |=============================================================================|
  17. |  No running processes found                                                 |
  18. +-----------------------------------------------------------------------------+
复制代码
3.3 使用 containerd 或 CRI-O 运行示例工作负载

这些运行时在 Kubernetes 中比桌面计算更常见。有关更多信息,请参阅 NVIDIA GPU Operator 文档中的《关于 NVIDIA GPU Operator》。
四、故障排除

4.1 使用 Docker 进行故障排除

生成调试日志

对于最常见的问题,您可以生成调试日志以帮助确定问题的根本原因。 要生成调试日志:


  • 编辑 under 下的运行时配置,并取消表明该行。/etc/nvidia-container-runtime/config.tomldebug=...
  • 再次运行容器以重现问题并生成日志。
生成核心转储

如果发生严肃故障,可以主动生成核心转储,并帮助解决问题。 请参考 core(5) 来生成这些。 详细而言,请检查以下项目:


  • /proc/sys/kernel/core_pattern设置正确,并指向具有写入访问权限的某个位置。
  • ulimit -c设置为公道的默认值。
如果进程变得无相应,也可以使用 gcore(1)。nvidia-container-cli
共享调试信息

您可以通过拖放到批评部分来将特定输出附加到您的问题中。
运行 apt update 时出现为选项 Signed-By 设置的值冲突错误

在 Ubuntu 或基于 Debian 的系统上按照安装说明操作并更新包存储库时,可能会触发以下错误:
     
  1. $ sudo apt-get update
  2. E: Conflicting values set for option Signed-By regarding source https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/ /: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg !=
  3. E: The list of sources could not be read.
复制代码
   这是由两件事共同引起的:

  • 用于创建存储库列表文件的安装说明的最新更新/etc/apt/sources.list.d/nvidia-container-toolkit.list
  • 弃用指令包含在 repo 列表文件中的含义apt-keysigned-by
如果触发此错误,则表示存在对同一存储库的另一个引用,该引用未指定指令。 最有可能的候选项是一个或多个文件 、 或 文件夹。signed-bylibnvidia-container.listnvidia-docker.listnvidia-container-runtime.list/etc/apt/sources.list.d/
可以通过运行并检查输出来获取冲突的存储库引用:
     
  1. $ grep "nvidia.github.io" /etc/apt/sources.list.d/*
复制代码
   可以通过运行以下命令来获取具有(可能)冲突引用的文件列表:
     
  1. $ grep -l "nvidia.github.io" /etc/apt/sources.list.d/* | grep -vE "/nvidia-container-toolkit.list\$"
复制代码
   删除列出的文件应该可以解决原始错误。
在 SELinux 下运行 nvidia-docker 包装器时出现权限被拒绝错误

在 SELinux 情况中运行包装器(由包提供)时 人们可能会看到以下错误nvidia-dockernvidia-docker2
     
  1. $ sudo nvidia-docker run --gpus=all --rm nvcr.io/nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
  2. /bin/nvidia-docker: line 34: /bin/docker: Permission denied
  3. /bin/nvidia-docker: line 34: /bin/docker: Success
复制代码
   SELinux 报告以下错误:
     
  1. SELinux is preventing /usr/bin/bash from entrypoint access on the file /usr/bin/docker. For complete SELinux messages run: sealert -l 43932883-bf2e-4e4e-800a-80584c62c218
  2. SELinux is preventing /usr/bin/bash from entrypoint access on the file /usr/bin/docker.
  3. *****  Plugin catchall (100. confidence) suggests   **************************
  4. If you believe that bash should be allowed entrypoint access on the docker file by default.
  5. Then you should report this as a bug.
  6. You can generate a local policy module to allow this access.
  7. Do
  8. allow this access for now by executing:
  9. # ausearch -c 'nvidia-docker' --raw | audit2allow -M my-nvidiadocker
  10. # semodule -X 300 -i my-nvidiadocker.pp
复制代码
   这是由于将命令行参数转发到可实行文件,并进行了微小的修改。nvidia-dockerdocker
为了解决这个问题,建议直接使用指定运行时的命令:dockernvidia
     
  1. $ sudo docker run --gpus=all --runtime=nvidia --rm nvcr.io/nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
复制代码
   或者,可以按照建议生成当地 SELinux 策略:
     
  1. $ ausearch -c 'nvidia-docker' --raw | audit2allow -M my-nvidiadocker
  2. $ semodule -X 300 -i my-nvidiadocker.pp
复制代码
   NVML:权限不足和 SELinux

根据您的 Red Hat Enterprise Linux 系统如何配置 SELinux,您可能需要这样做 在 Docker 或 Podman 命令行上指定以共享 无法重新标志的主机操作系统。 如果没有此选项,则在运行 GPU 容器时可能会观察到以下错误:。 但是,使用此选项将禁用容器中的 SELinux 分离,并实行容器 在无穷制类型中。 检察系统上的 SELinux 策略。--security-opt=label=disableFailed to initialize NVML: Insufficient Permissions

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表