1.nvidia-container-runtime 和 nvidia-container-toolkit

两者具体关系:

1.1 nvidia-container-toolkit - 是整个工具包的集合

  • 包含所有必要的工具和库
  • 现代化的统一包管理方式
  • 替代了旧的 nvidia-docker2 方案

1.2 nvidia-container-runtime - 是工具包中的一个组件

  • 实际的容器运行时可执行文件
  • 被 Docker 调用来处理 GPU 相关的容器启动
nvidia-container-toolkit (工具包)
├── nvidia-container-runtime (运行时)
├── nvidia-container-runtime-hook (钩子)
├── nvidia-ctk (配置工具)
└── libnvidia-container (底层库)

2.常见问题

2.1 unable to locate package nvidia-container-toolkit
  • 执行 nvidia-smi 确定 cuda 正确安装:

在这里插入图片描述

  • 添加官方仓库:
# 安装依赖
sudo apt-get update
sudo apt-get install -y curl
 
# 添加密钥和仓库
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
  • 安装:
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
  • 指令验证:
apt list --installed

在这里插入图片描述

  • 测试 Triton Server GPU 支持:
docker run --gpus all --rm nvcr.io/nvidia/tritonserver:24.01-py3 nvidia-smi

在这里插入图片描述

  • 检查 Docker 的 GPU 支持配置:
# 检查 Docker 是否正确配置了 GPU 运行时
docker info | grep -i nvidia

如果有下面的输出说明正确配置了 GPU 运行时:

 Runtimes: io.containerd.runc.v2 nvidia runc
 Default Runtime: nvidia

如果没有上述输出,则执行下面的命令继续检查:

# 检查 nvidia-container-toolkit 是否安装
which nvidia-container-runtime
# 输出内容:/usr/bin/nvidia-container-runtime

检查 Docker daemon 配置:

cat /etc/docker/daemon.json
{
"registry-mirrors": [
  "https://registry.docker-cn.com",
  "https://s4uv0fem.mirror.aliyuncs.com",
  "https://docker.1ms.run",
  "https://registry.dockermirror.com",
  "https://docker.m.daocloud.io",
  "https://docker.kubesre.xyz",
  "https://docker.mirrors.ustc.edu.cn",
  "https://docker.1panel.live",
  "https://docker.kejilion.pro",
  "https://dockercf.jsdelivr.fyi",
  "https://docker.jsdelivr.fyi",
  "https://dockertest.jsdelivr.fyi",
  "https://hub.littlediary.cn",
  "https://proxy.1panel.live",
  "https://docker.1panelproxy.com",
  "https://image.cloudlayer.icu",
  "https://docker.1panel.top",
  "https://docker.anye.in",
  "https://docker-0.unsee.tech",
  "https://hub.rat.dev",
  "https://hub3.nat.tf",
  "https://docker.1ms.run",
  "https://func.ink",
  "https://a.ussh.net",
  "https://docker.hlmirror.com",
  "https://lispy.org",
  "https://docker.yomansunter.com",
  "https://docker.xuanyuan.me",
  "https://docker.mybacc.com",
  "https://dytt.online",
  "https://docker.xiaogenban1993.com",
  "https://dockerpull.cn",
  "https://docker.zhai.cm",
  "https://dockerhub.websoft9.com",
  "https://dockerpull.pw",
  "https://docker-mirror.aigc2d.com",
  "https://docker.sunzishaokao.com",
  "https://docker.melikeme.cn"
  ]
}

可以明显的看到,Docker daemon 配置文件缺少 NVIDIA runtime 配置,更新配置文件即可:

(1).备份当前配置:

sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup

(2).更新配置文件以包含 NVIDIA runtime:

sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://s4uv0fem.mirror.aliyuncs.com",
    "https://docker.1ms.run",
    "https://registry.dockermirror.com",
    "https://docker.m.daocloud.io",
    "https://docker.kubesre.xyz",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.1panel.live",
    "https://docker.kejilion.pro",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://hub.littlediary.cn",
    "https://proxy.1panel.live",
    "https://docker.1panelproxy.com",
    "https://image.cloudlayer.icu",
    "https://docker.1panel.top",
    "https://docker.anye.in",
    "https://docker-0.unsee.tech",
    "https://hub.rat.dev",
    "https://hub3.nat.tf",
    "https://docker.1ms.run",
    "https://func.ink",
    "https://a.ussh.net",
    "https://docker.hlmirror.com",
    "https://lispy.org",
    "https://docker.yomansunter.com",
    "https://docker.xuanyuan.me",
    "https://docker.mybacc.com",
    "https://dytt.online",
    "https://docker.xiaogenban1993.com",
    "https://dockerpull.cn",
    "https://docker.zhai.cm",
    "https://dockerhub.websoft9.com",
    "https://dockerpull.pw",
    "https://docker-mirror.aigc2d.com",
    "https://docker.sunzishaokao.com",
    "https://docker.melikeme.cn"
  ],
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  },
  "default-runtime": "nvidia"
}
EOF
  • 重启 docker 服务:
sudo systemctl restart docker

3.启动

  • 配置更新后,可以直接启动 Triton Server:
docker run --gpus all --rm -p8000:8000 -p8001:8001 -p8002:8002 \
  -v $(pwd)/resnet50:/models \
  nvcr.io/nvidia/tritonserver:24.01-py3 \
  tritonserver --model-repository=/models --log-verbose=1

在这里插入图片描述

Tips:科学上网!

公众号:TensorLink

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐