使用 Podman Desktop 在 Windows 11 WSL2 环境中启动宿主机的 GPU 进行深度学习
概述
本文将指导您如何利用 Podman Desktop 安装时提供的 WSL2 环境,来启动宿主机的 GPU 进行深度学习任务。
前提条件
确保您的 Windows 11 已经启用了 WSL2 和虚拟化功能,并且安装了最新版本的 NVIDIA 驱动程序(支持 WSL2)。NVIDIA 驱动程序通常会自动为 WSL2 添加 GPU 支持,因此不需要单独下载任何内容。
配置 WSL2 环境以使用 NVIDIA GPU
尽管 Podman Desktop 已经自动配置了大部分环境,为了能够使用宿主机的 GPU,还需要额外的步骤来安装 nvidia-container-toolkit
。
安装 NVIDIA 容器工具包
进入通过 Podman Desktop 创建的 WSL2 环境后,执行以下命令来安装 NVIDIA 容器工具包:
# 更新包列表并安装所需的依赖项
sudo apt-get update && sudo apt-get install -y curl gnupg2 software-properties-common# 添加 NVIDIA 容器工具包仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.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# 安装 NVIDIA 容器工具包
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit# 应用更改并重启相关服务(如果适用)
sudo systemctl restart podman# 生成新的容器设备接口 (CDI) 规范文件
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
验证 NVIDIA 容器工具包安装
安装完成后,可以通过检查通过 Podman Desktop 创建的 WSL2 环境是否能够成功加载 NVIDIA 模块来验证安装:
nvidia-smi
该命令应该返回有关 GPU 设备的信息,而不是错误消息。
使用 Podman Desktop 启动 GPU 加速的容器
现在您可以使用 Podman Desktop 来启动包含 GPU 支持的容器。例如,拉取一个 PyTorch 容器镜像并在其中测试 GPU 是否可用:
验证命令
在 windows11 终端中执行以下命令,以拉取一个支持 GPU 的 PyTorch 容器镜像,并检查 CUDA 是否可用:
# 拉取包含 GPU 支持的 PyTorch 容器镜像
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 |
+---------------------------------------------------------------------------------------+
则表明您的 WSL2 环境已经正确配置,并且 Podman 能够利用宿主机的 GPU 来加速深度学习任务。
未解决的问题:无法使用 podman-compose
方式启用 GPU
在尝试使用 podman-compose
来启用 GPU 时遇到了问题。具体表现为,即使在 docker-compose.yml
文件中设置了 deploy.resources.reservations.devices
或者直接使用 --gpus
标志,也无法成功将 GPU 分配给容器。这可能是由于 podman-compose
当前版本对 GPU 支持有限或者配置不正确导致的。
为了解决这个问题,您可以考虑以下方法:
- 使用命令行方式:暂时避开
podman-compose
,直接使用podman run
命令配合--gpus
参数来启动容器,如上述验证命令所示。
参考
- GPU 容器访问 | Podman 桌面 - Podman 桌面版