首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-06 02:29
  • 3957
  • 7358
blog.csdn.net

目录

一、安装

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

可选地,配置仓库以使用实验性包:

#sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

从仓库更新包列表:

#sudo apt-get update

安装 NVIDIA 容器工具包:

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

可选地,配置仓库以使用实验性包:

sudo yum-config-manager --enable nvidia-container-toolkit-experimental

安装 NVIDIA 容器工具包:

sudo yum install -y nvidia-container-toolkit

1.4 使用 Zypper 安装

配置生产仓库:

sudo zypper ar https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo

可选地,配置仓库以使用实验性包:

sudo zypper modifyrepo --enable nvidia-container-toolkit-experimental

安装 NVIDIA 容器工具包包:

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 命令配置容器运行时:

sudo nvidia-ctk runtime configure --runtime=docker

nvidia-ctk 命令将修改主机上的 /etc/docker/daemon.json 文件。该文件已更新,以便 Docker 可以使用 NVIDIA 容器运行时。

2、重启 Docker 守护进程:

sudo systemctl restart docker

2.2.1 无根模式

要为运行在无根模式下的 Docker 配置容器运行时,请按照以下步骤进行:

1、通过使用 nvidia-ctk 命令配置容器运行时:

nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json

2、重启无根 Docker 守护进程:

systemctl --user restart docker

3、使用 sudo nvidia-ctk 命令配置 /etc/nvidia-container-runtime/config.toml:

sudo nvidia-ctk config --set nvidia-container-cli.no-cgroups --in-place

2.3 配置 containerd(适用于 Kubernetes)

1、通过使用 nvidia-ctk 命令配置容器运行时:

sudo nvidia-ctk runtime configure --runtime=containerd

nvidia-ctk 命令将修改主机上的 /etc/containerd/config.toml 文件。该文件已更新,以便 containerd 可以使用 NVIDIA 容器运行时。

2、重启 containerd:

sudo systemctl restart containerd

2.4 配置 containerd(用于 nerdctl)

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

另请参阅 nerdctl 文档。

2.5 配置 CRI-O

通过使用 nvidia-ctk 命令配置容器运行时:

sudo nvidia-ctk runtime configure --runtime=crio

nvidia-ctk 命令将修改主机上的 /etc/crio/crio.conf 文件。该文件已更新,以便 CRI-O 可以使用 NVIDIA 容器运行时。

2、重启 CRI-O 守护进程:

sudo systemctl restart crio

2.6 配置 Podman

对于 Podman,NVIDIA 建议使用 CDI 访问容器中的 NVIDIA 设备。

三、运行工作负载示例

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

在安装和配置工具包以及安装 NVIDIA GPU 驱动程序后,您可以通过运行示例工作负载来验证您的安装。

运行示例 CUDA 容器:

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.

这是由两件事共同引起的:

  1. 用于创建存储库列表文件的安装说明的最新更新/etc/apt/sources.list.d/nvidia-container-toolkit.list

  2. 弃用指令包含在 repo 列表文件中的含义apt-keysigned-by

如果触发此错误,则表示存在对同一存储库的另一个引用,该引用未指定指令。 最有可能的候选项是一个或多个文件 、 或 文件夹。signed-bylibnvidia-container.listnvidia-docker.listnvidia-container-runtime.list/etc/apt/sources.list.d/

可以通过运行并检查输出来获取冲突的存储库引用:

$ grep "nvidia.github.io" /etc/apt/sources.list.d/*

可以通过运行以下命令来获取具有(可能)冲突引用的文件列表:

$ 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

$ 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

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树容器(docker)docker container 操作20092 人正在系统学习中
注:本文转载自blog.csdn.net的技术瘾君子1573的文章"https://blog.csdn.net/qq_27815483/article/details/140839144"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

122
操作系统
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top