HowToUseDocker.md 4.83 KB
Newer Older
Chi Song's avatar
Chi Song committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# **如何在 NNI 中使用 Docker**

## 概述

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

用户可以使用docker进行 NNI 实验, NNI 在docker hub上提供了一个官方的镜像 [msranni/nni](https://hub.docker.com/r/msranni/nni)

## 在本机使用docker

### 第一步:docker的安装

在你开始使用docker进行NNI实验之前,你首先需要在本地机器上安装docker运行程序。 [参考](https://docs.docker.com/install/linux/docker-ce/ubuntu/)

### 第二步:启动docker容器

如果你已经在本地机器上安装了docker程序,你可以启动docker容器来运行NNI实验了。 因为NNI会在docker容器里面启动web UI进程,并且监听一个端口,因此你需要指定一个在主机和docker容器里面的端口映射,这个映射可以让你在容器外面访问docker容器里面的进程。 通过访问主机的ip和端口,你就可以访问容器里面的Web网页进程了。

例如,你可以通过如下命令来启动docker容器:

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

-i: 使用交互模式启动docker

-t: Docker分配一个输入终端。

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

可以参考[这里](https://docs.docker.com/v17.09/edge/engine/reference/run/),获取更多的命令参考。

注意:

       NNI只支持Ubuntu和macOS操作系统,请指定正确的docker镜像。如果你希望在docker里面使用gpu,请使用nvidia-docker。
    

### 步骤3:在docker容器里面运行NNI

如果你直接使用NNI的官方镜像`msranni/nni`来启动实验,你可以直接使用`nnictl`命令。 NNI的官方镜像有最基础的python环境和深度学习框架。

Chi Song's avatar
Chi Song committed
41
如果使用自己的 Docker 镜像,需要首先[安装 NNI](InstallationLinux.md)
Chi Song's avatar
Chi Song committed
42
43
44
45
46
47
48
49
50
51
52
53

如果你想要使用NNI的官方例子,你可以通过以下git命令来克隆NNI:

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

然后可以进入`nni/examples/trials`文件夹来启动实验。

等你准备完NNI环境,你可以通过`nnictl`命令来启动实验,[参考](QuickStart.md).

## 在远程平台上运行docker

Chi Song's avatar
Chi Song committed
54
NNI支持在[远程平台](../TrainingService/RemoteMachineMode.md)上启动实验,在远程机器里运行任务。 因为docker可以运行独立的Ubuntu系统和SSH服务,因此docker容器可以作为远程平台来运行NNI.
Chi Song's avatar
Chi Song committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

### 步骤1:设置docker环境

你首先应该在远程机器上安装docker工具,[参考](https://docs.docker.com/install/linux/docker-ce/ubuntu/).

为了保证docker容器可以被NNI实验连接上,你应该在你自己的docker容器里面安装SSH服务,并做SSH相关配置。 如果你想在docker容器里面使用SSH服务,你应该配置SSH密码登录或者私钥登录,[参考](https://docs.docker.com/engine/examples/running_ssh_service/)

注意:

    NNI的官方镜像msranni/nni暂时不支持SSH服务,你应该构建自己的带有SSH服务的镜像,或者使用其他的带有SSH服务的镜像。
    

### 第二步:在远程机器上启动docker容器

SSH容器需要一个端口,你需要把docker的SSH服务端口暴露给NNI作为连接端口。 例如,如果你设置容器的端口**`A`**作为SSH端口,你应该把端口**`A`**映射到主机的端口**`B`**,NNI会连接端口**`B`**作为SSH服务端口,你的主机会把连接到端口**`B`**的连接映射到端口**`A`**,NNI就可以连接到你的容器中了。

例如,你可以通过如下命令来启动docker容器:

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

`containerPort`是在docker容器中指定的端口,`hostPort`是主机的端口。 你可以设置你的NNI配置,连接到`hostPort`,这个连接会被转移到你的docker容器中。 更多的命定信息,可以[参考](https://docs.docker.com/v17.09/edge/engine/reference/run/).

注意:

    如果你使用你自己构建的docker容器,请保证这个容器中有基础的python运行时环境和NNI SDK环境。 如果你想要在docker容器里面使用gpu,请使用nvidia-docker。
    

### 步骤三:运行NNI实验

Chi Song's avatar
Chi Song committed
85
你可以在你的配置文件中,设置训练平台为远程平台,然后设置`machineList`配置。[参考](../TrainingService/RemoteMachineMode.md)。 注意你应该设置正确的`port``username`, `passwd`或者`sshKeyPath`
Chi Song's avatar
Chi Song committed
86
87
88
89
90
91
92
93
94
95

`port`: 主机的端口,映射到docker的SSH端口中。

`username`: docker容器的用户名。

`passWd: ` docker容器的密码。

`sshKeyPath:` docker容器私钥的存储路径。

设置完配置文件,你就可以启动实验了,[参考](QuickStart.md)