1. 关于 NVIDIA Container Runtime for Docker

NVIDIA Container Runtime for Docker 是一种改进的机制,允许 Docker Engine 支持 GPU 加速容器使用的 NVIDIA GPU。这个新的运行时取代了用于 NVIDIA GPU 的 Docker Engine Utility。

您现在可以选择升级您的 DGX 系统环境以使用 NVIDIA Container Runtime for Docker。

重要提示: 某些应用程序,例如 Kubernetes 以及 CUDA 10 NGC 容器,需要新的运行时。
用于 NVIDIA GPU 的 Docker Engine Utility 通过安装 nvidia-docker 软件包实现。要升级您的 DGX 系统环境以使用 NVIDIA Container Runtime for Docker,您必须安装 nvidia-docker2 软件包。1

本文档提供执行升级的说明。

先决条件

本文档中的说明要求您的 DGX 系统已安装 DGX OS 软件版本 3.1,版本 3.1.6 或更高版本。要确定系统上安装的 DGX OS 软件版本,请运行以下命令。

$ grep VERSION /etc/dgx-release

这将显示从 ISO 镜像 (DGX_SWBUILD_VERSION) 安装在系统上的版本,以及系统上执行的任何后续更新 (DGX_OTA_VERSION)。列出的最新版本是当前安装的版本。

DGX-1 示例

DGX_NAME="DGX Server" 
DGX_PRETTY_NAME="NVIDIA DGX Server" 
DGX_SWBUILD_DATE="2017-09-02" 
DGX_SWBUILD_VERSION="3.1.2" 
... 
DGX_OTA_VERSION="3.1.6" 
DGX_OTA_DATE="Wed May 9 13:47:33 PDT 2018" 

在此示例中,安装的版本为 3.1.6。

注意: 安装了 DGX OS 版本 4 的 DGX 系统自动包含 NVIDIA Container Runtime for Docker。

如果您需要更新您的 DGX OS 软件,请参阅 DGX-1 的发行说明和升级说明,或 DGX Station 的DGX Station 用户指南

2. 升级过程中会发生什么?

只有 GPU 加速容器在升级过程中会受到影响。其他容器保持不变。具体来说,升级过程执行以下操作。
  • 停止所有正在运行的 GPU 加速容器,这些容器是使用 nvidia-docker run 启动的。
  • 提交系统上的所有 GPU 加速容器。

    镜像以以下命名格式保存在文件中

    image_name-container_id

    例如,使用镜像 nvcr.io/nvidia/caffe:18.05-py2 启动的容器,容器 ID 为 a4093a4040de 将保存为 nvcr.io/nvidia/caffe:18.05-py2-a4093a4040de

  • 在提交容器后,移除容器。
重要提示: 如果您编辑了 /etc/docker/daemon.json 文件,您的编辑可能会被升级覆盖。请参阅执行升级部分,了解有关管理更改的详细信息。

3. 执行升级

升级到新的运行时涉及更新 nvidia-docker 软件包,然后安装 nvidia-docker2 软件包。

这些说明适用于安装了用于 NVIDIA GPU 的 Docker Engine Utility 的 DGX 系统。要确定您的安装,请运行以下命令。

$ nvidia-docker version 

如果命令返回 2.0.x,则您的系统已包含 NVIDIA Container Runtime for Docker 的升级,无需进一步操作。

  1. 停止、提交,然后移除所有您想要保留的 GPU 加速容器。

    虽然升级过程会提交所有 GPU 加速容器,但您应该自己提交容器作为故障保护。之后移除容器将避免重复副本。

  2. 更新可用软件包及其版本的列表。
    $ sudo apt update
  3. 验证 nvidia-docker 软件包是否已更新到至少版本 1.0.1-3。
    $ dpkg -l nvidia-docker
    如果版本低于 1.0.1-3,则按如下方式更新 nvidia-docker 软件包。
    $ sudo apt install nvidia-docker
    更新后的软件包确保 NVIDIA Container Runtime for Docker 的升级能够干净可靠地执行。
  4. 安装 nvidia-docker2 软件包。
    $ sudo apt install nvidia-docker2
    您可能会看到如下配置选择
    Configuration file '/etc/docker/daemon.json'
     ==> File on system created by you or by a script.
     ==> File also in package provided by package maintainer.
     What would you like to do about it ? Your options are:
     Y or I : install the package maintainer's version
     N or O : keep your currently-installed version
     D : show the differences between the versions
     Z : start a shell to examine the situation
     The default action is to keep your current version.
     *** daemon.json (Y/I/N/O/D/Z) [default=N] ? 
    在提示符下按 Y 以安装 nvidia-docker2 配置文件。您的原始文件将重命名为 /etc/docker/daemon.json.dpkg-old。之后您可以合并内容以继续使用您的配置更改。
  5. 重启 Docker。
    $ sudo systemctl restart docker
  6. (可选)如果系统可以访问公共 Docker 仓库,请验证升级是否成功。
    $ sudo docker run --runtime=nvidia --rm nvcr.io/nvidia/cuda:9.0-devel-ubuntu16.04 nvidia-smi

4. 使用 NVIDIA Container Runtime for Docker

注意: 这些说明假设用户是 docker 组的成员。有关详细信息,请参阅DGX-1 用户指南DGX- Station 用户指南中的相关章节。
更新到 NVIDIA Container Runtime for Docker 后,您可以通过以下方式之一运行 GPU 加速容器。
  • 使用 docker run 并指定 runtime=nvidia
    $ docker run --runtime=nvidia ...
  • 使用 nvidia-docker run
    $ nvidia-docker run ...

    新软件包提供向后兼容性,因此您仍然可以使用此命令运行 GPU 加速容器,并且将使用新的运行时。

  • 使用 docker run,并将 nvidia 作为默认运行时。

    您可以将 nvidia 设置为默认运行时,例如,通过将以下行添加到 /etc/docker/daemon.json 配置文件作为第一个条目。

    "default-runtime": "nvidia",

    以下是在 JSON 文件中添加行的示例。进行此更改时,请勿删除任何预先存在的内容。

    {
     "default-runtime": "nvidia",
      "runtimes": {
         "nvidia": {
             "path": "/usr/bin/nvidia-container-runtime",
             "runtimeArgs": []
         }
     },
    
    }

    然后您可以使用 docker run 运行 GPU 加速容器。

    $ docker run ...
    警告
    如果在 nvidia 设置为默认运行时的情况下构建 Docker 镜像,请确保 Dockerfile 执行的构建脚本指定容器将需要的 GPU 架构。否则可能会导致容器仅针对构建它的 GPU 架构进行优化。指定 GPU 架构的说明取决于应用程序,并且超出了本文档的范围。有关指导,请查阅具体的应用程序构建过程。

声明

声明

本指南中的信息以及本指南中引用的 NVIDIA 文档中包含的所有其他信息均“按原样”提供。 NVIDIA 不对产品信息作出任何明示、暗示、法定或其他方面的保证,并明确否认对产品的非侵权性、适销性和特定用途适用性的所有暗示保证。 尽管客户可能因任何原因遭受任何损害,但 NVIDIA 对本指南中描述的产品的总累计责任应根据 NVIDIA 产品销售条款和条件进行限制。

本指南中描述的 NVIDIA 产品不具有容错性,并非设计、制造或旨在用于与任何系统的设计、建造、维护和/或操作相关的用途,如果此类系统的使用或故障可能导致威胁人类生命安全或严重人身伤害或财产损失的情况(包括,例如,与任何核、航空电子、生命支持或其他生命攸关的应用相关的用途)。 NVIDIA 明确否认对此类高风险用途的任何明示或暗示的适用性保证。 NVIDIA 不对客户或任何第三方承担任何全部或部分因该等高风险用途引起的索赔或损害赔偿责任。

NVIDIA 不声明或保证本指南中描述的产品在未经进一步测试或修改的情况下适用于任何特定用途。 NVIDIA 不一定对每个产品的所有参数进行测试。 客户全权负责确保产品适合并适用于客户计划的应用,并为该应用进行必要的测试,以避免应用或产品的默认设置。 客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本指南中包含的附加或不同条件和/或要求。 NVIDIA 不接受与任何可能基于或归因于以下原因的默认设置、损坏、成本或问题相关的任何责任:(i) 以任何违反本指南的方式使用 NVIDIA 产品,或 (ii) 客户产品设计。

除客户有权将本指南中的信息与产品一起使用外,NVIDIA 在本指南下未授予任何其他明示或暗示的许可。 只有在获得 NVIDIA 书面批准、未经修改地复制且附带所有相关条件、限制和声明的情况下,才允许复制本指南中的信息。

商标

NVIDIA、NVIDIA 徽标、DGX、DGX-1、DGX-2 和 DGX Station 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。 其他公司和产品名称可能是与其关联的各自公司的商标。

1 因此,NVIDIA Container Runtime for Docker 也被称为更新后的软件包“nvidia-docker2”。