Unverified Commit 25db55ca authored by kvartet's avatar kvartet Committed by GitHub
Browse files

Update Chinese documents (#3243)

parent 53b565e4
在 NNI 中调试代码
===========================
概述
--------
NNI 中的日志分为三部分。 包括 NNI Manager, Dispatcher 以及 Trial。 这里会简单介绍这些组件。 更多信息可参考 `概述 <../Overview.rst>`__。
* **NNI controller**:NNI Controller (nnictl) 是命令行工具,用来管理 Experiments(如:启动 Experiment)。
* **nnimanager**:这是 NNI 的核心。当 Experiment 出现严重错误时,从它的日志中才能找到原因。(例如,Web 界面无法打开,或者训练平台失败)
* **Dispatcher**\ : NNI 调用 **Tuner** 和 **Assessor** 的方法。 它的日志与 Tuner 和 Assessor 代码有关。
* **Tuner**:Tuner 是一个自动机器学习算法,会为下一个 Trial 生成新的配置。 新的 Trial 会使用这组配置来运行。
* **Assessor**:Assessor 分析 Trial 的中间结果(例如,测试数据集上定期的精度),来确定 Trial 是否应该被提前终止。
* **Trial**:Trial 的代码是用户实现的代码,每次 Trial 运行时会尝试一组新的配置(例如,一组新的超参值,或者某个神经网络结构)。
日志的位置
----------------
NNI 中有三种日志。 在创建 Experiment 时,可增加命令行参数 ``--debug``,将日志级别设置为 debug 级别。 此外,还可以在配置文件中使用 ``logLevel`` 来
设置日志级别。 可设置的日志级别包括:``trace``\ , ``debug``\ , ``info``\ , ``warning``\ , ``error``\ , ``fatal``。
NNI Controller
^^^^^^^^^^^^^^
在启动 NNI Experiment 时发生的错误,都可以在这里找到。
通过 ``nnictl log stderr`` 命令来查看错误信息。 参考 `NNICTL <Nnictl.rst>`__ 了解更多信息。
Experiment 根目录
^^^^^^^^^^^^^^^^^^^^^^^^^
每个 Experiment 都有一个根目录,会显示在 Web 界面的右上角。 如果无法打开 Web 界面,可将 ``~/nni-experiments/experiment_id/`` 中的 ``experiment_id`` 替换为实际的 Experiment ID,来组合出根目录。 ``experiment_id`` 可以在运行 ``nnictl create ...`` 来创建新 Experiment 的输出中找到。
..
如有需要,可以在配置文件中修改 ``logDir``,来指定存储 Experiment 的目录。(默认为 ``~/nni-experiments``)。 请参考 `配置文档 <ExperimentConfig.rst>`__ 获取更多信息。
在此目录下,还会有另一个叫做 ``log`` 的目录,``nnimanager.log`` 和 ``dispatcher.log`` 都在此目录中。
Trial 根目录
^^^^^^^^^^^^^^^^^^^^
在 Web 界面中,可通过点击每个 Trial 左边的 ``+`` 来展开详情并看到它的日志路径。
在 Experiment 的根目录中,会有一个 ``trials`` 目录,这里存放了所有 Trial 的信息。
每个 Trial 都有一个用其 ID 命名的目录。 目录中会有一个 ``stderr`` 文件,是 Trial 的错误信息。另一个 ``trial.log`` 文件是 Trial 的日志。
不同类型的错误
-------------------------
NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 NNI 中发生错误时,需要按顺序检查以下三种错误。
一般情况下,打开 Web 界面,可以在 ``Overview`` 标签的 ``Status`` 上看到错误信息。 如果 Web 界面无法打开,可以通过命令行来检查。
**NNI** 失败
^^^^^^^^^^^^^^^^^
这是最严重的错误。 发生这种错误时,整个 Experiment 都会失败,Trial 也不会运行。 这通常是由安装问题导致的。
先检查 ``nnictl`` 的错误输出文件 ``stderr`` (运行 nnictl log stderr),然后检查 ``nnimanager`` 的日志来看看是否由任何错误。
Dispatcher 失败
^^^^^^^^^^^^^^^^^^^^^^^^
Dispatcher 失败, 这通常是 Tuner 失败的情况。 可检查 Dispatcher 的日志来分析出现了什么问题。 对于内置的 Tuner,常见的错误可能是无效的搜索空间(不支持的搜索空间类型,或配置文件中的 Tuner 参数与 __init__ 函数所要求的不一致)。
以后一种情况为例。 某自定义的 Tuner, __init__ 函数有名为 ``optimize_mode`` 的参数,但配置文件中没有提供此参数。NNI 就会因为初始化 Tuner 失败而造成 Experiment 失败。 可在 Web 界面看到如下错误:
.. image:: ../../img/dispatcher_error.jpg
:target: ../../img/dispatcher_error.jpg
:alt:
可以看到这是一个 Dispatcher 的错误。 因此,检查 Dispatcher 的日志,可找到如下信息:
.. code-block:: bash
[2019-02-19 19:36:45] DEBUG (nni.main/MainThread) START
[2019-02-19 19:36:47] ERROR (nni.main/MainThread) __init__() missing 1 required positional arguments: 'optimize_mode'
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/nni/__main__.py", line 202, in <module>
main()
File "/usr/lib/python3.7/site-packages/nni/__main__.py", line 164, in main
args.tuner_args)
File "/usr/lib/python3.7/site-packages/nni/__main__.py", line 81, in create_customized_class_instance
instance = class_constructor(**class_args)
TypeError: __init__() missing 1 required positional arguments: 'optimize_mode'.
**Trial** 失败
^^^^^^^^^^^^^^^^^^^
这种情况下,NNI 可以继续运行,并创建新的 Trial。
这表示 Trial 代码中出现了失败。 这种错误与 Trial 代码相关。 需检查 Trial 的日志来修复错误。
如,其中常见的一种错误是在运行 MNIST 示例时没有安装 TensorFlow。 因为导入模块的错误(没有安装 Tensorflow,但在 Trial 代码中有 import tensorflow 的语句),每次 Trial 都会运行失败。
.. image:: ../../img/trial_error.jpg
:target: ../../img/trial_error.jpg
:alt:
如图,每个 Trial 都有日志路径,可以从中找到 Trial 的日志和 stderr。
除了 Experiment 级调试之外,NNI 还提供调试单个 Trial 的功能,而无需启动整个 Experiment。 有关调试单个 Trial 代码的更多信息,请参考 `独立运行模式 <../TrialExample/Trials#standalone-mode-for-debugging>`__ 。
# **如何在 NNI 中使用 Docker**
## 概述
[Docker](https://www.docker.com/) 是一种工具, 可通过启动容器, 使用户能够更轻松地根据自己的操作系统部署和运行应用程序。 Docker 不是虚拟机,它不创建虚拟操作系统,但它允许不同的应用程序使用相同的操作系统内核,并通过容器隔离不同的应用程序。
用户可使用 Docker 来启动 NNI Experiment。 NNI 在 Docker Hub 上也提供了官方的 Docker 映像 [msranni/nni](https://hub.docker.com/r/msranni/nni)
## 在本机使用docker
### 第一步:Docker 的安装
在开始使用 Docker 运行 NNI Experiment 前,首先需要在本机安装 Docker 运行程序。 [参考这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/)
### 第二步:启动 Docker 容器
如果已经在本地机器上安装了 Docker 程序,可以启动 Docker 容器来运行 NNI 示例。 因为 NNI 会在 Docker 容器里启动 Web 界面进程,并监听端口,因此需要指定一个在主机和 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。
### 第三步:在 Docker 容器里运行 NNI
如果直接使用 NNI 的官方镜像 `msranni/nni` 来启动 Experiment,可以直接使用 `nnictl` 命令。 NNI 官方镜像有最基础的 Python 环境和深度学习框架。
如果使用自己的 Docker 镜像,需要首先[安装 NNI](InstallationLinux.md)
如果要使用 NNI 的官方示例,可以通过以下 git 命令来克隆 NNI:
git clone https://github.com/Microsoft/nni.git
然后可以进入 `nni/examples/trials` 文件夹来启动 Experiment。
准备好 NNI 的环境后,可使用 `nnictl` 命令开始新的 Experiment。 [参考这里](QuickStart.md)
## 在远程平台上运行 Docker
NNI 支持在[远程平台](../TrainingService/RemoteMachineMode.md)上启动 Experiment,并在远程机器里运行 Trial。 因为 Docker 可以运行独立的 Ubuntu 系统和 SSH 服务,因此 Docker 容器可以作为远程平台来运行 NNI。
### 第一步:设置 Docker 环境
首先在远程机器上安装 Docker 工具,[参考这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/)
为保证 Docker 容器可以被 NNI Experiment 连接上,要在自己的 Docker 容器里安装 SSH 服务,或使用已经配置好 SSH 的映像。 如果要在 Docker 容器里使用 SSH 服务,需要配置 SSH 密码登录或者私钥登录,[参考这里](https://docs.docker.com/engine/examples/running_ssh_service/)
注意:
NNI 的官方镜像 msranni/nni 暂不支持 SSH 服务,应构建自己的带有 SSH 服务的映像,或者使用其他的带有 SSH 服务的镜像。
### 第二步:在远程机器上启动 Dokcer 容器
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 Experiment
可以在配置文件中,设置训练平台为远程平台,然后设置 `machineList` 配置。[参考这里](../TrainingService/RemoteMachineMode.md)。 注意应该设置正确的 `port``username`,以及 `passwd``sshKeyPath`
`port`: 主机的端口,映射到 Docker 的 SSH 端口。
`username`:Docker 容器的用户名。
`passWd: ` Docker 容器的密码。
`sshKeyPath:` Docker 容器私钥的存储路径。
设置完配置文件,就可以启动 Experiment 了,[参考这里](QuickStart.md)
\ No newline at end of file
如何在 NNI 中使用 Docker
================================
概述
--------
`Docker <https://www.docker.com/>`__ 是一种工具, 可通过启动容器, 使用户能够更轻松地根据自己的操作系统部署和运行应用程序。 Docker 不是虚拟机,它不创建虚拟操作系统,但它允许不同的应用程序使用相同的操作系统内核,并通过容器隔离不同的应用程序。
用户可使用 Docker 来启动 NNI Experiment。 NNI 在 Docker Hub 上也提供了官方的 Docker 映像 `msranni/nni <https://hub.docker.com/r/msranni/nni>`__ 。
在本机使用docker
-----------------------------
第一步:Docker 的安装
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在开始使用 Docker 运行 NNI Experiment 前,首先需要在本机安装 Docker 运行程序。 `参考这里 <https://docs.docker.com/install/linux/docker-ce/ubuntu/>`__。
第二步:启动 Docker 容器
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果已经在本地机器上安装了 Docker 程序,可以启动 Docker 容器来运行 NNI 示例。 因为 NNI 会在 Docker 容器里启动 Web 界面进程,并监听端口,因此需要指定一个在主机和 Docker 容器映射的端口,可在容器外访问 Docker 容器里的进程。 通过访问主机的 IP 和端口,就可以访问容器里的 Web 网页进程了。
例如,通过如下命令来启动 Docker 容器:
.. code-block:: bash
docker run -i -t -p [hostPort]:[containerPort] [image]
``-i:`` 使用交互模式启动 Docker。
``-t:`` 为 Docker 分配一个输入终端。
``-p:`` 端口映射,映射主机端口和容器端口。
可以参考 `这里 <https://docs.docker.com/v17.09/edge/engine/reference/run/>`__,获取更多的命令参考。
注意:
.. code-block:: bash
NNI 目前仅支持本机模式下的 Ubuntu 和 macOS 系统,请使用正确的 Docker 映像类型。 如果想要在 Docker 容器里面使用 GPU,请使用 nvidia-docker。
第三步:在 Docker 容器里运行 NNI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果直接使用 NNI 的官方镜像 ``msranni/nni`` 来启动 Experiment,可以直接使用 ``nnictl`` 命令。 NNI 官方镜像有最基础的 Python 环境和深度学习框架。
如果使用自己的 Docker 镜像,需要首先 `安装 NNI <InstallationLinux.rst>`__。
如果要使用 NNI 的官方示例,可以通过以下 git 命令来克隆 NNI:
.. code-block:: bash
git clone https://github.com/Microsoft/nni.git
然后可以进入 ``nni/examples/trials`` 文件夹来启动 Experiment。
准备好 NNI 的环境后,可使用 ``nnictl`` 命令开始新的 Experiment。 `入门教程 <QuickStart.rst>`__。
在远程平台上运行 Docker
---------------------------------
NNI 支持在 `远程平台 <../TrainingService/RemoteMachineMode.rst>`__ 上启动 Experiment,并在远程机器里运行 Trial。 因为 Docker 可以运行独立的 Ubuntu 系统和 SSH 服务,因此 Docker 容器可以作为远程平台来运行 NNI。
第一步:设置 Docker 环境
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你首先应该在远程机器上安装docker工具,`参考这里 <https://docs.docker.com/install/linux/docker-ce/ubuntu/>`__。
为保证 Docker 容器可以被 NNI Experiment 连接上,要在自己的 Docker 容器里安装 SSH 服务,或使用已经配置好 SSH 的映像。 如果要在 Docker 容器里使用 SSH 服务,需要配置 SSH 密码登录或者私钥登录,`参考这里 <https://docs.docker.com/engine/examples/running_ssh_service/>`__。
注意:
.. code-block:: text
NNI 的官方镜像 msranni/nni 暂不支持 SSH 服务,应构建自己的带有 SSH 服务的映像,或者使用其他的带有 SSH 服务的镜像。
第二步:在远程机器上启动 Dokcer 容器
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SSH 服务需要端口,要把 Docker 的 SSH 服务端口暴露给 NNI 作为连接端口。 例如,如果设置容器的端口 ``A`` 作为 SSH 端口,应把端口 ``A`` 映射到主机的端口 ``B``,NNI 会连接端口 ``B`` 作为 SSH 服务端口,主机会把连接到端口 ``B`` 的连接映射到端口 ``A``,NNI 就可以连接到容器中了。
例如,通过如下命令来启动 Docker 容器:
.. code-block:: bash
docker run -dit -p [hostPort]:[containerPort] [image]
``containerPort`` 是在 Docker 容器中指定的端口,``hostPort`` 是主机的端口。 可设置 NNI 配置,连接到``hostPort``,这个连接会被转发到 Docker 容器。
可以参考 `这里 <https://docs.docker.com/v17.09/edge/engine/reference/run/>`__,获取更多的命令参考。
注意:
.. code-block:: bash
如果使用自己构建的 Docker 映像,确保有基础的 Python 运行时和 NNI SDK 环境。 如果想要在 Docker 容器里面使用 GPU,请使用 nvidia-docker。
第三步:运行 NNI Experiment
^^^^^^^^^^^^^^^^^^^^^^^^^^^
可以在配置文件中,设置训练平台为远程平台,然后设置 ``machineList`` 配置,`参考这里 <../TrainingService/RemoteMachineMode.rst>`__。 注意应该设置正确的 ``port``\ , ``username``\ , 以及 ``passWd`` 或 ``sshKeyPath`` 。
``port:`` 主机的端口,映射到 Docker 的 SSH 端口。
``username:`` Docker 容器的用户名。
``passWd:`` Docker 容器的密码。
``sshKeyPath:`` Docker 容器私钥的存储路径。
设置完配置文件,你就可以启动实验了,`参考这里 <QuickStart.rst>`__。
**如何将自定义的算法安装为内置的 Tuner,Assessor 和 Advisor**
===
## 概述
NNI 提供了大量可用于超参优化的[内置 Tuner](../Tuner/BuiltinTuner.md), [Advisor](../Tuner/HyperbandAdvisor.md) 以及 [Assessor](../Assessor/BuiltinAssessor.md),其它算法可在 NNI 安装后,通过 `nnictl package install --name <name>` 安装。 可通过 `nnictl package list` 命令查看其它算法。
NNI 中,还可以创建自定义的 Tuner,Advisor 和 Assessor。 并根据 Experiment 配置文件的说明来使用这些自定义的算法,可参考 [自定义 Tuner](../Tuner/CustomizeTuner.md)/[Advisor](../Tuner/CustomizeAdvisor.md)/[Assessor](../Assessor/CustomizeAssessor.md)
用户可将自定义的算法作为内置算法安装,以便像其它内置 Tuner、Advisor、Assessor 一样使用。 更重要的是,这样更容易向其他人分享或发布自己实现的算法。 自定义的 Tuner、Advisor、Assessor 可作为内置算法安装到 NNI 中,安装完成后,可在 Experiment 配置文件中像内置算法一样使用。 例如,将自定义的算法 `mytuner` 安装到 NNI 后,可在配置文件中直接使用:
```yaml
tuner:
builtinTunerName: mytuner
```
## 将自定义的算法安装为内置的 Tuner,Assessor 或 Advisor
可参考下列步骤来构建自定义的 Tuner、Assessor、Advisor,并作为内置算法安装。
### 1. 创建自定义的 Tuner、Assessor、Advisor
参考下列说明来创建:
* [自定义 Tuner](../Tuner/CustomizeTuner.md)
* [自定义 Assessor](../Assessor/CustomizeAssessor.md)
* [自定义 Advisor](../Tuner/CustomizeAdvisor.md)
### 2. (可选) 创建 Validator 来验证 classArgs
NNI 提供了 `ClassArgsValidator` 接口,自定义的算法可用它来验证 Experiment 配置文件中传给构造函数的 classArgs 参数。 `ClassArgsValidator` 接口如下:
```python
class ClassArgsValidator(object):
def validate_class_args(self, **kwargs):
"""
Experiment 配置中的 classArgs 字段会作为 dict
传入到 kwargs。
"""
pass
```
例如,可将 Validator 如下实现:
```python
from schema import Schema, Optional
from nni import ClassArgsValidator
class MedianstopClassArgsValidator(ClassArgsValidator):
def validate_class_args(self, **kwargs):
Schema({
Optional('optimize_mode'): self.choices('optimize_mode', 'maximize', 'minimize'),
Optional('start_step'): self.range('start_step', int, 0, 9999),
}).validate(kwargs)
```
在 Experiment 启动时,会调用 Validator,检查 classArgs 字段是否正确。
### 3. 准备安装源
要作为内置 Tuner,Assessor,Advisor 安装,自定义算法需要用 `pip` 命令能识别的方法来打包,NNI 会调用 `pip` 命令来安装包。 除了能作为公共的 pip 源,包需要在 `classifiers` 字段中提供元信息。 classifiers 字段格式如下:
```
NNI Package :: <type> :: <builtin name> :: <full class name of tuner> :: <full class name of class args validator>
```
* `type`: 算法类型,可为 `tuner`, `assessor`, `advisor`
* `builtin name`: 在 Experiment 配置文件中使用的内置名称
* `full class name of tuner`: Tuner 类名,包括模块名,如:`demo_tuner.DemoTuner`
* `full class name of class args validator`: 类的参数验证类 validator 的类名,包括模块名,如:`demo_tuner.MyClassArgsValidator`
安装包 `setup.py` 中的 classfiers 示例如下:
```python
classifiers = [
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: ',
'NNI Package :: tuner :: demotuner :: demo_tuner.DemoTuner :: demo_tuner.MyClassArgsValidator'
],
```
`setup.py` 中加入元信息后,可构建 pip 安装源:
* 在包目录中运行 `python setup.py develop` 命令,此命令会将目录作为 pip 安装源。
* 在包目录中运行 `python setup.py bdist_wheel` 命令,会构建 whl 文件。
在通过 `nnictl package install <source>` 命令安装时,NNI 会查找 `NNI Package` 开头的 classifier,获取包的元信息。
参考[自定义 Tuner 的完整示例](https://github.com/microsoft/nni/blob/master/examples/tuners/customized_tuner/README.md)
### 4. 将自定义算法包安装到 NNI 中
如果安装源是通过 `python setup.py develop` 准备的源代码目录,可通过下列命令安装:
`nnictl package install <安装源目录>`
例如:
`nnictl package install nni/examples/tuners/customized_tuner/`
如果安装源是通过 `python setup.py bdist_wheel` 准备的 whl 文件,可通过下列命令安装:
`nnictl package install <whl 文件路径>`
例如:
`nnictl package install nni/examples/tuners/customized_tuner/dist/demo_tuner-0.1-py3-none-any.whl`
## 5. 在 Experiment 中使用安装的算法
在自定义算法安装后,可用其它内置 Tuner、Assessor、Advisor 的方法在 Experiment 配置文件中使用,例如:
```yaml
tuner:
builtinTunerName: demotuner
classArgs:
#可选项: maximize, minimize
optimize_mode: maximize
```
## 用 `nnictl package` 命令管理包
### 列出已安装的包
运行以下命令列出已安装的包:
```
nnictl package list
+-----------------+------------+-----------+--------=-------------+------------------------------------------+
| Name | Type | Installed | Class Name | Module Name |
+-----------------+------------+-----------+----------------------+------------------------------------------+
| demotuner | tuners | Yes | DemoTuner | demo_tuner |
| SMAC | tuners | No | SMACTuner | nni.smac_tuner.smac_tuner |
| PPOTuner | tuners | No | PPOTuner | nni.ppo_tuner.ppo_tuner |
| BOHB | advisors | Yes | BOHB | nni.bohb_advisor.bohb_advisor |
+-----------------+------------+-----------+----------------------+------------------------------------------+
```
运行以下命令列出包括不能卸载的所有包。
```
nnictl package list --all
+-----------------+------------+-----------+--------=-------------+------------------------------------------+
| Name | Type | Installed | Class Name | Module Name |
+-----------------+------------+-----------+----------------------+------------------------------------------+
| TPE | tuners | Yes | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Random | tuners | Yes | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Anneal | tuners | Yes | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Evolution | tuners | Yes | EvolutionTuner | nni.evolution_tuner.evolution_tuner |
| BatchTuner | tuners | Yes | BatchTuner | nni.batch_tuner.batch_tuner |
| GridSearch | tuners | Yes | GridSearchTuner | nni.gridsearch_tuner.gridsearch_tuner |
| NetworkMorphism | tuners | Yes | NetworkMorphismTuner | nni.networkmorphism_tuner.networkmo... |
| MetisTuner | tuners | Yes | MetisTuner | nni.metis_tuner.metis_tuner |
| GPTuner | tuners | Yes | GPTuner | nni.gp_tuner.gp_tuner |
| PBTTuner | tuners | Yes | PBTTuner | nni.pbt_tuner.pbt_tuner |
| SMAC | tuners | No | SMACTuner | nni.smac_tuner.smac_tuner |
| PPOTuner | tuners | No | PPOTuner | nni.ppo_tuner.ppo_tuner |
| Medianstop | assessors | Yes | MedianstopAssessor | nni.medianstop_assessor.medianstop_... |
| Curvefitting | assessors | Yes | CurvefittingAssessor | nni.curvefitting_assessor.curvefitt... |
| Hyperband | advisors | Yes | Hyperband | nni.hyperband_advisor.hyperband_adv... |
| BOHB | advisors | Yes | BOHB | nni.bohb_advisor.bohb_advisor |
+-----------------+------------+-----------+----------------------+------------------------------------------+
```
### 卸载包
运行以下命令卸载已安装的包:
`nnictl package uninstall <包名称>`
例如:
`nnictl package uninstall demotuner`
如何将自定义的算法安装为内置的 Tuner,Assessor 和 Advisor
=======================================================================================
概述
--------
NNI 提供了大量可用于超参优化的 `内置 Tuner <../Tuner/BuiltinTuner.rst>`_, `Advisor <../Tuner/HyperbandAdvisor.rst>`__ 和 `Assessor <../Assessor/BuiltinAssessor.rst>`__ ,其他算法可在 NNI 安装后,通过 ``nnictl algo register --meta <path_to_meta_file>`` 安装。 可通过 ``nnictl package list`` 命令查看其它算法。
NNI 中,还可以创建自定义的 Tuner,Advisor 和 Assessor。 并根据 Experiment 配置文件的说明来使用这些自定义的算法,可参考 `自定义 Tuner <../Tuner/CustomizeTuner.rst>`_ , `Advisor <../Tuner/CustomizeAdvisor.rst>`__ 和 `Assessor <../Assessor/CustomizeAssessor.rst>`__。
用户可将自定义的算法作为内置算法安装,以便像其它内置 Tuner、Advisor、Assessor 一样使用。 更重要的是,这样更容易向其他人分享或发布自己实现的算法。 自定义的 Tuner、Advisor、Assessor 可作为内置算法安装到 NNI 中,安装完成后,可在 Experiment 配置文件中像内置算法一样使用。 例如,将自定义的算法 ``mytuner`` 安装到 NNI 后,可在配置文件中直接使用:
.. code-block:: yaml
tuner:
builtinTunerName: mytuner
将自定义的算法安装为内置的 Tuner,Assessor 或 Advisor
------------------------------------------------------------------------
可参考下列步骤来构建自定义的 Tuner、Assessor、Advisor,并作为内置算法安装。
1. 创建自定义的 Tuner、Assessor、Advisor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
参考下列说明来创建:
* `自定义 Tuner <../Tuner/CustomizeTuner.rst>`_
* `自定义 Assessor <../Assessor/CustomizeAssessor.rst>`_
* `自定义 Advisor <../Tuner/CustomizeAdvisor.rst>`_
2. (可选) 创建 Validator 来验证 classArgs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
NNI 提供了 ``ClassArgsValidator`` 接口,自定义的算法可用它来验证 Experiment 配置文件中传给构造函数的 classArgs 参数。
``ClassArgsValidator`` 接口如下:
.. code-block:: python
class ClassArgsValidator(object):
def validate_class_args(self, **kwargs):
"""
Experiment 配置中的 classArgs 字段会作为 dict
传入到 kwargs。
"""
pass
例如,可将 Validator 如下实现:
.. code-block:: python
from schema import Schema, Optional
from nni import ClassArgsValidator
class MedianstopClassArgsValidator(ClassArgsValidator):
def validate_class_args(self, **kwargs):
Schema({
Optional('optimize_mode'): self.choices('optimize_mode', 'maximize', 'minimize'),
Optional('start_step'): self.range('start_step', int, 0, 9999),
}).validate(kwargs)
在 Experiment 启动时,会调用 Validator,检查 classArgs 字段是否正确。
3. 将自定义算法包安装到 python 环境 中
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
首先,自定义的算法需要被打成 python 包。 然后你可以通过以下命令把算法包安装到 python 环境中:
* 在包目录中运行 ``python setup.py develop``,此命令会在开发者模式下安装包。如果算法正在开发中,推荐使用此命令。
* 在包目录中运行 ``python setup.py bdist_wheel`` 命令,会构建 whl 文件。 可通过 ``pip3 install sklearn`` 命令来安装。
4. 准备安装源
^^^^^^^^^^^^^^^^^^^^
使用以下关键词创建 YAML 文件:
* ``algoType``: 算法类型,可为 ``tuner``, ``assessor``, ``advisor``
* ``builtinName``: 在 Experiment 配置文件中使用的内置名称
* `className`: Tuner 类名,包括模块名,例如:``demo_tuner.DemoTuner``
* `classArgsValidator`: 类的参数验证类 validator 的类名,包括模块名,如:``demo_tuner.MyClassArgsValidator``
YAML 文件示例:
.. code-block:: yaml
algoType: tuner
builtinName: demotuner
className: demo_tuner.DemoTuner
classArgsValidator: demo_tuner.MyClassArgsValidator
5. 将自定义算法包安装到 NNI 中
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
运行以下命令将自定义算法加入到 NNI 的内置算法中:
.. code-block:: bash
nnictl algo register --meta <path_to_meta_file>
``<path_to_meta_file>`` 是上一节创建的 YAML 文件的路径。
参考 `这里 <../Tuner/InstallCustomizedTuner.rst>`_ 获取完整示例。
6. 在 Experiment 中使用安装的算法
-----------------------------------------------------
在自定义算法安装后,可用其它内置 Tuner、Assessor、Advisor 的方法在 Experiment 配置文件中使用,例如:
.. code-block:: yaml
tuner:
builtinTunerName: demotuner
classArgs:
# 可选项: maximize, minimize
optimize_mode: maximize
使用 ``nnictl algo`` 管理内置的算法
---------------------------------------------------
列出已安装的包
^^^^^^^^^^^^^^^^^^^^^^^
运行以下命令列出已安装的包:
.. code-block:: bash
nnictl algo list
+-----------------+------------+-----------+--------=-------------+------------------------------------------+
| Name | Type | Source | Class Name | Module Name |
+-----------------+------------+-----------+----------------------+------------------------------------------+
| TPE | tuners | nni | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Random | tuners | nni | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Anneal | tuners | nni | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Evolution | tuners | nni | EvolutionTuner | nni.evolution_tuner.evolution_tuner |
| BatchTuner | tuners | nni | BatchTuner | nni.batch_tuner.batch_tuner |
| GridSearch | tuners | nni | GridSearchTuner | nni.gridsearch_tuner.gridsearch_tuner |
| NetworkMorphism | tuners | nni | NetworkMorphismTuner | nni.networkmorphism_tuner.networkmo... |
| MetisTuner | tuners | nni | MetisTuner | nni.metis_tuner.metis_tuner |
| GPTuner | tuners | nni | GPTuner | nni.gp_tuner.gp_tuner |
| PBTTuner | tuners | nni | PBTTuner | nni.pbt_tuner.pbt_tuner |
| SMAC | tuners | nni | SMACTuner | nni.smac_tuner.smac_tuner |
| PPOTuner | tuners | nni | PPOTuner | nni.ppo_tuner.ppo_tuner |
| Medianstop | assessors | nni | MedianstopAssessor | nni.medianstop_assessor.medianstop_... |
| Curvefitting | assessors | nni | CurvefittingAssessor | nni.curvefitting_assessor.curvefitt... |
| Hyperband | advisors | nni | Hyperband | nni.hyperband_advisor.hyperband_adv... |
| BOHB | advisors | nni | BOHB | nni.bohb_advisor.bohb_advisor |
+-----------------+------------+-----------+----------------------+------------------------------------------+
卸载内置算法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
运行以下命令卸载已安装的包:
``nnictl algo unregister <包名称>``
例如:
``nnictl algo unregister demotuner``
# 在 Linux 和 Mac 下安装
## 安装
在 Linux 和 macOS 上安装,遵循以下相同的说明。
### 通过 pip 命令安装 NNI
先决条件:`python 64-bit >= 3.6`
bash
python3 -m pip install --upgrade nni
### 通过源代码安装 NNI
如果对某个或最新版本的代码感兴趣,可通过源代码安装 NNI。
先决条件:`python 64-bit >=3.6`, `git`, `wget`
bash
git clone -b v1.8 https://github.com/Microsoft/nni.git
cd nni
./install.sh
### 在 Docker 映像中使用 NNI
也可将 NNI 安装到 docker 映像中。 参考[这里](../deployment/docker/README.md)来生成 NNI 的 Docker 映像。 也可通过此命令从 Docker Hub 中直接拉取 NNI 的映像 `docker pull msranni/nni:latest`
## 验证安装
以下示例基于 TensorFlow 1.x 。确保运行环境中使用的的是 ** TensorFlow 1.x**
* 通过克隆源代码下载示例。
```bash
git clone -b v1.8 https://github.com/Microsoft/nni.git
```
* 运行 MNIST 示例。
```bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml
```
* 在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明 Experiment 已成功启动。 通过命令行输出的 `Web UI url` 来访问 Experiment 的界面。
```text
INFO: Starting restful server...
INFO: Successfully started Restful server!
INFO: Setting local config...
INFO: Successfully set local config!
INFO: Starting experiment...
INFO: Successfully started experiment!
-----------------------------------------------------------------------
The experiment id is egchD4qy
The Web UI urls are: http://223.255.255.1:8080 http://127.0.0.1:8080
-----------------------------------------------------------------------
You can use these commands to get more information about the experiment
-----------------------------------------------------------------------
commands description
1. nnictl experiment show show the information of experiments
2. nnictl trial ls list all of trial jobs
3. nnictl top monitor the status of running experiments
4. nnictl log stderr show stderr log content
5. nnictl log stdout show stdout log content
6. nnictl stop stop an experiment
7. nnictl trial kill kill a trial job by id
8. nnictl --help get help information about nnictl
-----------------------------------------------------------------------
```
* 在浏览器中打开 `Web UI url`,可看到下图的实验详细信息,以及所有的尝试任务。 查看[这里](../Tutorial/WebUI.md)的更多页面。
![概述](../../img/webui_overview_page.png)
![详细说明](../../img/webui_trialdetail_page.png)
## 系统需求
由于程序变更,NNI 的最低配置会有所更改。
### Linux
| | 推荐配置 | 最低配置 |
| -------- | ----------------------------------------- | ------------------------------------- |
| **操作系统** | Ubuntu 16.04 或以上版本 | |
| **CPU** | Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置 | Intel® Core™ i3 或 AMD Phenom™ X3 8650 |
| **GPU** | NVIDIA® GeForce® GTX 660 或更高配置 | NVIDIA® GeForce® GTX 460 |
| **内存** | 6 GB | 4 GB |
| **存储** | 30 GB 可用的磁盘空间 | |
| **网络** | 宽带连接 | |
| **分辨率** | 1024 x 768 以上 | |
### macOS
| | 推荐配置 | 最低配置 |
| -------- | ------------------------ | -------------------------------------------------- |
| **操作系统** | macOS 10.14.1 或更高版本 | |
| **CPU** | Intel® Core™ i7-4770 或更高 | Intel® Core™ i5-760 或更高 |
| **GPU** | AMD Radeon™ R9 M395X 或更高 | NVIDIA® GeForce® GT 750M 或 AMD Radeon™ R9 M290 或更高 |
| **内存** | 8 GB | 4 GB |
| **存储** | 70GB 可用空间 SSD 硬盘 | 70GB 可用空间及 7200 RPM 硬盘 |
| **网络** | 宽带连接 | |
| **分辨率** | 1024 x 768 以上 | |
## 更多
* [概述](../Overview.md)
* [使用命令行工具 nnictl](Nnictl.md)
* [使用 NNIBoard](WebUI.md)
* [定制搜索空间](SearchSpaceSpec.md)
* [配置 Experiment](ExperimentConfig.md)
* [如何在本机运行 Experiment (支持多 GPU 卡)?](../TrainingService/LocalMode.md)
* [如何在多机上运行 Experiment?](../TrainingService/RemoteMachineMode.md)
* [如何在 OpenPAI 上运行 Experiment?](../TrainingService/PaiMode.md)
* [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](../TrainingService/KubeflowMode.md)
* [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](../TrainingService/FrameworkControllerMode.md)
\ No newline at end of file
在 Linux 和 Mac 下安装
======================
安装
------------
在 Linux 和 macOS 上安装,遵循以下相同的说明。
通过 pip 命令安装 NNI
^^^^^^^^^^^^^^^^^^^^^^^
先决条件:``python 64-bit >= 3.6``
.. code-block:: bash
python3 -m pip install --upgrade nni
通过源代码安装 NNI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果对某个或最新版本的代码感兴趣,可通过源代码安装 NNI。
先决条件:``python 64-bit >=3.6``\ , ``git``\ , ``wget``
.. code-block:: bash
git clone -b v1.9 https://github.com/Microsoft/nni.git
cd nni
./install.sh
在 Docker 映像中使用 NNI
^^^^^^^^^^^^^^^^^^^^^^^^^
也可将 NNI 安装到 docker 映像中。 参考 :githublink:`这里 <deployment/docker/README.rst>` 来生成 NNI 的 docker 映像。 也可通过此命令从 Docker Hub 中直接拉取 NNI 的映像 ``docker pull msranni/nni:latest``。
验证安装
-------------------
以下示例基于 TensorFlow 1.x 构建。 确保运行环境中使用的是 **TensorFlow 1.x**。
*
通过克隆源代码下载示例。
.. code-block:: bash
git clone -b v1.9 https://github.com/Microsoft/nni.git
*
运行 MNIST 示例。
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml
*
在命令行中等待输出 ``INFO: Successfully started experiment!`` 。 此消息表明实验已成功启动。 通过命令行输出的 Web UI url 来访问 Experiment 的界面。
.. code-block:: text
INFO: Starting restful server...
INFO: Successfully started Restful server!
INFO: Setting local config...
INFO: Successfully set local config!
INFO: Starting experiment...
INFO: Successfully started experiment!
-----------------------------------------------------------------------
The experiment id is egchD4qy
The Web UI urls are: http://223.255.255.1:8080 http://127.0.0.1:8080
-----------------------------------------------------------------------
You can use these commands to get more information about the experiment
-----------------------------------------------------------------------
commands description
1. nnictl experiment show show the information of experiments
2. nnictl trial ls list all of trial jobs
3. nnictl top monitor the status of running experiments
4. nnictl log stderr show stderr log content
5. nnictl log stdout show stdout log content
6. nnictl stop stop an experiment
7. nnictl trial kill kill a trial job by id
8. nnictl --help get help information about nnictl
-----------------------------------------------------------------------
* 在浏览器中打开 ``Web UI url``,可看到下图的实验详细信息,以及所有的尝试任务。 查看 `这里 <../Tutorial/WebUI.rst>`__ 的更多页面。
.. image:: ../../img/webui_overview_page.png
:target: ../../img/webui_overview_page.png
:alt: overview
.. image:: ../../img/webui_trialdetail_page.png
:target: ../../img/webui_trialdetail_page.png
:alt: detail
系统需求
-------------------
由于程序变更,NNI 的最低配置会有所更改。
Linux
^^^^^
.. list-table::
:header-rows: 1
:widths: auto
* -
- 推荐配置
- 最低配置
* - **操作系统**
- Ubuntu 16.04 或以上版本
-
* - **CPU**
- Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置
- Intel® Core™ i3 或 AMD Phenom™ X3 8650
* - **GPU**
- NVIDIA® GeForce® GTX 660 或更高配置
- NVIDIA® GeForce® GTX 460
* - **内存**
- 6 GB
- 4 GB
* - **存储**
- 30 GB 可用的磁盘空间
-
* - **网络**
- 宽带连接
-
* - **分辨率**
- 1024 x 768 以上
-
macOS
^^^^^
.. list-table::
:header-rows: 1
:widths: auto
* -
- 推荐配置
- 最低配置
* - **操作系统**
- macOS 10.14.1 或更高版本
-
* - **CPU**
- Intel® Core™ i7-4770 或更高
- Intel® Core™ i5-760 或更高
* - **GPU**
- AMD Radeon™ R9 M395X 或更高
- NVIDIA® GeForce® GT 750M 或 AMD Radeon™ R9 M290 或更高
* - **内存**
- 8 GB
- 4 GB
* - **存储**
- 70GB 可用空间 SSD 硬盘
- 70GB 可用空间及 7200 RPM 硬盘
* - **网络**
- 宽带连接
-
* - **分辨率**
- 1024 x 768 以上
-
更多
---------------
* `概述 <../Overview.rst>`__
* `如何使用命令行工具 nnictl <Nnictl.rst>`__
* `如何使用 NNIBoard <WebUI.rst>`__
* `定义搜索空间 <SearchSpaceSpec.rst>`__
* `定义实验配置 <ExperimentConfig.rst>`__
* `如何在本机运行 Experiment (支持多 GPU 卡)? <../TrainingService/LocalMode.rst>`__
* `如何在多机上运行 Experiment? <../TrainingService/RemoteMachineMode.rst>`__
* `如何在 OpenPAI 上运行 Experiment? <../TrainingService/PaiMode.rst>`__
* `如何通过 Kubeflow 在 Kubernetes 上运行 Experiment? <../TrainingService/KubeflowMode.rst>`__
* `How to run an experiment on Kubernetes through FrameworkController? <../TrainingService/FrameworkControllerMode.rst>`__
* `如何通过 AdaptDL在 Kubernetes 上运行 Experiment? <../TrainingService/AdaptDLMode.rst>`__
# 在 Windows 上安装
## 先决条件
* Python 3.6(或以上)64 位。 在 Windows 上推荐使用 [Anaconda](https://www.anaconda.com/products/individual)[Miniconda](https://docs.conda.io/en/latest/miniconda.html) 来管理多个 Python 环境。
* 如果是新安装的 Python 环境,需要安装 [Microsoft C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) 来支持 NNI 的依赖项,如 `scikit-learn`
```bat
pip install cython wheel
```
* 安装 git 用于验证安装。
## 安装 NNI
大多数情况下,可以从 pip 包安装和升级 NNI。 这样既方便又快捷。
如果对某个或最新版本的代码感兴趣,可通过源代码安装 NNI。
如果要为 NNI 贡献代码,参考[设置开发环境](SetupNniDeveloperEnvironment.md)
* 从 pip 包安装
```bat
python -m pip install --upgrade nni
```
* 从源代码安装
```bat
git clone -b v1.8 https://github.com/Microsoft/nni.git
cd nni
powershell -ExecutionPolicy Bypass -file install.ps1
```
## 验证安装
以下示例基于 TensorFlow 1.x 。确保运行环境中使用的的是 **TensorFlow 1.x**
* 克隆源代码中的示例。
```bat
git clone -b v1.8 https://github.com/Microsoft/nni.git
```
* 运行 MNIST 示例。
```bat
nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml
```
注意:如果熟悉其它框架,可选择 `examples\trials` 目录下对应的示例。 需要将示例 YAML 文件中 Trial 命令的 `python3` 改为 `python`,这是因为默认安装的 Python 可执行文件是 `python.exe`,没有 `python3.exe`。
* 在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明 Experiment 已成功启动。 通过命令行输出的 `Web UI url` 来访问 Experiment 的界面。
```text
INFO: Starting restful server...
INFO: Successfully started Restful server!
INFO: Setting local config...
INFO: Successfully set local config!
INFO: Starting experiment...
INFO: Successfully started experiment!
-----------------------------------------------------------------------
The experiment id is egchD4qy
The Web UI urls are: http://223.255.255.1:8080 http://127.0.0.1:8080
-----------------------------------------------------------------------
You can use these commands to get more information about the experiment
-----------------------------------------------------------------------
commands description
1. nnictl experiment show show the information of experiments
2. nnictl trial ls list all of trial jobs
3. nnictl top monitor the status of running experiments
4. nnictl log stderr show stderr log content
5. nnictl log stdout show stdout log content
6. nnictl stop stop an experiment
7. nnictl trial kill kill a trial job by id
8. nnictl --help get help information about nnictl
-----------------------------------------------------------------------
```
* 在浏览器中打开 `Web UI url`,可看到下图的 Experiment 详细信息,以及所有的 Trial 任务。 查看[这里](../Tutorial/WebUI.md)的更多页面。
![概述](../../img/webui_overview_page.png)
![详细说明](../../img/webui_trialdetail_page.png)
## 系统需求
以下是 NNI 在 Windows 上的最低配置,推荐使用 Windows 10 1809 版。 由于程序变更,NNI 的最低配置会有所更改。
| | 推荐配置 | 最低配置 |
| -------- | ----------------------------------------- | ------------------------------------- |
| **操作系统** | Windows 10 1809 或更高版本 | |
| **CPU** | Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置 | Intel® Core™ i3 或 AMD Phenom™ X3 8650 |
| **GPU** | NVIDIA® GeForce® GTX 660 或更高配置 | NVIDIA® GeForce® GTX 460 |
| **内存** | 6 GB | 4 GB |
| **存储** | 30 GB 可用的磁盘空间 | |
| **网络** | 宽带连接 | |
| **分辨率** | 1024 x 768 以上 | |
## 常见问答
### 安装 NNI 时出现 simplejson 错误
确保安装了 C++ 14.0 编译器。
> building 'simplejson._speedups' extension error: [WinError 3] The system cannot find the path specified
### 在命令行或 PowerShell 中,Trial 因为缺少 DLL 而失败
此错误因为缺少 LIBIFCOREMD.DLL 和 LIBMMD.DLL 文件,且 SciPy 安装失败。 使用 Anaconda 或 Miniconda 和 Python(64位)可解决。
> ImportError: DLL load failed
### Web 界面上的 Trial 错误
检查 Trial 日志文件来了解详情。
如果存在 stderr 文件,也需要查看其内容。 两种可能的情况是:
* 忘记将 Experiment 配置的 Trial 命令中的 `python3` 改为 `python`
* 忘记安装 Experiment 的依赖,如 TensorFlow,Keras 等。
### 无法在 Windows 上使用 BOHB
确保安装了 C ++ 14.0 编译器然后尝试运行 `nnictl package install --name=BOHB` 来安装依赖项。
### Windows 上不支持的 Tuner
当前不支持 SMAC,原因可参考[此问题](https://github.com/automl/SMAC3/issues/483)
### 用 Windows 作为远程节点
参考[远程模式](../TrainingService/RemoteMachineMode.md).
### 安装时出现 Segmentation Fault (core dumped)
参考[常见问题](FAQ.md)
## 更多
* [概述](../Overview.md)
* [使用命令行工具 nnictl](Nnictl.md)
* [使用 NNIBoard](WebUI.md)
* [定制搜索空间](SearchSpaceSpec.md)
* [配置 Experiment](ExperimentConfig.md)
* [如何在本机运行 Experiment (支持多 GPU 卡)?](../TrainingService/LocalMode.md)
* [如何在多机上运行 Experiment?](../TrainingService/RemoteMachineMode.md)
* [如何在 OpenPAI 上运行 Experiment?](../TrainingService/PaiMode.md)
* [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](../TrainingService/KubeflowMode.md)
* [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](../TrainingService/FrameworkControllerMode.md)
在 Windows 上安装
==================
先决条件
-----------
*
Python 3.6(或以上)64 位。 在 Windows 上推荐使用 `Anaconda <https://www.anaconda.com/products/individual>`__ 或 `Miniconda <https://docs.conda.io/en/latest/miniconda.html>`__ 来管理多个 Python 环境。
*
如果是新安装的 Python 环境,需要安装 `Microsoft C++ Build Tools <https://visualstudio.microsoft.com/visual-cpp-build-tools/>`__ 来支持 NNI 的依赖项,如 ``scikit-learn``。
.. code-block:: bat
pip install cython wheel
*
安装 git 用于验证安装。
安装 NNI
-----------
大多数情况下,可以从 pip 包安装和升级 NNI。 这样既方便又快捷。
如果对某个或最新版本的代码感兴趣,可通过源代码安装 NNI。
如果要为 NNI 贡献代码,参考 `设置开发环境 <SetupNniDeveloperEnvironment.rst>`__。
*
从 pip 包安装
.. code-block:: bat
python -m pip install --upgrade nni
*
从源代码安装
.. code-block:: bat
git clone -b v1.9 https://github.com/Microsoft/nni.git
cd nni
powershell -ExecutionPolicy Bypass -file install.ps1
验证安装
-------------------
以下示例基于 TensorFlow 1.x 构建。 确保运行环境中使用的是 **TensorFlow 1.x**。
*
克隆源代码中的示例。
.. code-block:: bat
git clone -b v1.9 https://github.com/Microsoft/nni.git
*
运行 MNIST 示例。
.. code-block:: bat
nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml
注意:如果熟悉其它框架,可选择 ``examples\trials`` 目录下对应的示例。 需要将示例 YAML 文件中 Trial 命令的 ``python3`` 改为 ``python``,这是因为默认安装的 Python 可执行文件是 ``python.exe``,没有 ``python3.exe``。
*
在命令行中等待输出 ``INFO: Successfully started experiment!`` 。 此消息表明实验已成功启动。 通过命令行输出的 Web UI url 来访问 Experiment 的界面。
.. code-block:: text
INFO: Starting restful server...
INFO: Successfully started Restful server!
INFO: Setting local config...
INFO: Successfully set local config!
INFO: Starting experiment...
INFO: Successfully started experiment!
-----------------------------------------------------------------------
The experiment id is egchD4qy
The Web UI urls are: http://223.255.255.1:8080 http://127.0.0.1:8080
-----------------------------------------------------------------------
You can use these commands to get more information about the experiment
-----------------------------------------------------------------------
commands description
1. nnictl experiment show show the information of experiments
2. nnictl trial ls list all of trial jobs
3. nnictl top monitor the status of running experiments
4. nnictl log stderr show stderr log content
5. nnictl log stdout show stdout log content
6. nnictl stop stop an experiment
7. nnictl trial kill kill a trial job by id
8. nnictl --help get help information about nnictl
-----------------------------------------------------------------------
* 在浏览器中打开 ``Web UI url``,可看到下图的实验详细信息,以及所有的尝试任务。 查看 `这里 <../Tutorial/WebUI.rst>`__ 的更多页面。
.. image:: ../../img/webui_overview_page.png
:target: ../../img/webui_overview_page.png
:alt: overview
.. image:: ../../img/webui_trialdetail_page.png
:target: ../../img/webui_trialdetail_page.png
:alt: detail
系统需求
-------------------
以下是 NNI 在 Windows 上的最低配置,推荐使用 Windows 10 1809 版。 由于程序变更,NNI 的最低配置会有所更改。
.. list-table::
:header-rows: 1
:widths: auto
* -
- 推荐配置
- 最低配置
* - **操作系统**
- Windows 10 1809 或更高版本
-
* - **CPU**
- Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置
- Intel® Core™ i3 或 AMD Phenom™ X3 8650
* - **GPU**
- NVIDIA® GeForce® GTX 660 或更高配置
- NVIDIA® GeForce® GTX 460
* - **内存**
- 6 GB
- 4 GB
* - **存储**
- 30 GB 可用的磁盘空间
-
* - **网络**
- 宽带连接
-
* - **分辨率**
- 1024 x 768 以上
-
常见问答
---
安装 NNI 时出现 simplejson 错误
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
确保安装了 C++ 14.0 编译器。
..
building 'simplejson._speedups' extension error: [WinError 3] The system cannot find the path specified
在命令行或 PowerShell 中,Trial 因为缺少 DLL 而失败
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
此错误因为缺少 LIBIFCOREMD.DLL 和 LIBMMD.DLL 文件,且 SciPy 安装失败。 使用 Anaconda 或 Miniconda 和 Python(64位)可解决。
..
ImportError: DLL load failed
Web 界面上的 Trial 错误
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
检查 Trial 日志文件来了解详情。
如果存在 stderr 文件,也需要查看其内容。 两种可能的情况是:
* 忘记将 Experiment 配置的 Trial 命令中的 ``python3`` 改为 ``python``。
* 忘记安装 Experiment 的依赖,如 TensorFlow,Keras 等。
无法在 Windows 上使用 BOHB
^^^^^^^^^^^^^^^^^^^^^^^^^^^
确保安装了 C ++ 14.0 编译器然后尝试运行 ``nnictl package install --name=BOHB`` 来安装依赖项。
Windows 上不支持的 Tuner
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
当前不支持 SMAC,原因可参考 `此问题 <https://github.com/automl/SMAC3/issues/483>`__。
用 Windows 作为远程节点
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
参考 `远程模式 <../TrainingService/RemoteMachineMode.rst>`__.
安装时出现 Segmentation Fault (core dumped)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
参考 `常见问题 <FAQ.rst>`__。
更多
---------------
* `概述 <../Overview.rst>`__
* `如何使用命令行工具 nnictl <Nnictl.rst>`__
* `如何使用 NNIBoard <WebUI.rst>`__
* `定义搜索空间 <SearchSpaceSpec.rst>`__
* `定义实验配置 <ExperimentConfig.rst>`__
* `如何在本机运行 Experiment (支持多 GPU 卡)? <../TrainingService/LocalMode.rst>`__
* `如何在多机上运行 Experiment? <../TrainingService/RemoteMachineMode.rst>`__
* `如何在 OpenPAI 上运行 Experiment? <../TrainingService/PaiMode.rst>`__
* `如何通过 Kubeflow 在 Kubernetes 上运行 Experiment? <../TrainingService/KubeflowMode.rst>`__
* `如何通过 FrameworkController 在 Kubernetes 上运行 Experiment? <../TrainingService/FrameworkControllerMode.rst>`__
# nnictl
## 介绍
**nnictl** 是一个命令行工具,用来控制 NNI Experiment,如启动、停止、继续 Experiment,启动、停止 NNIBoard 等等。
## 命令
nnictl 支持的命令:
* [nnictl create](#create)
* [nnictl resume](#resume)
* [nnictl view](#view)
* [nnictl stop](#stop)
* [nnictl update](#update)
* [nnictl trial](#trial)
* [nnictl top](#top)
* [nnictl experiment](#experiment)
* [nnictl platform](#platform)
* [nnictl config](#config)
* [nnictl log](#log)
* [nnictl webui](#webui)
* [nnictl tensorboard](#tensorboard)
* [nnictl package](#package)
* [nnictl ss_gen](#ss_gen)
* [nnictl --version](#version)
### 管理 Experiment
<a name="create"></a>
### nnictl create
* 说明
此命令使用参数中的配置文件,来创建新的 Experiment。
此命令成功完成后,上下文会被设置为此 Experiment。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此 Experiment。
* 用法
```bash
nnictl create [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------------- | ----- | --- | ---------------------- |
| --config, -c | True | | Experiment 的 YAML 配置文件 |
| --port, -p | False | | RESTful 服务的端口 |
| --debug, -d | False | | 设置为调试模式 |
| --foreground, -f | False | | 设为前台运行模式,将日志输出到终端 |
* 示例
> 在默认端口 8080 上创建一个新的 Experiment
```bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml
```
> 在指定的端口 8088 上创建新的 Experiment
```bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml --port 8088
```
> 在指定的端口 8088 上创建新的 Experiment,并启用调试模式
```bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml --port 8088 --debug
```
注意:
```text
调试模式会禁用 Trialkeeper 中的版本校验功能。
```
<a name="resume"></a>
### nnictl resume
* 说明
使用此命令恢复已停止的 Experiment。
* 用法
```bash
nnictl resume [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------------- | ----- | --- | -------------------------------- |
| id | True | | 要恢复的 Experiment 标识 |
| --port, -p | False | | 要恢复的 Experiment 使用的 RESTful 服务端口 |
| --debug, -d | False | | 设置为调试模式 |
| --foreground, -f | False | | 设为前台运行模式,将日志输出到终端 |
* 示例
> 在指定的端口 8088 上恢复 Experiment
```bash
nnictl resume [experiment_id] --port 8088
```
<a name="view"></a>
### nnictl view
* 说明
使用此命令查看已停止的 Experiment。
* 用法
```bash
nnictl view [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------- | ----- | --- | -------------------------------- |
| id | True | | 要查看的 Experiment 标识 |
| --port, -p | False | | 要查看的 Experiment 使用的 RESTful 服务端口 |
* 示例
> 在指定的端口 8088 上查看 Experiment
```bash
nnictl view [experiment_id] --port 8088
```
<a name="stop"></a>
### nnictl stop
* 说明
使用此命令来停止正在运行的单个或多个 Experiment。
* 用法
```bash
nnictl stop [Options]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------- | ----- | --- | -------------------------------- |
| id | False | | 要停止的 Experiment 标识 |
| --port, -p | False | | 要停止的 Experiment 使用的 RESTful 服务端口 |
| --all, -a | False | | 停止所有 Experiment |
* 详细信息及示例
1. 如果没有指定 id,并且当前有运行的 Experiment,则会停止该 Experiment,否则会输出错误信息。
```bash
nnictl stop
```
2. 如果指定了 id,并且此 id 匹配正在运行的 Experiment,nnictl 会停止相应的 Experiment,否则会输出错误信息。
```bash
nnictl stop [experiment_id]
```
3. 如果指定了端口,并且此端口有正在运行的 Experiment,则会停止此 Experiment。
```bash
nnictl stop --port 8080
```
4. 可使用 'nnictl stop --all' 来停止所有的 Experiment。
```bash
nnictl stop --all
```
5. 如果 id 以 * 结尾,nnictl 会停止所有匹配此通配符的 Experiment。
6. 如果 id 不存在,但匹配了某个Experiment 的 id 前缀,nnictl 会停止匹配的Experiment 。
7. 如果 id 不存在,但匹配了多个 Experiment id 的前缀,nnictl 会输出这些 id 的信息。
<a name="update"></a>
### nnictl update
* **nnictl update searchspace**
* 说明
可以用此命令来更新 Experiment 的搜索空间。
* 用法
```bash
nnictl update searchspace [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| -------------- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 id |
| --filename, -f | True | | 新的搜索空间文件名 |
* 示例
`使用 'examples/trials/mnist-tfv1/search_space.json' 来更新 Experiment 的搜索空间`
```bash
nnictl update searchspace [experiment_id] --filename examples/trials/mnist-tfv1/search_space.json
```
* **nnictl update concurrency**
* 说明
可以用此命令来更新 Experiment 的并发设置。
* 用法
```bash
nnictl update concurrency [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----------- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 ID |
| --value, -v | True | | 允许同时运行的 Trial 的数量 |
* 示例
> 更新 Experiment 的并发数量
```bash
nnictl update concurrency [experiment_id] --value [concurrency_number]
```
* **nnictl update duration**
* 说明
可以用此命令来更新 Experiment 的运行时间。
* 用法
```bash
nnictl update duration [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----------- | ----- | --- | ---------------------------------------------------------------------- |
| id | False | | 需要设置的 Experiment 的 ID |
| --value, -v | True | | 形如 '1m' (一分钟)或 '2h' (两小时)的字符串。 后缀可以为 's'(秒), 'm'(分钟), 'h'(小时)或 'd'(天)。 |
* 示例
> 修改 Experiment 的执行时间
```bash
nnictl update duration [experiment_id] --value [duration]
```
* **nnictl update trialnum**
* 说明
可以用此命令来更新 Experiment 的最大 Trial 数量。
* 用法
```bash
nnictl update trialnum [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----------- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 id |
| --value, -v | True | | 需要设置的 maxtrialnum 的数量 |
* 示例
> 更新 Experiment 的 Trial 数量
```bash
nnictl update trialnum --id [experiment_id] --value [trial_num]
```
<a name="trial"></a>
### nnictl trial
* **nnictl trial ls**
* 说明
使用此命令来查看 Trial 的信息。 注意如果 `head``tail` 被设置, 则只有完成的 Trial 会被展示。
* 用法
```bash
nnictl trial ls
nnictl trial ls --head 10
nnictl trial ls --tail 10
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ------ | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 id |
| --head | False | | 依据最高默认指标列出的项数。 |
| --tail | False | | 依据最低默认指标列出的项数。 |
* **nnictl trial kill**
* 说明
此命令用于终止 Trial。
* 用法
```bash
nnictl trial kill [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| -------------- | ----- | --- | --------------------- |
| id | False | | Trial 的 Experiment ID |
| --trial_id, -T | True | | 需要终止的 Trial 的 ID。 |
* 示例
> 结束 Trial 任务
```bash
nnictl trial [trial_id] --experiment [experiment_id]
```
<a name="top"></a>
### nnictl top
* 说明
查看正在运行的 Experiment。
* 用法
```bash
nnictl top
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------- | ----- | --- | ------------------------------------ |
| id | False | | 需要设置的 Experiment 的 id |
| --time, -t | False | | 刷新 Experiment 状态的时间间隔,单位为秒,默认值为 3 秒。 |
<a name="experiment"></a>
### 管理 Experiment 信息
* **nnictl experiment show**
* 说明
显示 Experiment 的信息。
* 用法
```bash
nnictl experiment show
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 id |
* **nnictl experiment status**
* 说明
显示 Experiment 的状态。
* 用法
```bash
nnictl experiment status
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 ID |
* **nnictl experiment list**
* 说明
显示正在运行的 Experiment 的信息
* 用法
```bash
nnictl experiment list [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | --------------- |
| --all | False | | 列出所有 Experiment |
* **nnictl experiment delete**
* 说明
删除一个或所有 Experiment,包括日志、结果、环境信息和缓存。 用于删除无用的 Experiment 结果,或节省磁盘空间。
* 用法
```bash
nnictl experiment delete [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | --------------- |
| id | False | | Experiment ID |
| --all | False | | 删除所有 Experiment |
* **nnictl experiment export**
* 说明
使用此命令,可将 Trial 的 reward 和超参导出为 csv 文件。
* 用法
```bash
nnictl experiment export [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ------------------ | ----- | --- | ------------------------- |
| id | False | | Experiment ID |
| --filename, -f | True | | 文件的输出路径 |
| --type | True | | 输出文件类型,仅支持 "csv" 和 "json" |
| --intermediate, -i | False | | 是否保存中间结果 |
* 示例
> 将 Experiment 中所有 Trial 数据导出为 JSON 格式
```bash
nnictl experiment export [experiment_id] --filename [file_path] --type json --intermediate
```
* **nnictl experiment import**
* 说明
可使用此命令将以前的 Trial 超参和结果导入到 Tuner 中。 数据会传入调参算法中(即 Tuner 或 Advisor)。
* 用法
```bash
nnictl experiment import [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| -------------- | ----- | --- | ------------------------ |
| id | False | | 需要将数据导入的 Experiment 的 ID |
| --filename, -f | True | | 需要导入的 JSON 格式的数据文件 |
* 详细说明
NNI 支持导入用户的数据,确保数据格式正确。 示例如下:
```json
[
{"parameter": {"x": 0.5, "y": 0.9}, "value": 0.03},
{"parameter": {"x": 0.4, "y": 0.8}, "value": 0.05},
{"parameter": {"x": 0.3, "y": 0.7}, "value": 0.04}
]
```
最顶层列表的每个元素都是一个示例。 对于内置的 Tuner 和 Advisor,每个样本至少需要两个主键:`parameter``value``parameter` 必须与 Experiment 的搜索空间相匹配,`parameter` 中的所有的主键(或超参)都必须与搜索空间中的主键相匹配。 否则, Tuner 或 Advisor 可能会有无法预期的行为。 `Value` 应当遵循与 `nni.report_final_result` 的输入值一样的规则,即要么时一个数字,或者是包含 `default` 主键的 dict。 对于自定义的 Tuner 或 Advisor,根据实现的不同,此文件可以是任意的 JSON 内容(例如,`import_data`)。
也可以用 [nnictl experiment export](#export) 命令导出 Experiment 已经运行过的 Trial 超参和结果。
当前,以下 Tuner 和 Advisor 支持导入数据:
```yaml
内置 Tuner: TPE, Anneal, GridSearch, MetisTuner
内置 Advisor: BOHB
```
*如果要将数据导入到 BOHB Advisor,建议像 NNI 一样,增加 "TRIAL_BUDGET" 参数,否则,BOHB 会使用 max_budget 作为 "TRIAL_BUDGET"。 示例如下:*
```json
[
{"parameter": {"x": 0.5, "y": 0.9, "TRIAL_BUDGET": 27}, "value": 0.03}
]
```
* 示例
> 将数据导入运行中的 Experiment
```bash
nnictl experiment import [experiment_id] -f experiment_data.json
```
* **nnictl experiment save**
* 说明
保存 NNI Experiment 的元数据及代码数据
* 用法
```bash
nnictl experiment save [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----------------- | ----- | --- | ---------------------------------- |
| id | True | | 要保存的 Experiment 标识 |
| --path, -p | False | | 保存 NNI Experiment 数据的路径,默认为当前工作目录 |
| --saveCodeDir, -s | False | | 是否保存 Experiment 的代码目录的数据,默认为 False |
* 示例
> 保存 Experiment
```bash
nnictl experiment save [experiment_id] --saveCodeDir
```
* **nnictl experiment load**
* 说明
加载 NNI Experiment
* 用法
```bash
nnictl experiment load [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ------------- | ----- | --- | ---------------------------------- |
| --path, -p | True | | NNI 包的文件路径 |
| --codeDir, -c | True | | 要加载的实验的代码目录,加载的 NNI 包中的代码也会放到此目录下。 |
| --logDir, -l | False | | 存放加载的实验的日志的目录。 |
* 示例
> 加载 Experiment
```bash
nnictl experiment load --path [path] --codeDir [codeDir]
```
<a name="platform"></a>
### 管理平台信息
* **nnictl platform clean**
* 说明
用于清理目标平台上的磁盘空间。 所提供的 YAML 文件包括了目标平台的信息,与 NNI 配置文件的格式相同。
* 注意
如果目标平台正在被别人使用,可能会造成他人的意外错误。
* 用法
```bash
nnictl platform clean [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| -------- | ---- | --- | ----------------------------- |
| --config | True | | 创建 Experiment 时的 YAML 配置文件路径。 |
<a name="config"></a>
### nnictl config show
* 说明
显示当前上下文信息。
* 用法
```bash
nnictl config show
```
<a name="log"></a>
### 管理日志
* **nnictl log stdout**
* 说明
显示 stdout 日志内容。
* 用法
```bash
nnictl log stdout [options]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 id |
| --head, -h | False | | 显示 stdout 开始的若干行 |
| --tail, -t | False | | 显示 stdout 结尾的若干行 |
| --path, -p | False | | 显示 stdout 文件的路径 |
* 示例
> 显示 stdout 结尾的若干行
```bash
nnictl log stdout [experiment_id] --tail [lines_number]
```
* **nnictl log stderr**
* 说明
显示 stderr 日志内容。
* 用法
```bash
nnictl log stderr [options]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 ID |
| --head, -h | False | | 显示 stderr 开始的若干行 |
| --tail, -t | False | | 显示 stderr 结尾的若干行 |
| --path, -p | False | | 显示 stderr 文件的路径 |
* **nnictl log trial**
* 说明
显示 Trial 日志的路径。
* 用法
```bash
nnictl log trial [options]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| -------------- | ----- | --- | -------------------------------------- |
| id | False | | Trial 的 Experiment ID |
| --trial_id, -T | False | | 所需要找日志路径的 Trial 的 ID,当 id 不为空时,此值也为必需。 |
<a name="webui"></a>
### 管理 Web 界面
* **nnictl webui url**
<a name="tensorboard"></a>
### 管理 TensorBoard
* **nnictl tensorboard start**
* 说明
启动 tensorboard 进程。
* 用法
```bash
nnictl tensorboard start
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| -------------- | ----- | ---- | --------------------- |
| id | False | | 需要设置的 Experiment 的 ID |
| --trial_id, -T | False | | Trial 的 ID |
| --port | False | 6006 | Tensorboard 进程的端口 |
* 详细说明
1. NNICTL 当前仅支持本机和远程平台的 Tensorboard,其它平台暂不支持。
2. 如果要使用 Tensorboard,需要将 Tensorboard 日志输出到环境变量 [NNI_OUTPUT_DIR] 路径下。
3. 在 local 模式中,nnictl 会直接设置 --logdir=[NNI_OUTPUT_DIR] 并启动 Tensorboard 进程。
4. 在 remote 模式中,nnictl 会创建一个 SSH 客户端来将日志数据从远程计算机复制到本机临时目录中,然后在本机开始 Tensorboard 进程。 需要注意的是,nnictl 只在使用此命令时复制日志数据,如果要查看最新的 Tensorboard 结果,需要再次执行 nnictl tensorboard 命令。
5. 如果只有一个 Trial 任务,不需要设置 Trial ID。 如果有多个运行的 Trial 任务,需要设置 Trial ID,或使用 [nnictl tensorboard start --trial_id all] 来将 --logdir 映射到所有 Trial 的路径。
* **nnictl tensorboard stop**
* 说明
停止所有 Tensorboard 进程。
* 用法
```bash
nnictl tensorboard stop
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | --------------------- |
| id | False | | 需要设置的 Experiment 的 ID |
<a name="package"></a>
### 管理安装包
* **nnictl package install**
* 说明
安装自定义的 Tuner,Assessor,Advisor(定制或 NNI 提供的算法)。
* 用法
```bash
nnictl package install --name <包名称>
```
可通过 `nnictl package list` 命令查看可用的`<包名称>`
```bash
nnictl package install <安装源>
```
参考[安装自定义算法](InstallCustomizedAlgos.md),来准备安装源。
* 示例
> 安装 SMAC Tuner
```bash
nnictl package install --name SMAC
```
> 安装自定义 Tuner
```bash
nnictl package install nni/examples/tuners/customized_tuner/dist/demo_tuner-0.1-py3-none-any.whl
```
* **nnictl package show**
* 说明
显示包的详情。
* 用法
```bash
nnictl package show <包名称>
```
* 示例
```bash
nnictl package show SMAC
```
* **nnictl package list**
* 说明
列出已安装的包 / 所有包。
* 用法
```bash
nnictl package list [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | ----- |
| --all | False | | 列出所有包 |
* 示例
> 列出已安装的包
```bash
nnictl package list
```
> 列出所有包
```bash
nnictl package list --all
```
* **nnictl package uninstall**
* 说明
卸载包。
* 用法
```bash
nnictl package uninstall <包名称>
```
* 示例 卸载 SMAC 包
```bash
nnictl package uninstall SMAC
```
<a name="ss_gen"></a>
### 生成搜索空间
* **nnictl ss_gen**
* 说明
从使用 NNI NAS API 的用户代码生成搜索空间。
* 用法
```bash
nnictl ss_gen [OPTIONS]
```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| --------------- | ----- | ---------------------------------- | ----------- |
| --trial_command | True | | Trial 代码的命令 |
| --trial_dir | False | ./ | Trial 代码目录 |
| --file | False | nni_auto_gen_search_space.json | 用来存储生成的搜索空间 |
* 示例
> 生成搜索空间
```bash
nnictl ss_gen --trial_command="python3 mnist.py" --trial_dir=./ --file=ss.json
```
<a name="version"></a>
### NNI 版本校验
* **nnictl --version**
* 说明
显示当前安装的 NNI 的版本。
* 用法
```bash
nnictl --version
```
\ No newline at end of file
.. role:: raw-html(raw)
:format: html
nnictl
======
介绍
------------
**nnictl** 是一个命令行工具,用来控制 NNI Experiment,如启动、停止、继续 Experiment,启动、停止 NNIBoard 等等。
命令
--------
nnictl 支持的命令:
* `nnictl create <#create>`__
* `nnictl resume <#resume>`__
* `nnictl view <#view>`__
* `nnictl stop <#stop>`__
* `nnictl update <#update>`__
* `nnictl trial <#trial>`__
* `nnictl top <#top>`__
* `nnictl experiment <#experiment>`__
* `nnictl platform <#platform>`__
* `nnictl config <#config>`__
* `nnictl log <#log>`__
* `nnictl webui <#webui>`__
* `nnictl tensorboard <#tensorboard>`__
* `nnictl package <#package>`__
* `nnictl ss_gen <#ss_gen>`__
* `nnictl --version <#version>`__
管理 Experiment
^^^^^^^^^^^^^^^^^^^^
:raw-html:`<a name="create"></a>`
nnictl create
^^^^^^^^^^^^^
*
说明
此命令使用参数中的配置文件,来创建新的实验。
此命令成功完成后,上下文会被设置为此 Experiment。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此 Experiment。
*
用法
.. code-block:: bash
nnictl create [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --config, -c
- True
-
- Experiment 的 YAML 配置文件
* - --port, -p
- False
-
- RESTful 服务的端口
* - --debug, -d
- False
-
- 设置为调试模式
* - --foreground, -f
- False
-
- 设为前台运行模式,将日志输出到终端
*
示例
..
在默认端口 8080 上创建一个新的 Experiment
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml
..
在指定的端口 8088 上创建新的 Experiment
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml --port 8088
..
在指定的端口 8088 上创建新的 Experiment,并启用调试模式
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml --port 8088 --debug
注意:
.. code-block:: text
调试模式会禁用 Trialkeeper 中的版本校验功能。
:raw-html:`<a name="resume"></a>`
nnictl resume
^^^^^^^^^^^^^
*
说明
使用此命令恢复已停止的 Experiment。
*
用法
.. code-block:: bash
nnictl resume [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要恢复的 Experiment 标识
* - --port, -p
- False
-
- 要恢复的 Experiment 使用的 RESTful 服务端口
* - --debug, -d
- False
-
- 设置为调试模式
* - --foreground, -f
- False
-
- 设为前台运行模式,将日志输出到终端
*
示例
..
在指定的端口 8088 上恢复 Experiment
.. code-block:: bash
nnictl resume [experiment_id] --port 8088
:raw-html:`<a name="view"></a>`
nnictl view
^^^^^^^^^^^
*
说明
使用此命令查看已停止的 Experiment。
*
用法
.. code-block:: bash
nnictl view [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要查看的 Experiment 标识
* - --port, -p
- False
-
- 要查看的 Experiment 使用的 RESTful 服务端口
*
示例
..
在指定的端口 8088 上查看 Experiment
.. code-block:: bash
nnictl view [experiment_id] --port 8088
:raw-html:`<a name="stop"></a>`
nnictl stop
^^^^^^^^^^^
*
说明
使用此命令来停止正在运行的单个或多个 Experiment。
*
用法
.. code-block:: bash
nnictl stop [Options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 要停止的 Experiment 标识
* - --port, -p
- False
-
- 要停止的 Experiment 使用的 RESTful 服务端口
* - --all, -a
- False
-
- 停止所有 Experiment
*
详细信息及样例
#.
如果没有指定 id,并且当前有运行的 Experiment,则会停止该 Experiment,否则会输出错误信息。
.. code-block:: bash
nnictl stop
#.
如果指定了 id,并且此 id 匹配正在运行的 Experiment,nnictl 会停止相应的 Experiment,否则会输出错误信息。
.. code-block:: bash
nnictl stop [experiment_id]
#.
如果指定了端口,并且此端口有正在运行的 Experiment,则会停止此 Experiment。
.. code-block:: bash
nnictl stop --port 8080
#.
可使用 'nnictl stop --all' 来停止所有的 Experiment。
.. code-block:: bash
nnictl stop --all
#.
如果 id 以 * 结尾,nnictl 会停止所有匹配此通配符的 Experiment。
#. 如果 id 不存在,但匹配了某个Experiment 的 id 前缀,nnictl 会停止匹配的Experiment 。
#. 如果 id 不存在,但匹配多个 Experiment id 的前缀,nnictl 会输出这些 id 的信息。
:raw-html:`<a name="update"></a>`
nnictl update
^^^^^^^^^^^^^
*
**nnictl update searchspace**
*
说明
可以用此命令来更新 Experiment 的搜索空间。
*
用法
.. code-block:: bash
nnictl update searchspace [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --filename, -f
- True
-
- 新的搜索空间文件名
*
示例
``使用 'examples/trials/mnist-tfv1/search_space.json' 来更新 Experiment 的搜索空间``
.. code-block:: bash
nnictl update searchspace [experiment_id] --filename examples/trials/mnist-tfv1/search_space.json
*
**nnictl update concurrency**
*
说明
可以用此命令来更新 Experiment 的并发设置。
*
用法
.. code-block:: bash
nnictl update concurrency [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 允许同时运行的 Trial 的数量
*
示例
..
更新 Experiment 的并发数量
.. code-block:: bash
nnictl update concurrency [experiment_id] --value [concurrency_number]
*
**nnictl update duration**
*
说明
可以用此命令来更新实验的运行时间。
*
用法
.. code-block:: bash
nnictl update duration [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 形如 '1m' (一分钟)或 '2h' (两小时)的字符串。 后缀可以为 's'(秒), 'm'(分钟), 'h'(小时)或 'd'(天)。
*
示例
..
修改 Experiment 的执行时间
.. code-block:: bash
nnictl update duration [experiment_id] --value [duration]
*
**nnictl update trialnum**
*
说明
可以用此命令来更新实验的最大尝试数量。
*
用法
.. code-block:: bash
nnictl update trialnum [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 需要设置的 maxtrialnum 的数量
*
示例
..
更新 Experiment 的 Trial 数量
.. code-block:: bash
nnictl update trialnum [experiment_id] --value [trial_num]
:raw-html:`<a name="trial"></a>`
nnictl trial
^^^^^^^^^^^^
*
**nnictl trial ls**
*
说明
使用此命令来查看 Trial 的信息。 注意如果 ``head`` 或 ``tail`` 被设置, 则只有完成的 Trial 会被展示。
*
用法
.. code-block:: bash
nnictl trial ls
nnictl trial ls --head 10
nnictl trial ls --tail 10
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head
- False
-
- 依据最高默认指标列出的项数。
* - --tail
- False
-
- 依据最低默认指标列出的项数。
*
**nnictl trial kill**
*
说明
此命令用于终止 Trial。
*
用法
.. code-block:: bash
nnictl trial kill [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Trial 的 Experiment ID
* - --trial_id, -T
- True
-
- 需要终止的 Trial 的 ID。
*
示例
..
结束 Trial 任务
.. code-block:: bash
nnictl trial kill [experiment_id] --trial_id [trial_id]
:raw-html:`<a name="top"></a>`
nnictl top
^^^^^^^^^^
*
说明
查看正在运行的 Experiment。
*
用法
.. code-block:: bash
nnictl top
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --time, -t
- False
-
- 刷新 Experiment 状态的时间间隔,单位为秒,默认值为 3 秒。
:raw-html:`<a name="experiment"></a>`
管理 Experiment 信息
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
**nnictl experiment show**
*
说明
显示 Experiment 的信息。
*
用法
.. code-block:: bash
nnictl experiment show
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
*
**nnictl experiment status**
*
说明
显示 Experiment 的状态。
*
用法
.. code-block:: bash
nnictl experiment status
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
*
**nnictl experiment list**
*
说明
显示正在运行的 Experiment 的信息
*
用法
.. code-block:: bash
nnictl experiment list [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --all
- False
-
- 列出所有 Experiment
*
**nnictl experiment delete**
*
说明
删除一个或所有 Experiment,包括日志、结果、环境信息和缓存。 用于删除无用的 Experiment 结果,或节省磁盘空间。
*
用法
.. code-block:: bash
nnictl experiment delete [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
* - --all
- False
-
- 删除所有 Experiment
*
**nnictl experiment export**
*
说明
使用此命令,可将 Trial 的 reward 和超参导出为 csv 文件。
*
用法
.. code-block:: bash
nnictl experiment export [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
* - --filename, -f
- True
-
- 文件的输出路径
* - --type
- True
-
- 输出文件类型,仅支持 "csv" 和 "json"
* - --intermediate, -i
- False
-
- 是否保存中间结果
*
示例
..
将 Experiment 中所有 Trial 数据导出为 JSON 格式
.. code-block:: bash
nnictl experiment export [experiment_id] --filename [file_path] --type json --intermediate
*
**nnictl experiment import**
*
说明
可使用此命令将以前的 Trial 超参和结果导入到 Tuner 中。 数据会传入调参算法中(即 Tuner 或 Advisor)。
*
用法
.. code-block:: bash
nnictl experiment import [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要将数据导入的 Experiment 的 ID
* - --filename, -f
- True
-
- 需要导入的 JSON 格式的数据文件
*
详细说明
NNI 支持导入用户的数据,确保数据格式正确。 样例如下:
.. code-block:: json
[
{"parameter": {"x": 0.5, "y": 0.9}, "value": 0.03},
{"parameter": {"x": 0.4, "y": 0.8}, "value": 0.05},
{"parameter": {"x": 0.3, "y": 0.7}, "value": 0.04}
]
最顶层列表的每个元素都是一个样例。 对于内置的 Tuner 和 Advisor,每个样本至少需要两个主键:``parameter`` 和 ``value``。 ``parameter`` 必须与 Experiment 的搜索空间相匹配,``parameter`` 中的所有的主键(或超参)都必须与搜索空间中的主键相匹配。 否则, Tuner 或 Advisor 可能会有无法预期的行为。 ``Value`` 应当遵循与 ``nni.report_final_result`` 的输入值一样的规则,即要么时一个数字,或者是包含 ``default`` 主键的 dict。 对于自定义的 Tuner 或 Advisor,根据实现的不同,此文件可以是任意的 JSON 内容(例如,``import_data``)。
也可以用 `nnictl experiment export <#export>`__ 命令导出 Experiment 已经运行过的 Trial 超参和结果。
当前,以下 Tuner 和 Advisor 支持导入数据:
.. code-block:: yaml
builtinTunerName: TPE, Anneal, GridSearch, MetisTuner
builtinAdvisorName: BOHB
*如果要将数据导入到 BOHB Advisor,建议像 NNI 一样,增加 "TRIAL_BUDGET" 参数,否则,BOHB 会使用 max_budget 作为 "TRIAL_BUDGET"。* 示例如下:
.. code-block:: json
[
{"parameter": {"x": 0.5, "y": 0.9, "TRIAL_BUDGET": 27}, "value": 0.03}
]
*
示例
..
将数据导入运行中的 Experiment
.. code-block:: bash
nnictl experiment import [experiment_id] -f experiment_data.json
*
**nnictl experiment save**
*
说明
保存 NNI Experiment 的元数据及代码数据
*
用法
.. code-block:: bash
nnictl experiment save [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要保存的 Experiment 标识
* - --path, -p
- False
-
- 保存 NNI Experiment 数据的路径,默认为当前工作目录
* - --saveCodeDir, -s
- False
-
- 是否保存 Experiment 的代码目录的数据,默认为 False
*
示例
..
保存 Experiment
.. code-block:: bash
nnictl experiment save [experiment_id] --saveCodeDir
*
**nnictl experiment load**
*
说明
加载 NNI Experiment
*
用法
.. code-block:: bash
nnictl experiment load [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --path, -p
- True
-
- NNI 包的文件路径
* - --codeDir, -c
- True
-
- 要加载的实验的代码目录,加载的 NNI 包中的代码也会放到此目录下。
* - --logDir, -l
- False
-
- 存放加载的实验的日志的目录。
* - --searchSpacePath, -s
- True
-
- 存放加载的实验的搜索空间文件的路径(路径包含文件名)。 默认是 $codeDir/search_space.json。
*
示例
..
加载 Experiment
.. code-block:: bash
nnictl experiment load --path [path] --codeDir [codeDir]
:raw-html:`<a name="platform"></a>`
管理平台信息
^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
**nnictl platform clean**
*
说明
用于清理目标平台上的磁盘空间。 所提供的 YAML 文件包括了目标平台的信息,与 NNI 配置文件的格式相同。
*
注意
如果目标平台正在被别人使用,可能会造成他人的意外错误。
*
用法
.. code-block:: bash
nnictl platform clean [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --config
- True
-
- 创建 Experiment 时的 YAML 配置文件路径。
:raw-html:`<a name="config"></a>`
nnictl config show
^^^^^^^^^^^^^^^^^^
*
说明
显示当前上下文信息。
*
用法
.. code-block:: bash
nnictl config show
:raw-html:`<a name="log"></a>`
管理日志
^^^^^^^^^^
*
**nnictl log stdout**
*
说明
显示 stdout 日志内容。
*
用法
.. code-block:: bash
nnictl log stdout [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head, -h
- False
-
- 显示 stdout 开始的若干行
* - --tail, -t
- False
-
- 显示 stdout 结尾的若干行
* - --path, -p
- False
-
- 显示 stdout 文件的路径
*
示例
..
显示 stdout 结尾的若干行
.. code-block:: bash
nnictl log stdout [experiment_id] --tail [lines_number]
*
**nnictl log stderr**
*
说明
显示 stderr 日志内容。
*
用法
.. code-block:: bash
nnictl log stderr [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head, -h
- False
-
- 显示 stderr 开始的若干行
* - --tail, -t
- False
-
- 显示 stderr 结尾的若干行
* - --path, -p
- False
-
- 显示 stderr 文件的路径
*
**nnictl log trial**
*
说明
显示 Trial 日志的路径。
*
用法
.. code-block:: bash
nnictl log trial [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Trial 的 Experiment ID
* - --trial_id, -T
- False
-
- 所需要找日志路径的 Trial 的 ID,当 id 不为空时,此值也为必需。
:raw-html:`<a name="webui"></a>`
Manage webui
^^^^^^^^^^^^
*
**nnictl webui url**
*
说明
显示 Experiment 的 Web 界面链接
*
用法
.. code-block:: bash
nnictl webui url [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
:raw-html:`<a name="tensorboard"></a>`
管理 tensorboard
^^^^^^^^^^^^^^^^^^
*
**nnictl tensorboard start**
*
说明
启动 tensorboard 进程。
*
用法
.. code-block:: bash
nnictl tensorboard start
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --trial_id, -T
- False
-
- Trial 的 id
* - --port
- False
- 6006
- tensorboard 进程的端口
*
详细说明
#. NNICTL 当前仅支持本机和远程平台的 tensorboard,其它平台暂不支持。
#. 如果要使用 tensorboard,需要将 tensorboard 日志输出到环境变量 [NNI_OUTPUT_DIR] 路径下。
#. 在 local 模式中,nnictl 会直接设置 --logdir=[NNI_OUTPUT_DIR] 并启动 tensorboard 进程。
#. 在 remote 模式中,nnictl 会创建一个 ssh 客户端来将日志数据从远程计算机复制到本机临时目录中,然后在本机开始 tensorboard 进程。 需要注意的是,nnictl 只在使用此命令时复制日志数据,如果要查看最新的 tensorboard 结果,需要再次执行 nnictl tensorboard 命令。
#. 如果只有一个 Trial 任务,不需要设置 Trial ID。 如果有多个运行的 Trial 作业,需要设置 Trial ID,或使用 [nnictl tensorboard start --trial_id all] 来将 --logdir 映射到所有 Trial 的路径。
*
**nnictl tensorboard stop**
*
说明
停止所有 tensorboard 进程。
*
用法
.. code-block:: bash
nnictl tensorboard stop
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
:raw-html:`<a name="package"></a>`
管理安装包
^^^^^^^^^^^^^^
*
**nnictl package install**
*
说明
安装自定义的 Tuner,Assessor,Advisor(定制或 NNI 提供的算法)。
*
用法
.. code-block:: bash
nnictl package install --name <package name>
可通过 ``nnictl package list`` 命令查看可用的 ``<包名称>``。
或者
.. code-block:: bash
nnictl package install <安装源>
参考 `安装自定义算法 <InstallCustomizedAlgos.rst>`__ 来准备安装源。
*
示例
..
安装 SMAC Tuner
.. code-block:: bash
nnictl package install --name SMAC
..
安装自定义 Tuner
.. code-block:: bash
nnictl package install nni/examples/tuners/customized_tuner/dist/demo_tuner-0.1-py3-none-any.whl
*
**nnictl package show**
*
说明
显示包的详情。
*
用法
.. code-block:: bash
nnictl package show <包名称>
*
示例
.. code-block:: bash
nnictl package show SMAC
*
**nnictl package list**
*
说明
列出已安装的包 / 所有包。
*
用法
.. code-block:: bash
nnictl package list [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --all
- False
-
- 列出所有包
*
示例
..
列出已安装的包
.. code-block:: bash
nnictl package list
..
列出所有包
.. code-block:: bash
nnictl package list --all
*
**nnictl package uninstall**
*
说明
卸载包。
*
用法
.. code-block:: bash
nnictl package uninstall <包名称>
*
示例
卸载 SMAC 包
.. code-block:: bash
nnictl package uninstall SMAC
:raw-html:`<a name="ss_gen"></a>`
生成搜索空间
^^^^^^^^^^^^^^^^^^^^^
*
**nnictl ss_gen**
*
说明
从使用 NNI NAS API 的用户代码生成搜索空间。
*
用法
.. code-block:: bash
nnictl ss_gen [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --trial_command
- True
-
- Trial 代码的命令
* - --trial_dir
- False
- ./
- Trial 代码目录
* - --file
- False
- nni_auto_gen_search_space.json
- 用来存储生成的搜索空间
*
示例
..
生成搜索空间
.. code-block:: bash
nnictl ss_gen --trial_command="python3 mnist.py" --trial_dir=./ --file=ss.json
:raw-html:`<a name="version"></a>`
NNI 版本校验
^^^^^^^^^^^^^^^^^
*
**nnictl --version**
*
说明
显示当前安装的 NNI 的版本。
*
用法
.. code-block:: bash
nnictl --version
# 快速入门
## 安装
目前支持 Linux、macOS 和 Windows。 Ubuntu 16.04 或更高版本、macOS 10.14.1 和 Windows 10.1809 均经过测试并支持。 在 `python >= 3.6` 的环境中,只需要运行 `pip install` 即可完成安装。
### Linux 和 macOS
```bash
python3 -m pip install --upgrade nni
```
### Windows
```bash
python -m pip install --upgrade nni
```
```eval_rst
.. Note:: 在 Linux 和 macOS 上,如果要将 NNI 安装到当前用户的 home 目录中,可使用 ``--user``;这不需要特殊权限。
```
```eval_rst
.. Note:: 如果出现 ``Segmentation fault`` 这样的错误,参考 :doc:`常见问题 <FAQ>`。
```
```eval_rst
.. Note:: NNI 的系统需求,参考 :doc:`Linux 和 Mac <InstallationLinux>` 或 :doc:`Windows <InstallationWin>` 的安装教程。
```
## MNIST 上的 "Hello World"
NNI 是一个能进行自动机器学习实验的工具包。 它可以自动进行获取超参、运行 Trial,测试结果,调优超参的循环。 在这里,将演示如何使用 NNI 帮助找到 MNIST 模型的最佳超参数。
这是还**没有 NNI** 的示例代码,用 CNN 在 MNIST 数据集上训练:
```python
def run_trial(params):
# 输入数据
mnist = input_data.read_data_sets(params['data_dir'], one_hot=True)
# 构建网络
mnist_network = MnistNetwork(channel_1_num=params['channel_1_num'],
channel_2_num=params['channel_2_num'],
conv_size=params['conv_size'],
hidden_size=params['hidden_size'],
pool_size=params['pool_size'],
learning_rate=params['learning_rate'])
mnist_network.build_network()
test_acc = 0.0
with tf.Session() as sess:
# 训练网络
mnist_network.train(sess, mnist)
# 评估网络
test_acc = mnist_network.evaluate(mnist)
if __name__ == '__main__':
params = {'data_dir': '/tmp/tensorflow/mnist/input_data',
'dropout_rate': 0.5,
'channel_1_num': 32,
'channel_2_num': 64,
'conv_size': 5,
'pool_size': 2,
'hidden_size': 1024,
'learning_rate': 1e-4,
'batch_num': 2000,
'batch_size': 32}
run_trial(params)
```
完整实现请参考 [examples/trials/mnist-tfv1/mnist_before.py](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/mnist_before.py)
上面的代码一次只能尝试一组参数,如果想要调优学习率,需要手工改动超参,并一次次尝试。
NNI 用来帮助超参调优。它的流程如下:
```text
输入: 搜索空间, Trial 代码, 配置文件
输出: 一组最优的参数配置
1: For t = 0, 1, 2, ..., maxTrialNum,
2: hyperparameter = 从搜索空间选择一组参数
3: final result = run_trial_and_evaluate(hyperparameter)
4: 返回最终结果给 NNI
5: If 时间达到上限,
6: 停止实验
7: 返回最好的实验结果
```
如果需要使用 NNI 来自动训练模型,找到最佳超参,需要根据代码,进行如下三步改动:
### 启动 Experiment 的三个步骤
**第一步**:编写 JSON 格式的`搜索空间`文件,包括所有需要搜索的超参的`名称``分布`(离散和连续值均可)。
```diff
- params = {'data_dir': '/tmp/tensorflow/mnist/input_data', 'dropout_rate': 0.5, 'channel_1_num': 32, 'channel_2_num': 64,
- 'conv_size': 5, 'pool_size': 2, 'hidden_size': 1024, 'learning_rate': 1e-4, 'batch_num': 2000, 'batch_size': 32}
+ {
+ "dropout_rate":{"_type":"uniform","_value":[0.5, 0.9]},
+ "conv_size":{"_type":"choice","_value":[2,3,5,7]},
+ "hidden_size":{"_type":"choice","_value":[124, 512, 1024]},
+ "batch_size": {"_type":"choice", "_value": [1, 4, 8, 16, 32]},
+ "learning_rate":{"_type":"choice","_value":[0.0001, 0.001, 0.01, 0.1]}
+ }
```
*示例:[search_space.json](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/search_space.json)*
**第二步**:修改 `Trial` 代码来从 NNI 获取超参,并返回 NNI 最终结果。
```diff
+ import nni
def run_trial(params):
mnist = input_data.read_data_sets(params['data_dir'], one_hot=True)
mnist_network = MnistNetwork(channel_1_num=params['channel_1_num'], channel_2_num=params['channel_2_num'], conv_size=params['conv_size'], hidden_size=params['hidden_size'], pool_size=params['pool_size'], learning_rate=params['learning_rate'])
mnist_network.build_network()
with tf.Session() as sess:
mnist_network.train(sess, mnist)
test_acc = mnist_network.evaluate(mnist)
+ nni.report_final_result(test_acc)
if __name__ == '__main__':
- params = {'data_dir': '/tmp/tensorflow/mnist/input_data', 'dropout_rate': 0.5, 'channel_1_num': 32, 'channel_2_num': 64,
- 'conv_size': 5, 'pool_size': 2, 'hidden_size': 1024, 'learning_rate': 1e-4, 'batch_num': 2000, 'batch_size': 32}
+ params = nni.get_next_parameter()
run_trial(params)
```
*示例:[mnist.py](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/mnist.py)*
**第三步**:定义 YAML 格式的`配置`文件,其中声明了搜索空间和 Trial 文件的`路径`。 它还提供其他信息,例如调整算法,最大 Trial 运行次数和最大持续时间的参数。
```yaml
authorName: default
experimentName: example_mnist
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 10
trainingServicePlatform: local
# 搜索空间文件
searchSpacePath: search_space.json
useAnnotation: false
tuner:
builtinTunerName: TPE
# 运行的命令,以及 Trial 代码的路径
trial:
command: python3 mnist.py
codeDir: .
gpuNum: 0
```
```eval_rst
.. Note:: 如果要使用远程计算机或集群作为 :doc:`训练平台 <../TrainingService/Overview>`,为了避免产生过大的网络压力,NNI 限制了文件的最大数量为 2000,大小为 300 MB。 如果 codeDir 中包含了过多的文件,可添加 ``.nniignore`` 文件来排除部分,与 ``.gitignore`` 文件用法类似。 参考 `git documentation <https://git-scm.com/docs/gitignore#_pattern_format>` ,了解更多如何编写此文件的详细信息 _。
```
*示例: [config.yml](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/config.yml) [.nniignore](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/.nniignore)*
上面的代码都已准备好,并保存在 [examples/trials/mnist-tfv1/](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1)
#### Linux 和 macOS
从命令行使用 **config.yml** 文件启动 MNIST Experiment 。
```bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml
```
#### Windows
从命令行使用 **config_windows.yml** 文件启动 MNIST Experiment 。
```bash
nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml
```
```eval_rst
.. Note:: 如果使用 Windows,则需要在 config.yml 文件中,将 ``python3`` 改为 ``python``,或者使用 config_windows.yml 来开始 Experiment。
```
```eval_rst
.. Note:: ``nnictl`` 是一个命令行工具,用来控制 NNI Experiment,如启动、停止、继续 Experiment,启动、停止 NNIBoard 等等。 点击 :doc:`这里 <Nnictl>` 查看 ``nnictl`` 的更多用法。
```
在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明 Experiment 已成功启动。 期望的输出如下:
```text
INFO: Starting restful server...
INFO: Successfully started Restful server!
INFO: Setting local config...
INFO: Successfully set local config!
INFO: Starting experiment...
INFO: Successfully started experiment!
-----------------------------------------------------------------------
The experiment id is egchD4qy
The Web UI urls are: [Your IP]:8080
-----------------------------------------------------------------------
You can use these commands to get more information about the experiment
-----------------------------------------------------------------------
commands description
1. nnictl experiment show show the information of experiments
2. nnictl trial ls list all of trial jobs
3. nnictl top monitor the status of running experiments
4. nnictl log stderr show stderr log content
5. nnictl log stdout show stdout log content
6. nnictl stop stop an experiment
7. nnictl trial kill kill a trial job by id
8. nnictl --help get help information about nnictl
-----------------------------------------------------------------------
```
如果根据上述步骤准备好了相应 `Trial`, `搜索空间``配置`,并成功创建的 NNI 任务。NNI 会自动开始通过配置的搜索空间来运行不同的超参集合,搜索最好的超参。 通过 Web 界面可看到 NNI 的进度。
## Web 界面
启动 Experiment 后,可以在命令行界面找到如下的 `Web 界面地址`
```text
Web 地址为:[IP 地址]:8080
```
在浏览器中打开 `Web 界面地址`(即:`[IP 地址]:8080`),就可以看到 Experiment 的详细信息,以及所有的 Trial 任务。 如果无法打开终端中的 Web 界面链接,可以参考[常见问题](FAQ.md)
### 查看概要页面
点击 "Overview" 标签。
Experiment 相关信息会显示在界面上,配置和搜索空间等。 可通过 **Download** 按钮来下载信息和参数。 可以在 Experiment 运行时随时下载结果,也可以等到执行结束。
![](../../img/QuickStart1.png)
前 10 个 Trial 将列在 Overview 页上。 可以在 "Trials Detail" 页面上浏览所有 Trial。
![](../../img/QuickStart2.png)
### 查看 Trial 详情页面
点击 "Default Metric" 来查看所有 Trial 的点图。 悬停鼠标来查看默认指标和搜索空间信息。
![](../../img/QuickStart3.png)
点击 "Hyper Parameter" 标签查看图像。
* 可选择百分比查看最好的 Trial。
* 选择两个轴来交换位置。
![](../../img/QuickStart4.png)
点击 "Trial Duration" 标签来查看柱状图。
![](../../img/QuickStart5.png)
下面是所有 Trial 的状态。 包括:
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间文件。
* 如果在 OpenPAI 平台上运行,还可以看到 hdfsLog。
* Kill: 可结束在 `Running` 状态的任务。
* Support: 用于搜索某个指定的 Trial。
![](../../img/QuickStart6.png)
* 中间结果图
![](../../img/QuickStart7.png)
## 相关主题
* [尝试不同的 Tuner](../Tuner/BuiltinTuner.md)
* [尝试不同的 Assessor](../Assessor/BuiltinAssessor.md)
* [使用命令行工具 nnictl](Nnictl.md)
* [如何实现 Trial 代码](../TrialExample/Trials.md)
* [如何在本机运行 Experiment (支持多 GPU 卡)?](../TrainingService/LocalMode.md)
* [如何在多机上运行 Experiment?](../TrainingService/RemoteMachineMode.md)
* [如何在 OpenPAI 上运行 Experiment?](../TrainingService/PaiMode.md)
* [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](../TrainingService/KubeflowMode.md)
* [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](../TrainingService/FrameworkControllerMode.md)
\ No newline at end of file
快速入门
==========
安装
------------
目前支持 Linux、macOS 和 Windows。 Ubuntu 16.04 或更高版本、macOS 10.14.1 和 Windows 10.1809 均经过测试并支持。 在 ``python >= 3.6`` 环境中,只需运行 ``pip install`` 即可完成安装。
Linux 和 macOS
^^^^^^^^^^^^^^^
.. code-block:: bash
python3 -m pip install --upgrade nni
Windows
^^^^^^^
.. code-block:: bash
python -m pip install --upgrade nni
.. Note:: 在 Linux 和 macOS 上,如果要将 NNI 安装到当前用户的 home 目录中,可使用 ``--user`` ;这不需要特殊权限。
.. Note:: 如果出现 ``Segmentation fault`` 这样的错误,参考 :doc:`常见问题 <FAQ>` 。
.. Note:: NNI 的系统需求,参考 :doc:`Linux & Mac <InstallationLinux>` 或者 :doc:`Windows <InstallationWin>`. 的安装教程。
启用 NNI 命令行自动补全(可选)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在安装之后,您可能需要启用 **nnictl** 命令的自动补全功能。 请阅读 `教程 <../CommunitySharings/AutoCompletion.rst>`__。
MNIST 上的 "Hello World"
------------------------------
NNI 是一个能进行自动机器学习实验的工具包。 它可以自动进行获取超参、运行 Trial,测试结果,调优超参的循环。 在这里,将演示如何使用 NNI 帮助找到 MNIST 模型的最佳超参数。
这是还 **没有 NNI** 的示例代码,用 CNN 在 MNIST 数据集上训练:
.. code-block:: python
def run_trial(params):
# 输入数据
mnist = input_data.read_data_sets(params['data_dir'], one_hot=True)
# 构建网络
mnist_network = MnistNetwork(channel_1_num=params['channel_1_num'],
channel_2_num=params['channel_2_num'],
conv_size=params['conv_size'],
hidden_size=params['hidden_size'],
pool_size=params['pool_size'],
learning_rate=params['learning_rate'])
mnist_network.build_network()
test_acc = 0.0
with tf.Session() as sess:
# 训练网络
mnist_network.train(sess, mnist)
# 评估网络
test_acc = mnist_network.evaluate(mnist)
if __name__ == '__main__':
params = {'data_dir': '/tmp/tensorflow/mnist/input_data',
'dropout_rate': 0.5,
'channel_1_num': 32,
'channel_2_num': 64,
'conv_size': 5,
'pool_size': 2,
'hidden_size': 1024,
'learning_rate': 1e-4,
'batch_num': 2000,
'batch_size': 32}
run_trial(params)
完整实现请参考 :githublink:`examples/trials/mnist-tfv1/mnist_before.py <examples/trials/mnist-tfv1/mnist_before.py>` 。
上面的代码一次只能尝试一组参数,如果想要调优学习率,需要手工改动超参,并一次次尝试。
NNI 用来帮助超参调优。它的流程如下:
.. code-block:: text
输入: 搜索空间, Trial 代码, 配置文件
输出: 一组最优的参数配置
1: For t = 0, 1, 2, ..., maxTrialNum,
2: hyperparameter = 从搜索空间选择一组参数
3: final result = run_trial_and_evaluate(hyperparameter)
4: 返回最终结果给 NNI
5: If 时间达到上限,
6: 停止实验
7: 返回最好的实验结果
如果需要使用 NNI 来自动训练模型,找到最佳超参,需要根据代码,进行如下三步改动:
启动 Experiment 的三个步骤
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**第一步** :编写 JSON 格式的 ``搜索空间`` 文件,包括所有需要搜索的超参的 ``名称`` 和 ``分布`` (离散和连续值均可)。
.. code-block:: diff
- params = {'data_dir': '/tmp/tensorflow/mnist/input_data', 'dropout_rate': 0.5, 'channel_1_num': 32, 'channel_2_num': 64,
- 'conv_size': 5, 'pool_size': 2, 'hidden_size': 1024, 'learning_rate': 1e-4, 'batch_num': 2000, 'batch_size': 32}
+ {
+ "dropout_rate":{"_type":"uniform","_value":[0.5, 0.9]},
+ "conv_size":{"_type":"choice","_value":[2,3,5,7]},
+ "hidden_size":{"_type":"choice","_value":[124, 512, 1024]},
+ "batch_size": {"_type":"choice", "_value": [1, 4, 8, 16, 32]},
+ "learning_rate":{"_type":"choice","_value":[0.0001, 0.001, 0.01, 0.1]}
+ }
*示例:* :githublink:`search_space.json <examples/trials/mnist-tfv1/search_space.json>`
**第二步** :修改 ``Trial`` 代码来从 NNI 获取超参,并返回 NNI 最终结果。
.. code-block:: diff
+ import nni
def run_trial(params):
mnist = input_data.read_data_sets(params['data_dir'], one_hot=True)
mnist_network = MnistNetwork(channel_1_num=params['channel_1_num'], channel_2_num=params['channel_2_num'], conv_size=params['conv_size'], hidden_size=params['hidden_size'], pool_size=params['pool_size'], learning_rate=params['learning_rate'])
mnist_network.build_network()
with tf.Session() as sess:
mnist_network.train(sess, mnist)
test_acc = mnist_network.evaluate(mnist)
+ nni.report_final_result(test_acc)
if __name__ == '__main__':
- params = {'data_dir': '/tmp/tensorflow/mnist/input_data', 'dropout_rate': 0.5, 'channel_1_num': 32, 'channel_2_num': 64,
- 'conv_size': 5, 'pool_size': 2, 'hidden_size': 1024, 'learning_rate': 1e-4, 'batch_num': 2000, 'batch_size': 32}
+ params = nni.get_next_parameter()
run_trial(params)
*示例:* :githublink:`mnist.py <examples/trials/mnist-tfv1/mnist.py>`
**第三步**\ : 定义 YAML 格式的 ``配置`` 文件,声明搜索空间和 Trail 文件的 ``路径`` 。 它还提供其他信息,例如调整算法,最大 Trial 运行次数和最大持续时间的参数。
.. code-block:: yaml
authorName: default
experimentName: example_mnist
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 10
trainingServicePlatform: local
# 搜索空间文件路径
searchSpacePath: search_space.json
useAnnotation: false
tuner:
builtinTunerName: TPE
# 运行的命令,以及 Trial 代码的路径
trial:
command: python3 mnist.py
codeDir: .
gpuNum: 0
.. Note:: 如果要使用远程计算机或集群作为 :doc:`训练平台 <../TrainingService/Overview>`,为了避免产生过大的网络压力,NNI 限制了文件的最大数量为 2000,大小为 300 MB。 如果 codeDir 中包含了过多的文件,可添加 ``.nniignore`` 文件来排除部分,与 ``.gitignore`` 文件用法类似。 参考 `git documentation <https://git-scm.com/docs/gitignore#_pattern_format>`__ ,了解更多如何编写此文件的详细信息 _。
*示例:* :githublink:`config.yml <examples/trials/mnist-tfv1/config.yml>` :githublink:`.nniignore <examples/trials/mnist-tfv1/.nniignore>`
上面的代码都已准备好,并保存在 :githublink:`examples/trials/mnist-tfv1/ <examples/trials/mnist-tfv1>`.
Linux 和 macOS
^^^^^^^^^^^^^^^
从命令行使用 **config.yml** 文件启动 MNIST Experiment 。
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml
Windows
^^^^^^^
从命令行使用**config_windows.yml** 文件启动 MNIST Experiment 。
.. code-block:: bash
nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml
.. Note:: 如果使用 Windows,则需要在 config.yml 文件中,将 ``python3`` 改为 ``python``,或者使用 config_windows.yml 来开始 Experiment。
.. Note:: ``nnictl`` 是一个命令行工具,用来控制 NNI Experiment,如启动、停止、继续 Experiment,启动、停止 NNIBoard 等等。 点击 :doc:`这里 <Nnictl>` 查看 ``nnictl`` 的更多用法。
在命令行中等待输出 ``INFO: Successfully started experiment!`` 。 此消息表明实验已成功启动。 期望的输出如下:
.. code-block:: text
INFO: Starting restful server...
INFO: Successfully started Restful server!
INFO: Setting local config...
INFO: Successfully set local config!
INFO: Starting experiment...
INFO: Successfully started experiment!
-----------------------------------------------------------------------
The experiment id is egchD4qy
The Web UI urls are: [Your IP]:8080
-----------------------------------------------------------------------
You can use these commands to get more information about the experiment
-----------------------------------------------------------------------
commands description
1. nnictl experiment show show the information of experiments
2. nnictl trial ls list all of trial jobs
3. nnictl top monitor the status of running experiments
4. nnictl log stderr show stderr log content
5. nnictl log stdout show stdout log content
6. nnictl stop stop an experiment
7. nnictl trial kill kill a trial job by id
8. nnictl --help get help information about nnictl
-----------------------------------------------------------------------
如果根据上述步骤准备好了相应 ``Trial`` , ``搜索空间`` 和 ``配置`` ,并成功创建的 NNI 任务。NNI 会自动开始通过配置的搜索空间来运行不同的超参集合,搜索最好的超参。 通过 Web 界面可看到 NNI 的进度。
Web 界面
---------------
启动 Experiment 后,可以在命令行界面找到如下的 ``Web 界面地址`` :
.. code-block:: text
The Web UI urls are: [Your IP]:8080
在浏览器中打开 ``Web 界面地址`` (即:`` [IP 地址]:8080`` ),就可以看到 Experiment 的详细信息,以及所有的 Trial 任务。 如果无法打开终端中的 Web 界面链接,可以参考 `常见问题 <FAQ.rst>`__。
查看概要页面
^^^^^^^^^^^^^^^^^
点击 "Overview" 标签。
Experiment 相关信息会显示在界面上,配置和搜索空间等。 可通过 **Download** 按钮来下载信息和参数。 可以在 Experiment 运行时随时下载结果,也可以等到执行结束。
.. image:: ../../img/QuickStart1.png
:target: ../../img/QuickStart1.png
:alt:
前 10 个 Trial 将列在 Overview 页上。 可以在 "Trials Detail" 页面上浏览所有 Trial。
.. image:: ../../img/QuickStart2.png
:target: ../../img/QuickStart2.png
:alt:
查看 Trial 详情页面
^^^^^^^^^^^^^^^^^^^^^^^
点击 "Default Metric" 来查看所有 Trial 的点图。 悬停鼠标来查看默认指标和搜索空间信息。
.. image:: ../../img/QuickStart3.png
:target: ../../img/QuickStart3.png
:alt:
点击 "Hyper Parameter" 标签查看图像。
* 可选择百分比查看最好的 Trial。
* 选择两个轴来交换位置。
.. image:: ../../img/QuickStart4.png
:target: ../../img/QuickStart4.png
:alt:
点击 "Trial Duration" 标签来查看柱状图。
.. image:: ../../img/QuickStart5.png
:target: ../../img/QuickStart5.png
:alt:
下面是所有 Trial 的状态。 特别是:
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间文件。
* 如果在 OpenPAI 平台上运行,还可以看到 hdfsLog。
* Kill: 可结束在 ``Running`` 状态的任务。
* Support: 用于搜索某个指定的 Trial。
.. image:: ../../img/QuickStart6.png
:target: ../../img/QuickStart6.png
:alt:
* 中间结果图
.. image:: ../../img/QuickStart7.png
:target: ../../img/QuickStart7.png
:alt:
相关主题
-------------
* `尝试不同的 Tuner <../Tuner/BuiltinTuner.rst>`__
* `尝试不同的 Assessor <../Assessor/BuiltinAssessor.rst>`__
* `如何使用命令行工具 nnictl <Nnictl.rst>`__
* `如何实现 Trial 代码 <../TrialExample/Trials.rst>`__
* `如何在本机运行 Experiment (支持多 GPU 卡)? <../TrainingService/LocalMode.rst>`__
* `如何在多机上运行 Experiment? <../TrainingService/RemoteMachineMode.rst>`__
* `如何在 OpenPAI 上运行 Experiment? <../TrainingService/PaiMode.rst>`__
* `如何通过 Kubeflow 在 Kubernetes 上运行 Experiment? <../TrainingService/KubeflowMode.rst>`__
* `如何通过 FrameworkController 在 Kubernetes 上运行 Experiment? <../TrainingService/FrameworkControllerMode.rst>`__
* `如何通过 AdaptDL在 Kubernetes 上运行 Experiment? <../TrainingService/AdaptDLMode.rst>`__
# 搜索空间
## 概述
在 NNI 中,Tuner 会根据搜索空间来取样生成参数和网络架构。搜索空间通过 JSON 文件来定义。
要定义搜索空间,需要定义变量名称、采样策略的类型及其参数。
* 搜索空间示例如下:
```yaml
{
"dropout_rate": {"_type": "uniform", "_value": [0.1, 0.5]},
"conv_size": {"_type": "choice", "_value": [2, 3, 5, 7]},
"hidden_size": {"_type": "choice", "_value": [124, 512, 1024]},
"batch_size": {"_type": "choice", "_value": [50, 250, 500]},
"learning_rate": {"_type": "uniform", "_value": [0.0001, 0.1]}
}
```
将第一行作为示例。 `dropout_rate` 定义了一个变量,先验分布为均匀分布,范围从 `0.1``0.5`
注意:搜索空间中可用的取样策略取决于要使用的 Tuner 。 此处列出了内置 Tuner 所支持的类型。 对于自定义的 Tuner,不必遵循这些约定,可使用任何的类型。
## 类型
所有采样策略和参数如下:
* `{"_type": "choice", "_value": options}`
* 变量值为 options 中之一。 这里的 `options` 应该是字符串或数值的列表。 可将任意对象(如子数组,数字与字符串的混合值或者空值)存入此数组中,但可能会产生不可预料的行为。
* `options` 也可以是嵌套的子搜索空间。此子搜索空间仅在相应的元素选中后才起作用。 该子搜索空间中的变量可看作是条件变量。 <a [嵌套搜索空间的简单示例](https://github.com/microsoft/nni/tree/master/examples/trials/mnist-nested-search-space/search_space.json)。 如果选项列表中的元素是 dict,则它是一个子搜索空间,对于内置的 Tuner,必须在此 dict 中添加键 `_name`,这有助于标识选中的元素。 相应的,这是使用从 NNI 获得的嵌套搜索空间的[示例](https://github.com/microsoft/nni/tree/master/examples/trials/mnist-nested-search-space/sample.json)。 参见下表了解支持嵌套搜索空间的 Tuner 。
* `{"_type": "randint", "_value": [lower, upper]}`
*`lower` (包含) 到 `upper` (不包含) 中选择一个随机整数。
* 注意:不同 Tuner 可能对 `randint` 有不同的实现。 一些 Tuner(例如,TPE,GridSearch)将从低到高无序选择,而其它一些(例如,SMAC)则有顺序。 如果希望所有 Tuner 都有序,可使用 `quniform` 并设置 `q=1`
* `{"_type": "uniform", "_value": [low, high]}`
* 变量值在 low 和 high 之间均匀采样。
* 当优化时,此变量值会在两侧区间内。
* `{"_type": "quniform", "_value": [low, high, q]}`
* 变量值为 `clip(round(uniform(low, high) / q) * q, low, high)`,clip 操作用于约束生成值的边界。 例如,`_value` 为 [0, 10, 2.5],可取的值为 [0, 2.5, 5.0, 7.5, 10.0]; `_value` 为 [2, 10, 5],可取的值为 [2, 5, 10]。
* 适用于离散,同时反映了某种"平滑"的数值,但上下限都有限制。 如果需要从范围 [low, high] 中均匀选择整数,可以如下定义 `_value``[low, high, 1]`
* `{"_type": "loguniform", "_value": [low, high]}`
* 变量值在范围 [low, high] 中是 loguniform 分布,如 exp(uniform(log(low), log(high))),因此返回值是对数均匀分布的。
* 当优化时,此变量必须是正数。
* `{"_type": "qloguniform", "_value": [low, high, q]}`
* 变量值为 `clip(round(loguniform(low, high) / q) * q, low, high)`,clip 操作用于约束生成值的边界。
* 适用于值是“平滑”的离散变量,但上下限均有限制。
* `{"_type": "normal", "_value": [mu, sigma]}`
* 变量值为实数,且为正态分布,均值为 mu,标准方差为 sigma。 优化时,此变量不受约束。
* `{"_type": "qnormal", "_value": [mu, sigma, q]}`
* 变量的值由 `round(normal(mu, sigma) / q) * q` 确定。
* 适用于在 mu 周围的离散变量,且没有上下限限制。
* `{"_type": "lognormal", "_value": [mu, sigma]}`
* 变量值为 `exp(normal(mu, sigma))` 分布,范围值是对数的正态分布。 当优化时,此变量必须是正数。
* `{"_type": "qlognormal", "_value": [mu, sigma, q]}`
* 变量的值由 `round(exp(normal(mu, sigma)) / q) * q` 确定。
* 适用于值是“平滑”的离散变量,但某一边有界。
## 每种 Tuner 支持的搜索空间类型
| | choice | choice(nested) | randint | uniform | quniform | loguniform | qloguniform | normal | qnormal | lognormal | qlognormal |
|:-------------------:|:--------:|:--------------:|:--------:|:--------:|:--------:|:----------:|:-----------:|:--------:|:--------:|:---------:|:----------:|
| TPE Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; |
| Random Search Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; |
| Anneal Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; |
| Evolution Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; |
| SMAC Tuner | &#10003; | | &#10003; | &#10003; | &#10003; | &#10003; | | | | | |
| Batch Tuner | &#10003; | | | | | | | | | | |
| Grid Search Tuner | &#10003; | | &#10003; | | &#10003; | | | | | | |
| Hyperband Advisor | &#10003; | | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; |
| Metis Tuner | &#10003; | | &#10003; | &#10003; | &#10003; | | | | | | |
| GP Tuner | &#10003; | | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | | | | |
已知的局限:
* GP Tuner 和 Metis Tuner 的搜索空间只支持**数值**,(`choice` 类型在其它 Tuner 中可以使用非数值,如:字符串等)。 GP Tuner 和 Metis Tuner 都使用了高斯过程的回归(Gaussian Process Regressor, GPR)。 GPR 基于计算不同点距离的和函数来进行预测,其无法计算非数值值的距离。
* 请注意,对于嵌套搜索空间:
* 只有 随机搜索/TPE/Anneal/Evolution Tuner 支持嵌套搜索空间
\ No newline at end of file
.. role:: raw-html(raw)
:format: html
搜索空间
============
概述
--------
在 NNI 中,Tuner 会根据搜索空间来取样生成参数和网络架构。搜索空间通过 JSON 文件来定义。
要定义搜索空间,需要定义变量名称、采样策略的类型及其参数。
* 搜索空间示例如下:
.. code-block:: yaml
{
"dropout_rate": {"_type": "uniform", "_value": [0.1, 0.5]},
"conv_size": {"_type": "choice", "_value": [2, 3, 5, 7]},
"hidden_size": {"_type": "choice", "_value": [124, 512, 1024]},
"batch_size": {"_type": "choice", "_value": [50, 250, 500]},
"learning_rate": {"_type": "uniform", "_value": [0.0001, 0.1]}
}
将第一行作为示例。 ``dropout_rate`` 定义了一个变量,先验分布为均匀分布,范围从 ``0.1`` 到 ``0.5``。
注意:搜索空间中可用的取样策略取决于要使用的 Tuner 。 此处列出了内置 Tuner 所支持的类型。 对于自定义的 Tuner,不必遵循这些约定,可使用任何的类型。
类型
-----
所有采样策略和参数如下:
*
``{"_type": "choice", "_value": options}``
* 变量值为 options 中之一。 这里的 ``options`` 应该是字符串或数值的列表。 可将任意对象(如子数组,数字与字符串的混合值或者空值)存入此数组中,但可能会产生不可预料的行为。
* ``options`` 也可以是嵌套的子搜索空间。此子搜索空间仅在相应的元素选中后才起作用。 该子搜索空间中的变量可看作是条件变量。 :githublink:`嵌套搜索空间定义的简单示例 <examples/trials/mnist-nested-search-space/search_space.json>`。 如果选项列表中的元素是 dict,则它是一个子搜索空间,对于内置的 Tuner,必须在此 dict 中添加键 ``_name``,这有助于标识选中的元素。 相应的,这是从 NNI 中获得的嵌套搜索空间定义的 :githublink:`示例 <examples/trials/mnist-nested-search-space/sample.json>` 。 参见下表了解支持嵌套搜索空间的 Tuner 。
*
``{"_type": "randint", "_value": [lower, upper]}``
* 从 ``lower`` (包含) 到 ``upper`` (不包含) 中选择一个随机整数。
* 注意:不同 Tuner 可能对 ``randint`` 有不同的实现。 一些 Tuner(例如,TPE,GridSearch)将从低到高无序选择,
而其它一些(例如,SMAC)则有顺序。 如果希望所有 Tuner 都有序,
可使用 ``quniform`` 并设置 ``q=1``。
*
``{"_type": "uniform", "_value": [low, high]}``
* 变量值在 low 和 high 之间均匀采样。
* 当优化时,此变量值会在两侧区间内。
*
``{"_type": "quniform", "_value": [low, high, q]}``
* 变量值为 ``clip(round(uniform(low, high) / q) * q, low, high)``,clip 操作用于约束生成值的边界。 例如,``_value`` 为 [0, 10, 2.5],可取的值为 [0, 2.5, 5.0, 7.5, 10.0]; ``_value`` 为 [2, 10, 5],可取的值为 [2, 5, 10]。
* 适用于离散,同时反映了某种"平滑"的数值,但上下限都有限制。 如果需要从范围 [low, high] 中均匀选择整数,可以如下定义 ``_value``:``[low, high, 1]``。
*
``{"_type": "loguniform", "_value": [low, high]}``
* 变量值在范围 [low, high] 中是 loguniform 分布,如 exp(uniform(log(low), log(high))),因此返回值是对数均匀分布的。
* 当优化时,此变量必须是正数。
*
``{"_type": "qloguniform", "_value": [low, high, q]}``
* 变量值为 ``clip(round(loguniform(low, high) / q) * q, low, high)``,clip 操作用于约束生成值的边界。
* 适用于值是“平滑”的离散变量,但上下限均有限制。
*
``{"_type": "normal", "_value": [mu, sigma]}``
* 变量值为实数,且为正态分布,均值为 mu,标准方差为 sigma。 优化时,此变量不受约束。
*
``{"_type": "qnormal", "_value": [mu, sigma, q]}``
* 变量的值由 ``round(normal(mu, sigma) / q) * q`` 确定。
* 适用于在 mu 周围的离散变量,且没有上下限限制。
*
``{"_type": "lognormal", "_value": [mu, sigma]}``
* 变量值为 ``exp(normal(mu, sigma))`` 分布,范围值是对数的正态分布。 当优化时,此变量必须是正数。
*
``{"_type": "qlognormal", "_value": [mu, sigma, q]}``
* 变量的值由 ``round(exp(normal(mu, sigma)) / q) * q`` 确定。
* 适用于值是“平滑”的离散变量,但某一边有界。
每种 Tuner 支持的搜索空间类型
------------------------------------------
.. list-table::
:header-rows: 1
:widths: auto
* -
- choice
- choice(nested)
- randint
- uniform
- quniform
- loguniform
- qloguniform
- normal
- qnormal
- lognormal
- qlognormal
* - TPE Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Random Search Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Anneal Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Evolution Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - SMAC Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
-
-
-
-
-
* - Batch Tuner
- :raw-html:`&#10003;`
-
-
-
-
-
-
-
-
-
-
* - Grid Search Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
-
-
-
-
-
-
* - Hyperband Advisor
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Metis Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
-
-
-
-
-
-
* - GP Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
-
-
-
-
已知的局限:
*
GP Tuner 和 Metis Tuner 的搜索空间只支持 **数值**,(**choice** 类型在其它 Tuner 中可以使用非数值, 如:字符串等)。 GP Tuner 和 Metis Tuner 都使用了高斯过程的回归(Gaussian Process Regressor, GPR)。 GPR 基于计算不同点距离的和函数来进行预测,其无法计算非数值值的距离。
*
请注意,对于嵌套搜索空间:
* 只有 随机搜索/TPE/Anneal/Evolution Tuner/Grid Search 支持嵌套搜索空间
# 设置 NNI 开发环境
NNI 开发环境支持安装 Python 3 64 位的 Ubuntu 1604 (及以上)和 Windows 10。
## 安装
安装步骤与从源代码安装类似。 但是安装过程会链接到代码目录,以便代码改动能更方便的直接使用。
### 1. 克隆源代码
```bash
git clone https://github.com/Microsoft/nni.git
```
注意,如果要贡献代码,需要 Fork 自己的 NNI 代码库并克隆。
### 2. 从源代码安装
#### Ubuntu
```bash
make dev-easy-install
```
#### Windows
```bat
powershell -ExecutionPolicy Bypass -file install.ps1 -Development
```
### 3. 检查环境是否正确
可通过运行 Experiment,来检查环境。 例如,运行以下命令
```bash
nnictl create --config examples/trials/mnist-tfv1/config.yml
```
并打开 Web 界面查看
### 4. 重新加载改动
#### Python
无需操作,代码已连接到包的安装位置。
#### TypeScript
* 如改动了 `src/nni_manager`,在此目录下运行 `yarn watch` 可持续编译改动。 它将持续的监视并编译代码。 可能需要重启 `nnictl` 来重新加载 NNI 管理器。
* 如改动了 `src/webui`, 运行 `yarn dev`, 该命令将同时运行一个 模拟 API 服务器和一个 webpack 开发服务器。 使用环境变量 `EXPERIMENT`(例如 `mnist-tfv1-running`)来指定要用到的模拟数据。 内置的模拟实验列在 `src/webui/mock`。 完整示例: `EXPERIMENT=mnist-tfv1-running yarn dev`
* 如改动了 `src/webui``src/nasui`,在相应目录下运行 `yarn start`。 Web 界面会在代码修改后自动刷新。 还有一个在开发时有用的模拟 API 服务器, 可以通过 `node server.js` 来启动。
### 5. 提交拉取请求
所有改动都需要从自己 Fork 的代码库合并到 master 分支上。 拉取请求的描述必须有意义且有用。
我们会尽快审查更改。 审查通过后,我们会将代码合并到主分支。
有关更多贡献指南和编码风格,查看[贡献文档](Contributing.md)
\ No newline at end of file
设置 NNI 开发环境
=================================
NNI 开发环境支持安装 Python 3 64 位的 Ubuntu 1604 (及以上)和 Windows 10。
安装
------------
安装步骤与从源代码安装类似。 但是安装过程会链接到代码目录,以便代码改动能更方便的直接使用。
1. 克隆源代码
^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
git clone https://github.com/Microsoft/nni.git
注意,如果要贡献代码,需要 Fork 自己的 NNI 代码库并克隆。
2. 从源代码安装
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ubuntu
^^^^^^
.. code-block:: bash
make dev-easy-install
Windows
^^^^^^^
.. code-block:: bat
powershell -ExecutionPolicy Bypass -file install.ps1 -Development
3. 检查环境是否正确
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
尝试启动实验来检查环境。
例如,运行命令
.. code-block:: bash
nnictl create --config examples/trials/mnist-tfv1/config.yml
并打开网页界面查看
4. 重新加载改动
^^^^^^^^^^^^^^^^^
Python
^^^^^^
无需操作,代码已连接到包的安装位置。
TypeScript
^^^^^^^^^^
* 如果改动了 ``src/nni_manager``,在此目录下运行 ``yarn watch`` 可持续编译改动。 它将持续的监视并编译代码。 可能需要重新启动 ``nnictl`` 来重新加载 NNI 管理器。
* 如果改动了 ``src/webui`` ,运行 ``yarn dev``, 该命令将同时运行一个 模拟 API 服务器和一个 webpack 开发服务器。 使用环境变量 ``EXPERIMENT`` (例如 ``mnist-tfv1-running``\ ) 来指定要用到的模拟数据。 内置的模拟实验列在 ``src/webui/mock``。 完整示例:``EXPERIMENT=mnist-tfv1-running yarn dev``。
* 如果改动了 ``src/nasui``,在相应目录下运行 ``yarn start``。 Web 界面会在代码修改后自动刷新。 还有一个在开发时有用的模拟 API 服务器, 可以通过 ``node server.js`` 来启动。
5. 提交拉取请求
^^^^^^^^^^^^^^^^^^^^^^
所有改动都需要从自己 Fork 的代码库合并到 master 分支上。 拉取请求的描述必须有意义且有用。
我们会尽快审查更改。 审查通过后,我们会将代码合并到主分支。
有关更多贡献指南和编码风格,查看 `贡献文档 <Contributing.rst>`__。
# Web 界面
Web 界面
===============
## 查看概要页面
查看概要页面
-----------------
点击标签 "Overview"。
* 在 Overview 标签上,可看到 Experiment Trial 的概况、搜索空间、以及最好的 Trial 结果。
![](../../img/webui-img/over1.png) ![](../../img/webui-img/over2.png)
* 在 Overview 标签上,可看到 Experiment Trial 的概况、搜索空间、以及最好的 Trial 结果。 如果想查看实验配置和搜索空间,点击右边的按钮 "Config" 和 "Search space"。
.. image:: ../../img/webui-img/full-oview.png
:target: ../../img/webui-img/full-oview.png
:alt:
* 如果 Experiment 包含了较多 Trial,可改变刷新间隔。
![](../../img/webui-img/refresh-interval.png)
* "View" 按钮支持查看并下载 Experiment 结果,以及 NNI Manager、Dispatcher 的日志文件。
.. image:: ../../img/webui-img/refresh-interval.png
:target: ../../img/webui-img/refresh-interval.png
:alt:
* "download" 按钮支持查看并下载 Experiment 结果,以及 NNI Manager、Dispatcher 的日志文件。
.. image:: ../../img/webui-img/download.png
:target: ../../img/webui-img/download.png
:alt:
* 在这里修改实验配置(例如 maxExecDuration, maxTrialNum 和 trial concurrency)。
.. image:: ../../img/webui-img/edit-experiment-param.png
:target: ../../img/webui-img/edit-experiment-param.png
:alt:
![](../../img/webui-img/download.png)
* 如果实验的状态为错误,可以单击错误框中的感叹号来查看日志消息。
![](../../img/webui-img/log-error.png) ![](../../img/webui-img/review-log.png)
* 可点击 "Feedback" 报告任何问题。
.. image:: ../../img/webui-img/log-error.png
:target: ../../img/webui-img/log-error.png
:alt:
.. image:: ../../img/webui-img/review-log.png
:target: ../../img/webui-img/review-log.png
:alt:
* 可点击 "About" 查看版本信息和反馈任何问题。
查看任务默认指标
-----------------------
## 查看任务默认指标
* 点击 "Default Metric" 来查看所有 Trial 的点图。 悬停鼠标来查看默认指标和搜索空间信息。
![](../../img/webui-img/default-metric.png)
.. image:: ../../img/webui-img/default-metric.png
:target: ../../img/webui-img/default-metric.png
:alt:
* 点击开关 "optimization curve" 来查看 Experiment 的优化曲线。
![](../../img/webui-img/best-curve.png)
## 查看超参
.. image:: ../../img/webui-img/best-curve.png
:target: ../../img/webui-img/best-curve.png
:alt:
查看超参
--------------------
点击 "Hyper Parameter" 标签查看图像。
* 可以添加/删除轴,或者拖动以交换图表上的轴。
* 可选择百分比查看最好的 Trial。
* 选择两个轴来交换位置。
![](../../img/hyperPara.png)
## 查看 Trial 运行时间
.. image:: ../../img/webui-img/hyperPara.png
:target: ../../img/webui-img/hyperPara.png
:alt:
查看 Trial 运行时间
-------------------
点击 "Trial Duration" 标签来查看柱状图。
![](../../img/trial_duration.png)
## 查看 Trial 中间结果
.. image:: ../../img/webui-img/trial_duration.png
:target: ../../img/webui-img/trial_duration.png
:alt:
查看 Trial 中间结果
------------------------------------
单击 "Intermediate Result" 标签查看折线图。
![](../../img/webui-img/trials_intermeidate.png)
.. image:: ../../img/webui-img/trials_intermeidate.png
:target: ../../img/webui-img/trials_intermeidate.png
:alt:
Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解一些 Trial 的趋势,可以为中间结果图设置过滤。
这样可以发现 Trial 在某个中间结果上会变得更好或更差。 这表明它是一个重要的并相关的中间结果。 如果要仔细查看这个点,可以在 #Intermediate 中输入其 X 坐标。 并输入这个中间结果的指标范围。 在下图中,选择了 No。 并将指标范围设置为了 0.8 -1。
![](../../img/webui-img/filter-intermediate.png)
## 查看 Trial 状态
.. image:: ../../img/webui-img/filter-intermediate.png
:target: ../../img/webui-img/filter-intermediate.png
:alt:
查看 Trial 状态
------------------
点击 "Trials Detail" 标签查看所有 Trial 的状态。 特别是:
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间文件。
![](../../img/webui-img/detail-local.png)
.. image:: ../../img/webui-img/detail-local.png
:target: ../../img/webui-img/detail-local.png
:alt:
* "Add column" 按钮可选择在表格中显示的列。 如果 Experiment 的最终结果是 dict,则可以在表格中查看其它键。 可选择 "Intermediate count" 列来查看 Trial 进度。
![](../../img/webui-img/addColumn.png)
.. image:: ../../img/webui-img/addColumn.png
:target: ../../img/webui-img/addColumn.png
:alt:
* 如果要比较某些 Trial,可选择并点击 "Compare" 来查看结果。
![](../../img/webui-img/select-trial.png) ![](../../img/webui-img/compare.png)
.. image:: ../../img/webui-img/select-trial.png
:target: ../../img/webui-img/select-trial.png
:alt:
.. image:: ../../img/webui-img/compare.png
:target: ../../img/webui-img/compare.png
:alt:
* 支持通过 id,状态,Trial 编号, 以及参数来搜索。
![](../../img/webui-img/search-trial.png)
.. image:: ../../img/webui-img/search-trial.png
:target: ../../img/webui-img/search-trial.png
:alt:
* 可使用 "Copy as python" 按钮来拷贝 Trial 的参数。
![](../../img/webui-img/copyParameter.png)
.. image:: ../../img/webui-img/copyParameter.png
:target: ../../img/webui-img/copyParameter.png
:alt:
* 如果在 OpenPAI 或 Kubeflow 平台上运行,还可以看到 hdfsLog。
![](../../img/webui-img/detail-pai.png)
* 中间结果图:可在此图中通过点击 operation 中的按钮来查看默认和其它键值。
.. image:: ../../img/webui-img/detail-pai.png
:target: ../../img/webui-img/detail-pai.png
:alt:
* 中间结果图:可在此图中通过点击 intermediate 按钮来查看默认指标。
.. image:: ../../img/webui-img/intermediate.png
:target: ../../img/webui-img/intermediate.png
:alt:
![](../../img/webui-img/intermediate-btn.png) ![](../../img/webui-img/intermediate.png)
* Kill: 可终止正在运行的任务。
![](../../img/webui-img/kill-running.png) ![](../../img/webui-img/canceled.png)
\ No newline at end of file
.. image:: ../../img/webui-img/kill-running.png
:target: ../../img/webui-img/kill-running.png
:alt:
......@@ -7,7 +7,7 @@
<div>
<div class="chinese"><a href="https://nni.readthedocs.io/en/latest/">English</a></div>
<b>NNI (Neural Network Intelligence)</b> 是一个轻量但强大的工具包,帮助用户<b>自动</b>的进行
<a href="{{ pathto('FeatureEngineering/Overview') }}">特征工程</a><a href="{{ pathto('NAS/Overview') }}">神经网络架构搜索</a><a href="{{ pathto('Tuner/BuiltinTuner') }}">超参调优</a>以及<a href="{{ pathto('Compressor/Overview') }}">模型压缩</a>
<a href="{{ pathto('FeatureEngineering/Overview') }}">特征工程</a><a href="{{ pathto('NAS/Overview') }}">神经网络架构搜索</a><a href="{{ pathto('Tuner/BuiltinTuner') }}">超参调优</a>以及<a href="{{ pathto('Compression/Overview') }}">模型压缩</a>
</div>
<p class="topMargin">
NNI 管理自动机器学习 (AutoML) 的 Experiment,
......@@ -151,18 +151,18 @@
<li><a href="{{ pathto('NAS/TextNAS') }}">TextNAS</a> </li>
</ul>
</ul>
<a href="{{ pathto('Compressor/Overview') }}">模型压缩</a>
<a href="{{ pathto('Compression/Overview') }}">模型压缩</a>
<ul class="firstUl">
<div><b>剪枝</b></div>
<ul class="circle">
<li><a href="{{ pathto('Compressor/Pruner') }}">AGP Pruner</a></li>
<li><a href="{{ pathto('Compressor/Pruner') }}">Slim Pruner</a></li>
<li><a href="{{ pathto('Compressor/Pruner') }}">FPGM Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}">AGP Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}">Slim Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}">FPGM Pruner</a></li>
</ul>
<div><b>量化</b></div>
<ul class="circle">
<li><a href="{{ pathto('Compressor/Quantizer') }}">QAT Quantizer</a></li>
<li><a href="{{ pathto('Compressor/Quantizer') }}">DoReFa Quantizer</a></li>
<li><a href="{{ pathto('Compression/Quantizer') }}">QAT Quantizer</a></li>
<li><a href="{{ pathto('Compression/Quantizer') }}">DoReFa Quantizer</a></li>
</ul>
</ul>
<a href="{{ pathto('FeatureEngineering/Overview') }}">特征工程(测试版)</a>
......@@ -361,18 +361,19 @@ You can use these commands to get more information about the experiment
<li>在 NNI 中运行 <a href="{{ pathto('NAS/ENAS') }}">ENAS</a></li>
<li>
<a
href="https://github.com/microsoft/nni/blob/master/examples/feature_engineering/auto-feature-engineering/README_zh_CN.md">NNI 中的自动特征工程</a>
href="https://github.com/microsoft/nni/blob/master/examples/feature_engineering/auto-feature-engineering/README.rst">Automatic
Feature Engineering</a> with NNI
</li>
<li>使用 NNI 的 <a
href="https://github.com/microsoft/recommenders/blob/master/notebooks/04_model_select_and_optimize/nni_surprise_svd.ipynb">矩阵分解超参调优</a></li>
href="https://github.com/microsoft/recommenders/blob/master/examples/04_model_select_and_optimize/nni_surprise_svd.ipynb">矩阵分解超参调优</a></li>
<li><a href="https://github.com/ksachdeva/scikit-nni">scikit-nni</a> 使用 NNI 为 scikit-learn 开发的超参搜索。</li>
</ul>
<!-- Relevant Articles -->
<ul>
<h2>相关文章</h2>
<li><a href="{{ pathto('CommunitySharings/HpoComparision') }}">超参数优化的对比</a></li>
<li><a href="{{ pathto('CommunitySharings/NasComparision') }}">神经网络结构搜索的对比</a></li>
<li><a href="{{ pathto('CommunitySharings/HpoComparison') }}">超参数优化的对比</a></li>
<li><a href="{{ pathto('CommunitySharings/NasComparison') }}">神经网络结构搜索的对比</a></li>
<li><a href="{{ pathto('CommunitySharings/ParallelizingTpeSearch') }}">并行化顺序算法:TPE</a>
</li>
<li><a href="{{ pathto('CommunitySharings/RecommendersSvd') }}">使用 NNI 为 SVD 自动调参</a></li>
......@@ -450,7 +451,7 @@ You can use these commands to get more information about the experiment
<!-- License -->
<div>
<h1 class="title">许可协议</h1>
<p>代码库遵循 <a href="https://github.com/microsoft/nni/blob/master/LICENSE">MIT 许可协议</a></p>
<p>The entire codebase is under <a href="https://github.com/microsoft/nni/blob/master/LICENSE">MIT license</a></p>
</div>
</div>
{% endblock %}
# 自动调优的 Python API 参考
自动调优的 Python API 参考
=================================
```eval_rst
.. contents::
```
## Trial
Trial
-----
```eval_rst
.. autofunction:: nni.get_next_parameter
.. autofunction:: nni.get_current_parameter
.. autofunction:: nni.report_intermediate_result
......@@ -14,73 +13,68 @@
.. autofunction:: nni.get_experiment_id
.. autofunction:: nni.get_trial_id
.. autofunction:: nni.get_sequence_id
```
## Tuner
Tuner
-----
```eval_rst
.. autoclass:: nni.tuner.Tuner
:members:
.. autoclass:: nni.hyperopt_tuner.hyperopt_tuner.HyperoptTuner
.. autoclass:: nni.algorithms.hpo.hyperopt_tuner.HyperoptTuner
:members:
.. autoclass:: nni.evolution_tuner.evolution_tuner.EvolutionTuner
.. autoclass:: nni.algorithms.hpo.evolution_tuner.EvolutionTuner
:members:
.. autoclass:: nni.smac_tuner.SMACTuner
.. autoclass:: nni.algorithms.hpo.smac_tuner.SMACTuner
:members:
.. autoclass:: nni.gridsearch_tuner.GridSearchTuner
.. autoclass:: nni.algorithms.hpo.gridsearch_tuner.GridSearchTuner
:members:
.. autoclass:: nni.networkmorphism_tuner.networkmorphism_tuner.NetworkMorphismTuner
.. autoclass:: nni.algorithms.hpo.networkmorphism_tuner.NetworkMorphismTuner
:members:
.. autoclass:: nni.metis_tuner.metis_tuner.MetisTuner
.. autoclass:: nni.algorithms.hpo.metis_tuner.MetisTuner
:members:
.. autoclass:: nni.ppo_tuner.PPOTuner
.. autoclass:: nni.algorithms.hpo.ppo_tuner.PPOTuner
:members:
.. autoclass:: nni.batch_tuner.batch_tuner.BatchTuner
.. autoclass:: nni.algorithms.hpo.batch_tuner.BatchTuner
:members:
.. autoclass:: nni.gp_tuner.gp_tuner.GPTuner
.. autoclass:: nni.algorithms.hpo.gp_tuner.GPTuner
:members:
```
## Assessor
Assessor
--------
```eval_rst
.. autoclass:: nni.assessor.Assessor
:members:
.. autoclass:: nni.assessor.AssessResult
:members:
.. autoclass:: nni.curvefitting_assessor.CurvefittingAssessor
.. autoclass:: nni.algorithms.hpo.curvefitting_assessor.CurvefittingAssessor
:members:
.. autoclass:: nni.medianstop_assessor.MedianstopAssessor
.. autoclass:: nni.algorithms.hpo.medianstop_assessor.MedianstopAssessor
:members:
```
## Advisor
Advisor
-------
```eval_rst
.. autoclass:: nni.msg_dispatcher_base.MsgDispatcherBase
.. autoclass:: nni.runtime.msg_dispatcher_base.MsgDispatcherBase
:members:
.. autoclass:: nni.hyperband_advisor.hyperband_advisor.Hyperband
.. autoclass:: nni.algorithms.hpo.hyperband_advisor.Hyperband
:members:
.. autoclass:: nni.bohb_advisor.bohb_advisor.BOHB
.. autoclass:: nni.algorithms.hpo.bohb_advisor.BOHB
:members:
```
## 工具
Utilities
---------
```eval_rst
.. autofunction:: nni.utils.merge_parameter
```
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment