该文档是微软NNI团队提供的原版说明 |
---|
NNI 使用 GNU Make 来生成和安装。
Makefile
提供标准的目标 生成
、安装
和 卸载
, 以及不同设置的安装对象:
easy-install
: 针对非专家用户,自动安装所有内容;dev-easy-install
: 针对专家用户,自动安装所有内容;install
: 针对 NNI 普通用户,通过复制文件来安装 NNI;dev-install
: 针对 NNI 开发人员,通过创建符号链接而不是复制文件来安装 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。 可浏览相应的官方文档了解安装过程。
当依赖项安装好后,运行 make
即可。
NNI 项目主要由两个 Node.js 模块 (nni_manager
, webui
) 以及两个 Python 包 (nni
, nnictl
) 所组成。
默认情况下,Node.js 模块为所有用户安装在 /usr/share/nni
目录下,也可以只为当前用户安装在 ~/.local/nni
目录下。
Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置。 如果以非管理员身份安装 ,并且没有虚拟环境的时候,要加上 --user
参数。
此外,nnictl
提供一个自动完成脚本,会被安装在 /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
脚本。 如果复制文件的路径和运行时的不一样(例如,创建发行版本包时),需要手工编辑 nnictl
和 nnimanager
。
安装目标的流程如下:
目标 | 流程 |
---|---|
easy-install |
安装依赖项,生成,安装 NNI,并编辑 ~/.bashrc |
dev-easy-install |
安装依赖项,生成,将 NNI 作为符号链接来安装,并编辑 ~/.bashrc |
install |
安装 Python 包,Node.js 模块,NNI 脚本和示例 |
dev-install |
将 Python 和 Node.js 模块作为符号链接安装,然后安装 scripts |
pip-install |
安装依赖项,生成,安装 NNI,但不安装 Python 包 |
clean
目标test
目标lint
目标- 每个目标的测试用例
- 评审变量