README.Makefile.md 4.71 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
# Makefile 文件和安装配置

NNI 使用 GNU 来生成和安装。

`Makefile` 提供标准的目标 `生成``安装``卸载`, 以及不同设置的安装对象:

* `easy-install`: 针对非专家用户,自动处理所有内容;
* `dev-easy-install`: 针对专家用户,自动处理所有内容;
* `install`: 针对 NNI 普通用户,通过复制文件来安装 NNI;
* `dev-install`: 针对 NNI 贡献者,通过创建 symlinks 而不是复制文件来安装 NNI;
* `pip-install`: 针对使用 `setup.py` 安装的情况;

下文会有更详细的介绍。

## 依赖项

NNI 依赖于 Node.js, Yarn, 和 pip 来生成,推荐安装 TypeScript。

NNI 需要 Node.js 以及运行所需要的所有库。 需要的 Node.js 库 (包括 TypeScript) 可以通过 Yarn 来安装, 需要的 Python 库可以通过 setuptools 或者 PIP 来安装。

NNI *用户*可以用 `make install-dependencies` 来安装 Node.js 和 Yarn。 Node.js 会被安装到 NNI 的安装目录,Yarn 会被安装到 `/tmp/nni-yarn`。 安装过程需要 wget。

NNI *开发人员*推荐手工安装 Node.js 和 Yarn。 可浏览相应的官方文档了解安装过程。

## 生成 NNI

当依赖项安装好后,运行 `make` 即可。

## 安装

### 目录层次

NNI 项目主要由两个 Node.js 模块 (`nni_manager`, `webui`) 以及两个 Python 包 (`nni`, `nnictl`) 所组成。

默认情况下,Node.js 模块可以为所有用户安装在 `/usr/share/nni` 目录下,也可为只安装在当前用户的 `~/.local/nni` 目录下。

Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置。 如果为没有权限的用户安装,并且没有虚拟环境的时候,要加上 `--user` 参数。

此外,`nnictl` 是一个 bash 脚本,会被安装在 `/usr/share/bash-completion/completions``~/.bash_completion.d` 目录下。

在某些配置情况下,NNI 也会将 Node.js 安装到 `/usr/share/nni` 目录下。

以上所有目录都可以配置。 可参考下一章节。

### 配置

`Makefile` 中可以用环境变量来替换默认设置。

支持的变量如下:

| 名称                 | 说明                             | 普通用户下的默认值                          | root 下的默认值                                      |
| ------------------ | ------------------------------ | ---------------------------------- | ----------------------------------------------- |
| `BIN_PATH`         | 执行文件路径                         | `~/.local/bin`                     | `/usr/bin`                                      |
| `INSTALL_PREFIX`   | Node.js 模块的路径 (最后会加上 `nni`)    | `~/.local`                         | `/usr/share`                                    |
| `BASH_COMP_SCRIPT` | Bash 自动完成脚本的路径                 | `~/.bash_completion.d/nnictl`      | `/usr/share/bash-completion/completions/nnictl` |
| `PIP_MODE`         | `python3 setup.py install` 的参数 | 如果 `VIRTUAL_ENV` 没有设置,会加上 `--user` | (无)                                             |
| `NODE_PATH`        | Node.js 运行时的路径                 | `$INSTALL_PREFIX/nni/node`         | `$INSTALL_PREFIX/nni/node`                      |
| `YARN_PATH`        | Yarn 的安装路径                     | `/tmp/nni-yarn`                    | `/tmp/nni-yarn`                                 |
| `NODE`             | Node.js 命令                     | 参考源代码                              | 参考源代码                                           |
| `YARN`             | Yarn 命令                        | 参考源代码                              | 参考源代码                                           |

注意,这些变量不仅会影响安装路径,也会影响申城的 `nnictl``nnimanager` 脚本。 如果复制文件的路径和运行时的不一样(例如,创建发行版本包时),需要手工编辑 `nnictl``nnimanager`

### 目标

安装目标的流程如下:

| 目标                 | 流程                                               |
| ------------------ | ------------------------------------------------ |
| `easy-install`     | 安装依赖项,生成,安装 NNI,并编辑 `~/.bashrc`                  |
| `dev-easy-install` | 安装依赖项,生成,将 NNI 作为 symlinks 来安装,并编辑 `~/.bashrc`   |
| `install`          | 安装 Python 包,Node.js 模块,NNI 脚本和样例                 |
| `dev-install`      | 将 Python 和 Node.js 模块作为 symlinks 安装,然后安装 scripts |
| `pip-install`      | 安装依赖项,生成,安装 NNI,但不安装 Python 包                    |

## TODO

* `clean` 目标
* `test` 目标
* `lint` 目标
* 每个目标的测试用例
* 评审变量