Toolkit 将宿主机的设备文件和驱动库提供给容器。使用宿主机的 nvidia-smi 检查驱动,
使用临时容器中的 nvidia-smi 检查设备文件、驱动库挂载和容器运行时。
保存 NVIDIA 的签名密钥:
| sudo apt-get update
sudo apt-get install ca-certificates curl gpg
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor --yes \
-o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
sudo chmod 0644 /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
|
实验室使用 USTC 的 stable 仓库。experimental 仓库保留为注释:
| /etc/apt/sources.list.d/nvidia-container-toolkit.list |
|---|
| deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/$(ARCH) /
#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn/libnvidia-container/experimental/deb/$(ARCH) /
|
安装 Toolkit。APT 会同时安装 libnvidia-container1、libnvidia-container-tools 和
nvidia-container-toolkit-base:
| sudo apt-get update
sudo apt-get install nvidia-container-toolkit
|
检查签名密钥、软件源、软件包和命令:
| gpg --show-keys /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
grep -F 'libnvidia-container/stable' /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-cache policy nvidia-container-toolkit
dpkg-query -W libnvidia-container1 libnvidia-container-tools \
nvidia-container-toolkit-base nvidia-container-toolkit
nvidia-ctk --version
|
实验室使用 CDI 描述可用的 NVIDIA 设备。启用随驱动和设备变化自动更新 CDI 文件的
systemd 单元:
| sudo systemctl enable --now nvidia-cdi-refresh.path
sudo systemctl start nvidia-cdi-refresh.service
|
检查生成结果:
| systemctl is-active nvidia-cdi-refresh.path
nvidia-ctk cdi list
|
使用 nvidia-ctk 将 nvidia runtime 合并到现有的 /etc/docker/daemon.json。随后按照
Docker daemon 配置检查完整文件:
| sudo nvidia-ctk runtime configure --runtime=docker
sudo dockerd --validate --config-file=/etc/docker/daemon.json
sudo systemctl reload docker
docker info --format '{{json .Runtimes}}'
|
在临时容器中检查 GPU。镜像中的 nvidia-smi 使用宿主机驱动,这一步同时检查
设备文件、驱动库挂载和 Docker 运行时:
| docker run --rm --gpus all ubuntu:24.04 nvidia-smi -L
|
维护
容器看不到 GPU
先在宿主机运行 nvidia-smi -L。宿主机也失败时,按
NVIDIA Driver排查。宿主机正常时,依次比较
设备、CDI 和 Docker:
| ls -l /dev/nvidia[0-9]*
nvidia-ctk cdi list
docker info | sed -n '/Runtimes/p'
docker run --rm --gpus all ubuntu:24.04 nvidia-smi -L
|
CDI 没有列出 nvidia.com/gpu 时重新生成配置,并检查 systemd 单元日志:
| sudo systemctl start nvidia-cdi-refresh.service
journalctl -u nvidia-cdi-refresh.service -n 100 --no-pager
nvidia-ctk cdi list
|
只有某个 Compose 项目失败时,检查该项目最终生成的配置。实验室的
monitor-dcgm-exporter 使用 GPU device reservation:
| cd /srv/docker/monitor
docker compose config
docker inspect monitor-dcgm-exporter --format '{{json .HostConfig.DeviceRequests}}'
|
驱动升级或节点迁移后容器失效
正在运行的容器可能仍引用升级前的驱动库。重启节点后重新生成 CDI,并重建 GPU 容器:
| sudo systemctl start nvidia-cdi-refresh.service
cd /srv/docker/monitor
docker compose up -d --force-recreate dcgm-exporter
docker compose logs --tail=100 dcgm-exporter
|
dcgm-exporter 用于暴露监控指标。运行 dcgmi diag 需要独立的 DCGM Host Engine,当前
容器没有提供这个组件。