GPU 容器访问
在 Podman 容器中利用 GPU 功能提供了一种强大且高效的方法来运行 GPU 加速的工作负载。以下是如何设置您的操作系统以利用 GPU 的入门指南。
- Windows
- macOS (Silicon)
- Linux
先决条件
- NVIDIA 显卡 (Pascal 或更高)
- WSL2 (不支持 Hyper-V)
步骤
-
最新版本的 NVIDIA GPU 驱动程序 将支持 WSL 2。您无需在主机上为 NVIDIA 卡下载任何其他内容。
-
在 Podman 机器上安装 NVIDIA 容器工具包
Podman 机器需要安装 NVIDIA 容器工具包。
这可以通过按照 官方 NVIDIA 指南 或运行以下步骤来安装。
SSH 登录到 Podman 机器
$ podman machine ssh
运行以下命令 **在 Podman 机器上,而不是主机系统上**
$ curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
tee /etc/yum.repos.d/nvidia-container-toolkit.repo && \
yum install -y nvidia-container-toolkit && \
nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml && \
nvidia-ctk cdi list
当您创建或删除多实例 GPU (MIG) 设备或升级计算统一设备架构 (CUDA) 驱动程序时,可能会发生配置更改。在这种情况下,您必须生成新的容器设备接口 (CDI) 规范。
验证
要验证创建的容器是否可以访问 GPU,您可以在安装了 NVIDIA 驱动程序的容器中使用 `nvidia-smi`。
在主机上运行以下官方 NVIDIA 容器
$ podman run --rm --device nvidia.com/gpu=all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
示例输出
PS C:\Users\admin> podman run --rm --device nvidia.com/gpu=all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Fri Aug 16 18:58:14 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.36 Driver Version: 546.33 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| 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 NVIDIA GeForce RTX 3060 On | 00000000:07:00.0 On | N/A |
| 0% 34C P8 20W / 170W | 886MiB / 12288MiB | 1% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 33 G /Xwayland N/A |
+---------------------------------------------------------------------------------------+
故障排除
版本不匹配
您可能会在容器中遇到以下错误
# nvidia-smi
Failed to initialize NVML: N/A
此问题与容器设备接口 (CDI) 和已安装版本之间的不匹配有关。
要解决此问题,请在 Podman 机器中运行以下命令以生成新的 CDI 规范
nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
您可能需要重新启动 Podman 机器。
其他资源
先决条件
- macOS Silicon (M1 或更高)
步骤
**需要注意的是**,在 macOS 上使用“Metal”GPU 利用专门的软件来实现这一点。具体来说,是来自 Podman 机器中的 **虚拟化 GPU**,它提供从 Vulkan 和 MoltenVK 调用到 MSL (Metal 着色器语言),即 Apple 的 GPU 的翻译支持。
- 创建一个使用 `libkrun` 的 Podman 机器
验证
使用 GPU 功能需要一个包含 修补的 MESA 驱动程序 的专用 Dockerfile。
- 创建以下 Dockerfile
FROM fedora:40
USER 0
# Install the patched mesa-krunkit drivers
RUN dnf -y install \
dnf-plugins-core \
dnf -y copr enable slp/mesa-krunkit && \
dnf -y install mesa-vulkan-drivers vulkan-loader-devel vulkan-headers vulkan-tools vulkan-loader && \
dnf clean all
- 构建镜像
- 验证您可以通过运行测试容器来查看 GPU
$ podman run --rm -it --device /dev/dri --name gpu-info quay.io/slopezpa/fedora-vgpu vulkaninfo | grep "GPU"
示例输出
$ podman run --rm -it --device /dev/dri --name gpu-info quay.io/slopezpa/fedora-vgpu vulkaninfo | grep "GPU"
GPU id = 0 (Virtio-GPU Venus (Apple M1 Pro))
GPU id = 1 (llvmpipe (LLVM 17.0.6, 128 bits))
GPU0:
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Virtio-GPU Venus (Apple M1 Pro)
GPU1:
其他资源
请注意,虚拟化 GPU (Virtio-GPU Venus (Apple M1 Pro)) 仅支持 vulkan 计算着色器,不支持渲染/绘制。有关可用 GPU 功能的更多信息,请参阅容器内的 `vulkaninfo`。
先决条件
- NVIDIA 显卡 (Pascal 或更高)
步骤
- 为您的操作系统安装最新的 NVIDIA GPU 驱动程序。
- 按照 安装 NVIDIA 容器工具包 中与您的 Linux 发行版相关的说明进行操作。
- 为 Podman 生成 CDI 规范文件
此文件保存到 Linux 发行版的 /etc/cdi 或 /var/run/cdi 中,用于 Podman 检测您的 GPU(s)。
生成 CDI 文件
$ nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
检查生成的设备列表
$ nvidia-ctk cdi list
有关更多信息以及故障排除提示,请参阅 官方 NVIDIA CDI 指南。
验证
要验证创建的容器是否可以访问 GPU,您可以在安装了 NVIDIA 驱动程序的容器中使用 `nvidia-smi`。
在主机上运行以下官方 NVIDIA 容器
$ podman run --rm --device nvidia.com/gpu=all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi