DIGITS 容器入门
摘要
您可以拉取(下载)已构建、测试、调优并可立即运行的 NVIDIA 容器。DIGITS 容器包含构建框架所需的代码,以便您可以更改其内部结构。在运行 DIGITS 之前,您必须首先满足一些设置要求。本指南提供有关拉取和使用 DIGITS 容器的说明。
DIGITS(深度学习 GPU 训练系统)是一个用于训练深度学习模型的 Web 应用程序,目前支持 TensorFlow 框架。DIGITS 将深度学习的力量带给工程师和数据科学家。
DIGITS 不是框架。DIGITS 是 TensorFlow 的包装器;它为这些框架提供图形化的 Web 界面,而不是直接在命令行上处理它们。
DIGITS 可用于快速训练高度精确的深度神经网络 (DNN),以进行图像分类、分割、目标检测任务等。DIGITS 简化了常见的深度学习任务,例如管理数据、在多 GPU 系统上设计和训练神经网络、通过高级可视化实时监控性能,以及从结果浏览器中选择性能最佳的模型进行部署。DIGITS 是完全交互式的,因此数据科学家可以专注于设计和训练网络,而不是编程和调试。DIGITS 可通过多种渠道获得,例如:
- GitHub 下载
- NVIDIA 的 Docker 存储库,
nvcr.io
本指南将引导您完成从 NVIDIA 的 Docker 存储库下载的 DIGITS 容器的启动和运行过程。要单独安装 DIGITS 应用程序,请参阅《DIGITS 安装指南》。
NVIDIA Docker 存储库 nvcr.io
中提供的容器镜像已预先构建并安装到 /usr/local/python/
目录中。
DIGITS 还包括 NVIDIA TensorFlow 深度学习框架。
在从 NGC 注册中心拉取容器之前,您必须安装 Docker 和 nvidia-docker。对于 DGX 用户,这在《准备使用 NVIDIA 容器入门指南》中进行了解释。
对于 DGX 以外的用户,请根据您的平台按照 NVIDIA® GPU Cloud™ (NGC) 注册中心的 nvidia-docker 安装文档进行操作。
您还必须具有访问权限并登录到 NGC 注册中心,如《NGC 入门指南》中所述。您可以在四个存储库中找到 NGC Docker 容器。
-
nvcr.io/nvidia
- 深度学习框架容器存储在
nvcr.io/nvidia
存储库中。 -
nvcr.io/hpc
- HPC 容器存储在
nvcr.io/hpc
存储库中。 -
nvcr.io/nvidia-hpcvis
- HPC 可视化容器存储在
nvcr.io/nvidia-hpcvis
存储库中。 -
nvcr.io/partner
- 合作伙伴容器存储在
nvcr.io/partner
存储库中。目前,合作伙伴容器专注于深度学习或机器学习,但这并不意味着它们仅限于这些类型的容器。
关于此任务
在您的系统上,在运行应用程序之前,请使用 docker pull
命令确保安装了最新的镜像。拉取完成后,您可以运行应用程序。这是因为 nvidia-docker 确保使用与主机匹配的驱动程序并为容器配置驱动程序。如果没有 nvidia-docker,您在尝试运行容器时很可能会遇到错误。
步骤
- 针对您需要的容器的适用版本发出命令。以下命令假定您要拉取最新的容器。
docker pull nvcr.io/nvidia/digits:19.xx-tensorflow
- 打开命令提示符并粘贴拉取命令。容器镜像的拉取开始。确保拉取成功完成,然后再继续下一步。
- 运行应用程序。启动应用程序的典型命令是
docker run --gpus all -it --rm –v local_dir:container_dir nvcr.io/nvidia/digits:<xx.xx>-<framework>
-it
表示交互式--rm
表示完成后删除应用程序–v
表示挂载目录local_dir
是您主机系统中的目录或文件(绝对路径),您希望从容器内部访问。例如,以下路径中的local_dir
是/home/jsmith/data/mnist
。-v /home/jsmith/data/mnist:/data/mnist
如果您在容器内部,例如
ls /data/mnist
,您将看到与从容器外部发出ls /home/jsmith/data/mnist
命令时相同的文件。container_dir
是您在容器内部时的目标目录。例如,/data/mnist
是示例中的目标目录-v /home/jsmith/data/mnist:/data/mnist
<xx.xx>
是容器版本。例如,19.01
。<framework>
是您要拉取的框架。例如,tensorflow
。
- 要将服务器作为守护程序运行并将容器中的端口 5000 暴露给主机上的端口 8888
docker run --gpus all --name digits -d -p 8888:5000 nvcr.io/nvidia/digits:<xx.xx>-<framework>
注意注意:DIGITS 6.0 默认使用端口 5000。
- 要挂载一个包含您的数据的本地目录(只读)和另一个用于写入您的 DIGITS 作业的目录
docker run --gpus all --name digits -d -p 8888:5000 -v /home/username/data:/data -v /home/username/digits- jobs:/workspace/jobs nvcr.io/nvidia/digits:<xx.xx>-<framework>
注意注意:为了在 ranks 之间共享数据,NVIDIA® Collective Communications Library ™ (NCCL) 可能需要共享系统内存用于 IPC 和固定的(页锁定的)系统内存资源。可能需要相应地增加操作系统对这些资源的限制。有关详细信息,请参阅您系统的文档。特别是,Docker 容器默认限制共享和固定内存资源。在容器内使用 NCCL 时,建议您通过发出以下命令来增加这些资源
--shm-size=1g --ulimit memlock=-1
在命令行中,改为
docker run --gpus all
- 有关自定义 DIGITS 应用程序的信息,请参阅容器内的
/workspace/README.md
。有关 DIGITS 的更多信息,请参阅:- DIGITS 网站
- DIGITS 项目
- nvidia-docker 文档
注意
注意:Dockerhub 镜像和此镜像之间可能存在细微差异。
NVIDIA Docker 存储库 nvcr.io
中的 DIGITS 应用程序附带 DIGITS,但也附带 TensorFlow。您可以在此处的容器发行说明中阅读详细信息(https://docs.nvda.net.cn/deeplearning/digits/ )。例如,DIGITS 的 21.01 版本包含 TensorFlow 的 21.01 版本。
DIGITS 是一个训练平台,可以与 NVIDIA TensorFlow 深度学习框架一起使用。使用这些框架中的任何一个,DIGITS 都将在您的数据集上训练您的深度学习模型。
以下部分包含使用带有 TensorFlow 后端的 DIGITS 的示例。
4.1. DIGITS 的 TensorFlow
DIGITS 的 TensorFlow 适用于 DIGITS v6.0 及更高版本。
4.1.1. 示例 1:MNIST
- 使用 DIGITS 和 TensorFlow 训练模型的第一步是从 nvcr.io 注册中心拉取 DIGITS 容器(确保您已登录到相应的注册中心)。
$ docker pull nvcr.io/nvidia/digits:17.04
- 拉取容器后,您可以在 DGX 系统上启动 DIGITS。由于 DIGITS 是 TensorFlow 的基于 Web 的前端,我们将使用以下命令以非交互方式运行 DIGITS 应用程序。
docker run --gpus all -d --name digits-17.04 -p 8888:5000 nvcr.io/nvidia/digits:17.04
- 第一个选项“-d”告诉 Docker 在“守护程序”模式下运行容器。
- “--name”选项“命名”正在运行的容器(稍后我们将需要它)。
- “-p 8888:5000”选项将 DIGITS 端口 5000 映射到端口 8888(您将在下面看到如何使用它)。
运行此命令后,您需要找到 DIGITS 节点的 IP 地址。可以通过运行
ifconfig
命令找到,如下所示$ ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.99.1 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::42:5cff:fefb:1c30 prefixlen 64 scopeid 0x20<link> ether 02:42:5c:fb:1c:30 txqueuelen 0 (Ethernet) RX packets 22649 bytes 5171804 (4.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 29088 bytes 123439479 (117.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp1s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.31.229.99 netmask 255.255.255.128 broadcast 10.31.229.127 inet6 fe80::56ab:3aff:fed6:614f prefixlen 64 scopeid 0x20<link> ether 54:ab:3a:d6:61:4f txqueuelen 1000 (Ethernet) RX packets 8116350 bytes 11069954019 (10.3 GiB) RX errors 0 dropped 9 overruns 0 frame 0 TX packets 1504305 bytes 162349141 (154.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ...
在本例中,我们需要以太网 IP 地址,因为它是 DIGITS Web 服务器的地址(本例中为 10.31.229.56)。您的 IP 地址将有所不同。
- 现在我们需要将 MNIST 数据集下载到容器中。DIGITS 容器有一个简单的脚本,用于将数据集下载到容器中。作为检查,运行以下命令以确保容器正在运行。
$ docker ps -a CONTAINER ID IMAGE ... NAMES c930962b9636 nvcr.io/nvidia/digits:17.04 ... digits-17.04
应用程序正在运行,并且具有我们给它的名称 (
digits-17.04
)。接下来,您需要从系统上的另一个终端“shell”进入正在运行的容器。
$ docker exec -it digits-17.04 bash root@XXXXXXXXXXXX:/workspace#
我们想将数据放入目录
/data/mnist
。应用程序中有一个简单的 Python 脚本可以为我们完成此操作。它还会以正确的格式下载数据。# python -m digits.download_data mnist /data/mnist Downloading url=http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz ... Downloading url=http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz ... Downloading url=http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz ... Downloading url=http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz ... Uncompressing file=train-images-idx3-ubyte.gz ... Uncompressing file=train-labels-idx1-ubyte.gz ... Uncompressing file=t10k-images-idx3-ubyte.gz ... Uncompressing file=t10k-labels-idx1-ubyte.gz ... Reading labels from /data/mnist/train-labels.bin ... Reading images from /data/mnist/train-images.bin ... Reading labels from /data/mnist/test-labels.bin ... Reading images from /data/mnist/test-images.bin ... Dataset directory is created successfully at '/data/mnist' Done after 13.4188599586 seconds.
- 您现在可以打开 Web 浏览器,访问上一步中的 IP 地址。请务必使用端口 8888,因为我们将 DIGITS 端口从 5000 映射到端口 8888。对于本例,URL 将如下所示。
10.31.229.56:8888
这是 DIGITS 的主页。请注意,在右上角,它显示此 DGX-1 上有 8 个 GPU 可用。对于 DGX Station,这应该是 4 或 4 个 GPU 可用。对于云提供商上的 NVIDIA NGC 云服务,GPU 数量应与实例类型的数量匹配。
- 加载数据集。我们将使用 MNIST 数据集作为示例,因为它随应用程序一起提供。
- 单击数据集选项卡。
- 单击图像下拉菜单,然后选择分类。如果 DIGITS 要求输入用户名,您可以输入任何您想要的名称。“新建图像分类数据集”窗口将显示。填写字段后,您的屏幕应如下所示。
- 为图像类型和图像大小提供值,如上图所示。
- 在数据集名称字段中为您的数据集命名。您可以将数据集命名为您喜欢的任何名称。在本例中,名称仅为“mnist”。
- 单击创建。这告诉 DIGITS 告诉 Caffe 加载数据集。加载数据集后,您的屏幕应类似于以下内容。 注意
注意:有两个部分允许您“探索”数据库(database)。“创建数据库(训练)”用于训练数据,“创建数据库(验证)”用于验证数据。在任一显示中,您都可以单击探索数据库以查看训练集。
- 训练模型。我们将使用 Yann Lecun 的 LeNet 模型作为示例,因为它随应用程序一起提供。
- 定义模型。单击左上角的 DIGITS 返回主页。
- 单击模型选项卡。
- 单击图像下拉菜单,然后选择分类。“新建图像分类模型”窗口将显示。
- 为选择数据集和训练参数字段提供值。
- 在标准网络选项卡中,单击 Caffe 并选择 LeNet 单选按钮。注意
注意:DIGITS 允许您根据需要使用以前的网络、预训练网络和客户网络。
- 单击创建。LeNet 模型的训练开始。
在训练期间,DIGITS 显示训练参数的历史记录,特别是训练数据的损失函数、验证数据集的准确率以及验证数据的损失函数。训练完成后(所有 30 个 epoch 都已训练),您的屏幕应类似于以下内容。
注意注意:此屏幕截图已被截断,因为网页非常长。
- 可选:您可以通过滚动到网页底部来针对训练后的模型测试一些图像(推理)。为了说明目的,从测试数据集中输入单个图像。您可以随时上传图像(如果您愿意)。您也可以输入测试图像列表(如果您需要)。
下面的屏幕针对名为
/data/mnist/test/5/06206.png
的测试图像执行推理。此外,选中统计和可视化复选框以确保您可以看到来自网络的所有详细信息以及网络预测。注意注意:您可以根据需要从任何 epoch 中选择模型。为此,请单击选择模型下拉箭头并选择不同的 epoch。
- 单击分类一个。这将打开另一个浏览器选项卡并显示预测。下面的屏幕是数字“5”的测试图像的输出。
4.1.2. 示例 2:Siamese 网络
- 为了训练 Siamese 数据集,您必须首先拥有 MNIST 数据集。要创建 MNIST 数据集,请参阅“TensorFlow MNIST 示例”。
- 记住作业目录路径,因为此任务中需要它。

- 执行可从以下网址获取的 Python 脚本:https://github.com/NVIDIA/DIGITS/blob/master/examples/siamese/create_db.py。该脚本需要以下参数:
Create_db.py <i><结果保存位置></i><i><作业目录></i> -c <i><样本数></i>
其中:<结果保存位置>
是您要保存输出的目录路径。<作业目录>
是您在先决条件中记录的目录名称。<样本数>
是您定义样本数的位置。将此数字设置为100000。
- 创建 Siamese 数据集。
- 单击新建模型 > 图像 > 其他以创建模型。在本示例中,我们将使用 Caffe 来训练我们的 Siamese 网络。
- 测试模型。
- 单击自定义网络选项卡,然后选择 TensorFlow。
- 复制并粘贴以下网络定义: https://github.com/NVIDIA/DIGITS/blob/master/examples/siamese/siamese-TF.py。
- 确保
基础学习率
设置为0.01
,保留所有其他字段的默认设置,然后单击训练。模型训练完成后,图表输出应类似于以下内容
- 通过从您在
<结果保存位置>
路径中指定的同一目录位置上传图像来测试图像。
有关最新的发行说明,请参阅 DIGITS 发行说明文档网站:(https://docs.nvda.net.cn/deeplearning/digits/digits-release-notes/index.html )。有关 DIGITS 的更多信息,请参阅:
- DIGITS 网站 (https://developer.nvidia.com/digits )
- DIGITS 项目 (https://github.com/NVIDIA/DIGITS/blob/digits-5.0/README.md )
- GitHub 文档 (https://github.com/NVIDIA/nvidia-docker/wiki/DIGITS )
注意:NVIDIA-docker 镜像和此镜像之间可能存在细微差异。
声明
本文档仅供参考,不得视为对产品的特定功能、状况或质量的保证。NVIDIA Corporation(“NVIDIA”)对本文档中包含的信息的准确性或完整性不作任何明示或暗示的陈述或保证,并且对本文档中包含的任何错误不承担任何责任。NVIDIA 对使用此类信息造成的后果或使用,或因使用此类信息而可能导致的任何专利或第三方其他权利的侵权行为概不负责。本文档不构成对开发、发布或交付任何材料(如下所定义)、代码或功能的承诺。
NVIDIA 保留在不另行通知的情况下随时对本文档进行更正、修改、增强、改进和任何其他更改的权利。
客户在下订单之前应获取最新的相关信息,并应核实此类信息是最新且完整的。
NVIDIA 产品的销售受 NVIDIA 标准销售条款和条件的约束,除非在 NVIDIA 和客户的授权代表签署的单独销售协议(“销售条款”)中另有约定,否则该条款和条件在订单确认时提供。NVIDIA 在此明确反对将任何客户通用条款和条件应用于购买本文档中引用的 NVIDIA 产品。本文档未直接或间接形成任何合同义务。
NVIDIA 产品并非设计、授权或保证适用于医疗、军事、航空、航天或生命支持设备,也不适用于 NVIDIA 产品的故障或失灵可能合理预期会导致人身伤害、死亡或财产或环境损害的应用。对于在上述设备或应用中包含和/或使用 NVIDIA 产品,NVIDIA 不承担任何责任,因此,此类包含和/或使用由客户自行承担风险。
NVIDIA 不作任何陈述或保证,保证基于本文档的产品将适用于任何特定用途。NVIDIA 不一定对每个产品的所有参数进行测试。客户全权负责评估和确定本文档中包含的任何信息的适用性,确保产品适用于客户计划的应用和用途,并为该应用执行必要的测试,以避免应用或产品出现故障。客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本文档中包含的附加或不同条件和/或要求。对于可能基于或归因于以下原因的任何故障、损坏、成本或问题,NVIDIA 不承担任何责任:(i)以任何违反本文档的方式使用 NVIDIA 产品,或(ii)客户产品设计。
本文档未授予 NVIDIA 专利权、版权或本文档项下的其他 NVIDIA 知识产权的任何明示或暗示的许可。NVIDIA 发布的有关第三方产品或服务的信息不构成 NVIDIA 授予使用此类产品或服务的许可,也不构成对产品或服务的保证或认可。使用此类信息可能需要获得第三方在第三方的专利或其他知识产权下的许可,或获得 NVIDIA 在 NVIDIA 的专利或其他知识产权下的许可。
仅在获得 NVIDIA 事先书面批准的情况下,才允许复制本文档中的信息,并且复制时不得进行更改,必须完全符合所有适用的出口法律和法规,并且必须附带所有相关的条件、限制和声明。
本文档和所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”,单独而言亦如此)均按“原样”提供。NVIDIA 不对材料作出任何明示、暗示、法定或其他形式的保证,并明确声明不承担所有关于不侵权、适销性和针对特定用途适用性的暗示保证。在法律未禁止的范围内,在任何情况下,NVIDIA 均不对因使用本文档而引起的任何损害(包括但不限于任何直接、间接、特殊、附带、惩罚性或后果性损害,无论因何种原因造成,也无论责任理论如何)承担责任,即使 NVIDIA 已被告知可能发生此类损害。尽管客户可能因任何原因而遭受任何损害,但 NVIDIA 对本文所述产品的客户承担的累计总责任应根据产品的销售条款进行限制。
VESA DisplayPort
DisplayPort 和 DisplayPort Compliance Logo、Dual-mode Sources 的 DisplayPort Compliance Logo 以及 Active Cables 的 DisplayPort Compliance Logo 是 Video Electronics Standards Association 在美国和其他国家/地区的商标。
HDMI
HDMI、HDMI 标志和 High-Definition Multimedia Interface 是 HDMI Licensing LLC 的商标或注册商标。
OpenCL
OpenCL 是 Apple Inc. 的商标,已获得 Khronos Group Inc. 的许可使用。
商标
NVIDIA、NVIDIA 徽标以及 cuBLAS、CUDA、cuDNN、DALI、DIGITS、DGX、DGX-1、DGX-2、DGX Station、DLProf、Jetson、Kepler、Maxwell、NCCL、Nsight Compute、Nsight Systems、NvCaffe、PerfWorks、Pascal、SDK Manager、Tegra、TensorRT、Triton Inference Server、Tesla、TF-TRT 和 Volta 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。其他公司和产品名称可能是与其相关的各自公司的商标。