目录
一、安装
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 安装
配置生产仓库:
- #curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
- && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
- sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
- 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
复制代码 从仓库更新包列表:
安装 NVIDIA 容器工具包:
- sudo apt-get install -y nvidia-container-toolkit
复制代码 1.3 使用 Yum 或 Dnf 安装
配置生产仓库:
- curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
- 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
复制代码 您的输出应雷同于以下内容:
- +-----------------------------------------------------------------------------+
- | NVIDIA-SMI 535.86.10 Driver Version: 535.86.10 CUDA Version: 12.2 |
- |-------------------------------+----------------------+----------------------+
- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
- | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
- | | | MIG M. |
- |===============================+======================+======================|
- | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
- | N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
- | | | N/A |
- +-------------------------------+----------------------+----------------------+
- +-----------------------------------------------------------------------------+
- | Processes: |
- | GPU GI CI PID Type Process name GPU Memory |
- | ID ID Usage |
- |=============================================================================|
- | No running processes found |
- +-----------------------------------------------------------------------------+
复制代码 3.2 使用 Podman 运行示例工作负载
在安装和配置工具包(包括生成 CDI 规范)以及安装 NVIDIA GPU 驱动步调后,您可以通过运行示例工作负载来验证您的安装。
运行示例 CUDA 容器:
- podman run --rm --security-opt=label=disable \
- --device=nvidia.com/gpu=all \
- ubuntu nvidia-smi
复制代码 您的输出应雷同于以下内容:
- +-----------------------------------------------------------------------------+
- | NVIDIA-SMI 535.86.10 Driver Version: 535.86.10 CUDA Version: 12.2 |
- |-------------------------------+----------------------+----------------------+
- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
- | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
- | | | MIG M. |
- |===============================+======================+======================|
- | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
- | N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
- | | | N/A |
- +-------------------------------+----------------------+----------------------+
- +-----------------------------------------------------------------------------+
- | Processes: |
- | GPU GI CI PID Type Process name GPU Memory |
- | ID ID Usage |
- |=============================================================================|
- | No running processes found |
- +-----------------------------------------------------------------------------+
复制代码 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 的系统上按照安装说明操作并更新包存储库时,可能会触发以下错误:
- $ sudo apt-get update
- 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 !=
- 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/
可以通过运行并检查输出来获取冲突的存储库引用:
- $ 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
- $ sudo nvidia-docker run --gpus=all --rm nvcr.io/nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
- /bin/nvidia-docker: line 34: /bin/docker: Permission denied
- /bin/nvidia-docker: line 34: /bin/docker: Success
复制代码 SELinux 报告以下错误:
- 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
- SELinux is preventing /usr/bin/bash from entrypoint access on the file /usr/bin/docker.
- ***** Plugin catchall (100. confidence) suggests **************************
- If you believe that bash should be allowed entrypoint access on the docker file by default.
- Then you should report this as a bug.
- You can generate a local policy module to allow this access.
- Do
- allow this access for now by executing:
- # ausearch -c 'nvidia-docker' --raw | audit2allow -M my-nvidiadocker
- # 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 策略:
- $ ausearch -c 'nvidia-docker' --raw | audit2allow -M my-nvidiadocker
- $ 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企服之家,中国第一个企服评测及商务社交产业平台。 |