HowToUseDocker.md 4.89 KB
Newer Older
Chi Song's avatar
Chi Song committed
1
2
3
4
# **如何在 NNI 中使用 Docker**

## 概述

Chi Song's avatar
Chi Song committed
5
[Docker](https://www.docker.com/) 是一种工具, 可通过启动容器, 使用户能够更轻松地根据自己的操作系统部署和运行应用程序。 Docker 不是虚拟机,它不创建虚拟操作系统,但它允许不同的应用程序使用相同的操作系统内核,并通过容器隔离不同的应用程序。
Chi Song's avatar
Chi Song committed
6

Chi Song's avatar
Chi Song committed
7
用户可使用 Docker 来启动 NNI Experiment。 NNI 在 Docker Hub 上也提供了官方的 Docker 映像 [msranni/nni](https://hub.docker.com/r/msranni/nni)
Chi Song's avatar
Chi Song committed
8
9
10

## 在本机使用docker

Chi Song's avatar
Chi Song committed
11
### 第一步:Docker 的安装
Chi Song's avatar
Chi Song committed
12

Chi Song's avatar
Chi Song committed
13
在开始使用 Docker 运行 NNI Experiment 前,首先需要在本机安装 Docker 运行程序。 [参考这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/)
Chi Song's avatar
Chi Song committed
14

Chi Song's avatar
Chi Song committed
15
### 第二步:启动 Docker 容器
Chi Song's avatar
Chi Song committed
16

Chi Song's avatar
Chi Song committed
17
如果已经在本地机器上安装了 Docker 程序,可以启动 Docker 容器来运行 NNI 示例。 因为 NNI 会在 Docker 容器里启动 Web 界面进程,并监听端口,因此需要指定一个在主机和 Docker 容器映射的端口,可在容器外访问 Docker 容器里的进程。 通过访问主机的 IP 和端口,就可以访问容器里的 Web 网页进程了。
Chi Song's avatar
Chi Song committed
18

Chi Song's avatar
Chi Song committed
19
例如,通过如下命令来启动 Docker 容器:
Chi Song's avatar
Chi Song committed
20
21
22
23

    docker run -i -t -p [hostPort]:[containerPort] [image]
    

Chi Song's avatar
Chi Song committed
24
-i: 使用交互模式启动 Docker。
Chi Song's avatar
Chi Song committed
25

Chi Song's avatar
Chi Song committed
26
-t: 为 Docker 分配一个输入终端。
Chi Song's avatar
Chi Song committed
27
28
29

-p: 端口映射,映射主机端口和容器端口。

Chi Song's avatar
Chi Song committed
30
更多命令信息,可[参考这里](https://docs.docker.com/v17.09/edge/engine/reference/run/)
Chi Song's avatar
Chi Song committed
31
32
33

注意:

Chi Song's avatar
Chi Song committed
34
       NNI 目前仅支持本机模式下的 Ubuntu 和 macOS 系统,请使用正确的 Docker 映像类型。 如果想要在 Docker 容器里面使用 GPU,请使用 nvidia-docker。
Chi Song's avatar
Chi Song committed
35
36
    

Chi Song's avatar
Chi Song committed
37
### 第三步:在 Docker 容器里运行 NNI
Chi Song's avatar
Chi Song committed
38

Chi Song's avatar
Chi Song committed
39
如果直接使用 NNI 的官方镜像 `msranni/nni` 来启动 Experiment,可以直接使用 `nnictl` 命令。 NNI 官方镜像有最基础的 Python 环境和深度学习框架。
Chi Song's avatar
Chi Song committed
40

Chi Song's avatar
Chi Song committed
41
如果使用自己的 Docker 镜像,需要首先[安装 NNI](InstallationLinux.md)
Chi Song's avatar
Chi Song committed
42

Chi Song's avatar
Chi Song committed
43
如果要使用 NNI 的官方示例,可以通过以下 git 命令来克隆 NNI:
Chi Song's avatar
Chi Song committed
44
45
46
47

    git clone https://github.com/Microsoft/nni.git
    

Chi Song's avatar
Chi Song committed
48
然后可以进入 `nni/examples/trials` 文件夹来启动 Experiment。
Chi Song's avatar
Chi Song committed
49

Chi Song's avatar
Chi Song committed
50
准备好 NNI 的环境后,可使用 `nnictl` 命令开始新的 Experiment。 [参考这里](QuickStart.md)
Chi Song's avatar
Chi Song committed
51

Chi Song's avatar
Chi Song committed
52
## 在远程平台上运行 Docker
Chi Song's avatar
Chi Song committed
53

Chi Song's avatar
Chi Song committed
54
NNI 支持在[远程平台](../TrainingService/RemoteMachineMode.md)上启动 Experiment,并在远程机器里运行 Trial。 因为 Docker 可以运行独立的 Ubuntu 系统和 SSH 服务,因此 Docker 容器可以作为远程平台来运行 NNI。
Chi Song's avatar
Chi Song committed
55

Chi Song's avatar
Chi Song committed
56
### 第一步:设置 Docker 环境
Chi Song's avatar
Chi Song committed
57

Chi Song's avatar
Chi Song committed
58
首先在远程机器上安装 Docker 工具,[参考这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/)
Chi Song's avatar
Chi Song committed
59

Chi Song's avatar
Chi Song committed
60
为保证 Docker 容器可以被 NNI Experiment 连接上,要在自己的 Docker 容器里安装 SSH 服务,或使用已经配置好 SSH 的映像。 如果要在 Docker 容器里使用 SSH 服务,需要配置 SSH 密码登录或者私钥登录,[参考这里](https://docs.docker.com/engine/examples/running_ssh_service/)
Chi Song's avatar
Chi Song committed
61
62
63

注意:

Chi Song's avatar
Chi Song committed
64
    NNI 的官方镜像 msranni/nni 暂不支持 SSH 服务,应构建自己的带有 SSH 服务的映像,或者使用其他的带有 SSH 服务的镜像。
Chi Song's avatar
Chi Song committed
65
66
    

Chi Song's avatar
Chi Song committed
67
### 第二步:在远程机器上启动 Dokcer 容器
Chi Song's avatar
Chi Song committed
68

Chi Song's avatar
Chi Song committed
69
SSH 服务需要端口,要把 Docker 的 SSH 服务端口暴露给 NNI 作为连接端口。 例如,如果设置容器的端口 **`A`** 作为 SSH 端口,应把端口 **`A`** 映射到主机的端口 **`B`**,NNI 会连接端口**`B`** 作为 SSH 服务端口,主机会把连接到端口 **`B`** 的连接映射到端口 **`A`**,NNI 就可以连接到容器中了。
Chi Song's avatar
Chi Song committed
70

Chi Song's avatar
Chi Song committed
71
例如,通过如下命令来启动 Docker 容器:
Chi Song's avatar
Chi Song committed
72
73
74
75

    docker run -dit -p [hostPort]:[containerPort] [image]
    

Chi Song's avatar
Chi Song committed
76
`containerPort`是在 Docker 容器中指定的端口,`hostPort` 是主机的端口。 可设置 NNI 配置,连接到 `hostPort`,这个连接会被转发到 Docker 容器。 更多命令信息,可[参考这里](https://docs.docker.com/v17.09/edge/engine/reference/run/)
Chi Song's avatar
Chi Song committed
77
78
79

注意:

Chi Song's avatar
Chi Song committed
80
    如果使用自己构建的 Docker 映像,确保有基础的 Python 运行时和 NNI SDK 环境。 如果想要在 Docker 容器里面使用 GPU,请使用 nvidia-docker。
Chi Song's avatar
Chi Song committed
81
82
    

Chi Song's avatar
Chi Song committed
83
### 第三步:运行 NNI Experiment
Chi Song's avatar
Chi Song committed
84

Chi Song's avatar
Chi Song committed
85
可以在配置文件中,设置训练平台为远程平台,然后设置 `machineList` 配置。[参考这里](../TrainingService/RemoteMachineMode.md)。 注意应该设置正确的 `port``username`,以及 `passwd``sshKeyPath`
Chi Song's avatar
Chi Song committed
86

Chi Song's avatar
Chi Song committed
87
`port`: 主机的端口,映射到 Docker 的 SSH 端口。
Chi Song's avatar
Chi Song committed
88

Chi Song's avatar
Chi Song committed
89
`username`:Docker 容器的用户名。
Chi Song's avatar
Chi Song committed
90

Chi Song's avatar
Chi Song committed
91
`passWd: ` Docker 容器的密码。
Chi Song's avatar
Chi Song committed
92

Chi Song's avatar
Chi Song committed
93
`sshKeyPath:` Docker 容器私钥的存储路径。
Chi Song's avatar
Chi Song committed
94

Chi Song's avatar
Chi Song committed
95
设置完配置文件,就可以启动 Experiment 了,[参考这里](QuickStart.md)