Unverified Commit 9b154484 authored by Chi Song's avatar Chi Song Committed by GitHub
Browse files

Chinese translation (#1278)

parent 22261192
...@@ -4,4 +4,4 @@ ...@@ -4,4 +4,4 @@
[SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) 基于 Sequential Model-Based Optimization (SMBO). 它利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 NNI 的 SMAC 通过包装 [SMAC3](https://github.com/automl/SMAC3) 来支持。 [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) 基于 Sequential Model-Based Optimization (SMBO). 它利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 NNI 的 SMAC 通过包装 [SMAC3](https://github.com/automl/SMAC3) 来支持。
NNI 中的 SMAC 只支持部分类型的[搜索空间](SearchSpaceSpec.md),包括`choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)` NNI 中的 SMAC 只支持部分类型的[搜索空间](../Tutorial/SearchSpaceSpec.md),包括`choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`
\ No newline at end of file \ No newline at end of file
...@@ -36,9 +36,9 @@ NNI 支持如下 10 种类型来表示搜索空间: ...@@ -36,9 +36,9 @@ NNI 支持如下 10 种类型来表示搜索空间:
- `@nni.variable(nni.choice(option1,option2,...,optionN),name=variable)` 变量值是选项中的一种,这些变量可以是任意的表达式。 - `@nni.variable(nni.choice(option1,option2,...,optionN),name=variable)` 变量值是选项中的一种,这些变量可以是任意的表达式。
- `@nni.variable(nni.randint(lower, upper),name=variable)` 变量值的公式为:round(uniform(low, high))。 目前,值的类型为 float。 如果要使用整数,需要显式转换。 - `@nni.variable(nni.randint(lower, upper),name=variable)` 变量值的公式为:round(uniform(low, high))。 目前,值的类型为 float。 如果要使用整数,需要显式转换。
- `@nni.variable(nni.uniform(low, high),name=variable)` 变量值会是 low 和 high 之间均匀分布的某个值。 - `@nni.variable(nni.uniform(low, high),name=variable)` 变量值会是 low 和 high 之间均匀分布的某个值。
- `@nni.variable(nni.quniform(low, high, q),name=variable)` 变量值会是 low 和 high 之间均匀分布的某个值,公式为:round(uniform(low, high) / q) * q - `@nni.variable(nni.quniform(low, high, q),name=variable)` 变量值为 clip(round(uniform(low, high) / q) * q, low, high),clip 操作用于约束生成值的边界。
- `@nni.variable(nni.loguniform(low, high),name=variable)` 变量值是 exp(uniform(low, high)) 的点,数值以对数均匀分布。 - `@nni.variable(nni.loguniform(low, high),name=variable)` 变量值是 exp(uniform(low, high)) 的点,数值以对数均匀分布。
- `@nni.variable(nni.qloguniform(low, high, q),name=variable)` 变量值会是 low 和 high 之间均匀分布的某个值,公式为:round(exp(uniform(low, high)) / q) * q - `@nni.variable(nni.qloguniform(low, high, q),name=variable)` 变量值为 clip(round(loguniform(low, high) / q) * q, low, high),clip 操作用于约束生成值的边界。
- `@nni.variable(nni.normal(mu, sigma),name=variable)` 变量值为正态分布的实数值,平均值为 mu,标准方差为 sigma。 - `@nni.variable(nni.normal(mu, sigma),name=variable)` 变量值为正态分布的实数值,平均值为 mu,标准方差为 sigma。
- `@nni.variable(nni.qnormal(mu, sigma, q),name=variable)` 变量值分布的公式为: round(normal(mu, sigma) / q) * q - `@nni.variable(nni.qnormal(mu, sigma, q),name=variable)` 变量值分布的公式为: round(normal(mu, sigma) / q) * q
- `@nni.variable(nni.lognormal(mu, sigma),name=variable)` 变量值分布的公式为: exp(normal(mu, sigma)) - `@nni.variable(nni.lognormal(mu, sigma),name=variable)` 变量值分布的公式为: exp(normal(mu, sigma))
...@@ -73,10 +73,10 @@ h_pooling = max_pool(hidden_layer, pool_size) ...@@ -73,10 +73,10 @@ h_pooling = max_pool(hidden_layer, pool_size)
`'''@nni.report_intermediate_result(metrics)'''` `'''@nni.report_intermediate_result(metrics)'''`
`@nni.report_intermediate_result` 用来返回中间结果,这和 <Trials.md> `nni.report_intermediate_result` 用法一样。 `@nni.report_intermediate_result` 用来返回中间结果,这和[在 NNI 上实现 Trial](../TrialExample/Trials.md)`nni.report_intermediate_result` 用法一样。
### 4. 最终结果 ### 4. 最终结果
`'''@nni.report_final_result(metrics)'''` `'''@nni.report_final_result(metrics)'''`
`@nni.report_final_result` 用来返回当前 Trial 的最终结果,这和 <Trials.md> 中的 `nni.report_final_result` 用法一样。 `@nni.report_final_result` 用来返回当前 Trial 的最终结果,这和[在 NNI 上实现 Trial](../TrialExample/Trials.md) 中的 `nni.report_final_result` 用法一样。
\ No newline at end of file \ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
不管怎样,如果想要更有效的贡献代码,可以阅读以下内容。 本文档包括了所有在贡献中需要注意的要点,会加快合并代码、解决问题的速度。 不管怎样,如果想要更有效的贡献代码,可以阅读以下内容。 本文档包括了所有在贡献中需要注意的要点,会加快合并代码、解决问题的速度。
查看[快速入门](./QuickStart.md)来初步了解。 查看[快速入门](QuickStart.md)来初步了解。
下面是一些简单的贡献指南。 下面是一些简单的贡献指南。
......
...@@ -14,32 +14,36 @@ ...@@ -14,32 +14,36 @@
- **简化版(不包含 Annotation(标记)和 Assessor)** - **简化版(不包含 Annotation(标记)和 Assessor)**
```yaml ```yaml
authorName: authorName:
experimentName: experimentName:
trialConcurrency: trialConcurrency:
maxExecDuration: maxExecDuration:
maxTrialNum: maxTrialNum:
#可选项: local, remote, pai, kubeflow #可选项: local, remote, pai, kubeflow
trainingServicePlatform: trainingServicePlatform:
searchSpacePath: searchSpacePath:
#可选项: true, false #可选项: true, false, 默认值: false
useAnnotation: useAnnotation:
#可选项: true, false, 默认值: false
multiPhase:
#可选项: true, false, 默认值: false
multiThread:
tuner: tuner:
#可选项: TPE, Random, Anneal, Evolution #可选项: TPE, Random, Anneal, Evolution
builtinTunerName: builtinTunerName:
classArgs: classArgs:
#可选项: maximize, minimize #可选项: maximize, minimize
optimize_mode: optimize_mode:
gpuNum: gpuNum:
trial: trial:
command: command:
codeDir: codeDir:
gpuNum: gpuNum:
#在本地使用时,machineList 可为空 #在本地使用时,machineList 可为空
machineList: machineList:
- ip: - ip:
port: port:
username: username:
passwd: passwd:
``` ```
...@@ -54,8 +58,12 @@ maxTrialNum: ...@@ -54,8 +58,12 @@ maxTrialNum:
#可选项: local, remote, pai, kubeflow #可选项: local, remote, pai, kubeflow
trainingServicePlatform: trainingServicePlatform:
searchSpacePath: searchSpacePath:
#可选项: true, false #可选项: true, false, 默认值: false
useAnnotation: useAnnotation:
#可选项: true, false, 默认值: false
multiPhase:
#可选项: true, false, 默认值: false
multiThread:
tuner: tuner:
#可选项: TPE, Random, Anneal, Evolution #可选项: TPE, Random, Anneal, Evolution
builtinTunerName: builtinTunerName:
...@@ -92,8 +100,12 @@ maxExecDuration: ...@@ -92,8 +100,12 @@ maxExecDuration:
maxTrialNum: maxTrialNum:
#可选项: local, remote, pai, kubeflow #可选项: local, remote, pai, kubeflow
trainingServicePlatform: trainingServicePlatform:
#可选项: true, false #可选项: true, false, 默认值: false
useAnnotation: useAnnotation:
#可选项: true, false, 默认值: false
multiPhase:
#可选项: true, false, 默认值: false
multiThread:
tuner: tuner:
#可选项: TPE, Random, Anneal, Evolution #可选项: TPE, Random, Anneal, Evolution
builtinTunerName: builtinTunerName:
...@@ -184,9 +196,9 @@ machineList: ...@@ -184,9 +196,9 @@ machineList:
- **remote** 将任务提交到远程的 Ubuntu 上,必须用 **machineList** 来指定远程的 SSH 连接信息。 - **remote** 将任务提交到远程的 Ubuntu 上,必须用 **machineList** 来指定远程的 SSH 连接信息。
- **pai** 提交任务到微软开源的 [OpenPAI](https://github.com/Microsoft/pai) 上。 更多 OpenPAI 配置,参考 [pai 模式](./PaiMode.md) - **pai** 提交任务到微软开源的 [OpenPAI](https://github.com/Microsoft/pai) 上。 更多 OpenPAI 配置,参考 [pai 模式](../TrainingService/PaiMode.md)
- **kubeflow** 提交任务至 [Kubeflow](https://www.kubeflow.org/docs/about/kubeflow/)。 NNI 支持基于 Kubeflow 的 Kubenetes,以及[Azure Kubernetes](https://azure.microsoft.com/en-us/services/kubernetes-service/) - **kubeflow** 提交任务至 [Kubeflow](https://www.kubeflow.org/docs/about/kubeflow/)。 NNI 支持基于 Kubeflow 的 Kubenetes,以及[Azure Kubernetes](https://azure.microsoft.com/en-us/services/kubernetes-service/) 详情参考 [Kubeflow 文档](../TrainingService/KubeflowMode.md)
- **searchSpacePath** - **searchSpacePath**
...@@ -204,6 +216,18 @@ machineList: ...@@ -204,6 +216,18 @@ machineList:
注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。
- **multiPhase**
- 说明
**multiPhase** 启用[多阶段 Experiment](../AdvancedFeature/MultiPhase.md)
- **multiThread**
- 说明
**multiThread** 如果 multiThread 设为 `true`,可启动 Dispatcher 的多线程模式。Dispatcher 会为来自 NNI 管理器的每个命令启动一个线程。
- **nniManagerIp** - **nniManagerIp**
- 说明 - 说明
...@@ -266,7 +290,7 @@ machineList: ...@@ -266,7 +290,7 @@ machineList:
- **gpuNum** - **gpuNum**
__gpuNum__ 指定了运行 Tuner 进程的 GPU 数量。 此字段的值必须是正整数。 __gpuNum__ 指定了运行 Tuner 进程的 GPU 数量。 此字段的值必须是正整数。 如果此字段没有设置,NNI不会在脚本中添加 `CUDA_VISIBLE_DEVICES` (也就是说,不会通过 `CUDA_VISIBLE_DEVICES` 来控制 GPU 在 Trial 中是否可见),也不会管理 GPU 资源。
注意: 只能使用一种方法来指定 Tuner,例如:设置 {tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置两者。 注意: 只能使用一种方法来指定 Tuner,例如:设置 {tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置两者。
...@@ -290,7 +314,7 @@ machineList: ...@@ -290,7 +314,7 @@ machineList:
- **classArgs** - **classArgs**
**classArgs** 指定了 Assessor 算法的参数 **classArgs** 指定了 Assessor 算法的参数
- **codeDir**, **classFileName**, **className****classArgs** - **codeDir**, **classFileName**, **className****classArgs**
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
## 概述 ## 概述
NNI 中的日志分为三部分。 包括 NNI Manager, Dispatcher 以及 Trial。 这里会简单介绍这些组件。 更多信息可参考[概述](Overview.md) NNI 中的日志分为三部分。 包括 NNI Manager, Dispatcher 以及 Trial。 这里会简单介绍这些组件。 更多信息可参考[概述](../Overview.md)
- **NNI Controller**:NNI Controller (nnictl) 是命令行工具,用来管理 Experiments(如:启动 Experiment)。 - **NNI Controller**:NNI Controller (nnictl) 是命令行工具,用来管理 Experiments(如:启动 Experiment)。
- **NNI Manager**:这是 NNI 的核心。当 Experiment 出现严重错误时,从它的日志中才能找到原因。(例如,Web 界面无法打开,或者训练服务失败) - **NNI Manager**:这是 NNI 的核心。当 Experiment 出现严重错误时,从它的日志中才能找到原因。(例如,Web 界面无法打开,或者训练平台失败)
- **Dispatcher**: Dispatcher 调用 **Tuner****Assessor** 的方法。 它的日志与 Tuner 和 Assessor 代码有关。 - **Dispatcher**: Dispatcher 调用 **Tuner****Assessor** 的方法。 它的日志与 Tuner 和 Assessor 代码有关。
- **Tuner**: Tuner 是一个自动机器学习算法,会为下一个 Trial 生成新的配置。 新的 Trial 会使用这组配置来运行。 - **Tuner**: Tuner 是一个自动机器学习算法,会为下一个 Trial 生成新的配置。 新的 Trial 会使用这组配置来运行。
- **Assessor**:Assessor 分析 Trial 的中间结果(例如,测试数据集上定期的精度),来确定 Trial 是否应该被提前终止。 - **Assessor**:Assessor 分析 Trial 的中间结果(例如,测试数据集上定期的精度),来确定 Trial 是否应该被提前终止。
- **Trial**:Trial 的代码是用户编写的代码,每次 Trial 运行时会尝试一组新的配置(例如,一组新的超参值,或者某个神经网络结构)。 - **Trial**:Trial 的代码是用户实现的代码,每次 Trial 运行时会尝试一组新的配置(例如,一组新的超参值,或者某个神经网络结构)。
## 日志的位置 ## 日志的位置
...@@ -53,7 +53,7 @@ NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 N ...@@ -53,7 +53,7 @@ NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 N
以后一种情况为例。 某自定义的 Tuner,*\_init*\_ 函数有名为 `optimize_mode` 的参数,但配置文件中没有提供此参数。NNI 就会因为初始化 Tuner 失败而造成 Experiment 失败。 可在 Web 界面看到如下错误: 以后一种情况为例。 某自定义的 Tuner,*\_init*\_ 函数有名为 `optimize_mode` 的参数,但配置文件中没有提供此参数。NNI 就会因为初始化 Tuner 失败而造成 Experiment 失败。 可在 Web 界面看到如下错误:
![](../img/dispatcher_error.jpg) ![](../../img/dispatcher_error.jpg)
可以看到这是一个 Dispatcher 的错误。 因此,检查 Dispatcher 的日志,可找到如下信息: 可以看到这是一个 Dispatcher 的错误。 因此,检查 Dispatcher 的日志,可找到如下信息:
...@@ -77,6 +77,6 @@ NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 N ...@@ -77,6 +77,6 @@ NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 N
如,其中常见的一种错误是在运行 MNIST 示例时没有安装 TensorFlow。 因为导入模块的错误(没有安装 Tensorflow,但在 Trial 代码中有 import tensorflow 的语句),每次 Trial 都会运行失败。 如,其中常见的一种错误是在运行 MNIST 示例时没有安装 TensorFlow。 因为导入模块的错误(没有安装 Tensorflow,但在 Trial 代码中有 import tensorflow 的语句),每次 Trial 都会运行失败。
![](../img/trial_error.jpg) ![](../../img/trial_error.jpg)
如图,每个 Trial 都有日志路径,可以从中找到 Trial 的日志和 stderr。 如图,每个 Trial 都有日志路径,可以从中找到 Trial 的日志和 stderr。
\ No newline at end of file
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
## 在远程平台上运行docker ## 在远程平台上运行docker
NNI支持在[远程平台](RemoteMachineMode.md)上启动实验,在远程机器里运行任务。 因为docker可以运行独立的Ubuntu系统和SSH服务,因此docker容器可以作为远程平台来运行NNI. NNI支持在[远程平台](../TrainingService/RemoteMachineMode.md)上启动实验,在远程机器里运行任务。 因为docker可以运行独立的Ubuntu系统和SSH服务,因此docker容器可以作为远程平台来运行NNI.
### 步骤1:设置docker环境 ### 步骤1:设置docker环境
...@@ -82,7 +82,7 @@ SSH容器需要一个端口,你需要把docker的SSH服务端口暴露给NNI ...@@ -82,7 +82,7 @@ SSH容器需要一个端口,你需要把docker的SSH服务端口暴露给NNI
### 步骤三:运行NNI实验 ### 步骤三:运行NNI实验
你可以在你的配置文件中,设置训练平台为远程平台,然后设置`machineList`配置。[参考](RemoteMachineMode.md)。 注意你应该设置正确的`port``username`, `passwd`或者`sshKeyPath` 你可以在你的配置文件中,设置训练平台为远程平台,然后设置`machineList`配置。[参考](../TrainingService/RemoteMachineMode.md)。 注意你应该设置正确的`port``username`, `passwd`或者`sshKeyPath`
`port`: 主机的端口,映射到docker的SSH端口中。 `port`: 主机的端口,映射到docker的SSH端口中。
......
...@@ -88,13 +88,13 @@ ...@@ -88,13 +88,13 @@
## 更多 ## 更多
* [概述](Overview.md) * [概述](../Overview.md)
* [使用命令行工具 nnictl](Nnictl.md) * [使用命令行工具 nnictl](Nnictl.md)
* [使用 NNIBoard](WebUI.md) * [使用 NNIBoard](WebUI.md)
* [定制搜索空间](SearchSpaceSpec.md) * [定制搜索空间](SearchSpaceSpec.md)
* [配置 Experiment](ExperimentConfig.md) * [配置 Experiment](ExperimentConfig.md)
* [如何在本机运行 Experiment (支持多 GPU 卡)?](LocalMode.md) * [如何在本机运行 Experiment (支持多 GPU 卡)?](../TrainingService/LocalMode.md)
* [如何在多机上运行 Experiment?](RemoteMachineMode.md) * [如何在多机上运行 Experiment?](../TrainingService/RemoteMachineMode.md)
* [如何在 OpenPAI 上运行 Experiment?](PaiMode.md) * [如何在 OpenPAI 上运行 Experiment?](../TrainingService/PaiMode.md)
* [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](KubeflowMode.md) * [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](../TrainingService/KubeflowMode.md)
* [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](FrameworkControllerMode.md) * [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](../TrainingService/FrameworkControllerMode.md)
\ No newline at end of file \ No newline at end of file
...@@ -112,17 +112,17 @@ nnictl 支持的命令: ...@@ -112,17 +112,17 @@ nnictl 支持的命令:
使用此命令来停止正在运行的单个或多个 Experiment。 使用此命令来停止正在运行的单个或多个 Experiment。
* 用法 * 用法
```bash ```bash
nnictl stop [OPTIONS] nnictl stop [Options]
``` ```
* 选项 * 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 | | 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----------- | ----- | --- | -------------------------------- | | ---------- | ----- | --- | -------------------------------- |
| id | | | 要停止的 Experiment 标识 | | id | False | | 要停止的 Experiment 标识 |
| --port, -p | | | 要停止的 Experiment 使用的 RESTful 服务端口 | | --port, -p | False | | 要停止的 Experiment 使用的 RESTful 服务端口 |
* 详细信息及样例 * 详细信息及样例
...@@ -138,13 +138,15 @@ nnictl 支持的命令: ...@@ -138,13 +138,15 @@ nnictl 支持的命令:
```bash ```bash
nnictl stop [experiment_id] nnictl stop [experiment_id]
``` ```
3. 如果指定了端口,并且有运行中的 Experiment 正在使用该端口,那么这个 Experiment 将会停止。
3. 如果指定了端口,并且此端口有正在运行的 Experiment,则会停止此 Experiment。
```bash ```bash
nnictl stop --port 8080 nnictl stop --port 8080
```` ```
4. 可使用 'nnictl stop all' 来停止所有的 Experiment。 4. 可使用 'nnictl stop all' 来停止所有的 Experiment。
```bash ```bash
...@@ -386,8 +388,14 @@ nnictl 支持的命令: ...@@ -386,8 +388,14 @@ nnictl 支持的命令:
* 用法 * 用法
```bash ```bash
nnictl experiment list nnictl experiment list [OPTIONS]
``` ```
* 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | --------------- |
| --all | False | | 列出所有 Experiment |
* **nnictl experiment delete** * **nnictl experiment delete**
...@@ -403,9 +411,10 @@ nnictl 支持的命令: ...@@ -403,9 +411,10 @@ nnictl 支持的命令:
* 选项 * 选项
| 参数及缩写 | 是否必需 | 默认值 | 说明 | | 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | ------------- | | ----- | ----- | --- | --------------- |
| id | False | | Experiment ID | | id | False | | Experiment ID |
| --all | False | | 删除所有 Experiment |
<a name="export"></a> <a name="export"></a>
...@@ -474,7 +483,7 @@ nnictl 支持的命令: ...@@ -474,7 +483,7 @@ nnictl 支持的命令:
当前,以下 Tuner 和 Advisor 支持导入数据: 当前,以下 Tuner 和 Advisor 支持导入数据:
```yml ```yaml
内置 Tuner: TPE, Anneal, GridSearch, MetisTuner 内置 Tuner: TPE, Anneal, GridSearch, MetisTuner
内置 Advisor: BOHB 内置 Advisor: BOHB
``` ```
...@@ -716,4 +725,4 @@ nnictl 支持的命令: ...@@ -716,4 +725,4 @@ nnictl 支持的命令:
```bash ```bash
nnictl --version nnictl --version
``` ```
\ No newline at end of file
...@@ -54,18 +54,17 @@ if __name__ == '__main__': ...@@ -54,18 +54,17 @@ if __name__ == '__main__':
NNI 用来帮助超参调优。它的流程如下: NNI 用来帮助超参调优。它的流程如下:
```pseudo 输入: 搜索空间, Trial 代码, 配置文件
输入: 搜索空间, Trial 代码, 配置文件 输出: 一组最佳的超参配置
输出: 一组最佳的超参配置
1: For t = 0, 1, 2, ..., maxTrialNum,
1: For t = 0, 1, 2, ..., maxTrialNum, 2: hyperparameter = 从搜索空间选择一组参数
2: hyperparameter = 从搜索空间选择一组参数 3: final result = run_trial_and_evaluate(hyperparameter)
3: final result = run_trial_and_evaluate(hyperparameter) 4: 返回最终结果给 NNI
4: 返回最终结果给 NNI 5: If 时间达到上限,
5: If 时间达到上限, 6: 停止实验
6: 停止实验 7: return 最好的实验结果
7: return 最好的实验结果
```
如果需要使用 NNI 来自动训练模型,找到最佳超参,需要如下三步: 如果需要使用 NNI 来自动训练模型,找到最佳超参,需要如下三步:
...@@ -208,28 +207,28 @@ Web 地址为:[IP 地址]:8080 ...@@ -208,28 +207,28 @@ Web 地址为:[IP 地址]:8080
Experiment 相关信息会显示在界面上,配置和搜索空间等。 可通过 **Download** 按钮来`下载信息和参数`。 可以在运行中或结束后,随时下载 Experiment 的结果。 Experiment 相关信息会显示在界面上,配置和搜索空间等。 可通过 **Download** 按钮来`下载信息和参数`。 可以在运行中或结束后,随时下载 Experiment 的结果。
![](../img/QuickStart1.png) ![](../../img/QuickStart1.png)
前 10 个 Trial 结果也会列在 Overview 页面中,可以在 "Trials Detail" 部分浏览所有的 Trial。 前 10 个 Trial 结果也会列在 Overview 页面中,可以在 "Trials Detail" 部分浏览所有的 Trial。
![](../img/QuickStart2.png) ![](../../img/QuickStart2.png)
#### 查看 Trial 详情页面 #### 查看 Trial 详情页面
点击 "Default Metric" 来查看所有 Trial 的点图。 悬停鼠标来查看默认指标和搜索空间信息。 点击 "Default Metric" 来查看所有 Trial 的点图。 悬停鼠标来查看默认指标和搜索空间信息。
![](../img/QuickStart3.png) ![](../../img/QuickStart3.png)
点击 "Hyper Parameter" 标签查看图像。 点击 "Hyper Parameter" 标签查看图像。
* 可选择百分比查看最好的 Trial。 * 可选择百分比查看最好的 Trial。
* 选择两个轴来交换位置。 * 选择两个轴来交换位置。
![](../img/QuickStart4.png) ![](../../img/QuickStart4.png)
点击 "Trial Duration" 标签来查看柱状图。 点击 "Trial Duration" 标签来查看柱状图。
![](../img/QuickStart5.png) ![](../../img/QuickStart5.png)
下面是所有 Trial 的状态。 包括: 下面是所有 Trial 的状态。 包括:
...@@ -238,20 +237,20 @@ Experiment 相关信息会显示在界面上,配置和搜索空间等。 可 ...@@ -238,20 +237,20 @@ Experiment 相关信息会显示在界面上,配置和搜索空间等。 可
* Kill: 可终止正在运行的任务。 * Kill: 可终止正在运行的任务。
* 支持搜索某个特定的 Trial。 * 支持搜索某个特定的 Trial。
![](../img/QuickStart6.png) ![](../../img/QuickStart6.png)
* 中间结果图 * 中间结果图
![](../img/QuickStart7.png) ![](../../img/QuickStart7.png)
## 相关主题 ## 相关主题
* [尝试不同的 Tuner](BuiltinTuner.md) * [尝试不同的 Tuner](../Tuner/BuiltinTuner.md)
* [尝试不同的 Assessor](BuiltinAssessors.md) * [尝试不同的 Assessor](../Assessor/BuiltinAssessor.md)
* [使用命令行工具 nnictl](Nnictl.md) * [使用命令行工具 nnictl](Nnictl.md)
* [如何编写 Trial 代码](Trials.md) * [如何实现 Trial 代码](../TrialExample/Trials.md)
* [如何在本机运行 Experiment (支持多 GPU 卡)?](LocalMode.md) * [如何在本机运行 Experiment (支持多 GPU 卡)?](../TrainingService/LocalMode.md)
* [如何在多机上运行 Experiment?](RemoteMachineMode.md) * [如何在多机上运行 Experiment?](../TrainingService/RemoteMachineMode.md)
* [如何在 OpenPAI 上运行 Experiment?](PaiMode.md) * [如何在 OpenPAI 上运行 Experiment?](../TrainingService/PaiMode.md)
* [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](KubeflowMode.md) * [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](../TrainingService/KubeflowMode.md)
* [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](FrameworkControllerMode.md) * [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](../TrainingService/FrameworkControllerMode.md)
\ No newline at end of file \ No newline at end of file
...@@ -47,7 +47,8 @@ ...@@ -47,7 +47,8 @@
* {"_type":"quniform","_value":[low, high, q]} * {"_type":"quniform","_value":[low, high, q]}
* 这表示变量值会类似于 round(uniform(low, high) / q) * 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]` * 适用于离散,同时反映了某种"平滑"的数值,但上下限都有限制。 如果需要从范围 [low, high] 中均匀选择整数,可以如下定义 `_value``[low, high, 1]`
* {"_type":"loguniform","_value":[low, high]} * {"_type":"loguniform","_value":[low, high]}
...@@ -57,7 +58,7 @@ ...@@ -57,7 +58,7 @@
* {"_type":"qloguniform","_value":[low, high, q]} * {"_type":"qloguniform","_value":[low, high, q]}
* 这表示变量值会类似于 round(loguniform(low, high)) / q) * q * 变量值为 clip(round(loguniform(low, high) / q) * q, low, high),clip 操作用于约束生成值的边界。
* 适用于值是“平滑”的离散变量,但上下限均有限制。 * 适用于值是“平滑”的离散变量,但上下限均有限制。
* {"_type":"normal","_value":[mu, sigma]} * {"_type":"normal","_value":[mu, sigma]}
...@@ -78,6 +79,12 @@ ...@@ -78,6 +79,12 @@
* 这表示变量值会类似于 round(exp(normal(mu, sigma)) / q) * q * 这表示变量值会类似于 round(exp(normal(mu, sigma)) / q) * q
* 适用于值是“平滑”的离散变量,但某一边有界。 * 适用于值是“平滑”的离散变量,但某一边有界。
* {"_type":"mutable_layer","_value":{mutable_layer_infomation}}
* [神经网络架构搜索空间](../AdvancedFeature/GeneralNasInterfaces.md)的类型。 值是字典类型,键值对表示每个 mutable_layer 的名称和搜索空间。
* 当前,只能通过 Annotation 来使用这种类型的搜索空间。因此不需要为搜索空间定义 JSON 文件,它会通过 Trial 中的 Annotation 自动生成。
* 具体用法参考[通用 NAS 接口](../AdvancedFeature/GeneralNasInterfaces.md)
## 每种 Tuner 支持的搜索空间类型 ## 每种 Tuner 支持的搜索空间类型
| | choice | randint | uniform | quniform | loguniform | qloguniform | normal | qnormal | lognormal | qlognormal | | | choice | randint | uniform | quniform | loguniform | qloguniform | normal | qnormal | lognormal | qlognormal |
...@@ -88,24 +95,16 @@ ...@@ -88,24 +95,16 @@
| Evolution Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | | Evolution Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; |
| SMAC Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | | | | | | | SMAC Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | | | | | |
| Batch Tuner | &#10003; | | | | | | | | | | | Batch Tuner | &#10003; | | | | | | | | | |
| Grid Search Tuner | &#10003; | | | &#10003; | | &#10003; | | | | | | Grid Search Tuner | &#10003; | &#10003; | | &#10003; | | | | | | |
| Hyperband Advisor | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | | Hyperband Advisor | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; |
| Metis Tuner | &#10003; | &#10003; | &#10003; | &#10003; | | | | | | | | Metis Tuner | &#10003; | &#10003; | &#10003; | &#10003; | | | | | | |
| GP Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | | | | | | GP Tuner | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | &#10003; | | | | |
已知的局限: 已知的局限:
* 注意,在 Grid Search Tuner 中,为了使用方便 `quniform``qloguniform` 的定义也有所改变,其中的 q 表示采样值的数量。 详情如下:
* 类型 'quniform' 接收三个值 [low, high, q], 其中 [low, high] 指定了范围,而 'q' 指定了会被均匀采样的值的数量。 注意 q 至少为 2。 它的第一个采样值为 'low',每个采样值都会比前一个大 (high-low)/q 。
* 类型 'qloguniform' 的行为与 'quniform' 类似,不同处在于首先将范围改为 [log(low), log(high)] 采样后,再将数值还原。
* 注意 Metis Tuner 当前仅支持在 `choice` 中使用数值。 * 注意 Metis Tuner 当前仅支持在 `choice` 中使用数值。
* 请注意,对于嵌套搜索空间: * 请注意,对于嵌套搜索空间:
* 只有 随机搜索/TPE/Anneal/Evolution Tuner 支持嵌套搜索空间 * 只有 随机搜索/TPE/Anneal/Evolution Tuner 支持嵌套搜索空间
* 不支持嵌套搜索空间 "超参" 的可视化,对其的改进通过 #1110(https://github.com/microsoft/nni/issues/1110) 来跟踪 。欢迎任何建议和贡献。
* 不支持嵌套搜索空间 "超参" 并行图,对其的改进通过 #1110(https://github.com/microsoft/nni/issues/1110) 来跟踪 。欢迎任何建议和贡献。 \ No newline at end of file
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
## 调试 NNI 源代码的最佳实践 ## 调试 NNI 源代码的最佳实践
要调试 NNI 源代码,需要 Ubuntu 16.04 或更高版本系统的开发环境,并需要安装 Python 3.x 以及 pip3,然后遵循以下步骤。 要调试 NNI 源代码,需要 Ubuntu 16.04 或更高版本系统的开发环境,并需要安装 Python 3 以及 pip 3,然后遵循以下步骤。
**1. 克隆源代码** **1. 克隆源代码**
...@@ -57,4 +57,4 @@ Trial 启动 Experiment 来检查环境。 例如,运行命令 ...@@ -57,4 +57,4 @@ Trial 启动 Experiment 来检查环境。 例如,运行命令
* * * * * *
最后,希望一切顺利。 参考[贡献](./Contributing.md)文档,来了解更多创建拉取请求或问题的指南。 最后,希望一切顺利。 参考[贡献](Contributing.md)文档,来了解更多创建拉取请求或问题的指南。
\ No newline at end of file \ No newline at end of file
# Web 界面
## 查看概要页面
点击标签 "Overview"。
* 查看 Experiment Trial 配置、搜索空间以及结果好的 Trial。
![](../../img/webui-img/over1.png) ![](../../img/webui-img/over2.png)
* 如果 Experiment 包含了较多 Trial,可改变刷新间隔。
![](../../img/webui-img/refresh-interval.png)
* 支持查看并下载 Experiment 结果,以及 NNI Manager、Dispatcher 的日志文件。
![](../../img/webui-img/download.png)
* 如果 Experiment 状态为 ERROR,可点击图标,查看 Experiment 错误日志。
![](../../img/webui-img/log-error.png) ![](../../img/webui-img/review-log.png)
* 点击 "Feedback" 反馈问题。
## 查看任务默认指标
* 点击 "Default Metric" 来查看所有 Trial 的点图。 悬停鼠标来查看默认指标和搜索空间信息。
![](../../img/webui-img/default-metric.png)
* 点击开关 "optimization curve" 来查看 Experiment 的优化曲线。
![](../../img/webui-img/best-curve.png)
## 查看超参
点击 "Hyper Parameter" 标签查看图像。
* 可选择百分比查看最好的 Trial。
* 选择两个轴来交换位置。
![](../../img/hyperPara.png)
## 查看 Trial 运行时间
点击 "Trial Duration" 标签来查看柱状图。
![](../../img/trial_duration.png)
## 查看 Trial 中间结果
单击 "Intermediate Result" 标签查看折线图。
![](../../img/webui-img/trials_intermeidate.png)
由于训练中可能有非常多的中间结果,因此中间结果图提供了过滤功能。 如果要使用过滤按钮查看部分 Trial,则需要提供数据。
第一个输入框应该填入什么? 可能会发现一个 Trial 的中间结果点变得更好或者更差。 换句话说,这可能是非常重要的中间结果点。 只需将其输入第一个输入框中。
选择了中间结果序号后,要输入需要了解的该中间结果序号的指标范围。 即其最小值和最大值。 如此图中,中间结果点为 9,指标范围为 60 至 80。
Trial 中指标范围在 20 至 60 的 13 个结果就被过滤掉了。
![](../../img/webui-img/filter-intermediate.png)
## 查看 Trial 状态
点击 "Trials Detail" 标签查看所有 Trial 的状态。 包括:
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间。
![](../../img/webui-img/detail-local.png)
* "Add column" 按钮可选择在表格中显示的列。 如果 Experiment 的最终结果是 dict,则可以在表格中查看其它键。 可选择 "Intermediate count" 列来查看 Trial 进度。
![](../../img/webui-img/addColumn.png)
* 如果要比较某些 Trial,可选择并点击 "Compare" 来查看结果。
![](../../img/webui-img/select-trial.png) ![](../../img/webui-img/compare.png)
* 支持通过 id,状态,Trial 编号, 以及参数来搜索。
![](../../img/webui-img/search-trial.png)
* 可使用 "Copy as python" 按钮来拷贝 Trial 的参数。
![](../../img/webui-img/copyParameter.png)
* 如果在 OpenPAI 或 Kubeflow 平台上运行,还可以看到 hdfsLog。
![](../../img/webui-img/detail-pai.png)
* 中间结果图:可在此图中通过点击 operation 中的按钮来查看默认和其它键值。
![](../../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
######################
教程
######################
.. toctree::
:maxdepth: 2
安装<Installation>
实现 Trial<Trials>
Tuner<tuners>
Assessor<assessors>
Web 界面<WebUI>
训练平台<training_services>
如何使用 Docker <HowToUseDocker>
高级功能<advanced>
如何调试<HowToDebug>
\ No newline at end of file
# Web 界面
## 查看概要页面
点击标签 "Overview"。
* 查看 Experiment 的配置和搜索空间内容。
* 支持下载 Experiment 结果。
* 支持导出 nni-manager 和 dispatcher 的日志文件。
* 如果有任何问题,可以点击 “Feedback” 告诉我们。
* 如果 Experiment 包含了超过 1000 个 Trial,可改变刷新间隔。
![](../img/webui-img/over1.png)
* 查看最好结果的 Trial。
![](../img/webui-img/over2.png)
## 查看任务默认指标
点击 "Default Metric" 来查看所有 Trial 的点图。 悬停鼠标来查看默认指标和搜索空间信息。
![](../img/accuracy.png)
## 查看超参
点击 "Hyper Parameter" 标签查看图像。
* 可选择百分比查看最好的 Trial。
* 选择两个轴来交换位置。
![](../img/hyperPara.png)
## 查看 Trial 运行时间
点击 "Trial Duration" 标签来查看柱状图。
![](../img/trial_duration.png)
## 查看 Trial 中间结果
单击 "Intermediate Result" 标签查看折线图。
![](../img/webui-img/trials_intermeidate.png)
该图有筛选功能。 点击筛选按钮, 在第一个输入框中输入关注点的序号, 在第二个输入框中输入中间结果的范围,选出需要的数据。
![](../img/webui-img/filter_intermediate.png)
## 查看 Trial 状态
点击 "Trials Detail" 标签查看所有 Trial 的状态。 特别是:
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间。
![](../img/webui-img/detail-local.png)
* "Add column" 按钮可选择在表格中显示的列。 如果 Experiment 的最终结果是 dict,则可以在表格中查看其它键。
![](../img/webui-img/addColumn.png)
* 如果要比较某些 Trial,可选择并点击 "Compare" 来查看结果。
![](../img/webui-img/compare.png)
* 可使用 "Copy as python" 按钮来拷贝 Trial 的参数。
![](../img/webui-img/copyParameter.png)
* 如果在 OpenPAI 或 Kubeflow 平台上运行,还可以看到 hdfsLog。
![](../img/webui-img/detail-pai.png)
* Kill: 可终止正在运行的任务。
* 支持搜索某个特定的 Trial。
* Intermediate Result Graph: 可看到图中默认和其它的键值。
![](../img/webui-img/intermediate.png)
\ No newline at end of file
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
===================== =====================
.. toctree:: .. toctree::
多阶段<MultiPhase> 多阶段<./AdvancedFeature/MultiPhase>
高级网络架构搜索<AdvancedNas> 高级网络架构搜索<./AdvancedFeature/AdvancedNas>
NAS 编程接口<GeneralNasInterfaces> NAS 编程接口<./AdvancedFeature/GeneralNasInterfaces>
\ No newline at end of file \ No newline at end of file
...@@ -15,5 +15,5 @@ Assessor 从 Trial 中接收中间结果,并通过指定的算法决定此 Tri ...@@ -15,5 +15,5 @@ Assessor 从 Trial 中接收中间结果,并通过指定的算法决定此 Tri
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
内置 Assessor<BuiltinAssessor> 内置 Assessor<builtin_assessor>
自定义 Assessor<CustomizeAssessor> 自定义 Assessor<Assessor/CustomizeAssessor>
...@@ -4,6 +4,6 @@ ...@@ -4,6 +4,6 @@
.. toctree:: .. toctree::
:maxdepth: 1 :maxdepth: 1
介绍<BuiltinAssessor> 概述<./Assessor/BuiltinAssessor>
Medianstop<MedianstopAssessor> Medianstop<./Assessor/MedianstopAssessor>
Curvefitting<CurvefittingAssessor> Curvefitting(曲线拟合)<./Assessor/CurvefittingAssessor>
\ No newline at end of file \ No newline at end of file
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