步骤 #4:运行 Docker 容器
从 NGC 下载 PyTorch 镜像后,我们现在可以启动容器并检查其内容。要查看已安装镜像的完整列表,请运行 docker images
。
在您的工作站上,启动容器,同时指定您希望包含所有可用的 GPU。如果您没有 NVIDIA GPU 并且未安装 NVIDIA Container Toolkit,请从 docker run
命令中删除 --gpus all
标志,以便在不使用 GPU 的情况下启动。
$ docker run --rm -it --gpus all nvcr.io/nvidia/pytorch:22.03-py3
=============
== PyTorch ==
=============
NVIDIA Release 22.03 (build 33569136)
PyTorch Version 1.12.0a0+2c916ef
Container image Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Copyright (c) 2014-2022 Facebook Inc.
Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert)
Copyright (c) 2012-2014 Deepmind Technologies (Koray Kavukcuoglu)
Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu)
Copyright (c) 2011-2013 NYU (Clement Farabet)
Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou, Iain Melvin, Jason Weston)
Copyright (c) 2006 Idiap Research Institute (Samy Bengio)
Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz)
Copyright (c) 2015 Google Inc.
Copyright (c) 2015 Yangqing Jia
Copyright (c) 2013-2016 The Caffe contributors
All rights reserved.
Various files include modifications (c) NVIDIA CORPORATION & AFFILIATES. All rights reserved.
This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
root@ca44795386ae:/workspace#
如果您看到类似于上述的消息,则表示您现在位于容器内部。
为了熟悉镜像,请在提示符下键入 ls 以列出当前目录的内容。输出应如下所示
$ ls
NVIDIA_Deep_Learning_Container_License.pdf README.md docker-examples examples tutorials
这很可能与您在启动容器之前的工作目录不同,这表明我们位于容器内部,并且正在查看特定于容器的内容,正如预期的那样。
为了进一步演示容器在安装软件包方面提供的灵活性,让我们使用 Ubuntu 的软件包管理器安装一个新软件包。通常,NGC 上提供的镜像基于 Ubuntu 操作系统,这可能与您工作站上安装的操作系统不同。
要安装软件包,请在容器内运行以下命令(请注意,默认情况下您以 root 用户身份运行,并且不需要 sudo
。实际上,sudo
在容器内不是有效命令)
$ apt update
$ apt install -y htop
这将安装 htop 应用程序 - 一种常用的 Linux 进程查看器。运行 htop
将验证它是否已安装并且现在可以在容器内使用。按键盘上的“q”退出 htop。
如果 htop 在运行容器之前未安装在您的工作站上,它将保持未安装在物理主机上(即容器外部)。这是预期的,因为它允许我们为容器内的特定应用程序配置定制的环境,而不会在工作站上引入依赖冲突。这在不同的机器上工作时非常有用,因为它们很可能安装了不同版本或组合的软件包,从而导致潜在的冲突。在容器内安装特定的软件包可确保所有系统都将运行相同的设置,而不管物理主机上安装了什么。
另一方面,由于我们是从 NGC 运行基本容器,因此每次启动容器时都需要手动安装应用程序。为了防止这种情况,我们可以创建一个自定义镜像,其中包含我们所有的软件包、代码、设置和其他更新,以完全匹配我们需要的内容。这允许我们启动容器,而无需在内部进行手动更改。
如果需要,可以使用 docker commit
命令将运行时修改过的容器另存为新镜像,尽管建议使用 Dockerfile(稍后会详细介绍),以便为他人提供可重现镜像的文档化方法。如果您想将容器提交为新镜像,请首先在单独的终端中使用 docker ps
查找容器名称。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfee26ccb86e nvcr.io/nvidia/pytorch:22.03-py3 "/opt/nvidia/nvidia_…" 4 seconds ago Up 3 seconds 6006/tcp, 8888/tcp elegant_goldstine
容器被 Docker 随机命名为“elegant_goldstine”。我们将在下一步中使用此名称,尽管您的名称很可能不同。
要将正在运行的容器另存为镜像,请运行以下命令,同时根据需要更改名称
$ docker commit elegant_goldstine custom_image:1.0.0
完成容器查看后,键入 exit
以退出容器。