diff --git a/README_zh_CN.md b/README_zh_CN.md
index 133eb6b40d..25d077ba43 100644
--- a/README_zh_CN.md
+++ b/README_zh_CN.md
@@ -61,11 +61,12 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
ENAS
Metis Tuner
BOHB
+ GP Tuner
- Assessor(评估器)
+ Assessor(评估器)
@@ -101,12 +102,6 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
## **安装和验证**
-在 Windows 本机模式下,并且是第一次使用 PowerShell 来运行脚本,需要**使用管理员权限**运行一次下列命令:
-
-```bash
- Set-ExecutionPolicy -ExecutionPolicy Unrestricted
-```
-
**通过 pip 命令安装**
* 当前支持 Linux,MacOS 和 Windows(本机,远程,OpenPAI 模式),在 Ubuntu 16.04 或更高版本,MacOS 10.14.1 以及 Windows 10.1809 上进行了测试。 在 `python >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。
@@ -131,14 +126,14 @@ python -m pip install --upgrade nni
**通过源代码安装**
-* 当前支持 Linux(Ubuntu 16.04 或更高版本),MacOS(10.14.1)以及 Windows 10(1809 版)。
+* 当前支持 Linux(Ubuntu 16.04 或更高版本),MacOS(10.14.1)以及 Windows 10(1809 版)。
Linux 和 macOS
* 在 `python >= 3.5` 的环境中运行命令: `git` 和 `wget`,确保安装了这两个组件。
```bash
- git clone -b v0.7 https://github.com/Microsoft/nni.git
+ git clone -b v0.8 https://github.com/Microsoft/nni.git
cd nni
source install.sh
```
@@ -148,9 +143,9 @@ Windows
* 在 `python >=3.5` 的环境中运行命令: `git` 和 `PowerShell`,确保安装了这两个组件。
```bash
- git clone -b v0.7 https://github.com/Microsoft/nni.git
+ git clone -b v0.8 https://github.com/Microsoft/nni.git
cd nni
- powershell .\install.ps1
+ powershell -ExecutionPolicy Bypass -file install.ps1
```
参考[安装 NNI](docs/zh_CN/Installation.md) 了解系统需求。
@@ -164,7 +159,7 @@ Windows 上参考 [Windows 上使用 NNI](docs/zh_CN/NniOnWindows.md)。
* 通过克隆源代码下载示例。
```bash
- git clone -b v0.7 https://github.com/Microsoft/nni.git
+ git clone -b v0.8 https://github.com/Microsoft/nni.git
```
Linux 和 macOS
diff --git a/docs/en_US/BuiltinTuner.md b/docs/en_US/BuiltinTuner.md
index 537ebf3ebb..7beeedc40f 100644
--- a/docs/en_US/BuiltinTuner.md
+++ b/docs/en_US/BuiltinTuner.md
@@ -1,6 +1,6 @@
# Built-in Tuners
-NNI provides state-of-the-art tuning algorithm as our builtin-tuners and makes them easy to use. Below is the brief summary of NNI currently built-in Tuners:
+NNI provides state-of-the-art tuning algorithm as our built-in tuners and makes them easy to use. Below is the brief summary of NNI currently built-in tuners:
Note: Click the **Tuner's name** to get the Tuner's installation requirements, suggested scenario and using example. The link for a detailed description of the algorithm is at the end of the suggested scenario of each tuner. Here is an [article](./CommunitySharings/HpoComparision.md) about the comparison of different Tuners on several problems.
@@ -11,28 +11,27 @@ Currently we support the following algorithms:
|[__TPE__](#TPE)|The Tree-structured Parzen Estimator (TPE) is a sequential model-based optimization (SMBO) approach. SMBO methods sequentially construct models to approximate the performance of hyperparameters based on historical measurements, and then subsequently choose new hyperparameters to test based on this model. [Reference Paper](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)|
|[__Random Search__](#Random)|In Random Search for Hyper-Parameter Optimization show that Random Search might be surprisingly simple and effective. We suggest that we could use Random Search as the baseline when we have no knowledge about the prior distribution of hyper-parameters. [Reference Paper](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf)|
|[__Anneal__](#Anneal)|This simple annealing algorithm begins by sampling from the prior, but tends over time to sample from points closer and closer to the best ones observed. This algorithm is a simple variation on the random search that leverages smoothness in the response surface. The annealing rate is not adaptive.|
-|[__Naive Evolution__](#Evolution)|Naive Evolution comes from Large-Scale Evolution of Image Classifiers. It randomly initializes a population-based on search space. For each generation, it chooses better ones and does some mutation (e.g., change a hyperparameter, add/remove one layer) on them to get the next generation. Naive Evolution requires many trials to works, but it's very simple and easy to expand new features. [Reference paper](https://arxiv.org/pdf/1703.01041.pdf)|
-|[__SMAC__](#SMAC)|SMAC is based on Sequential Model-Based Optimization (SMBO). It adapts the most prominent previously used model class (Gaussian stochastic process models) and introduces the model class of random forests to SMBO, in order to handle categorical parameters. The SMAC supported by nni is a wrapper on the SMAC3 Github repo. Notice, SMAC need to be installed by `nnictl package` command. [Reference Paper,](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) [Github Repo](https://github.com/automl/SMAC3)|
+|[__Naïve Evolution__](#Evolution)|Naïve Evolution comes from Large-Scale Evolution of Image Classifiers. It randomly initializes a population-based on search space. For each generation, it chooses better ones and does some mutation (e.g., change a hyperparameter, add/remove one layer) on them to get the next generation. Naïve Evolution requires many trials to works, but it's very simple and easy to expand new features. [Reference paper](https://arxiv.org/pdf/1703.01041.pdf)|
+|[__SMAC__](#SMAC)|SMAC is based on Sequential Model-Based Optimization (SMBO). It adapts the most prominent previously used model class (Gaussian stochastic process models) and introduces the model class of random forests to SMBO, in order to handle categorical parameters. The SMAC supported by NNI is a wrapper on the SMAC3 GitHub repo. Notice, SMAC need to be installed by `nnictl package` command. [Reference Paper,](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) [GitHub Repo](https://github.com/automl/SMAC3)|
|[__Batch tuner__](#Batch)|Batch tuner allows users to simply provide several configurations (i.e., choices of hyper-parameters) for their trial code. After finishing all the configurations, the experiment is done. Batch tuner only supports the type choice in search space spec.|
|[__Grid Search__](#GridSearch)|Grid Search performs an exhaustive searching through a manually specified subset of the hyperparameter space defined in the searchspace file. Note that the only acceptable types of search space are choice, quniform, qloguniform. The number q in quniform and qloguniform has special meaning (different from the spec in search space spec). It means the number of values that will be sampled evenly from the range low and high.|
|[__Hyperband__](#Hyperband)|Hyperband tries to use the limited resource to explore as many configurations as possible, and finds out the promising ones to get the final result. The basic idea is generating many configurations and to run them for the small number of trial budget to find out promising one, then further training those promising ones to select several more promising one.[Reference Paper](https://arxiv.org/pdf/1603.06560.pdf)|
|[__Network Morphism__](#NetworkMorphism)|Network Morphism provides functions to automatically search for architecture of deep learning models. Every child network inherits the knowledge from its parent network and morphs into diverse types of networks, including changes of depth, width, and skip-connection. Next, it estimates the value of a child network using the historic architecture and metric pairs. Then it selects the most promising one to train. [Reference Paper](https://arxiv.org/abs/1806.10282)|
|[__Metis Tuner__](#MetisTuner)|Metis offers the following benefits when it comes to tuning parameters: While most tools only predict the optimal configuration, Metis gives you two outputs: (a) current prediction of optimal configuration, and (b) suggestion for the next trial. No more guesswork. While most tools assume training datasets do not have noisy data, Metis actually tells you if you need to re-sample a particular hyper-parameter. [Reference Paper](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/)|
-|[__BOHB__](#BOHB)|BOHB is a follow-up work of Hyperband. It targets the weakness of Hyperband that new configurations are generated randomly without leveraging finished trials. For the name BOHB, HB means Hyperband, BO means Byesian Optimization. BOHB leverages finished trials by building multiple TPE models, a proportion of new configurations are generated through these models. [Reference Paper](https://arxiv.org/abs/1807.01774)|
-|[__GP Tuner__](#GPTuner)|Gaussian Process Tuner is a sequential model-based optimization (SMBO) approach with Gaussian Process as the surrogate. [Reference Paper, ](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)[Github Repo](https://github.com/fmfn/BayesianOptimization)|
-
+|[__BOHB__](#BOHB)|BOHB is a follow-up work of Hyperband. It targets the weakness of Hyperband that new configurations are generated randomly without leveraging finished trials. For the name BOHB, HB means Hyperband, BO means Bayesian Optimization. BOHB leverages finished trials by building multiple TPE models, a proportion of new configurations are generated through these models. [Reference Paper](https://arxiv.org/abs/1807.01774)|
+|[__GP Tuner__](#GPTuner)|Gaussian Process Tuner is a sequential model-based optimization (SMBO) approach with Gaussian Process as the surrogate. [Reference Paper](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf), [Github Repo](https://github.com/fmfn/BayesianOptimization)|
-## Usage of Builtin Tuners
+## Usage of Built-in Tuners
-Use builtin tuner provided by NNI SDK requires to declare the **builtinTunerName** and **classArgs** in `config.yml` file. In this part, we will introduce the detailed usage about the suggested scenarios, classArg requirements and example for each tuner.
+Use built-in tuner provided by NNI SDK requires to declare the **builtinTunerName** and **classArgs** in `config.yml` file. In this part, we will introduce the detailed usage about the suggested scenarios, classArg requirements and example for each tuner.
-Note: Please follow the format when you write your `config.yml` file. Some builtin tuner need to be installed by `nnictl package`, like SMAC.
+Note: Please follow the format when you write your `config.yml` file. Some built-in tuner need to be installed by `nnictl package`, like SMAC.
![](https://placehold.it/15/1589F0/000000?text=+) `TPE`
-> Builtin Tuner Name: **TPE**
+> Built-in Tuner Name: **TPE**
**Suggested scenario**
@@ -59,7 +58,7 @@ tuner:
![](https://placehold.it/15/1589F0/000000?text=+) `Random Search`
-> Builtin Tuner Name: **Random**
+> Built-in Tuner Name: **Random**
**Suggested scenario**
@@ -83,7 +82,7 @@ tuner:
![](https://placehold.it/15/1589F0/000000?text=+) `Anneal`
-> Builtin Tuner Name: **Anneal**
+> Built-in Tuner Name: **Anneal**
**Suggested scenario**
@@ -108,9 +107,9 @@ tuner:
-![](https://placehold.it/15/1589F0/000000?text=+) `Naive Evolution`
+![](https://placehold.it/15/1589F0/000000?text=+) `Naïve Evolution`
-> Builtin Tuner Name: **Evolution**
+> Built-in Tuner Name: **Evolution**
**Suggested scenario**
@@ -133,9 +132,9 @@ tuner:
![](https://placehold.it/15/1589F0/000000?text=+) `SMAC`
-> Builtin Tuner Name: **SMAC**
+> Built-in Tuner Name: **SMAC**
-**Please note that SMAC doesn't support running on windows currently. The specific reason can be referred to this [github issue](https://github.com/automl/SMAC3/issues/483).**
+**Please note that SMAC doesn't support running on windows currently. The specific reason can be referred to this [GitHub issue](https://github.com/automl/SMAC3/issues/483).**
**Installation**
@@ -169,7 +168,7 @@ tuner:
![](https://placehold.it/15/1589F0/000000?text=+) `Batch Tuner`
-> Builtin Tuner Name: BatchTuner
+> Built-in Tuner Name: BatchTuner
**Suggested scenario**
@@ -208,7 +207,7 @@ The search space file including the high-level key `combine_params`. The type of
![](https://placehold.it/15/1589F0/000000?text=+) `Grid Search`
-> Builtin Tuner Name: **Grid Search**
+> Built-in Tuner Name: **Grid Search**
**Suggested scenario**
@@ -230,7 +229,7 @@ tuner:
![](https://placehold.it/15/1589F0/000000?text=+) `Hyperband`
-> Builtin Advisor Name: **Hyperband**
+> Built-in Advisor Name: **Hyperband**
**Suggested scenario**
@@ -260,11 +259,11 @@ advisor:
![](https://placehold.it/15/1589F0/000000?text=+) `Network Morphism`
-> Builtin Tuner Name: **NetworkMorphism**
+> Built-in Tuner Name: **NetworkMorphism**
**Installation**
-NetworkMorphism requires [pyTorch](https://pytorch.org/get-started/locally), so users should install it first.
+NetworkMorphism requires [PyTorch](https://pytorch.org/get-started/locally), so users should install it first.
**Suggested scenario**
@@ -298,13 +297,13 @@ tuner:
![](https://placehold.it/15/1589F0/000000?text=+) `Metis Tuner`
-> Builtin Tuner Name: **MetisTuner**
+> Built-in Tuner Name: **MetisTuner**
Note that the only acceptable types of search space are `choice`, `quniform`, `uniform` and `randint`.
**Suggested scenario**
-Similar to TPE and SMAC, Metis is a black-box tuner. If your system takes a long time to finish each trial, Metis is more favorable than other approaches such as random search. Furthermore, Metis provides guidance on the subsequent trial. Here is an [example](https://github.com/Microsoft/nni/tree/master/examples/trials/auto-gbdt/search_space_metis.json) about the use of Metis. User only need to send the final result like `accuracy` to tuner, by calling the nni SDK. [Detailed Description](./MetisTuner.md)
+Similar to TPE and SMAC, Metis is a black-box tuner. If your system takes a long time to finish each trial, Metis is more favorable than other approaches such as random search. Furthermore, Metis provides guidance on the subsequent trial. Here is an [example](https://github.com/Microsoft/nni/tree/master/examples/trials/auto-gbdt/search_space_metis.json) about the use of Metis. User only need to send the final result like `accuracy` to tuner, by calling the NNI SDK. [Detailed Description](./MetisTuner.md)
**Requirement of classArg**
@@ -326,7 +325,7 @@ tuner:
![](https://placehold.it/15/1589F0/000000?text=+) `BOHB Advisor`
-> Builtin Tuner Name: **BOHB**
+> Built-in Tuner Name: **BOHB**
**Installation**
@@ -338,7 +337,7 @@ nnictl package install --name=BOHB
**Suggested scenario**
-Similar to Hyperband, it is suggested when you have limited computation resource but have relatively large search space. It performs well in the scenario that intermediate result (e.g., accuracy) can reflect good or bad of final result (e.g., accuracy) to some extent. In this case, it may converges to a better configuration due to bayesian optimization usage. [Detailed Description](./BohbAdvisor.md)
+Similar to Hyperband, it is suggested when you have limited computation resource but have relatively large search space. It performs well in the scenario that intermediate result (e.g., accuracy) can reflect good or bad of final result (e.g., accuracy) to some extent. In this case, it may converges to a better configuration due to Bayesian optimization usage. [Detailed Description](./BohbAdvisor.md)
**Requirement of classArg**
@@ -366,19 +365,18 @@ advisor:
max_budget: 27
eta: 3
```
-
![](https://placehold.it/15/1589F0/000000?text=+) `GP Tuner`
-> Builtin Tuner Name: **GPTuner**
+> Built-in Tuner Name: **GPTuner**
Note that the only acceptable types of search space are `choice`, `randint`, `uniform`, `quniform`, `loguniform`, `qloguniform`.
**Suggested scenario**
-As a strategy in Sequential Model-based Global Optimization(SMBO) algorithm, GP Tuner uses a proxy optimization problem (finding the maximum of the acquisition function) that, albeit still a hard problem, is cheaper (in the computational sense) and common tools can be employed. Therefore GP Tuner is most adequate for situations where the function to be optimized is a very expensive endeavor. GP can be used when the computation resource is limited. While GP Tuner has a computationoal cost that grows at *O(N^3)* due to the requirement of inverting the Gram matrix, so it's not suitable when lots of trials are needed. [Detailed Description](./GPTuner.md)
+As a strategy in Sequential Model-based Global Optimization(SMBO) algorithm, GP Tuner uses a proxy optimization problem (finding the maximum of the acquisition function) that, albeit still a hard problem, is cheaper (in the computational sense) and common tools can be employed. Therefore GP Tuner is most adequate for situations where the function to be optimized is a very expensive endeavor. GP can be used when the computation resource is limited. While GP Tuner has a computational cost that grows at *O(N^3)* due to the requirement of inverting the Gram matrix, so it's not suitable when lots of trials are needed. [Detailed Description](./GPTuner.md)
**Requirement of classArg**
@@ -390,7 +388,7 @@ As a strategy in Sequential Model-based Global Optimization(SMBO) algorithm, GP
* **alpha** (*float, optional, default = 1e-6*) - Used to specify Gaussian Process Regressor. Larger values correspond to increased noise level in the observations.
* **cold_start_num** (*int, optional, default = 10*) - Number of random exploration to perform before Gaussian Process. Random exploration can help by diversifying the exploration space.
* **selection_num_warm_up** (*int, optional, default = 1e5*) - Number of random points to evaluate for getting the point which maximizes the acquisition function.
-* **selection_num_starting_points** (*int, optional, default = 250*) - Nnumber of times to run L-BFGS-B from a random starting point after the warmup.
+* **selection_num_starting_points** (*int, optional, default = 250*) - Number of times to run L-BFGS-B from a random starting point after the warmup.
**Usage example**
diff --git a/docs/zh_CN/AnnotationSpec.md b/docs/zh_CN/AnnotationSpec.md
index 42fd79eabb..0f2b701fb9 100644
--- a/docs/zh_CN/AnnotationSpec.md
+++ b/docs/zh_CN/AnnotationSpec.md
@@ -28,7 +28,7 @@ NNI 中,有 4 种类型的 Annotation;
**参数**
-- **sampling_algo**: 指定搜索空间的采样算法。 可将其换成 NNI 支持的其它采样函数,函数要以 `nni.` 开头。例如,`choice` 或 `uniform`,详见 [SearchSpaceSpec](SearchSpaceSpec.md)。
+- **sampling_algo**: 指定搜索空间的采样算法。 可将其换成 NNI 支持的其它采样函数,函数要以 `nni.` 开头。例如,`choice` 或 `uniform`,详见 [SearchSpaceSpec](SearchSpaceSpec.md)。
- **name**: 将被赋值的变量名称。 注意,此参数应该与下面一行等号左边的值相同。
NNI 支持如下 10 种类型来表示搜索空间:
diff --git a/docs/zh_CN/BohbAdvisor.md b/docs/zh_CN/BohbAdvisor.md
index f319494f74..b31ab874ac 100644
--- a/docs/zh_CN/BohbAdvisor.md
+++ b/docs/zh_CN/BohbAdvisor.md
@@ -79,7 +79,7 @@ advisor:
* **bandwidth_factor**(< 1>浮点数, 可选, 默认值为3.0 ): 为了鼓励多样性,把优化EI的点加宽,即把KDE中采样的点乘以这个因子,从而增加KDE中的带宽。 如果不熟悉 KDE,建议保留默认值。
* **min_bandwidth**(< 1>float, 可选, 默认值 = 0.001 ): 为了保持多样性, 即使所有好的样本对其中一个参数具有相同的值,使用最小带宽 (默认值: 1e-3) 而不是零。 如果不熟悉 KDE,建议保留默认值。
-*请注意, 目前 NNI 的浮点类型仅支持十进制表示,必须使用0.333 来代替1/3,0.001来代替1e-3。*
+*目前 NNI 的浮点类型仅支持十进制表示,必须使用 0.333 来代替 1/3,0.001代替 1e-3。*
## 4. 文件结构
diff --git a/docs/zh_CN/BuiltinTuner.md b/docs/zh_CN/BuiltinTuner.md
index 0ce1217974..d20b26e77b 100644
--- a/docs/zh_CN/BuiltinTuner.md
+++ b/docs/zh_CN/BuiltinTuner.md
@@ -6,25 +6,24 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tu
当前支持的 Tuner:
-| Tuner | 算法简介 |
-| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [**TPE**](#TPE) | Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 [参考论文](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf) |
-| [**Random Search**](#Random) | 在超参优化时,随机搜索算法展示了其惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 [参考论文](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) |
-| [**Anneal**](#Anneal) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 |
-| [**Naive Evolution**](#Evolution) | 朴素进化算法来自于大规模图像分类进化。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 [参考论文](https://arxiv.org/pdf/1703.01041.pdf) |
-| [**SMAC**](#SMAC) | SMAC 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型优化方法)。 它会利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 SMAC 算法包装了 Github 的 SMAC3。 注意:SMAC 需要通过 `nnictl package` 命令来安装。 [参考论文,](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) [Github 代码库](https://github.com/automl/SMAC3) |
-| [**Batch tuner**](#Batch) | Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 |
-| [**Grid Search**](#GridSearch) | Grid Search 会穷举定义在搜索空间文件中的所有超参组合。 网格搜索可以使用的类型有 choice, quniform, qloguniform。 quniform 和 qloguniform 中的数值 q 具有特别的含义(不同于搜索空间文档中的说明)。 它表示了在最高值与最低值之间采样的值的数量。 |
-| [**Hyperband**](#Hyperband) | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并使用少量的资源来找到有可能好的配置,然后继续训练找到其中更好的配置。 [参考论文](https://arxiv.org/pdf/1603.06560.pdf) |
-| [**Network Morphism**](#NetworkMorphism) | Network Morphism 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 然后使用历史的架构和指标,来估计子网络的值。 最后会选择最有希望的模型进行训练。 [参考论文](https://arxiv.org/abs/1806.10282) |
-| [**Metis Tuner**](#MetisTuner) | 大多数调参工具仅仅预测最优配置,而 Metis 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 它不进行随机取样。 大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。 [参考论文](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) |
-| [**BOHB**](#BOHB) | BOHB 是 Hyperband 算法的后续工作。 Hyperband 在生成新的配置时,没有利用已有的 Trial 结果,而本算法利用了 Trial 结果。 BOHB 中,HB 表示 Hyperband,BO 表示贝叶斯优化(Byesian Optimization)。 BOHB 会建立多个 TPE 模型,从而利用已完成的 Trial 生成新的配置。 [参考论文](https://arxiv.org/abs/1807.01774) |
-
-
+| Tuner(调参器) | 算法简介 |
+| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [**TPE**](#TPE) | Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 [参考论文](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf) |
+| [**Random Search(随机搜索)**](#Random) | 在超参优化时,随机搜索算法展示了其惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 [参考论文](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) |
+| [**Anneal(退火算法)**](#Anneal) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 |
+| [**Naive Evolution(进化算法)**](#Evolution) | 朴素进化算法来自于大规模图像分类进化。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 [参考论文](https://arxiv.org/pdf/1703.01041.pdf) |
+| [**SMAC**](#SMAC) | SMAC 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型优化方法)。 它利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 SMAC 算法包装了 Github 的 SMAC3。 注意:SMAC 需要通过 `nnictl package` 命令来安装。 [参考论文,](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) [Github 代码库](https://github.com/automl/SMAC3) |
+| [**Batch Tuner(批量调参器)**](#Batch) | Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 |
+| [**Grid Search(遍历搜索)**](#GridSearch) | Grid Search 会穷举定义在搜索空间文件中的所有超参组合。 网格搜索可以使用的类型有 choice, quniform, qloguniform。 quniform 和 qloguniform 中的数值 q 具有特别的含义(不同于搜索空间文档中的说明)。 它表示了在最高值与最低值之间采样的值的数量。 |
+| [**Hyperband**](#Hyperband) | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并使用少量的资源来找到有可能好的配置,然后继续训练找到其中更好的配置。 [参考论文](https://arxiv.org/pdf/1603.06560.pdf) |
+| [**Network Morphism**](#NetworkMorphism) | Network Morphism 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 然后使用历史的架构和指标,来估计子网络的值。 然后会选择最有希望的模型进行训练。 [参考论文](https://arxiv.org/abs/1806.10282) |
+| [**Metis Tuner**](#MetisTuner) | 大多数调参工具仅仅预测最优配置,而 Metis 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 它不进行随机取样。 大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。 [参考论文](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) |
+| [**BOHB**](#BOHB) | BOHB 是 Hyperband 算法的后续工作。 Hyperband 在生成新的配置时,没有利用已有的 Trial 结果,而本算法利用了 Trial 结果。 BOHB 中,HB 表示 Hyperband,BO 表示贝叶斯优化(Byesian Optimization)。 BOHB 会建立多个 TPE 模型,从而利用已完成的 Trial 生成新的配置。 [参考论文](https://arxiv.org/abs/1807.01774) |
+| [**GP Tuner**](#GPTuner) | Gaussian Process(高斯过程) Tuner 是序列化的基于模型优化(SMBO)的方法,并使用了高斯过程来替代。 [参考论文](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf),[Github 库](https://github.com/fmfn/BayesianOptimization) |
## 用法
-要使用 NNI 内置的 Tuner,需要在 `config.yml` 文件中添加 **builtinTunerName** 和 **classArgs**。 这一节会介绍推荐的场景、参数等详细用法以及样例。
+要使用 NNI 内置的 Tuner,需要在 `config.yml` 文件中添加 **builtinTunerName** 和 **classArgs**。 这一节会介绍推荐的场景、参数等详细用法以及示例。
注意:参考样例中的格式来创建新的 `config.yml` 文件。 一些内置的 Tuner 还需要通过 `nnictl package` 命令先安装,如 SMAC。
@@ -112,7 +111,7 @@ tuner:
**建议场景**
-此算法对计算资源的需求相对较高。 需要非常大的初始种群,以免落入局部最优中。 如果 Trial 时间很短,或者使用了 Assessor,就非常适合此算法。 如果 Trial 代码支持权重迁移,即每次 Trial 会从上一轮继承已经收敛的权重,建议使用此算法。 这会大大提高训练速度。 [详细说明](./EvolutionTuner.md)
+此算法对计算资源的需求相对较高。 需要非常大的初始种群,以免落入局部最优中。 如果 Trial 时间很短,或使用了 Assessor,就非常合适。 如果 Trial 代码支持权重迁移,即每次 Trial 会从上一轮继承已经收敛的权重,建议使用此算法。 这会大大提高训练速度。 [详细说明](./EvolutionTuner.md)
**示例**
@@ -192,8 +191,8 @@ tuner:
"_value" : [{"optimizer": "Adam", "learning_rate": 0.00001},
{"optimizer": "Adam", "learning_rate": 0.0001},
{"optimizer": "Adam", "learning_rate": 0.001},
- {"optimizer": "SGD", "learning_rate": 0.01},
- {"optimizer": "SGD", "learning_rate": 0.005},
+ {"optimizer": "SGD", "learning_rate": 0.01},
+ {"optimizer": "SGD", "learning_rate": 0.005},
{"optimizer": "SGD", "learning_rate": 0.0002}]
}
}
@@ -327,7 +326,7 @@ tuner:
**安装**
-BOHB Advisor 的使用依赖 [ConfigSpace](https://github.com/automl/ConfigSpace) 包,在第一次使用 BOHB 的时候,在命令行运行以下的指令来安装 ConfigSpace。
+BOHB Advisor 的使用依赖 [ConfigSpace](https://github.com/automl/ConfigSpace) 包,第一次使用 BOHB 时,在命令行运行以下命令安装 ConfigSpace。
```bash
nnictl package install --name=BOHB
@@ -335,7 +334,7 @@ nnictl package install --name=BOHB
**建议场景**
-与 Hyperband 类似, 当计算资源有限但搜索空间相对较大时, 建议使用此方法。 中间结果能够很好的反映最终结果的情况下,此算法会非常有效。 在这种情况下, 由于贝叶斯优化使用, 它可能会收敛到更好的配置。 [详细说明](./BohbAdvisor.md)
+与 Hyperband 类似,当计算资源有限但搜索空间相对较大时,建议使用此方法。 中间结果能够很好的反映最终结果的情况下,此算法会非常有效。 在这种情况下, 由于贝叶斯优化使用, 它可能会收敛到更好的配置。 [详细说明](./BohbAdvisor.md)
**参数**
@@ -362,4 +361,46 @@ advisor:
min_budget: 1
max_budget: 27
eta: 3
+```
+
+
+
+![](https://placehold.it/15/1589F0/000000?text=+) `GP Tuner`
+
+> 名称:**GPTuner**
+
+注意,搜索空间接受的类型包括 `choice`, `randint`, `uniform`, `quniform`, `loguniform`, `qloguniform`。
+
+**建议场景**
+
+作为序列的基于模型的全局优化(SMBO)算法,GP Tuner 使用了代理优化问题(找到采集函数的最大值)。虽然这仍然是个难题,但成本更低(从计算的角度来看),并且有通用的工具。 因此,GP Tuner 适合于函数的优化成本非常高时来使用。 GP 也可在计算资源非常有限时使用。 由于需要反转 Gram 矩阵,GP Tuner 的计算复杂度以 *O(N^3)* 的速度增长,因此不适合于需要大量 Trial 的情形。 [详细说明](./GPTuner.md)
+
+**参数**
+
+* **optimize_mode** (*'maximize' 或 'minimize', 可选项, 默认值为 'maximize'*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
+* **utility** (*'ei', 'ucb' 或 'poi', 可选, 默认值为 'ei'*) - 工具函数的类型(采集函数)。 'ei', 'ucb' 和 'poi' 分别对应 '期望的改进(Expected Improvement)', '上限置信度边界(Upper Confidence Bound)' 和 '改进概率(Probability of Improvement)'。
+* **kappa** (*float, 可选, 默认值为 5*) - 用于 'ucb' 函数。 `kappa` 越大,Tuner 的探索性越高。
+* **xi** (*float, 可选, 默认值为 0*) - 用于 'ei' 和 'poi' 函数。 `xi` 越大,Tuner 的探索性越高。
+* **nu** (*float, 可选, 默认为 2.5*) - 用于指定 Matern 核。 nu 越小,近似函数的平滑度越低。
+* **alpha** (*float, 可选, 默认值为 1e-6*) - 用于高斯过程回归器。 值越大,表示观察中的噪声水平越高。
+* **cold_start_num** (*int, 可选, 默认值为 10*) - 在高斯过程前执行随机探索的数量。 随机探索可帮助提高探索空间的广泛性。
+* **selection_num_warm_up** (*int, 可选, 默认为 1e5*) - 用于获得最大采集函数而评估的随机点数量。
+* **selection_num_starting_points** (*int, 可选, 默认为 250*) - 预热后,从随机七十点运行 L-BFGS-B 的次数。
+
+**示例**
+
+```yaml
+# config.yml
+tuner:
+ builtinTunerName: GPTuner
+ classArgs:
+ optimize_mode: maximize
+ utility: 'ei'
+ kappa: 5.0
+ xi: 0.0
+ nu: 2.5
+ alpha: 1e-6
+ cold_start_num: 10
+ selection_num_warm_up: 100000
+ selection_num_starting_points: 250
```
\ No newline at end of file
diff --git a/docs/zh_CN/CommunitySharings/AutomlPracticeSharing/NasComparison.md b/docs/zh_CN/CommunitySharings/AutomlPracticeSharing/NasComparison.md
deleted file mode 100644
index dc2524aa71..0000000000
--- a/docs/zh_CN/CommunitySharings/AutomlPracticeSharing/NasComparison.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# 神经网络结构搜索的对比
-
-*匿名作者*
-
-训练和比较 NAS(神经网络架构搜索)的模型,包括 Autokeras,DARTS,ENAS 和 NAO。
-
-源码链接如下:
-
-- Autokeras:
-
-- DARTS:
-
-- ENAS:
-
-- NAO:
-
-## 实验说明
-
-为了避免算法仅仅在 **CIFAR-10** 数据集上过拟合,还对比了包括 Fashion-MNIST, CIFAR-100, OUI-Adience-Age, ImageNet-10-1 (ImageNet的子集) 和 ImageNet-10-2 (ImageNet 的另一个子集) 在内的其它 5 个数据集。 分别从 ImageNet 中抽取 10 种不同类别标签的子集,组成 ImageNet10-1 和 ImageNet10-2 数据集 。
-
-| 数据集 | 训练数据集大小 | 类别标签数 | 数据集说明 |
-|:--------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------- |
-| [Fashion-MNIST](https://github.com/zalandoresearch/fashion-mnist) | 60,000 | 10 | T恤上衣,裤子,套头衫,连衣裙,外套,凉鞋,衬衫,运动鞋,包和踝靴。 |
-| [CIFAR-10](https://www.cs.toronto.edu/~kriz/cifar.html) | 50,000 | 10 | 飞机,汽车,鸟类,猫,鹿,狗,青蛙,马,船和卡车。 |
-| [CIFAR-100](https://www.cs.toronto.edu/~kriz/cifar.html) | 50,000 | 100 | 和 CIFAR-10 类似,但总共有 100 个类,每个类有 600 张图。 |
-| [OUI-Adience-Age](https://talhassner.github.io/home/projects/Adience/Adience-data.html) | 26,580 | 8 | 8 个年龄组类别 (0-2, 4-6, 8-13, 15-20, 25-32, 38-43, 48-53, 60-)。 |
-| [ImageNet-10-1](http://www.image-net.org/) | 9,750 | 10 | 咖啡杯、电脑键盘、餐桌、衣柜、割草机、麦克风、秋千、缝纫机、里程表和燃气泵。 |
-| [ImageNet-10-2](http://www.image-net.org/) | 9,750 | 10 | 鼓,班吉,口哨,三角钢琴,小提琴,管风琴,原声吉他,长号,长笛和萨克斯。 |
-
-没有改变源码中的 Fine-tuning 方法。 为了匹配每个任务,改变了源码中模型的输入图片大小和输出类别数目的部分。
-
-所有 NAS 方法模型搜索时间和重训练时间都是**两天**。 所有结果都是基于**三次重复实验**。 评估计算机有一块 Nvidia Tesla P100 GPU、112GB 内存和 2.60GHz CPU (Intel E5-2690)。
-
-NAO 需要太多的计算资源,因此只使用提供 Pipeline 脚本的 NAO-WS。
-
-对于 AutoKeras,使用了 0.2.18 版本的代码, 因为这是开始实验时的最新版本。
-
-## NAS 结果对比
-
-| NAS | AutoKeras (%) | ENAS (macro) (%) | ENAS (micro) (%) | DARTS (%) | NAO-WS (%) |
-| --------------- |:-------------:|:----------------:|:----------------:|:---------:|:----------:|
-| Fashion-MNIST | 91.84 | 95.44 | 95.53 | **95.74** | 95.20 |
-| CIFAR-10 | 75.78 | 95.68 | **96.16** | 94.23 | 95.64 |
-| CIFAR-100 | 43.61 | 78.13 | 78.84 | **79.74** | 75.75 |
-| OUI-Adience-Age | 63.20 | **80.34** | 78.55 | 76.83 | 72.96 |
-| ImageNet-10-1 | 61.80 | 77.07 | 79.80 | **80.48** | 77.20 |
-| ImageNet-10-2 | 37.20 | 58.13 | 56.47 | 60.53 | **61.20** |
-
-很遗憾,我们无法复现论文中所有的结果。
-
-论文中提供的最佳或平均结果:
-
-| NAS | AutoKeras(%) | ENAS (macro) (%) | ENAS (micro) (%) | DARTS (%) | NAO-WS (%) |
-| --------- | ------------ |:----------------:|:----------------:|:--------------:|:-----------:|
-| CIFAR- 10 | 88.56(best) | 96.13(best) | 97.11(best) | 97.17(average) | 96.47(best) |
-
-AutoKeras,由于其算法中的随机因素,它在所有数据集中的表现相对较差。
-
-ENAS,ENAS(macro)在 OUI-Adience-Age 数据集中表现较好,并且 ENAS(micro)在 CIFAR-10 数据集中表现较好。
-
-对于DARTS,在某些数据集上具有良好的结果,但在某些数据集中具有比较大的方差。 DARTS 三次实验中的差异在 OUI-Audience-Age 数据集上可达 5.37%(绝对值),在 ImageNet-10-1 数据集上可达4.36%(绝对值)。
-
-NAO-WS 在 ImageNet-10-2 中表现良好,但在 OUI-Adience-Age 中表现非常差。
-
-## 参考文献
-
-1. Jin, Haifeng, Qingquan Song, and Xia Hu. "Efficient neural architecture search with network morphism." *arXiv preprint arXiv:1806.10282* (2018).
-
-2. Liu, Hanxiao, Karen Simonyan, and Yiming Yang. "Darts: Differentiable architecture search." arXiv preprint arXiv:1806.09055 (2018).
-
-3. Pham, Hieu, et al. "Efficient Neural Architecture Search via Parameters Sharing." international conference on machine learning (2018): 4092-4101.
-
-4. Luo, Renqian, et al. "Neural Architecture Optimization." neural information processing systems (2018): 7827-7838.
\ No newline at end of file
diff --git a/docs/zh_CN/CommunitySharings/HpoComparision.md b/docs/zh_CN/CommunitySharings/HpoComparision.md
index 06a3f5e0da..f2fdd4e913 100644
--- a/docs/zh_CN/CommunitySharings/HpoComparision.md
+++ b/docs/zh_CN/CommunitySharings/HpoComparision.md
@@ -98,8 +98,11 @@
| HyperBand | 0.414065 | 0.415222 | 0.417628 |
| HyperBand | 0.416807 | 0.417549 | 0.418828 |
| HyperBand | 0.415550 | 0.415977 | 0.417186 |
+| GP | 0.414353 | 0.418563 | 0.420263 |
+| GP | 0.414395 | 0.418006 | 0.420431 |
+| GP | 0.412943 | 0.416566 | 0.418443 |
-Metis 算法因为其高斯计算过程的复杂度为 O(n^3) 而运行非常慢,因此仅执行了 300 次 Trial。
+此例中,所有算法都使用了默认参数。 Metis 算法因为其高斯计算过程的复杂度为 O(n^3) 而运行非常慢,因此仅执行了 300 次 Trial。
## RocksDB 的 'fillrandom' 和 'readrandom' 基准测试
diff --git a/docs/zh_CN/CommunitySharings/NniPracticeSharing/HpoComparison.md b/docs/zh_CN/CommunitySharings/NniPracticeSharing/HpoComparison.md
deleted file mode 100644
index f5d10a33f5..0000000000
--- a/docs/zh_CN/CommunitySharings/NniPracticeSharing/HpoComparison.md
+++ /dev/null
@@ -1,217 +0,0 @@
-# 超参数优化的对比
-
-*匿名作者*
-
-超参优化算法在几个问题上的对比。
-
-超参数优化算法如下:
-
-- [Random Search(随机搜索)](../Builtin_Tuner.md#Random)
-- [Grid Search(遍历搜索)](../Builtin_Tuner.md#Random)
-- [Evolution](../Builtin_Tuner.md#Evolution)
-- [Anneal(退火算法)](../Builtin_Tuner.md#Anneal)
-- [Metis](../Builtin_Tuner.md#MetisTuner)
-- [TPE](../Builtin_Tuner.md#TPE)
-- [SMAC](../Builtin_Tuner.md#SMAC)
-- [HyperBand](../Builtin_Tuner.md#Hyperband)
-- [BOHB](../Builtin_Tuner.md#BOHB)
-
-所有算法都在 NNI 本机环境下运行。
-
-环境:
-
- OS: Linux Ubuntu 16.04 LTS
- CPU: Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz 2600 MHz
- Memory: 112 GB
- NNI Version: v0.7
- NNI 模式(local|pai|remote): local
- Python 版本: 3.6
- 使用的虚拟环境: Conda
- 是否在 Docker 中运行: no
-
-
-## AutoGBDT 示例
-
-### 问题描述
-
-超参搜索上的非凸问题 [AutoGBDT](../gbdt_example.md)。
-
-### 搜索空间
-
-```json
-{
- "num_leaves": {
- "_type": "choice",
- "_value": [10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 48, 64, 96, 128]
- },
- "learning_rate": {
- "_type": "choice",
- "_value": [0.00001, 0.0001, 0.001, 0.01, 0.05, 0.1, 0.2, 0.5]
- },
- "max_depth": {
- "_type": "choice",
- "_value": [-1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 48, 64, 96, 128]
- },
- "feature_fraction": {
- "_type": "choice",
- "_value": [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2]
- },
- "bagging_fraction": {
- "_type": "choice",
- "_value": [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2]
- },
- "bagging_freq": {
- "_type": "choice",
- "_value": [1, 2, 4, 8, 10, 12, 14, 16]
- }
-}
-```
-
-总搜索空间为 1, 204, 224 次,将最大 Trial 次数设置为1000。 时间限制为 48 小时。
-
-### 结果
-
-| 算法 | 最好的损失值 | 最好的 5 次损失的平均值 | 最好的 10 次损失的平均 |
-| ------------------- | ------------ | ------------- | ------------- |
-| Random Search(随机搜索) | 0.418854 | 0.420352 | 0.421553 |
-| Random Search(随机搜索) | 0.417364 | 0.420024 | 0.420997 |
-| Random Search(随机搜索) | 0.417861 | 0.419744 | 0.420642 |
-| Grid Search(遍历搜索) | 0.498166 | 0.498166 | 0.498166 |
-| Evolution | 0.409887 | 0.409887 | 0.409887 |
-| Evolution | 0.413620 | 0.413875 | 0.414067 |
-| Evolution | 0.409887 | 0.409887 | 0.409887 |
-| Anneal(退火算法) | 0.414877 | 0.417289 | 0.418281 |
-| Anneal(退火算法) | 0.409887 | 0.409887 | 0.410118 |
-| Anneal(退火算法) | 0.413683 | 0.416949 | 0.417537 |
-| Metis | 0.416273 | 0.420411 | 0.422380 |
-| Metis | 0.420262 | 0.423175 | 0.424816 |
-| Metis | 0.421027 | 0.424172 | 0.425714 |
-| TPE | 0.414478 | 0.414478 | 0.414478 |
-| TPE | 0.415077 | 0.417986 | 0.418797 |
-| TPE | 0.415077 | 0.417009 | 0.418053 |
-| SMAC | **0.408386** | **0.408386** | **0.408386** |
-| SMAC | 0.414012 | 0.414012 | 0.414012 |
-| SMAC | **0.408386** | **0.408386** | **0.408386** |
-| BOHB | 0.410464 | 0.415319 | 0.417755 |
-| BOHB | 0.418995 | 0.420268 | 0.422604 |
-| BOHB | 0.415149 | 0.418072 | 0.418932 |
-| HyperBand | 0.414065 | 0.415222 | 0.417628 |
-| HyperBand | 0.416807 | 0.417549 | 0.418828 |
-| HyperBand | 0.415550 | 0.415977 | 0.417186 |
-
-Metis 算法因为其高斯计算过程的复杂度为 O(n^3) 而运行非常慢,因此仅执行了 300 次 Trial。
-
-## RocksDB 的 'fillrandom' 和 'readrandom' 基准测试
-
-### 问题描述
-
-[DB_Bench](https://github.com/facebook/rocksdb/wiki/Benchmarking-tools) 是用来做 [RocksDB](https://rocksdb.org/) 性能基准测试的工具。 有多个参数需要调优。
-
-`DB_Bench` 的性能与计算机配置和安装方法有关。 在 `DB_Bench` Linux 系统上运行,并将 Rock 作为共享库安装。
-
-#### 计算机配置
-
- RocksDB: version 6.1
- CPU: 6 * Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz
- CPUCache: 35840 KB
- Keys: 16 bytes each
- Values: 100 bytes each (50 bytes after compression)
- Entries: 1000000
-
-
-#### 存储性能
-
-**延迟**:每个 IO 请求都需要一些时间才能完成,这称为平均延迟。 有几个因素会影响此时间,包括网络连接质量和硬盘IO性能。
-
-**IOPS**: **每秒的 IO 操作数量**,这意味着可以在一秒钟内完成的*读取或写入操作次数*。
-
-**IO 大小**: **每个 IO 请求的大小**。 根据操作系统和需要磁盘访问的应用程序、服务,它将同时发出读取或写入一定数量数据的请求。
-
-**吞吐量(以 MB/s 为单位)= 平均 IO 大小 x IOPS **
-
-IOPS 与在线处理能力有关,我们在实验中使用 IOPS 作为指标。
-
-### 搜索空间
-
-```json
-{
- "max_background_compactions": {
- "_type": "quniform",
- "_value": [1, 256, 1]
- },
- "block_size": {
- "_type": "quniform",
- "_value": [1, 500000, 1]
- },
- "write_buffer_size": {
- "_type": "quniform",
- "_value": [1, 130000000, 1]
- },
- "max_write_buffer_number": {
- "_type": "quniform",
- "_value": [1, 128, 1]
- },
- "min_write_buffer_number_to_merge": {
- "_type": "quniform",
- "_value": [1, 32, 1]
- },
- "level0_file_num_compaction_trigger": {
- "_type": "quniform",
- "_value": [1, 256, 1]
- },
- "level0_slowdown_writes_trigger": {
- "_type": "quniform",
- "_value": [1, 1024, 1]
- },
- "level0_stop_writes_trigger": {
- "_type": "quniform",
- "_value": [1, 1024, 1]
- },
- "cache_size": {
- "_type": "quniform",
- "_value": [1, 30000000, 1]
- },
- "compaction_readahead_size": {
- "_type": "quniform",
- "_value": [1, 30000000, 1]
- },
- "new_table_reader_for_compaction_inputs": {
- "_type": "randint",
- "_value": [1]
- }
-}
-```
-
-搜索空间非常大(约10 的 40 次方),将最大 Trial 次数设置为 100 以限制资源。
-
-### 结果
-
-#### fillrandom 基准
-
-| 模型 | 最高 IOPS(重复 1 次) | 最高 IOPS(重复 2 次) | 最高 IOPS(重复 3 次) |
-| ------------ | --------------- | --------------- | --------------- |
-| Random | 449901 | 427620 | 477174 |
-| Anneal(退火算法) | 461896 | 467150 | 437528 |
-| Evolution | 436755 | 389956 | 389790 |
-| TPE | 378346 | 482316 | 468989 |
-| SMAC | 491067 | 490472 | **491136** |
-| Metis | 444920 | 457060 | 454438 |
-
-图:
-
-![](../../img/hpo_rocksdb_fillrandom.png)
-
-#### readrandom 基准
-
-| 模型 | 最高 IOPS(重复 1 次) | 最高 IOPS(重复 2 次) | 最高 IOPS(重复 3 次) |
-| ------------ | --------------- | --------------- | --------------- |
-| Random | 2276157 | 2285301 | 2275142 |
-| Anneal(退火算法) | 2286330 | 2282229 | 2284012 |
-| Evolution | 2286524 | 2283673 | 2283558 |
-| TPE | 2287366 | 2282865 | 2281891 |
-| SMAC | 2270874 | 2284904 | 2282266 |
-| Metis | **2287696** | 2283496 | 2277701 |
-
-图:
-
-![](../../img/hpo_rocksdb_readrandom.png)
\ No newline at end of file
diff --git a/docs/zh_CN/Contributing.md b/docs/zh_CN/Contributing.md
index 5e9ea69550..ca851c3351 100644
--- a/docs/zh_CN/Contributing.md
+++ b/docs/zh_CN/Contributing.md
@@ -46,7 +46,7 @@
## 文档
-文档使用了 [sphinx](http://sphinx-doc.org/) 来生成,支持 [Markdown](https://guides.github.com/features/mastering-markdown/) 和 [reStructuredText](http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html) 格式。 所有文档都在 目录下。
+文档使用了 [sphinx](http://sphinx-doc.org/) 来生成,支持 [Markdown](https://guides.github.com/features/mastering-markdown/) 和 [reStructuredText](http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html) 格式。 所有文档都在 [docs/zh_CN](docs) 目录下。
* 在提交文档改动前,请先**在本地生成文档**:`cd docs/zh_CN && make html`,然后,可以在 `docs/zh_CN/_build/html` 目录下找到所有生成的网页。 请认真分析生成日志中的**每个 WARNING**,这非常有可能是或**空连接**或其它问题。
diff --git a/docs/zh_CN/CustomizeTuner.md b/docs/zh_CN/CustomizeTuner.md
index 54028e3aa4..2bbd522cea 100644
--- a/docs/zh_CN/CustomizeTuner.md
+++ b/docs/zh_CN/CustomizeTuner.md
@@ -31,7 +31,7 @@ class CustomizedTuner(Tuner):
def __init__(self, ...):
...
- def receive_trial_result(self, parameter_id, parameters, value):
+ def receive_trial_result(self, parameter_id, parameters, value, **kwargs):
'''
接收 Trial 的最终结果。
parameter_id: int
@@ -41,7 +41,7 @@ class CustomizedTuner(Tuner):
# 实现代码
...
- def generate_parameters(self, parameter_id):
+ def generate_parameters(self, parameter_id, **kwargs):
'''
返回 Trial 的超参组合的序列化对象
parameter_id: int
@@ -51,14 +51,14 @@ class CustomizedTuner(Tuner):
...
```
-`receive_trial_result` 从输入中会接收 `parameter_id, parameters, value` 参数。 Tuner 会收到 Trial 进程发送的完全一样的 `value` 值。
+`receive_trial_result` 从输入中会接收 `parameter_id, parameters, value` 参数。 Tuner 会收到 Trial 进程发送的完全一样的 `value` 值。 如果在 Experiment 配置文件里 `multiPhase` 为 `true`, 会有一个附加的 `trial_job_id` 在 `**kwargs` 参数中返回给 `receive_trial_result` 和 `generate_parameters`。
`generate_parameters` 函数返回的 `your_parameters`,会被 NNI SDK 打包为 json。 然后 SDK 会将 json 对象解包给 Trial 进程。因此,Trial 进程会收到来自 Tuner 的完全相同的 `your_parameters`。
例如: 如下实现了 `generate_parameters`:
```python
-def generate_parameters(self, parameter_id):
+def generate_parameters(self, parameter_id, **kwargs):
'''
返回 Trial 的超参组合的序列化对象
parameter_id: int
diff --git a/docs/zh_CN/ExperimentConfig.md b/docs/zh_CN/ExperimentConfig.md
index 4c2b10c679..7fb4f38bf5 100644
--- a/docs/zh_CN/ExperimentConfig.md
+++ b/docs/zh_CN/ExperimentConfig.md
@@ -2,10 +2,10 @@
创建 Experiment 时,需要给 nnictl 命令提供配置文件的路径。 配置文件是 YAML 格式,需要保证其格式正确。 本文介绍了配置文件的内容,并提供了一些示例和模板。
-- [Experiment(实验)配置参考](#experiment-config-reference)
- - [模板](#template)
- - [说明](#configuration-spec)
- - [样例](#examples)
+- [Experiment(实验)配置参考](#Experiment-config-reference)
+ - [模板](#Template)
+ - [说明](#Configuration-spec)
+ - [样例](#Examples)
@@ -128,14 +128,17 @@ machineList:
- 说明
- **authorName** 是创建 Experiment 的作者。 待定: 增加默认值
+ **authorName** 是创建 Experiment 的作者。
+
+ 待定: 增加默认值
- **experimentName**
- 说明
- **experimentName** 是 Experiment 的名称。
- 待实现:增加默认值
+ **experimentName** 是创建的 Experiment 的名称。
+
+ 待定: 增加默认值
- **trialConcurrency**
@@ -153,11 +156,17 @@ machineList:
注意:maxExecDuration 设置的是 Experiment 执行的时间,不是 Trial 的。 如果 Experiment 达到了设置的最大时间,Experiment 不会停止,但不会再启动新的 Trial 作业。
+- **versionCheck**
+
+ - 说明
+
+ NNI 会校验 remote, pai 和 Kubernetes 模式下 NNIManager 与 trialKeeper 进程的版本。 如果需要禁用版本校验,versionCheck 应设置为 false。
+
- **debug**
- 说明
- NNI 会校验 remote, pai 和 Kubernetes 模式下 NNIManager 与 trialKeeper 进程的版本。 如果需要禁用版本校验,debug 应设置为 true。
+ 调试模式会将 versionCheck 设置为 False,并将 logLevel 设置为 'debug'。
- **maxTrialNum**
@@ -171,7 +180,7 @@ machineList:
**trainingServicePlatform** 定义运行 Experiment 的平台,包括:{**local**, **remote**, **pai**, **kubeflow**}.
- - **local** 在本机的 ubuntu 上运行 Experiment。
+ - **local** 在本机的 Ubuntu 上运行 Experiment。
- **remote** 将任务提交到远程的 Ubuntu 上,必须用 **machineList** 来指定远程的 SSH 连接信息。
@@ -259,7 +268,7 @@ machineList:
__gpuNum__ 指定了运行 Tuner 进程的 GPU 数量。 此字段的值必须是正整数。
- 注意: 只能使用一种方法来指定 Tuner,例如:设置{tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置。
+ 注意: 只能使用一种方法来指定 Tuner,例如:设置 {tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置两者。
- **includeIntermediateResults**
@@ -281,7 +290,7 @@ machineList:
- **classArgs**
- **classArgs** 指定了 Assessor 算法的参数。
+ **classArgs** 指定了 Assessor 算法的参数
- **codeDir**, **classFileName**, **className** 和 **classArgs**
@@ -495,7 +504,7 @@ machineList:
- **keyVault**
- 如果用户使用 Azure Kubernetes Service,需要设置 keyVault 来使用 Azure 存储账户的私钥。 参考: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-manage-with-cli2
+ 如果用户使用 Azure Kubernetes Service,需要设置 keyVault 来使用 Azure 存储账户的私钥。 参考: https://docs.microsoft.com/zh-cn/azure/key-vault/key-vault-manage-with-cli2
- **vaultName**
diff --git a/docs/zh_CN/FrameworkControllerMode.md b/docs/zh_CN/FrameworkControllerMode.md
index cc9775713a..3a8278a7bd 100644
--- a/docs/zh_CN/FrameworkControllerMode.md
+++ b/docs/zh_CN/FrameworkControllerMode.md
@@ -1,6 +1,6 @@
-# **在 FrameworkController 上运行 Experiment**
+# 在 FrameworkController 上运行 Experiment
-NNI 支持使用 [FrameworkController](https://github.com/Microsoft/frameworkcontroller),来运行 Experiment,称之为 frameworkcontroller 模式。 FrameworkController 构建于 Kubernetes 上,用于编排各种应用。这样,可以不用为某个深度学习框架安装 Kubeflow 的 tf-operator 的 pytorch-operator 等。 而直接用 FrameworkController 作为 NNI Experiment 的训练服务。
+=== NNI 支持使用 [FrameworkController](https://github.com/Microsoft/frameworkcontroller),来运行 Experiment,称之为 frameworkcontroller 模式。 FrameworkController 构建于 Kubernetes 上,用于编排各种应用。这样,可以不用为某个深度学习框架安装 Kubeflow 的 tf-operator 的 pytorch-operator 等。 而直接用 FrameworkController 作为 NNI Experiment 的训练服务。
## 私有部署的 Kubernetes 的准备工作
@@ -8,101 +8,108 @@ NNI 支持使用 [FrameworkController](https://github.com/Microsoft/frameworkcon
2. 配置 **kubeconfig** 文件,NNI 将使用此配置与 Kubernetes API 服务交互。 默认情况下,NNI 管理器会使用 $(HOME)/.kube/config 作为 kubeconfig 文件的路径。 也可以通过环境变量 **KUBECONFIG** 来指定其它 kubeconfig 文件。 根据[指南](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig)了解更多 kubeconfig 的信息。
3. 如果 NNI Trial 作业需要 GPU 资源,需按照[指南](https://github.com/NVIDIA/k8s-device-plugin)来配置 **Kubernetes 下的 Nvidia 插件**。
4. 准备 **NFS 服务器** 并导出通用的装载 (mount),推荐将 NFS 服务器路径映射到 `root_squash 选项`,否则可能会在 NNI 复制文件到 NFS 时出现权限问题。 参考[页面](https://linux.die.net/man/5/exports),来了解关于 root_squash 选项,或 **Azure File Storage**。
-5. 在安装 NNI 并运行 nnictl 的计算机上安装 **NFS 客户端**。 运行此命令安装 NFSv4 客户端: ```apt-get install nfs-common```
+5. 在安装 NNI 并运行 nnictl 的计算机上安装 **NFS 客户端**。 运行此命令安装 NFSv4 客户端:
+
+ ```bash
+ apt-get install nfs-common
+ ```
+
6. 参考[指南](QuickStart.md)安装 **NNI**。
## Azure 部署的 Kubernetes 的准备工作
-1. NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考[指南](https://azure.microsoft.com/en-us/services/kubernetes-service/)来设置 Azure Kubernetes Service。
-2. 安装 [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) 和 **kubectl**。 使用 `az login` 命令来设置 Azure 账户吗,并将 kubectl 客户端连接到 AKS,参考此[指南](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster)。
-3. 参考此[指南](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal)来创建 Azure 文件存储账户。 NNI 需要 Azure Storage Service 来存取代码和输出文件。
-4. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考[指南](https://docs.microsoft.com/en-us/azure/key-vault/quick-create-cli)来存储访问密钥。
+1. NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考[指南](https://azure.microsoft.com/zh-cn/services/kubernetes-service/)来设置 Azure Kubernetes Service。
+2. 安装 [Azure CLI](https://docs.microsoft.com/zh-cn/cli/azure/install-azure-cli?view=azure-cli-latest) 和 **kubectl**。 使用 `az login` 命令来设置 Azure 账户吗,并将 kubectl 客户端连接到 AKS,参考此[指南](https://docs.microsoft.com/zh-cn/azure/aks/kubernetes-walkthrough#connect-to-the-cluster)。
+3. 参考此[指南](https://docs.microsoft.com/zh-cn/azure/storage/common/storage-quickstart-create-account?tabs=portal)来创建 Azure 文件存储账户。 NNI 需要 Azure Storage Service 来存取代码和输出文件。
+4. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 [Azure Key Vault](https://azure.microsoft.com/zh-cn/services/key-vault/) 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考[指南](https://docs.microsoft.com/zh-cn/azure/key-vault/quick-create-cli)来存储访问密钥。
## 安装 FrameworkController
-参考[指南](https://github.com/Microsoft/frameworkcontroller/tree/master/example/run)来在 Kubernetes 集群中配置 Frameworkcontroller。NNI 通过 statefulset 模式来 支持 Frameworkcontroller。
+参考[指南](https://github.com/Microsoft/frameworkcontroller/tree/master/example/run)来在 Kubernetes 集群中配置 FrameworkController。NNI 通过 statefulset 模式来 支持 FrameworkController。
## 设计
-参考[Kubeflow 训练服务](./KubeflowMode.md),Frameworkcontroller 服务管道非常类似。
+参考[Kubeflow 训练服务](./KubeflowMode.md),FrameworkController 服务管道非常类似。
## 样例
-Frameworkcontroller 配置文件的格式如下:
-
- authorName: default
- experimentName: example_mnist
- trialConcurrency: 1
- maxExecDuration: 10h
- maxTrialNum: 100
- #可选项: local, remote, pai, kubeflow, frameworkcontroller
- trainingServicePlatform: frameworkcontroller
- searchSpacePath: ~/nni/examples/trials/mnist/search_space.json
- #可选项: true, false
- useAnnotation: false
- tuner:
- #可选项: TPE, Random, Anneal, Evolution
- builtinTunerName: TPE
- classArgs:
- #可选项: maximize, minimize
- optimize_mode: maximize
- assessor:
- builtinAssessorName: Medianstop
- classArgs:
- optimize_mode: maximize
- gpuNum: 0
- trial:
- codeDir: ~/nni/examples/trials/mnist
- taskRoles:
-
- - name: worker
- taskNum: 1
- command: python3 mnist.py
- gpuNum: 1
- cpuNum: 1
- memoryMB: 8192
- image: msranni/nni:latest
- frameworkAttemptCompletionPolicy:
- minFailedTaskCount: 1
- minSucceededTaskCount: 1
- frameworkcontrollerConfig:
- storage: nfs
- nfs:
- server: {your_nfs_server}
- path: {your_nfs_server_exported_path}
-
+FrameworkController 配置文件的格式如下:
+
+```yaml
+authorName: default
+experimentName: example_mnist
+trialConcurrency: 1
+maxExecDuration: 10h
+maxTrialNum: 100
+#可选项: local, remote, pai, kubeflow, frameworkcontroller
+trainingServicePlatform: frameworkcontroller
+searchSpacePath: ~/nni/examples/trials/mnist/search_space.json
+#可选项: true, false
+useAnnotation: false
+tuner:
+ #可选项: TPE, Random, Anneal, Evolution
+ builtinTunerName: TPE
+ classArgs:
+ #可选项: maximize, minimize
+ optimize_mode: maximize
+assessor:
+ builtinAssessorName: Medianstop
+ classArgs:
+ optimize_mode: maximize
+ gpuNum: 0
+trial:
+ codeDir: ~/nni/examples/trials/mnist
+ taskRoles:
+ - name: worker
+ taskNum: 1
+ command: python3 mnist.py
+ gpuNum: 1
+ cpuNum: 1
+ memoryMB: 8192
+ image: msranni/nni:latest
+ frameworkAttemptCompletionPolicy:
+ minFailedTaskCount: 1
+ minSucceededTaskCount: 1
+frameworkcontrollerConfig:
+ storage: nfs
+ nfs:
+ server: {your_nfs_server}
+ path: {your_nfs_server_exported_path}
+```
如果使用了 Azure Kubernetes Service,需要在 YAML 文件中如下设置 `frameworkcontrollerConfig`:
- frameworkcontrollerConfig:
- storage: azureStorage
- keyVault:
- vaultName: {your_vault_name}
- name: {your_secert_name}
- azureStorage:
- accountName: {your_storage_account_name}
- azureShare: {your_azure_share_name}
-
+```yaml
+frameworkcontrollerConfig:
+ storage: azureStorage
+ keyVault:
+ vaultName: {your_vault_name}
+ name: {your_secert_name}
+ azureStorage:
+ accountName: {your_storage_account_name}
+ azureShare: {your_azure_share_name}
+```
注意:如果用 FrameworkController 模式运行,需要在 YAML 文件中显式设置 `trainingServicePlatform: frameworkcontroller`。
-FrameworkController 模式的 Trial 配置格式,是 FrameworkController 官方配置的简化版。参考 [frameworkcontroller 的 tensorflow 样例](https://github.com/Microsoft/frameworkcontroller/blob/master/example/framework/scenario/tensorflow/cpu/tensorflowdistributedtrainingwithcpu.yaml) 了解详情。
+FrameworkController 模式的 Trial 配置格式,是 FrameworkController 官方配置的简化版。参考 [frameworkcontroller 的 tensorflow 样例](https://github.com/Microsoft/frameworkcontroller/blob/master/example/framework/scenario/tensorflow/cpu/tensorflowdistributedtrainingwithcpu.yaml) 了解详情。
+
frameworkcontroller 模式中的 Trial 配置使用以下主键:
* taskRoles: 配置文件中可以设置多个任务角色,每个任务角色都是在 Kubernetes 集群中的基本执行单元。
- * name: 任务角色的名字,例如,"worker", "ps", "master"。
- * taskNum: 任务角色的实例数量。
- * command: 在容器中要执行的用户命令。
- * gpuNum: 容器要使用的 GPU 数量。
- * cpuNum: 容器中要使用的 CPU 数量。
- * memoryMB: 容器的内存限制。
- * image: 用来创建 pod,并运行程序的 Docker 映像。
- * frameworkAttemptCompletionPolicy: 运行框架的策略,参考[用户手册](https://github.com/Microsoft/frameworkcontroller/blob/master/doc/user-manual.md#frameworkattemptcompletionpolicy)了解更多信息。 这些策略可以用来控制 pod,例如,如果 worker 任务停止了,但 ps 没有停止,CompletionPolicy 策略可以停止 ps。
+ * name: 任务角色的名字,例如,"worker", "ps", "master"。
+ * taskNum: 任务角色的实例数量。
+ * command: 在容器中要执行的用户命令。
+ * gpuNum: 容器要使用的 GPU 数量。
+ * cpuNum: 容器中要使用的 CPU 数量。
+ * memoryMB: 容器的内存限制。
+ * image: 用来创建 pod,并运行程序的 Docker 映像。
+ * frameworkAttemptCompletionPolicy: 运行框架的策略,参考[用户手册](https://github.com/Microsoft/frameworkcontroller/blob/master/doc/user-manual.md#frameworkattemptcompletionpolicy)了解更多信息。 这些策略可以用来控制 pod,例如,如果 worker 任务停止了,但 ps 还在运行,要通过完成策略来停止 ps。
## 如何运行示例
-准备好配置文件后,通过运行 nnictl 来启动 Experiment。 在 Frameworkcontroller 上开始 Experiment 的方法与 Kubeflow 类似,可参考[指南](./KubeflowMode.md)了解更多信息。
+准备好配置文件后,通过运行 nnictl 来启动 Experiment。 在 FrameworkController 上开始 Experiment 的方法与 Kubeflow 类似,可参考[指南](./KubeflowMode.md)了解更多信息。
## 版本校验
diff --git a/docs/zh_CN/GPTuner.md b/docs/zh_CN/GPTuner.md
new file mode 100644
index 0000000000..c73c8bef96
--- /dev/null
+++ b/docs/zh_CN/GPTuner.md
@@ -0,0 +1,9 @@
+# NNI 中的 GP Tuner
+
+## GP Tuner
+
+贝叶斯优化会构建一个能最好的描述优化目标的后验分布函数(使用高斯过程)。 随着观测值的增加,后验分布会得到改善,会在参数空间中确定哪些范围值得进一步探索,哪一些不值得。
+
+GP Tuner 被设计为通过最大化或最小化步数来找到最接近最优结果的参数组合。 GP Tuner 使用了代理优化问题(找到采集函数的最大值)。虽然这仍然是个难题,但成本更低(从计算的角度来看),并且有通用的工具。 因此,贝叶斯优化适合于采样函数的成本非常高时来使用。
+
+优化方法在 [Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf) 的第三章有详细描述。
\ No newline at end of file
diff --git a/docs/zh_CN/HowToImplementTrainingService.md b/docs/zh_CN/HowToImplementTrainingService.md
index e79c6a2246..2fe63355aa 100644
--- a/docs/zh_CN/HowToImplementTrainingService.md
+++ b/docs/zh_CN/HowToImplementTrainingService.md
@@ -8,8 +8,9 @@ TrainingService 是与平台管理、任务调度相关的模块。 TrainingServ
![](../img/NNIDesign.jpg)
-NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 当前,NNI 支持本地平台、[远程平台](RemoteMachineMode.md)、[OpenPAI 平台](PaiMode.md)、[Kubeflow 平台](KubeflowMode.md)和[FrameworkController 平台](FrameworkController.md)。
-在这个文档中,会简要介绍 TrainingService 的设计。 如果要添加新的 TrainingService,只需要继承 TrainingServcie 类并实现相应的方法,不需要理解NNIManager、Dispatcher 等其它模块的细节。
+NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 当前,NNI 支持本机,[远程平台](RemoteMachineMode.md),[OpenPAI 平台](PaiMode.md),[Kubeflow 平台](KubeflowMode.md) 以及 [FrameworkController 平台](FrameworkController.md)。
+
+本文中,会介绍 TrainingService 的简要设计。 如果要添加新的 TrainingService,只需要继承 TrainingServcie 类并实现相应的方法,不需要理解NNIManager、Dispatcher 等其它模块的细节。
## 代码文件夹结构
@@ -66,8 +67,9 @@ NNI 的文件夹结构如下:
TrainingService 父类有一些抽象方法,用户需要继承并实现这些抽象方法。
-**setClusterMetadata(key: string, value: string)**
-ClusterMetadata 是与平台数据有关的方法,例如,在远程平台上的 ClusterMetadata 定义是:
+**setClusterMetadata(key: string, value: string)**
+
+ClusterMetadata 是与平台细节相关的数据,例如,ClusterMetadata 在远程服务器的定义是:
export class RemoteMachineMeta {
public readonly ip : string;
@@ -80,7 +82,7 @@ ClusterMetadata 是与平台数据有关的方法,例如,在远程平台上
/* GPU Reservation info, the key is GPU index, the value is the job id which reserves this GPU*/
public gpuReservation : Map;
- constructor(ip : string, port : number, username : string, passwd : string,
+ constructor(ip : string, port : number, username : string, passwd : string,
sshKeyPath : string, passphrase : string) {
this.ip = ip;
this.port = port;
@@ -95,11 +97,13 @@ ClusterMetadata 是与平台数据有关的方法,例如,在远程平台上
Metadata 中包括了主机地址,用户名和其它平台相关配置。 用户需要定义自己的 Metadata 格式,并在这个方法中相应实现。 这个方法在 Experiment 启动之前调用。
-**getClusterMetadata(key: string)**
-这个方法返回 metadata 的内容,如果不需要使用这个方法,可将方法内容留空。
+**getClusterMetadata(key: string)**
+
+此函数将返回相应值的元数据值,如果不需要使用,可留空。
+
+**submitTrialJob(form: JobApplicationForm)**
-**submitTrialJob(form: JobApplicationForm)**
-SubmitTrialJob 是用来提交 Trial 任务的方法,用户需要在这个方法中生成 TrialJobDetail 类型的实例。 TrialJobDetail 定义如下:
+SubmitTrialJob 是用来提交新 Trial 任务的函数,需要生成一个 TrialJobDetail 类型的任务实例。 TrialJobDetail 定义如下:
interface TrialJobDetail {
readonly id: string;
@@ -118,37 +122,50 @@ SubmitTrialJob 是用来提交 Trial 任务的方法,用户需要在这个方
根据不同的实现,用户可能需要把 Trial 任务放入队列中,并不断地从队里中取出任务进行提交。 或者也可以直接在这个方法中完成作业提交过程。
-**cancelTrialJob(trialJobId: string, isEarlyStopped?: boolean)**
-如果这个方法被调用, Trial 应该被取消执行。 不同的平台有不同的取消作业的方式,这个方法应该根据不同平台的特点,实现相应的细节。
+**cancelTrialJob(trialJobId: string, isEarlyStopped?: boolean)**
+
+如果此函数被调用,应取消平台启动的 Trial。 不同的平台有不同的取消作业的方式,这个方法应该根据不同平台的特点,实现相应的细节。
+
+**updateTrialJob(trialJobId: string, form: JobApplicationForm)**
+
+调用此函数可更新 Trial 的任务状态,Trial 任务状态根据不同的平台来检测,并需要更新为 `RUNNING`, `SUCCEED`, `FAILED` 等状态。
+
+**getTrialJob(trialJobId: string)**
-**updateTrialJob(trialJobId: string, form: JobApplicationForm)**
-这个方法用来更新 Trial 的状态,不同平台有不同的检测作业状态的方法,并把状态更新为`RUNNING`, `SUCCEED`, `FAILED` 等。
+此函数根据 trialJobId 返回 trialJob 的实例。
-**getTrialJob(trialJobId: string)**
-这个方法用来根据 Trial Id 来返回相应的 Trial 实例。
+**listTrialJobs()**
-**listTrialJobs()**
-用户需要在这个方法中把所有的 Trial 实例放入一个列表中,并返回。
+用户需要将所有 Trial 任务详情存入列表并返回。
-**addTrialJobMetricListener(listener: (metric: TrialJobMetric) => void)**
-NNI 会启动一个 EventEmitter 来处理作业的指标数据,如果有检测到有新的数据,EventEmitter就会被触发,来执行相应的事件。 用户需要在这个方法中开始 EventEmitter。
+**addTrialJobMetricListener(listener: (metric: TrialJobMetric) => void)**
-**removeTrialJobMetricListener(listener: (metric: TrialJobMetric) => void)**
-移除 EventEmitter。
+NNI 会启动一个 EventEmitter 来处理任务的指标数据,如果有检测到有新的数据,EventEmitter就会被触发,来执行相应的事件。 用户需要在这个方法中开始 EventEmitter。
+
+**removeTrialJobMetricListener(listener: (metric: TrialJobMetric) => void)**
+
+关闭 EventEmitter。
+
+**run()**
-**run()**
Run() 函数是 TrainingService 的主循环,用户可以在这个函数中循环执行他们的代码逻辑,这个函数在实验结束前会一直循环执行。
-**cleanUp()**
-当实验结束后,这个方法用来清除实验环境。 用户需要在这个方法中实现与平台相关的清除操作。
+**cleanUp()**
+
+当实验结束后,此方法用来清除实验环境。 用户需要在这个方法中实现与平台相关的清除操作。
## TrialKeeper 工具
-NNI 提供了 TrialKeeper 工具,用来帮助维护 Trial 任务。 可以在 `nni/tools/nni_trial_tool` 文件夹中找到 TrialKeeper 的源代码。 如果想要运行在云平台上,这是维护任务的好工具。 TrialKeeper 的架构如下:
-![](../img/trialkeeper.jpg)
-当用户需要在远程云平台上运行作业,要把作业启动的命令行传入 TrailKeeper 中,并在远程云平台上启动 TriakKeeper 进程。 注意,TrialKeeper 在远程平台中使用 RESTful 服务来和 TrainingService 进行通信,用户需要在本地机器启动一个 RESTful 服务来接受 TrialKeeper 的请求。 关于 RESTful 服务的源代码可以在 `nni/src/nni_manager/training_service/common/clusterJobRestServer.ts` 文件夹中找到.
+NNI 提供了 TrialKeeper 工具,用来帮助维护 Trial 任务。 可以在 `nni/tools/nni_trial_tool` 文件夹中找到 TrialKeeper 的源代码。 如果想要运行在云平台上,这是维护任务的好工具。
+
+TrialKeeper 的架构如下:
+
+![](../img/trialkeeper.jpg)
+
+当用户需要在远程云平台上运行作业,要把作业启动的命令行传入 TrailKeeper 中,并在远程云平台上启动 TrailKeeper 进程。 注意,TrialKeeper 在远程平台中使用 RESTful 服务来和 TrainingService 进行通信,用户需要在本地机器启动一个 RESTful 服务来接受 TrialKeeper 的请求。 关于 RESTful 服务的源代码可以在 `nni/src/nni_manager/training_service/common/clusterJobRestServer.ts` 文件夹中找到.
## 参考
-更多关于如何调试的信息,请[参考这里](HowToDebug.md)。
-关于如何贡献代码,请[参考这里](Contributing.md)。
\ No newline at end of file
+有关调试的进一步信息,可参考[这里](HowToDebug.md)。
+
+如何参与贡献的指南,请参考[这里](Contributing.md)。
\ No newline at end of file
diff --git a/docs/zh_CN/Installation.md b/docs/zh_CN/Installation.md
index 7e967b51a2..b81c46acc7 100644
--- a/docs/zh_CN/Installation.md
+++ b/docs/zh_CN/Installation.md
@@ -28,12 +28,6 @@
## **在 Windows 上安装**
-在第一次使用 PowerShell 运行脚本时,需要用**使用管理员权限**运行如下命令:
-
-```powershell
-Set-ExecutionPolicy -ExecutionPolicy Unrestricted
-```
-
推荐使用 Anaconda 或 Miniconda。
* **通过 pip 命令安装 NNI**
@@ -48,12 +42,10 @@ Set-ExecutionPolicy -ExecutionPolicy Unrestricted
先决条件:`python >=3.5`, `git`, `PowerShell`
- 然后可以使用管理员或当前用户安装 NNI:
-
```bash
git clone -b v0.8 https://github.com/Microsoft/nni.git
cd nni
- powershell .\install.ps1
+ powershell -ExecutionPolicy Bypass -file install.ps1
```
## **系统需求**
diff --git a/docs/zh_CN/KubeflowMode.md b/docs/zh_CN/KubeflowMode.md
index dea7a859f2..0eee21db24 100644
--- a/docs/zh_CN/KubeflowMode.md
+++ b/docs/zh_CN/KubeflowMode.md
@@ -1,200 +1,207 @@
-# **在 Kubeflow 上运行 Experiment**
+# 在 Kubeflow 上运行 Experiment
-NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 kubeflow 模式。 在开始使用 NNI 的 kubeflow 模式前,需要有一个 kubernetes 集群,可以是私有部署的,或者是 [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/),并需要一台配置好 [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 的 Ubuntu 计算机连接到此 kubernetes 集群。 如果不熟悉 Kubernetes,可先浏览[这里](https://kubernetes.io/docs/tutorials/kubernetes-basics/)。 在 kubeflow 模式下,每个 Trial 程序会在 Kubernetes 集群中作为一个 kubeflow 作业来运行。
+===
+
+NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 kubeflow 模式。 在开始使用 NNI 的 Kubeflow 模式前,需要有一个 Kubernetes 集群,可以是私有部署的,或者是 [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/zh-cn/services/kubernetes-service/),并需要一台配置好 [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 的 Ubuntu 计算机连接到此 Kubernetes 集群。 如果不熟悉 Kubernetes,可先浏览[这里](https://kubernetes.io/docs/tutorials/kubernetes-basics/)。 在 kubeflow 模式下,每个 Trial 程序会在 Kubernetes 集群中作为一个 Kubeflow 作业来运行。
## 私有部署的 Kubernetes 的准备工作
1. 采用 Kubernetes 1.8 或更高版本。 根据[指南](https://kubernetes.io/docs/setup/)来安装 Kubernetes。
-2. 在 Kubernetes 集群中下载、安装、部署 **Kubelow**。 根据[指南](https://www.kubeflow.org/docs/started/getting-started/)安装 Kubeflow。
-3. 配置 **kubeconfig** 文件,NNI 将使用此配置与 Kubernetes API 服务交互。 默认情况下,NNI 管理器会使用 $(HOME)/.kube/config 作为 kubeconfig 文件的路径。 也可以通过环境变量 **KUBECONFIG** 来指定其它 kubeconfig 文件。 根据[指南](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig)了解更多 kubeconfig 的信息。
+2. 在 Kubernetes 集群中下载、安装、部署 **Kubeflow**。 根据[指南](https://www.kubeflow.org/docs/started/getting-started/)安装 Kubeflow。
+3. 配置 **kubeconfig** 文件,NNI 将使用此配置与 Kubernetes API 服务交互。 默认情况下,NNI 管理器会使用 $(HOME)/.kube/config 作为 kubeconfig 文件的路径。 也可以通过环境变量 **KUBECONFIG** 来指定其它 kubeconfig 文件。 根据[指南](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig)了解更多 kubeconfig 的信息。
4. 如果 NNI Trial 作业需要 GPU 资源,需按照[指南](https://github.com/NVIDIA/k8s-device-plugin)来配置 **Kubernetes 下的 Nvidia 插件**。
-5. 准备 **NFS 服务器** 并导出通用的装载 (mount),推荐将 NFS 服务器路径映射到 `root_squash 选项`,否则可能会在 NNI 复制文件到 NFS 时出现权限问题。 参考[页面](https://linux.die.net/man/5/exports),来了解关于 root_squash 选项,或 **Azure File Storage**。
-6. 在安装 NNI 并运行 nnictl 的计算机上安装 **NFS 客户端**。 运行此命令安装 NFSv4 客户端:
-
- apt-get install nfs-common
-
+5. 准备 **NFS 服务器** 并导出通用的装载 (mount),推荐将 NFS 服务器路径映射到 `root_squash 选项`,否则可能会在 NNI 复制文件到 NFS 时出现权限问题。 参考[页面](https://linux.die.net/man/5/exports),来了解关于 root_squash 选项,或 **Azure File Storage**。
+6. 在安装 NNI 并运行 nnictl 的计算机上安装 **NFS 客户端**。 运行此命令安装 NFSv4 客户端: ```apt-get install nfs-common```
7. 参考[指南](QuickStart.md)安装 **NNI**。
## Azure 部署的 Kubernetes 的准备工作
-1. NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考[指南](https://azure.microsoft.com/en-us/services/kubernetes-service/)来设置 Azure Kubernetes Service。
-2. 安装 [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) 和 **kubectl**。 使用 `az login` 命令来设置 Azure 账户吗,并将 kubectl 客户端连接到 AKS,参考此[指南](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster)。
+1. NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考[指南](https://azure.microsoft.com/zh-cn/services/kubernetes-service/)来设置 Azure Kubernetes Service。
+2. 安装 [Azure CLI](https://docs.microsoft.com/zh-cn/cli/azure/install-azure-cli?view=azure-cli-latest) 和 **kubectl**。 使用 `az login` 命令来设置 Azure 账户吗,并将 kubectl 客户端连接到 AKS,参考此[指南](https://docs.microsoft.com/zh-cn/azure/aks/kubernetes-walkthrough#connect-to-the-cluster)。
3. 在 Azure Kubernetes Service 上部署 Kubeflow,参考此[指南](https://www.kubeflow.org/docs/started/getting-started/)。
-4. 参考此[指南](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal)来创建 Azure 文件存储账户。 NNI 需要 Azure Storage Service 来存取代码和输出文件。
-5. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考[指南](https://docs.microsoft.com/en-us/azure/key-vault/quick-create-cli)来存储访问密钥。
+4. 参考此[指南](https://docs.microsoft.com/zh-cn/azure/storage/common/storage-quickstart-create-account?tabs=portal)来创建 Azure 文件存储账户。 NNI 需要 Azure Storage Service 来存取代码和输出文件。
+5. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 [Azure Key Vault](https://azure.microsoft.com/zh-cn/services/key-vault/) 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考[指南](https://docs.microsoft.com/zh-cn/azure/key-vault/quick-create-cli)来存储访问密钥。
## 设计
-![](../img/kubeflow_training_design.png) Kubeflow 训练服务会实例化一个 kubernetes 客户端来与 Kubernetes 集群的 API 服务器交互。
+![](../img/kubeflow_training_design.png) Kubeflow 训练服务会实例化一个 Kubernetes 客户端来与 Kubernetes 集群的 API 服务器交互。
-对于每个 Trial,会上传本机 codeDir 路径(在 nni_config.yml 中配置)中的所有文件,包括 parameter.cfg 这样的生成的文件到存储卷中。 当前支持两种存储卷:[nfs](https://en.wikipedia.org/wiki/Network_File_System) 和 [Azure 文件存储](https://azure.microsoft.com/en-us/services/storage/files/),需要在 NNI 的 YAML 文件中进行配置。 当文件准备好后,Kubeflow 训练服务会调用 Kubernetes 的 API 来创建 Kubeflow 作业 ([tf-operator](https://github.com/kubeflow/tf-operator) 作业或 [pytorch-operator](https://github.com/kubeflow/pytorch-operator) 作业) ,并将存储卷挂载到作业的 pod 中。 Kubeflow 作业的输出文件,例如 stdout, stderr, trial.log 以及模型文件,也会被复制回存储卷。 NNI 会在网页中显示每个 Trial 的存储卷的 URL,以便浏览日志和输出文件。
+对于每个 Trial,会上传本机 codeDir 路径(在 nni_config.yml 中配置)中的所有文件,包括 parameter.cfg 这样的生成的文件到存储卷中。 当前支持两种存储卷:[nfs](https://en.wikipedia.org/wiki/Network_File_System) 和 [Azure 文件存储](https://azure.microsoft.com/zh-cn/services/storage/files/),需要在 NNI 的 YAML 文件中进行配置。 当文件准备好后,Kubeflow 训练服务会调用 Kubernetes 的 API 来创建 Kubeflow 作业 ([tf-operator](https://github.com/kubeflow/tf-operator) 作业或 [pytorch-operator](https://github.com/kubeflow/pytorch-operator) 作业) ,并将存储卷挂载到作业的 pod 中。 Kubeflow 作业的输出文件,例如 stdout, stderr, trial.log 以及模型文件,也会被复制回存储卷。 NNI 会在网页中显示每个 Trial 的存储卷的 URL,以便浏览日志和输出文件。
## 支持的操作符(operator)
-NNI 仅支持 kubeflow 的 tf-operator 和 pytorch-operator,其它操作符未经测试。 可以在配置文件中设置操作符类型。 这是 tf-operator 的设置:
+NNI 仅支持 Kubeflow 的 tf-operator 和 pytorch-operator,其它操作符未经测试。 可以在配置文件中设置操作符类型。 这是 tf-operator 的设置:
- kubeflowConfig:
- operator: tf-operator
-
+```yaml
+kubeflowConfig:
+ operator: tf-operator
+```
这是 pytorch-operator 的设置:
- kubeflowConfig:
- operator: pytorch-operator
-
+```yaml
+kubeflowConfig:
+ operator: pytorch-operator
+```
如果要使用 tf-operator,需要在 Trial 配置中设置 `ps` 和 `worker`。如果要使用 pytorch-operator,需要在 Trial 配置中设置 `master` 和 `worker`。
## 支持的存储类型
-NNI 支持使用 NFS 和 Azure 存储来存储代码和输出文件,可在配置文件进行相应的配置。
+NNI 支持使用 NFS 和 Azure 存储来存储代码和输出文件,可在配置文件进行相应的配置。
+
NFS 存储配置如下:
- kubeflowConfig:
- storage: nfs
- nfs:
- # NFS 服务器 IP, 如 10.10.10.10
- server: {your_nfs_server_ip}
- # NFS 服务器的导出路径,如 /var/nfs/nni
- path: {your_nfs_server_export_path}
-
+```yaml
+kubeflowConfig:
+ storage: nfs
+ nfs:
+ # NFS 服务器 IP, 如 10.10.10.10
+ server: {your_nfs_server_ip}
+ # NFS 服务器的导出路径,如 /var/nfs/nni
+ path: {your_nfs_server_export_path}
+```
如果使用了 Azure 存储,需要在 YAML 文件中如下设置 `kubeflowConfig`:
- kubeflowConfig:
- storage: azureStorage
- keyVault:
- vaultName: {your_vault_name}
- name: {your_secert_name}
- azureStorage:
- accountName: {your_storage_account_name}
- azureShare: {your_azure_share_name}
-
+```yaml
+kubeflowConfig:
+ storage: azureStorage
+ keyVault:
+ vaultName: {your_vault_name}
+ name: {your_secert_name}
+ azureStorage:
+ accountName: {your_storage_account_name}
+ azureShare: {your_azure_share_name}
+```
## 运行 Experiment
以 `examples/trials/mnist` 为例。 这是一个 TensorFlow 作业,使用了 Kubeflow 的 tf-operator。 NNI 的 YAML 配置文件如下:
- authorName: default
- experimentName: example_mnist
- trialConcurrency: 2
- maxExecDuration: 1h
- maxTrialNum: 20
- #可选项: local, remote, pai, kubeflow
- trainingServicePlatform: kubeflow
- searchSpacePath: search_space.json
- #可选项: true, false
- useAnnotation: false
- tuner:
- #可选项: TPE, Random, Anneal, Evolution
- builtinTunerName: TPE
- classArgs:
- #可选项: maximize, minimize
- optimize_mode: maximize
- assessor:
- builtinAssessorName: Medianstop
- classArgs:
- optimize_mode: maximize
- gpuNum: 0
- trial:
- codeDir: .
- worker:
- replicas: 2
- command: python3 dist_mnist.py
- gpuNum: 1
- cpuNum: 1
- memoryMB: 8196
- image: msranni/nni:latest
- ps:
- replicas: 1
- command: python3 dist_mnist.py
- gpuNum: 0
- cpuNum: 1
- memoryMB: 8196
- image: msranni/nni:latest
- kubeflowConfig:
- operator: tf-operator
- apiVersion: v1alpha2
- storage: nfs
- nfs:
- # NFS 服务器 IP,如 10.10.10.10
- server: {your_nfs_server_ip}
- # NFS 服务器的导出路径,如 /var/nfs/nni
- path: {your_nfs_server_export_path}
-
+```yaml
+authorName: default
+experimentName: example_mnist
+trialConcurrency: 2
+maxExecDuration: 1h
+maxTrialNum: 20
+#可选项: local, remote, pai, kubeflow
+trainingServicePlatform: kubeflow
+searchSpacePath: search_space.json
+#可选项: true, false
+useAnnotation: false
+tuner:
+ #可选项: TPE, Random, Anneal, Evolution
+ builtinTunerName: TPE
+ classArgs:
+ #可选项: maximize, minimize
+ optimize_mode: maximize
+assessor:
+ builtinAssessorName: Medianstop
+ classArgs:
+ optimize_mode: maximize
+ gpuNum: 0
+trial:
+ codeDir: .
+ worker:
+ replicas: 2
+ command: python3 dist_mnist.py
+ gpuNum: 1
+ cpuNum: 1
+ memoryMB: 8196
+ image: msranni/nni:latest
+ ps:
+ replicas: 1
+ command: python3 dist_mnist.py
+ gpuNum: 0
+ cpuNum: 1
+ memoryMB: 8196
+ image: msranni/nni:latest
+kubeflowConfig:
+ operator: tf-operator
+ apiVersion: v1alpha2
+ storage: nfs
+ nfs:
+ # NFS 服务器 IP,如 10.10.10.10
+ server: {your_nfs_server_ip}
+ # NFS 服务器的导出路径,如 /var/nfs/nni
+ path: {your_nfs_server_export_path}
+```
注意:如果用 Kubeflow 模式运行,需要在 YAML 文件中显式设置 `trainingServicePlatform: kubeflow`。
如果要运行 Pytorch 作业,需要如下配置:
- authorName: default
- experimentName: example_mnist_distributed_pytorch
- trialConcurrency: 1
- maxExecDuration: 1h
- maxTrialNum: 10
- #可选项: local, remote, pai, kubeflow
- trainingServicePlatform: kubeflow
- searchSpacePath: search_space.json
- #可选项: true, false
- useAnnotation: false
- tuner:
- #可选项: TPE, Random, Anneal, Evolution
- builtinTunerName: TPE
- classArgs:
- #可选项: maximize, minimize
- optimize_mode: minimize
- trial:
- codeDir: .
- master:
- replicas: 1
- command: python3 dist_mnist.py
- gpuNum: 1
- cpuNum: 1
- memoryMB: 2048
- image: msranni/nni:latest
- worker:
- replicas: 1
- command: python3 dist_mnist.py
- gpuNum: 0
- cpuNum: 1
- memoryMB: 2048
- image: msranni/nni:latest
- kubeflowConfig:
- operator: pytorch-operator
- apiVersion: v1alpha2
- nfs:
- # NFS 服务器 IP,如 10.10.10.10
- server: {your_nfs_server_ip}
- # NFS 服务器导出路径,如 /var/nfs/nni
- path: {your_nfs_server_export_path}
-
+```yaml
+authorName: default
+experimentName: example_mnist_distributed_pytorch
+trialConcurrency: 1
+maxExecDuration: 1h
+maxTrialNum: 10
+#可选项: local, remote, pai, kubeflow
+trainingServicePlatform: kubeflow
+searchSpacePath: search_space.json
+#可选项: true, false
+useAnnotation: false
+tuner:
+ #可选项: TPE, Random, Anneal, Evolution
+ builtinTunerName: TPE
+ classArgs:
+ #可选项: maximize, minimize
+ optimize_mode: minimize
+trial:
+ codeDir: .
+ master:
+ replicas: 1
+ command: python3 dist_mnist.py
+ gpuNum: 1
+ cpuNum: 1
+ memoryMB: 2048
+ image: msranni/nni:latest
+ worker:
+ replicas: 1
+ command: python3 dist_mnist.py
+ gpuNum: 0
+ cpuNum: 1
+ memoryMB: 2048
+ image: msranni/nni:latest
+kubeflowConfig:
+ operator: pytorch-operator
+ apiVersion: v1alpha2
+ nfs:
+ # NFS 服务器 IP,如 10.10.10.10
+ server: {your_nfs_server_ip}
+ # NFS 服务器导出路径,如 /var/nfs/nni
+ path: {your_nfs_server_export_path}
+```
Kubeflow 模式的配置有下列主键:
* codeDir
- * 代码目录,存放训练代码和配置文件
+ * 代码目录,存放训练代码和配置文件
* worker (必填)。 此部分用于配置 TensorFlow 的 worker 角色
- * replicas
- * 必填。 需要运行的 TensorFlow woker 角色的数量,必须为正数。
- * command
- * 必填。 用来运行 Trial 作业的命令,例如: ```python mnist.py```
- * memoryMB
- * 必填。 Trial 程序的内存需求,必须为正数。
- * cpuNum
- * gpuNum
- * image
- * 必填。 在 kubeflow 模式中,Kubernetes 会安排 Trial 程序在 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/) 中执行。 此键用来指定 Trial 程序的 pod 使用的 Docker 映像。
- * [Docker Hub](https://hub.docker.com/) 上有预制的 NNI Docker 映像 [msranni/nni](https://hub.docker.com/r/msranni/nni/)。 它包含了用来启动 NNI Experiment 所依赖的所有 Python 包,Node 模块和 JavaScript。 生成此 Docker 映像的文件在[这里](https://github.com/Microsoft/nni/tree/master/deployment/docker/Dockerfile)。 可以直接使用此映像,或参考它来生成自己的映像。
- * apiVersion
- * 必填。 Kubeflow 的 API 版本。
+ * replicas
+ * 必填。 需要运行的 TensorFlow woker 角色的数量,必须为正数。
+ * command
+ * 必填。 用来运行 Trial 作业的命令,例如: ```python mnist.py```
+ * memoryMB
+ * 必填。 Trial 程序的内存需求,必须为正数。
+ * cpuNum
+ * gpuNum
+ * image
+ * 必填。 在 kubeflow 模式中,Kubernetes 会安排 Trial 程序在 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/) 中执行。 此键用来指定 Trial 程序的 pod 使用的 Docker 映像。
+ * [Docker Hub](https://hub.docker.com/) 上有预制的 NNI Docker 映像 [msranni/nni](https://hub.docker.com/r/msranni/nni/)。 它包含了用来启动 NNI Experiment 所依赖的所有 Python 包,Node 模块和 JavaScript。 生成此 Docker 映像的文件在[这里](https://github.com/Microsoft/nni/tree/master/deployment/docker/Dockerfile)。 可以直接使用此映像,或参考它来生成自己的映像。
+ * apiVersion
+ * 必填。 Kubeflow 的 API 版本。
* ps (可选)。 此部分用于配置 TensorFlow 的 parameter 服务器角色。
* master (可选)。 此部分用于配置 PyTorch 的 parameter 服务器角色。
完成并保存 NNI Experiment 配置文件后(例如可保存为:exp_kubeflow.yml),运行以下命令:
- nnictl create --config exp_kubeflow.yml
-
+```bash
+nnictl create --config exp_kubeflow.yml
+```
来在 Kubeflow 模式下启动 Experiment。 NNI 会为每个 Trial 创建 Kubeflow tfjob 或 pytorchjob,作业名称的格式为 `nni_exp_{experiment_id}_trial_{trial_id}`。 可以在 Kubernetes 面板中看到创建的 Kubeflow tfjob。
diff --git a/docs/zh_CN/LocalMode.md b/docs/zh_CN/LocalMode.md
index 2fe2160f04..4da11aab9d 100644
--- a/docs/zh_CN/LocalMode.md
+++ b/docs/zh_CN/LocalMode.md
@@ -18,22 +18,22 @@
RECEIVED_PARAMS = nni.get_next_parameter()
- 来获得 Tuner 分配的超参值。 `RECEIVED_PARAMS` 是一个对象,例如:
+ 来获得 Tuner 分配的超参值。 `RECEIVED_PARAMS` 是一个对象,例如:
{"conv_size": 2, "hidden_size": 124, "learning_rate": 0.0307, "dropout_rate": 0.2029}
1.3 返回结果
使用 API:
- `nni.report_intermediate_result(accuracy)`
+ `nni.report_intermediate_result(accuracy)`
返回 `accuracy` 的值给 Assessor。
使用 API:
- `nni.report_final_result(accuracy)`
+ `nni.report_final_result(accuracy)`
- 返回 `accuracy` 的值给 Tuner。
+ 返回 `accuracy` 的值给 Tuner。
将改动保存到 `mnist.py` 文件中。
@@ -111,10 +111,10 @@
# 可为空,即数量不限
maxTrialNum: 100
- # 可选值为: local, remote
+ # 可选值为: local, remote
trainingServicePlatform: local
- # 可选值为: true, false
+ # 可选值为: true, false
useAnnotation: true
tuner:
builtinTunerName: TPE
diff --git a/docs/zh_CN/MetisTuner.md b/docs/zh_CN/MetisTuner.md
index 153f2d8e4a..54acaf2dfe 100644
--- a/docs/zh_CN/MetisTuner.md
+++ b/docs/zh_CN/MetisTuner.md
@@ -2,7 +2,7 @@
## Metis Tuner
-大多数调参工具仅仅预测最优配置,而 [Metis](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 不再需要随机猜测!
+大多数调参工具仅仅预测最优配置,而 [Metis](https://www.microsoft.com/zh-cn/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 不再需要随机猜测!
大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。
diff --git a/docs/zh_CN/MultiPhase.md b/docs/zh_CN/MultiPhase.md
index 5ea2cba300..0c16bf2cad 100644
--- a/docs/zh_CN/MultiPhase.md
+++ b/docs/zh_CN/MultiPhase.md
@@ -39,7 +39,16 @@ Trial 代码中使用多阶段非常容易,样例如下:
### 编写使用多阶段的 Tuner:
-强烈建议首先阅读[自定义 Tuner](https://nni.readthedocs.io/en/latest/Customize_Tuner.html),再开始编写多阶段 Tuner。 与普通 Tuner 不同的是,必须继承于 `MultiPhaseTuner`(在 nni.multi_phase_tuner 中)。 `Tuner` 与 `MultiPhaseTuner` 之间最大的不同是,MultiPhaseTuner 多了一些信息,即 `trial_job_id`。 有了这个信息, Tuner 能够知道哪个 Trial 在请求配置信息, 返回的结果是哪个 Trial 的。 通过此信息,Tuner 能够灵活的为不同的 Trial 及其阶段实现功能。 例如,可在 generate_parameters 方法中使用 trial_job_id 来为特定的 Trial 任务生成超参。
+强烈建议首先阅读[自定义 Tuner](https://nni.readthedocs.io/en/latest/Customize_Tuner.html),再开始编写多阶段 Tuner。 与普通 Tuner 一样,需要从 `Tuner` 类继承。 当通过配置启用多阶段时(将 `multiPhase` 设为 true),Tuner 会通过下列方法得到一个新的参数 `trial_job_id`:
+
+ generate_parameters
+ generate_multiple_parameters
+ receive_trial_result
+ receive_customized_trial_result
+ trial_end
+
+
+有了这个信息, Tuner 能够知道哪个 Trial 在请求配置信息, 返回的结果是哪个 Trial 的。 通过此信息,Tuner 能够灵活的为不同的 Trial 及其阶段实现功能。 例如,可在 generate_parameters 方法中使用 trial_job_id 来为特定的 Trial 任务生成超参。
当然,要使用自定义的多阶段 Tuner ,也需要**在 Experiment 的 YAML 配置文件中增加`multiPhase: true`**。
diff --git a/docs/zh_CN/NetworkmorphismTuner.md b/docs/zh_CN/NetworkmorphismTuner.md
index 5a167e4575..ac9cf332eb 100644
--- a/docs/zh_CN/NetworkmorphismTuner.md
+++ b/docs/zh_CN/NetworkmorphismTuner.md
@@ -56,7 +56,7 @@ nni.report_final_result(best_acc)
```python
# 1. 使用 NNI API
-## 从 Web 界面获取最佳模型的 ID
+## 从 Web 界面获取最佳模型的 ID
## 或查看 `nni/experiments/experiment_id/log/model_path/best_model.txt' 文件
## 从 JSON 文件中读取,并使用 NNI API 来加载
@@ -64,7 +64,7 @@ with open("best-model.json") as json_file:
json_of_model = json_file.read()
model = build_graph_from_json(json_of_model)
-# 2. 使用框架的 API (与具体框架相关)
+# 2. 使用框架的 API (与具体框架相关)
## 2.1 Keras API
## 在 Trial 代码中使用 Keras API 保存
@@ -107,7 +107,7 @@ Tuner 有大量的文件、函数和类。 这里只简单介绍最重要的文
- `bayesian.py` 是用来基于已经搜索道德模型来预测未知模型指标的贝叶斯算法。
- `graph.py` 是元图数据结构。 类 Graph 表示了模型的神经网络图。
- - Graph 从模型中抽取神经网络。
+ - Graph 从模型中抽取神经网络。
- 图中的每个节点都是层之间的中间张量。
- 在图中,边表示层。
- 注意,多条边可能会表示同一层。
diff --git a/docs/zh_CN/NniOnWindows.md b/docs/zh_CN/NniOnWindows.md
index e1527d8358..2f2cd15976 100644
--- a/docs/zh_CN/NniOnWindows.md
+++ b/docs/zh_CN/NniOnWindows.md
@@ -22,16 +22,6 @@ nnictl create --config nni\examples\trials\mnist\config_windows.yml
> building 'simplejson._speedups' extension error: [WinError 3] The system cannot find the path specified
-### 从源代码安装 NNI 时,遇到 PowerShell 错误
-
-如果第一次运行 PowerShell 脚本,且没有设置过执行脚本的策略,会遇到下列错误。 需要以管理员身份运行此命令:
-
-```bash
-Set-ExecutionPolicy -ExecutionPolicy Unrestricted
-```
-
-> ...cannot be loaded because running scripts is disabled on this system.
-
### 在命令行或 PowerShell 中,Trial 因为缺少 DLL 而失败
此错误因为缺少 LIBIFCOREMD.DLL 和 LIBMMD.DLL 文件,且 SciPy 安装失败。 使用 Anaconda 或 Miniconda 和 Python(64位)可解决。
@@ -40,11 +30,7 @@ Set-ExecutionPolicy -ExecutionPolicy Unrestricted
### Web 界面上的 Trial 错误
-检查 Trial 日志文件来了解详情。 如果没有日志文件,且 NNI 是通过 pip 安装的,则需要在管理员权限下先运行以下命令:
-
-```bash
-Set-ExecutionPolicy -ExecutionPolicy Unrestricted
-```
+检查 Trial 日志文件来了解详情。
如果存在 stderr 文件,也需要查看其内容。 可能的错误情况包括:
diff --git a/docs/zh_CN/Nnictl.md b/docs/zh_CN/Nnictl.md
index 5427b8c2ce..3533a22862 100644
--- a/docs/zh_CN/Nnictl.md
+++ b/docs/zh_CN/Nnictl.md
@@ -15,6 +15,7 @@ nnictl 支持的命令:
* [nnictl trial](#trial)
* [nnictl top](#top)
* [nnictl experiment](#experiment)
+* [nnictl platform](#platform)
* [nnictl config](#config)
* [nnictl log](#log)
* [nnictl webui](#webui)
@@ -376,6 +377,24 @@ nnictl 支持的命令:
nnictl experiment list
```
+* **nnictl experiment delete**
+
+ * 说明
+
+ 删除一个或所有 Experiment,包括日志、结果、环境信息和缓存。 用于删除无用的 Experiment 结果,或节省磁盘空间。
+
+ * 用法
+
+ ```bash
+ nnictl experiment delete [OPTIONS]
+ ```
+
+ * 选项
+
+ | 参数及缩写 | 是否必需 | 默认值 | 说明 |
+ | ----- | ----- | --- | ------------- |
+ | id | False | | Experiment ID |
+
* **nnictl experiment export**
@@ -464,6 +483,31 @@ nnictl 支持的命令:
nnictl experiment import [experiment_id] -f experiment_data.json
```
+
+![](https://placehold.it/15/1589F0/000000?text=+) `管理平台的信息`
+
+* **nnictl platform clean**
+
+ * 说明
+
+ 用于清理目标平台上的磁盘空间。 所提供的 YAML 文件包括了目标平台的信息,与 NNI 配置文件的格式相同。
+
+ * 注意
+
+ 如果目标平台正在被别人使用,可能会造成他人的意外错误。
+
+ * 用法
+
+ ```bash
+ nnictl platform clean [OPTIONS]
+ ```
+
+ * 选项
+
+ | 参数及缩写 | 是否必需 | 默认值 | 说明 |
+ | -------- | ---- | --- | ----------------------------- |
+ | --config | True | | 创建 Experiment 时的 YAML 配置文件路径。 |
+
![](https://placehold.it/15/1589F0/000000?text=+) `nnictl config show`
@@ -497,12 +541,12 @@ nnictl 支持的命令:
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------- | ----- | --- | --------------------- |
- | id | False | | 需要设置的 Experiment 的 id |
+ | id | False | | 需要设置的 Experiment 的 ID |
| --head, -h | False | | 显示 stdout 开始的若干行 |
| --tail, -t | False | | 显示 stdout 结尾的若干行 |
| --path, -p | False | | 显示 stdout 文件的路径 |
- * 样例
+ * 示例
> 显示 stdout 结尾的若干行
@@ -526,7 +570,7 @@ nnictl 支持的命令:
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ---------- | ----- | --- | --------------------- |
- | id | False | | 需要设置的 Experiment 的 id |
+ | id | False | | 需要设置的 Experiment 的 ID |
| --head, -h | False | | 显示 stderr 开始的若干行 |
| --tail, -t | False | | 显示 stderr 结尾的若干行 |
| --path, -p | False | | 显示 stderr 文件的路径 |
@@ -574,23 +618,23 @@ nnictl 支持的命令:
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| -------------- | ----- | ---- | --------------------- |
- | id | False | | 需要设置的 Experiment 的 ID |
+ | 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 的路径。
+ 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 进程。
+ 停止所有 Tensorboard 进程。
* 用法
@@ -602,7 +646,7 @@ nnictl 支持的命令:
| 参数及缩写 | 是否必需 | 默认值 | 说明 |
| ----- | ----- | --- | --------------------- |
- | id | False | | 需要设置的 Experiment 的 id |
+ | id | False | | 需要设置的 Experiment 的 ID |
@@ -626,7 +670,7 @@ nnictl 支持的命令:
| ------ | ---- | --- | ------- |
| --name | True | | 要安装的包名称 |
- * 样例
+ * 示例
> 安装 SMAC Tuner 所需要的包
diff --git a/docs/zh_CN/PaiMode.md b/docs/zh_CN/PaiMode.md
index 0affe9d564..f2700bc615 100644
--- a/docs/zh_CN/PaiMode.md
+++ b/docs/zh_CN/PaiMode.md
@@ -21,7 +21,7 @@ maxExecDuration: 3h
maxTrialNum: 100
# 可选项: local, remote, pai
trainingServicePlatform: pai
-# 可选项: true, false
+# 可选项: true, false
useAnnotation: true
tuner:
builtinTunerName: TPE
@@ -86,12 +86,10 @@ paiConfig:
## 版本校验
-从 0.6 开始,NNI 支持版本校验。确保 NNIManager 与 trialKeeper 的版本一致,避免兼容性错误。
-检查策略:
+从 0.6 开始,NNI 支持版本校验。确保 NNIManager 与 trialKeeper 的版本一致,避免兼容性错误。 检查策略:
1. 0.6 以前的 NNIManager 可与任何版本的 trialKeeper 一起运行,trialKeeper 支持向后兼容。
-2. 从 NNIManager 0.6 开始,与 triakKeeper 的版本必须一致。 例如,如果 NNIManager 是 0.6 版,则 trialKeeper 也必须是 0.6 版。
-3. 注意,只有版本的前两位数字才会被检查。例如,NNIManager 0.6.1 可以和 trialKeeper 的 0.6 或 0.6.2 一起使用,但不能与 trialKeeper 的 0.5.1 或 0.7 版本一起使用。
+2. 从 NNIManager 0.6 开始,与 triakKeeper 的版本必须一致。 例如,如果 NNIManager 是 0.6 版,则 trialKeeper 也必须是 0.6 版。
+3. 注意,只有版本的前两位数字才会被检查。例如,NNIManager 0.6.1 可以和 trialKeeper 的 0.6 或 0.6.2 一起使用,但不能与 trialKeeper 的 0.5.1 或 0.7 版本一起使用。
-如果 Experiment 无法运行,而且不能确认是否是因为版本不匹配造成的,可以在 Web 界面检查是否有相关的错误消息。
-![](../img/version_check.png)
\ No newline at end of file
+如果 Experiment 无法运行,而且不能确认是否是因为版本不匹配造成的,可以在 Web 界面检查是否有相关的错误消息。 ![](../img/version_check.png)
\ No newline at end of file
diff --git a/docs/zh_CN/QuickStart.md b/docs/zh_CN/QuickStart.md
index 1cb8ff9283..731fdf5361 100644
--- a/docs/zh_CN/QuickStart.md
+++ b/docs/zh_CN/QuickStart.md
@@ -12,14 +12,6 @@
#### Windows
-如果在 Windows 上使用 NNI,首次使用 PowerShell 时,需要以管理员身份运行下列命令。
-
-```bash
- Set-ExecutionPolicy -ExecutionPolicy Unrestricted
-```
-
-然后通过 pip 安装 NNI:
-
```bash
python -m pip install --upgrade nni
```
@@ -34,7 +26,7 @@
NNI 是一个能进行自动机器学习实验的工具包。 它可以自动进行获取超参、运行 Trial,测试结果,调优超参的循环。 下面会展示如何使用 NNI 来找到最佳超参组合。
-这是**没有 NNI** 的样例代码,用 CNN 在 MNIST 数据集上训练:
+这是还**没有 NNI** 的样例代码,用 CNN 在 MNIST 数据集上训练:
```python
def run_trial(params):
@@ -64,7 +56,7 @@ NNI 用来帮助超参调优。它的流程如下:
```pseudo
输入: 搜索空间, Trial 代码, 配置文件
-输出: 一组最优的参数配置
+输出: 一组最佳的超参配置
1: For t = 0, 1, 2, ..., maxTrialNum,
2: hyperparameter = 从搜索空间选择一组参数
@@ -72,7 +64,7 @@ NNI 用来帮助超参调优。它的流程如下:
4: 返回最终结果给 NNI
5: If 时间达到上限,
6: 停止实验
-7: 返回最好的实验结果
+7: return 最好的实验结果
```
如果需要使用 NNI 来自动训练模型,找到最佳超参,需要如下三步:
@@ -137,7 +129,7 @@ useAnnotation: false
tuner:
builtinTunerName: TPE
# 运行的命令,以及 Trial 代码的路径
-trial:
+trial:
command: python3 mnist.py
codeDir: .
gpuNum: 0
@@ -205,7 +197,7 @@ You can use these commands to get more information about the experiment
启动 Experiment 后,可以在命令行界面找到如下的 `Web 界面地址`:
```text
-The Web UI urls are: [IP 地址]:8080
+Web 地址为:[IP 地址]:8080
```
在浏览器中打开 `Web 界面地址`(即:`[IP 地址]:8080`),就可以看到 Experiment 的详细信息,以及所有的 Trial 任务。 如果无法打开终端中的 Web 界面链接,可以参考 [FAQ](FAQ.md)。
diff --git a/docs/zh_CN/Release.md b/docs/zh_CN/Release.md
index 1b2b1ae34b..a9f905e9af 100644
--- a/docs/zh_CN/Release.md
+++ b/docs/zh_CN/Release.md
@@ -1,29 +1,29 @@
# 更改日志
-# 发布 0.8 - 6/4/2019
+## 发布 0.8 - 6/4/2019
-## 主要功能
+### 主要功能
* 在 Windows 上支持 NNI 的 OpenPAI 和远程模式
- * NNI 可在 Windows 上使用 OpenPAI 模式
- * NNI 可在 Windows 上使用 OpenPAI 模式
+ * NNI 可在 Windows 上使用 OpenPAI 模式
+ * NNI 可在 Windows 上使用 OpenPAI 模式
* GPU 的高级功能
- * 在本机或远程模式上,可在同一个 GPU 上运行多个 Trial。
- * 在已经运行非 NNI 任务的 GPU 上也能运行 Trial
+ * 在本机或远程模式上,可在同一个 GPU 上运行多个 Trial。
+ * 在已经运行非 NNI 任务的 GPU 上也能运行 Trial
* 支持 Kubeflow v1beta2 操作符
- * 支持 Kubeflow TFJob/PyTorchJob v1beta2
+ * 支持 Kubeflow TFJob/PyTorchJob v1beta2
* [通过 NAS 编程接口](./GeneralNasInterfaces.md)
- * 实现了 NAS 的编程接口,可通过 NNI Annotation 很容易的表达神经网络架构搜索空间
- * 提供新命令 `nnictl trial codegen` 来调试 NAS 代码生成部分
- * 提供 NAS 编程接口教程,NAS 在 MNIST 上的示例,用于 NAS 的可定制的随机 Tuner
-* 支持在恢复 Experiment 时,同时恢复 Tuner 和 Advisor 的状态
- * 在恢复 Experiment 时,Tuner 和 Advisor 会导入已完成的 Trial 的数据。
+ * 实现了 NAS 的编程接口,可通过 NNI Annotation 很容易的表达神经网络架构搜索空间
+ * 提供新命令 `nnictl trial codegen` 来调试 NAS 代码生成部分
+ * 提供 NAS 编程接口教程,NAS 在 MNIST 上的示例,用于 NAS 的可定制的随机 Tuner
+* 支持在恢复 Experiment 时,同时恢复 Tuner 和 Advisor 的状态
+* 在恢复 Experiment 时,Tuner 和 Advisor 会导入已完成的 Trial 的数据。
* Web 界面
- * 改进拷贝 Trial 参数的设计
- * 在 hyper-parameter 图中支持 'randint' 类型
- * 使用 ComponentUpdate 来避免不必要的刷新
+ * 改进拷贝 Trial 参数的设计
+ * 在 hyper-parameter 图中支持 'randint' 类型
+ * 使用 ComponentUpdate 来避免不必要的刷新
-## Bug 修复和其它更新
+### Bug 修复和其它更新
* 修复 `nnictl update` 不一致的命令行风格
* SMAC Tuner 支持导入数据
@@ -40,21 +40,21 @@
### 主要功能
* [支持在 Windows 上使用 NNI](./WindowsLocalMode.md)
- * NNI 可在 Windows 上使用本机模式
+ * NNI 可在 Windows 上使用本机模式
* [支持新的 Advisor: BOHB](./BohbAdvisor.md)
- * 支持新的 BOHB Advisor,这是一个健壮而有效的超参调优算法,囊括了贝叶斯优化和 Hyperband 的优点
+ * 支持新的 BOHB Advisor,这是一个健壮而有效的超参调优算法,囊括了贝叶斯优化和 Hyperband 的优点
* [支持通过 nnictl 来导入导出 Experiment 数据](./Nnictl.md#experiment)
- * 在 Experiment 执行完后,可生成分析结果报告
- * 支持将先前的调优数据导入到 Tuner 和 Advisor 中
+ * 在 Experiment 执行完后,可生成分析结果报告
+ * 支持将先前的调优数据导入到 Tuner 和 Advisor 中
* [可为 NNI Trial 任务指定 GPU](./ExperimentConfig.md#localConfig)
- * 通过 gpuIndices 配置来为 Trial 任务指定GPU。如果 Experiment 配置文件中有 gpuIndices,则只有指定的 GPU 会被用于 NNI 的 Trial 任务。
+ * 通过 gpuIndices 配置来为 Trial 任务指定GPU。如果 Experiment 配置文件中有 gpuIndices,则只有指定的 GPU 会被用于 NNI 的 Trial 任务。
* 改进 Web 界面
- * 在 Web 界面上使用十进制格式的指标
- * 添加多阶段训练相关的提示
- * 可将超参复制为 Python dict 格式
- * 可将提前终止的 Trial 数据传入 Tuner。
+ * 在 Web 界面上使用十进制格式的指标
+ * 添加多阶段训练相关的提示
+ * 可将超参复制为 Python dict 格式
+ * 可将提前终止的 Trial 数据传入 Tuner。
* 为 nnictl 提供更友好的错误消息
- * 为 YAML 文件格式错误提供更有意义的错误信息
+ * 为 YAML 文件格式错误提供更有意义的错误信息
### Bug 修复
@@ -66,12 +66,12 @@
### 主要功能
-* [版本检查](https://github.com/Microsoft/nni/blob/master/docs/en_US/PaiMode.md#version-check)
- * 检查 nniManager 和 trialKeeper 的版本是否一致
+* [版本检查](https://github.com/Microsoft/nni/blob/master/docs/zh_CN/PaiMode.md#version-check)
+ * 检查 nniManager 和 trialKeeper 的版本是否一致
* [提前终止的任务也可返回最终指标](https://github.com/Microsoft/nni/issues/776)
- * 如果 includeIntermediateResults 为 true,最后一个 Assessor 的中间结果会被发送给 Tuner 作为最终结果。 includeIntermediateResults 的默认值为 false。
+ * 如果 includeIntermediateResults 为 true,最后一个 Assessor 的中间结果会被发送给 Tuner 作为最终结果。 includeIntermediateResults 的默认值为 false。
* [分离 Tuner/Assessor](https://github.com/Microsoft/nni/issues/841)
- * 增加两个管道来分离 Tuner 和 Assessor 的消息
+ * 增加两个管道来分离 Tuner 和 Assessor 的消息
* 使日志集合功能可配置
* 为所有 Trial 增加中间结果的视图
@@ -110,7 +110,7 @@
### 改进
* [日志目录](https://github.com/Microsoft/nni/blob/v0.5.1/docs/zh_CN/ExperimentConfig.md)可配置。
-* 支持[不同级别的日志](https://github.com/Microsoft/nni/blob/v0.5.1/docs/zh_CN/ExperimentConfig.md),使其更易于调试。
+* 支持[不同级别的日志](https://github.com/Microsoft/nni/blob/v0.5.1/docs/zh_CN/ExperimentConfig.md),使其更易于调试。
### 文档
@@ -119,7 +119,7 @@
### Bug 修复和其它更新
* 修复了 Python 虚拟环境中安装的 Bug,并重构了安装逻辑。
-* 修复了在最新的 OpenPAI 下存取 HDFS 失败的问题。
+* 修复了在最新的 OpenPAI 下存取 HDFS 失败的问题。
* 修复了有时刷新 stdout 会造成 Experiment 崩溃的问题。
## 发布 0.5.0 - 01/14/2019
@@ -136,15 +136,15 @@
#### 改进训练平台
* [FrameworkController 训练平台](./FrameworkControllerMode.md): 支持使用在 Kubernetes 上使用 FrameworkController。
- * FrameworkController 是 Kubernetes 上非常通用的控制器(Controller),能用来运行基于各种机器学习框架的分布式作业,如 TensorFlow,Pytorch, MXNet 等。
- * NNI 为作业定义了统一而简单的规范。
- * 如何使用 FrameworkController 的 MNIST 样例。
+ * FrameworkController 是 Kubernetes 上非常通用的控制器(Controller),能用来运行基于各种机器学习框架的分布式作业,如 TensorFlow,Pytorch, MXNet 等。
+ * NNI 为作业定义了统一而简单的规范。
+ * 如何使用 FrameworkController 的 MNIST 样例。
#### 改进用户体验
* 为 OpenPAI, Kubeflow 和 FrameworkController 模式提供更好的日志支持。
- * 改进后的日志架构能将尝试的 stdout/stderr 通过 HTTP POST 方式发送给 NNI 管理器。 NNI 管理器将 Trial 的 stdout/stderr 消息存储在本地日志文件中。
- * 在 WEB 界面上显示 Trial 日志的链接。
+ * 改进后的日志架构能将尝试的 stdout/stderr 通过 HTTP POST 方式发送给 NNI 管理器。 NNI 管理器将 Trial 的 stdout/stderr 消息存储在本地日志文件中。
+ * 在 WEB 界面上显示 Trial 日志的链接。
* 支持将最终结果显示为键值对。
## 发布 0.4.1 - 12/14/2018
@@ -175,7 +175,7 @@
* 为指标数值图提供自动缩放的数轴
* 改进 Annotation,支持在搜索空间中显示实际的选项
-### 新样例
+### 新示例
* [FashionMnist](https://github.com/Microsoft/nni/tree/master/examples/trials/network_morphism),使用 network morphism Tuner
* 使用 PyTorch 的[分布式 MNIST 样例](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-distributed-pytorch)
@@ -185,42 +185,42 @@
### 主要功能
* [Kubeflow 训练服务](./KubeflowMode.md)
- * 支持 tf-operator
- * 使用 Kubeflow 的[分布式 Trial 样例](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-distributed/dist_mnist.py)
-* [网格搜索 Tuner](GridsearchTuner.md)
+ * 支持 tf-operator
+ * 使用 Kubeflow 的[分布式 Trial 样例](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-distributed/dist_mnist.py)
+* [网格搜索 Tuner](GridsearchTuner.md)
* [Hyperband Tuner](HyperbandAdvisor.md)
* 支持在 MAC 上运行 NNI Experiment
* Web 界面
- * 支持 hyperband Tuner
- * 移除 tensorboard 按钮
- * 显示 Experiment 的错误消息
- * 显示搜索空间和 Trial 配置的行号
- * 支持通过指定的 Trial id 来搜索
- * 显示 Trial 的 hdfsLogPath
- * 下载 Experiment 参数
+ * 支持 hyperband Tuner
+ * 移除 tensorboard 按钮
+ * 显示 Experiment 的错误消息
+ * 显示搜索空间和 Trial 配置的行号
+ * 支持通过指定的 Trial id 来搜索
+ * 显示 Trial 的 hdfsLogPath
+ * 下载 Experiment 参数
### 其它
* 异步调度
-* 更新 Docker 文件,增加 pytorch 库
-* 重构 'nnictl stop' 过程,发送 SIGTERM 给 NNI 管理器进程,而不是调用停止 Restful API.
+* 更新 Docker 文件,增加 pytorch 库
+* 重构 'nnictl stop' 过程,发送 SIGTERM 给 NNI 管理器进程,而不是调用停止 Restful API.
* 修复 OpenPAI 训练服务的 Bug
- * 在 NNI 管理器中为 OpenPAI 集群配置文件支持 IP 配置(nniManagerIp),来修复用户计算机没有 eth0 设备的问题。
- * codeDir 中的文件数量上限改为1000,避免用户无意中填写了 root 目录。
- * 移除 OpenPAI 作业的 stdout 日志中无用的 ‘metrics is empty’。 在新指标被记录时,仅输出有用的消息,来减少用户检查 OpenPAI Trial 输出时的困惑。
- * 在 Trial keeper 的开始增加时间戳。
+ * 在 NNI 管理器中为 OpenPAI 集群配置文件支持 IP 配置(nniManagerIp),来修复用户计算机没有 eth0 设备的问题。
+ * codeDir 中的文件数量上限改为1000,避免用户无意中填写了 root 目录。
+ * 移除 OpenPAI 作业的 stdout 日志中无用的 ‘metrics is empty’。 在新指标被记录时,仅输出有用的消息,来减少用户检查 OpenPAI Trial 输出时的困惑。
+ * 在 Trial keeper 的开始增加时间戳。
## 发布 0.3.0 - 11/2/2018
### NNICTL 的新功能和更新
* 支持同时运行多个 Experiment。
-
- 在 v0.3 以前,NNI 仅支持一次运行一个 Experiment。 此版本开始,用户可以同时运行多个 Experiment。 每个 Experiment 都需要一个唯一的端口,第一个 Experiment 会像以前版本一样使用默认端口。 需要为其它 Experiment 指定唯一端口:
-
- ```bash
- nnictl create --port 8081 --config
- ```
+
+ 在 v0.3 以前,NNI 仅支持一次运行一个 Experiment。 此版本开始,用户可以同时运行多个 Experiment。 每个 Experiment 都需要一个唯一的端口,第一个 Experiment 会像以前版本一样使用默认端口。 需要为其它 Experiment 指定唯一端口:
+
+ ```bash
+ nnictl create --port 8081 --config
+ ```
* 支持更新最大 Trial 的数量。 使用 `nnictl update --help` 了解详情。 或参考 [NNICTL](Nnictl.md) 查看完整帮助。
@@ -229,30 +229,30 @@
* 不兼容的改动:nn.get_parameters() 改为 nni.get_next_parameter。 所有以前版本的样例将无法在 v0.3 上运行,需要重新克隆 NNI 代码库获取新样例。 如果在自己的代码中使用了 NNI,也需要相应的更新。
* 新 API **nni.get_sequence_id()**。 每个 Trial 任务都会被分配一个唯一的序列数字,可通过 nni.get_sequence_id() API 来获取。
-
- ```bash
- git clone -b v0.3 https://github.com/Microsoft/nni.git
- ```
+
+ ```bash
+ git clone -b v0.3 https://github.com/Microsoft/nni.git
+ ```
* **nni.report_final_result(result)** API 对结果参数支持更多的数据类型。
-
- 可用类型:
-
- * int
- * float
- * 包含有 'default' 键值的 dict,'default' 的值必须为 int 或 float。 dict 可以包含任何其它键值对。
+
+ 可用类型:
+
+ * int
+ * float
+ * 包含有 'default' 键值的 dict,'default' 的值必须为 int 或 float。 dict 可以包含任何其它键值对。
### 支持新的 Tuner
* **Batch Tuner(批处理调参器)** 会执行所有超参组合,可被用来批量提交 Trial 任务。
-### 新样例
+### 新示例
* 公开的 NNI Docker 映像:
-
- ```bash
- docker pull msranni/nni:latest
- ```
+
+ ```bash
+ docker pull msranni/nni:latest
+ ```
* 新的 Trial 样例: [NNI Sklearn 样例](https://github.com/Microsoft/nni/tree/master/examples/trials/sklearn)
@@ -269,14 +269,14 @@
### 主要功能
* 支持 [OpenPAI](https://github.com/Microsoft/pai) (又称 pai) 训练服务 (参考[这里](./PaiMode.md)来了解如何在 OpenPAI 下提交 NNI 任务)
- * 支持 pai 模式的训练服务。 NNI Trial 可发送至 OpenPAI 集群上运行
- * NNI Trial 输出 (包括日志和模型文件) 会被复制到 OpenPAI 的 HDFS 中。
+ * 支持 pai 模式的训练服务。 NNI Trial 可发送至 OpenPAI 集群上运行
+ * NNI Trial 输出 (包括日志和模型文件) 会被复制到 OpenPAI 的 HDFS 中。
* 支持 [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) Tuner (参考[这里](SmacTuner.md),了解如何使用 SMAC Tuner)
- * [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 安装在 [conda](https://conda.io/docs/index.html) 和 Python 虚拟环境中。
* 其它
- * 更新 ga squad 样例与相关文档
- * 用户体验改善及 Bug 修复
+ * 更新 ga squad 样例与相关文档
+ * 用户体验改善及 Bug 修复
### 已知问题
@@ -289,20 +289,20 @@
### 主要功能
* 安装和部署
- * 支持 pip 和源代码安装
- * 支持本机(包括多 GPU 卡)训练和远程多机训练模式
+ * 支持 pip 和源代码安装
+ * 支持本机(包括多 GPU 卡)训练和远程多机训练模式
* Tuner ,Assessor 和 Trial
- * 支持的自动机器学习算法包括: hyperopt_tpe, hyperopt_annealing, hyperopt_random, 和 evolution_tuner。
- * 支持 Assessor(提前终止)算法包括:medianstop。
- * 提供 Python API 来自定义 Tuner 和 Assessor
- * 提供 Python API 来包装 Trial 代码,以便能在 NNI 中运行
+ * 支持的自动机器学习算法包括: hyperopt_tpe, hyperopt_annealing, hyperopt_random, 和 evolution_tuner。
+ * 支持 Assessor(提前终止)算法包括:medianstop。
+ * 提供 Python API 来自定义 Tuner 和 Assessor
+ * 提供 Python API 来包装 Trial 代码,以便能在 NNI 中运行
* Experiment
- * 提供命令行工具 'nnictl' 来管理 Experiment
- * 提供网页界面来查看并管理 Experiment
+ * 提供命令行工具 'nnictl' 来管理 Experiment
+ * 提供网页界面来查看并管理 Experiment
* 持续集成
- * 使用 Ubuntu 的 [travis-ci](https://github.com/travis-ci) 来支持持续集成
+ * 使用 Ubuntu 的 [travis-ci](https://github.com/travis-ci) 来支持持续集成
* 其它
- * 支持简单的 GPU 任务调度
+ * 支持简单的 GPU 任务调度
### 已知问题
diff --git a/docs/zh_CN/SearchSpaceSpec.md b/docs/zh_CN/SearchSpaceSpec.md
index f3d38520a3..c30fb5388c 100644
--- a/docs/zh_CN/SearchSpaceSpec.md
+++ b/docs/zh_CN/SearchSpaceSpec.md
@@ -91,6 +91,7 @@
| Grid Search Tuner | ✓ | | | ✓ | | ✓ | | | | |
| Hyperband Advisor | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Metis Tuner | ✓ | ✓ | ✓ | ✓ | | | | | | |
+| GP Tuner | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | |
已知的局限:
diff --git a/docs/zh_CN/SklearnExamples.md b/docs/zh_CN/SklearnExamples.md
index 6da44eedfb..73b102bc57 100644
--- a/docs/zh_CN/SklearnExamples.md
+++ b/docs/zh_CN/SklearnExamples.md
@@ -1,11 +1,14 @@
# NNI 中使用 scikit-learn
-[scikit-learn](https://github.com/scikit-learn/scikit-learn) (sklearn) 是数据挖掘和分析的流行工具。 它支持多种机器学习模型,如线性回归,逻辑回归,决策树,支持向量机等。 提高 scikit-learn 的效率是非常有价值的课题。
-NNI 支持多种调优算法,可以为 scikit-learn 搜索最佳的模型和超参,并支持本机、远程服务器组、云等各种环境。
+[scikit-learn](https://github.com/scikit-learn/scikit-learn) (sklearn) 是流行的数据挖掘和分析工具。 它支持多种机器学习模型,如线性回归,逻辑回归,决策树,支持向量机等。 如何更高效的使用 scikit-learn,是一个很有价值的话题。
+
+NNI 支持多种调优算法来为 scikit-learn 搜索最好的模型和超参,并支持本机、远程服务器和云服务等多种环境。
## 1. 如何运行此样例
-安装 NNI 包,并使用命令行工具 `nnictl` 来启动 Experiment。 有关安装和环境准备的内容,参考[这里](QuickStart.md)。 安装完 NNI 后,进入相应的目录,输入下列命令即可启动 Experiment:
+安装 NNI 包,并使用命令行工具 `nnictl` 来启动 Experiment。 有关安装和环境准备的内容,参考[这里](QuickStart.md)。
+
+安装完 NNI 后,进入相应的目录,输入下列命令即可启动 Experiment:
```bash
nnictl create --config ./config.yml
@@ -15,16 +18,19 @@ nnictl create --config ./config.yml
### 2.1 分类
-此样例使用了数字数据集,由 1797 张 8x8 的图片组成,每张图片都是一个手写数字。目标是将这些图片分到 10 个类别中。
-在此样例中,使用了 SVC 作为模型,并选择了一些参数,包括 `"C", "keral", "degree", "gamma" 和 "coef0"`。 关于这些参数的更多信息,可参考[这里](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html)。
+示例使用了数字数据集,它是由 1797 个 8x8 的图片组成,每个图片都是一个手写数字,目标是将图片分为 10 类。
+
+在这个示例中,使用 SVC 作为模型,并为此模型选择一些参数,包括 `"C", "keral", "degree", "gamma" 和 "coef0"`。 关于这些参数的更多信息,可参考[这里](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html)。
### 2.2 回归
-此样例使用了波士顿房价数据,数据集由波士顿各地区房价所组成,还包括了房屋的周边信息,例如:犯罪率 (CRIM),非零售业务的面积 (INDUS),房主年龄 (AGE) 等等。这些信息可用来预测波士顿的房价。 本例中,尝试了不同的回归模型,包括 `"LinearRegression", "SVR", "KNeighborsRegressor", "DecisionTreeRegressor"` 和一些参数,如 `"svr_kernel", "knr_weights"`。 关于这些模型算法和参数的更多信息,可参考[这里](https://scikit-learn.org/stable/supervised_learning.html#supervised-learning)。
+此样例使用了波士顿房价数据,数据集由波士顿各地区房价所组成,还包括了房屋的周边信息,例如:犯罪率 (CRIM),非零售业务的面积 (INDUS),房主年龄 (AGE) 等等。这些信息可用来预测波士顿的房价。
+
+本例中,尝试了不同的回归模型,包括 `"LinearRegression", "SVR", "KNeighborsRegressor", "DecisionTreeRegressor"` 和一些参数,如 `"svr_kernel", "knr_weights"`。 关于这些模型算法和参数的更多信息,可参考[这里](https://scikit-learn.org/stable/supervised_learning.html#supervised-learning)。
-## 3. 如何在 NNI 中使用 sklearn
+## 3. 如何在 NNI 中使用 scikit-learn
-只需要如下几步,即可在 sklearn 代码中使用 NNI。
+只需要如下几步,即可在 scikit-learn 代码中使用 NNI。
* **第一步**
@@ -48,8 +54,11 @@ nnictl create --config ./config.yml
在 Python 代码中,可以将这些值作为一个 dict,读取到 Python 代码中。
-* **第二步**
- 在代码最前面,加上 `import nni` 来导入 NNI 包。 首先,要使用 `nni.get_next_parameter()` 函数从 NNI 中获取参数。 然后在代码中使用这些参数。 例如,如果定义了如下的 search_space.json:
+* **第二步**
+
+ 在代码最前面,加上 `import nni` 来导入 NNI 包。
+
+ 首先,要使用 `nni.get_next_parameter()` 函数从 NNI 中获取参数。 然后在代码中使用这些参数。 例如,如果定义了如下的 search_space.json:
```json
{
@@ -75,6 +84,8 @@ nnictl create --config ./config.yml
就可以使用这些变量来编写 scikit-learn 的代码。
-* **第三步**
- 完成训练后,可以得到模型分数,如:精度,召回率,均方差等等。 NNI 会将分数发送给 Tuner 算法,并据此生成下一组参数,所以需要将分数返回给 NNI。NNI 会开始下一个 Trial 任务。
- 只需要在训练结束后调用 `nni.report_final_result(score)`,就可以将分数传给 NNI。 如果训练过程中有中间分数,也可以使用 `nni.report_intemediate_result(score)` 返回给 NNI。 注意, 可以不返回中间分数,但必须返回最终的分数。
\ No newline at end of file
+* **第三步**
+
+ 完成训练后,可以得到模型分数,如:精度,召回率,均方差等等。 NNI 需要将分数传入 Tuner 算法,并生成下一组参数,将结果回传给 NNI,并开始下一个 Trial 任务。
+
+ 在运行完 scikit-learn 代码后,只需要使用 `nni.report_final_result(score)` 来与 NNI 通信即可。 或者在每一步中都有多个分值,可使用 `nni.report_intemediate_result(score)` 来将它们回传给 NNI。 注意, 可以不返回中间分数,但必须返回最终的分数。
\ No newline at end of file
diff --git a/docs/zh_CN/Trials.md b/docs/zh_CN/Trials.md
index 475438c55a..720981c323 100644
--- a/docs/zh_CN/Trials.md
+++ b/docs/zh_CN/Trials.md
@@ -35,7 +35,9 @@
RECEIVED_PARAMS = nni.get_next_parameter()
```
-`RECEIVED_PARAMS` 是一个对象,如: `{"conv_size": 2, "hidden_size": 124, "learning_rate": 0.0307, "dropout_rate": 0.2029}`.
+`RECEIVED_PARAMS` 是一个对象,如:
+
+`{"conv_size": 2, "hidden_size": 124, "learning_rate": 0.0307, "dropout_rate": 0.2029}`.
* 定期返回指标数据(可选)
@@ -72,10 +74,10 @@ searchSpacePath: /path/to/your/search_space.json
另一种实现 Trial 的方法是使用 Python 注释来标记 NNI。 就像其它 Python Annotation,NNI 的 Annotation 和代码中的注释一样。 不需要在代码中做大量改动。 只需要添加一些 NNI Annotation,就能够:
-* 标记需要调整的参数变量
+* 标记需要调整的参数变量
* 指定变量的搜索空间范围
* 标记哪个变量需要作为中间结果范围给 `Assessor`
-* 标记哪个变量需要作为最终结果(例如:模型精度)返回给 `Tuner`。
+* 标记哪个变量需要作为最终结果(例如:模型精度)返回给 `Tuner`。
同样以 MNIST 为例,只需要两步就能用 NNI Annotation 来实现 Trial 代码。
@@ -119,7 +121,7 @@ with tf.Session() as sess:
**注意**:
* `@nni.variable` 会对它的下面一行进行修改,左边被赋值变量必须在 `@nni.variable` 的 `name` 参数中指定。
-* `@nni.report_intermediate_result`/`@nni.report_final_result` 会将数据发送给 Assessor、Tuner。
+* `@nni.report_intermediate_result`/`@nni.report_final_result` 会将数据发送给 Assessor、Tuner。
Annotation 的语法和用法等,参考 [Annotation](AnnotationSpec.md)。
@@ -138,7 +140,7 @@ Annotation 的语法和用法等,参考 [Annotation](AnnotationSpec.md)。
如果使用了 Annotation 方法,转换后的 Trial 代码会存放在另一个临时目录中。 可以在 `run.sh` 文件中的 `NNI_OUTPUT_DIR` 变量找到此目录。 文件中的第二行(即:`cd`)会切换到代码所在的实际路径。 参考 `run.sh` 文件样例:
-```shell
+```bash
#!/bin/bash
cd /tmp/user_name/nni/annotation/tmpzj0h72x6 #This is the actual directory
export NNI_PLATFORM=local
@@ -166,4 +168,4 @@ echo $? `date +%s%3N` >/home/user_name/nni/experiments/$experiment_id$/trials/$t
* [为 CIFAR 10 分类找到最佳的 optimizer](Cifar10Examples.md)
* [如何在 NNI 调优 SciKit-learn 的参数](SklearnExamples.md)
* [在阅读理解上使用自动模型架构搜索。](SquadEvolutionExamples.md)
-* [如何在 NNI 上调优 GBDT](GbdtExample.md)
+* [如何在 NNI 上调优 GBDT](GbdtExample.md)
\ No newline at end of file
diff --git a/docs/zh_CN/WebUI.md b/docs/zh_CN/WebUI.md
index c8f4dfba35..6f256253f4 100644
--- a/docs/zh_CN/WebUI.md
+++ b/docs/zh_CN/WebUI.md
@@ -8,6 +8,7 @@
* 支持下载 Experiment 结果。
* 支持导出 nni-manager 和 dispatcher 的日志文件。
* 如果有任何问题,可以点击 “Feedback” 告诉我们。
+* 如果 Experiment 包含了超过 1000 个 Trial,可改变刷新间隔。
![](../img/webui-img/over1.png)
@@ -58,6 +59,10 @@
![](../img/webui-img/addColumn.png)
+* 如果要比较某些 Trial,可选择并点击 "Compare" 来查看结果。
+
+![](../img/webui-img/compare.png)
+
* 可使用 "Copy as python" 按钮来拷贝 Trial 的参数。
![](../img/webui-img/copyParameter.png)
@@ -68,6 +73,6 @@
* Kill: 可终止正在运行的任务。
* 支持搜索某个特定的 Trial。
-* 中间结果图。
+* Intermediate Result Graph: 可看到图中默认和其它的键值。
-![](../img/intermediate.png)
\ No newline at end of file
+![](../img/webui-img/intermediate.png)
\ No newline at end of file
diff --git a/docs/zh_CN/advanced.rst b/docs/zh_CN/advanced.rst
index 4705b69d89..69bf8e0cf4 100644
--- a/docs/zh_CN/advanced.rst
+++ b/docs/zh_CN/advanced.rst
@@ -1,4 +1,4 @@
-高级功能
+高级功能
=====================
.. toctree::
diff --git a/docs/zh_CN/metisTuner.md b/docs/zh_CN/metisTuner.md
deleted file mode 100644
index 153f2d8e4a..0000000000
--- a/docs/zh_CN/metisTuner.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Metis Tuner
-
-## Metis Tuner
-
-大多数调参工具仅仅预测最优配置,而 [Metis](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 不再需要随机猜测!
-
-大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。
-
-大多数工具都有着重于在已有结果上继续发展的问题,而 Metis 的搜索策略可以在探索,发展和重新采样(可选)中进行平衡。
-
-Metis 属于基于序列的贝叶斯优化 (SMBO) 的类别,它也基于贝叶斯优化框架。 为了对超参-性能空间建模,Metis 同时使用了高斯过程(Gaussian Process)和高斯混合模型(GMM)。 由于每次 Trial 都可能有很高的时间成本,Metis 大量使用了已有模型来进行推理计算。 在每次迭代中,Metis 执行两个任务:
-
-在高斯过程空间中找到全局最优点。 这一点表示了最佳配置。
-
-它会标识出下一个超参的候选项。 这是通过对隐含信息的探索、挖掘和重采样来实现的。
-
-注意,搜索空间仅支持 `choice`, `quniform`, `uniform` 和 `randint`。
-
-更多详情,参考论文:https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/
\ No newline at end of file
diff --git a/docs/zh_CN/multiPhase.md b/docs/zh_CN/multiPhase.md
deleted file mode 100644
index 5ea2cba300..0000000000
--- a/docs/zh_CN/multiPhase.md
+++ /dev/null
@@ -1,46 +0,0 @@
-## 多阶段 Experiment
-
-通常,每个 Trial 任务只需要从 Tuner 获取一个配置(超参等),然后使用这个配置执行并报告结果,然后退出。 但有时,一个 Trial 任务可能需要从 Tuner 请求多次配置。 这是一个非常有用的功能。 例如:
-
-1. 在一些训练平台上,需要数十秒来启动一个任务。 如果一个配置只需要一分钟就能完成,那么每个 Trial 任务中只运行一个配置就会非常低效。 这种情况下,可以在同一个 Trial 任务中,完成一个配置后,再请求并完成另一个配置。 极端情况下,一个 Trial 任务可以运行无数个配置。 如果设置了并发(例如设为 6),那么就会有 6 个**长时间**运行的任务来不断尝试不同的配置。
-
-2. 有些类型的模型需要进行多阶段的训练,而下一个阶段的配置依赖于前一个阶段的结果。 例如,为了找到模型最好的量化结果,训练过程通常为:自动量化算法(例如 NNI 中的 TunerJ)选择一个位宽(如 16 位), Trial 任务获得此配置,并训练数个 epoch,并返回结果(例如精度)。 算法收到结果后,决定是将 16 位改为 8 位,还是 32 位。 此过程会重复多次。
-
-上述情况都可以通过多阶段执行的功能来支持。 为了支持这些情况,一个 Trial 任务需要能从 Tuner 请求多个配置。 Tuner 需要知道两次配置请求是否来自同一个 Trial 任务。 同时,多阶段中的 Trial 任务需要多次返回最终结果。
-
-注意, `nni.get_next_parameter()` 和 `nni.report_final_result()` 需要被依次调用:**先调用前者,然后调用后者,并按此顺序重复调用**。 如果 `nni.get_next_parameter()` 被连续多次调用,然后再调用 `nni.report_final_result()`,这会造成最终结果只会与 get_next_parameter 所返回的最后一个配置相关联。 因此,前面的 get_next_parameter 调用都没有关联的结果,这可能会造成一些多阶段算法出问题。
-
-## 创建多阶段的 Experiment
-
-### 编写使用多阶段的 Trial 代码:
-
-**1. 更新 Trial 代码**
-
-Trial 代码中使用多阶段非常容易,样例如下:
-
- ```python
- # ...
- for i in range(5):
- # 从 Tuner 中获得参数
- tuner_param = nni.get_next_parameter()
-
- # 使用参数
- # ...
- # 为上面获取的参数返回最终结果
- nni.report_final_result()
- # ...
- # ...
- ```
-
-
-**2. 修改 Experiment 配置**
-
-要启用多阶段,需要在 Experiment 的 YAML 配置文件中增加 `multiPhase: true`。 如果不添加此参数,`nni.get_next_parameter()` 会一直返回同样的配置。 对于所有内置的 Tuner 和 Advisor,不需要修改任何代码,就直接支持多阶段请求配置。
-
-### 编写使用多阶段的 Tuner:
-
-强烈建议首先阅读[自定义 Tuner](https://nni.readthedocs.io/en/latest/Customize_Tuner.html),再开始编写多阶段 Tuner。 与普通 Tuner 不同的是,必须继承于 `MultiPhaseTuner`(在 nni.multi_phase_tuner 中)。 `Tuner` 与 `MultiPhaseTuner` 之间最大的不同是,MultiPhaseTuner 多了一些信息,即 `trial_job_id`。 有了这个信息, Tuner 能够知道哪个 Trial 在请求配置信息, 返回的结果是哪个 Trial 的。 通过此信息,Tuner 能够灵活的为不同的 Trial 及其阶段实现功能。 例如,可在 generate_parameters 方法中使用 trial_job_id 来为特定的 Trial 任务生成超参。
-
-当然,要使用自定义的多阶段 Tuner ,也需要**在 Experiment 的 YAML 配置文件中增加`multiPhase: true`**。
-
-[ENAS Tuner](https://github.com/countif/enas_nni/blob/master/nni/examples/tuners/enas/nni_controller_ptb.py) 是多阶段 Tuner 的样例。
\ No newline at end of file
diff --git a/docs/zh_CN/networkmorphismTuner.md b/docs/zh_CN/networkmorphismTuner.md
deleted file mode 100644
index 5a167e4575..0000000000
--- a/docs/zh_CN/networkmorphismTuner.md
+++ /dev/null
@@ -1,245 +0,0 @@
-# Network Morphism Tuner
-
-## 1. 介绍
-
-[Autokeras](https://arxiv.org/abs/1806.10282) 是使用 Network Morphism 算法的流行的自动机器学习工具。 Autokeras 的基本理念是使用贝叶斯回归来预测神经网络架构的指标。 每次都会从父网络生成几个子网络。 然后使用朴素贝叶斯回归,从网络的历史训练结果来预测它的指标值。 接下来,会选择预测结果最好的子网络加入训练队列中。 在[此代码](https://github.com/jhfjhfj1/autokeras)的启发下,我们在 NNI 中实现了 Network Morphism 算法。
-
-要了解 Network Morphism Trial 的用法,参考 [Readme_zh_CN.md](https://github.com/Microsoft/nni/blob/master/examples/trials/network_morphism/README_zh_CN.md),了解更多细节。
-
-## 2. 用法
-
-要使用 Network Morphism,需要如下配置 `config.yml` 文件:
-
-```yaml
-tuner:
- #选择: NetworkMorphism
- builtinTunerName: NetworkMorphism
- classArgs:
- #可选项: maximize, minimize
- optimize_mode: maximize
- #当前仅支持 cv 领域
- task: cv
- #修改来支持实际图像宽度
- input_width: 32
- #修改来支持实际图像通道
- input_channel: 3
- #修改来支持实际的分类数量
- n_output_node: 10
-```
-
-在训练过程中,会生成一个 JSON 文件来表示网络图。 可调用 "json\_to\_graph()" 函数来将 JSON 文件转化为 Pytoch 或 Keras 模型。
-
-```python
-import nni
-from nni.networkmorphism_tuner.graph import json_to_graph
-
-def build_graph_from_json(ir_model_json):
- """从 JSON 生成 Pytorch 模型
- """
- graph = json_to_graph(ir_model_json)
- model = graph.produce_torch_model()
- return model
-
-# 从网络形态 Tuner 中获得下一组参数
-RCV_CONFIG = nni.get_next_parameter()
-# 调用函数来生成 Pytorch 或 Keras 模型
-net = build_graph_from_json(RCV_CONFIG)
-
-# 训练过程
-# ....
-
-# 将最终精度返回给 NNI
-nni.report_final_result(best_acc)
-```
-
-如果需要保存并**读取最佳模型**,推荐采用以下方法。
-
-```python
-# 1. 使用 NNI API
-## 从 Web 界面获取最佳模型的 ID
-## 或查看 `nni/experiments/experiment_id/log/model_path/best_model.txt' 文件
-
-## 从 JSON 文件中读取,并使用 NNI API 来加载
-with open("best-model.json") as json_file:
- json_of_model = json_file.read()
-model = build_graph_from_json(json_of_model)
-
-# 2. 使用框架的 API (与具体框架相关)
-## 2.1 Keras API
-
-## 在 Trial 代码中使用 Keras API 保存
-## 最好保存 NNI 的 ID
-model_id = nni.get_sequence_id()
-## 将模型序列化为 JSON
-model_json = model.to_json()
-with open("model-{}.json".format(model_id), "w") as json_file:
- json_file.write(model_json)
-## 将权重序列化至 HDF5
-model.save_weights("model-{}.h5".format(model_id))
-
-## 重用模型时,使用 Keras API 读取
-## 读取 JSON 文件,并创建模型
-model_id = "" # 需要重用的模型 ID
-with open('model-{}.json'.format(model_id), 'r') as json_file:
- loaded_model_json = json_file.read()
-loaded_model = model_from_json(loaded_model_json)
-## 将权重加载到新模型中
-loaded_model.load_weights("model-{}.h5".format(model_id))
-
-## 2.2 PyTorch API
-
-## 在 Trial 代码中使用 PyTorch API 保存
-model_id = nni.get_sequence_id()
-torch.save(model, "model-{}.pt".format(model_id))
-
-## 重用模型时,使用 PyTorch API 读取
-model_id = "" # 需要重用的模型 ID
-loaded_model = torch.load("model-{}.pt".format(model_id))
-
-```
-
-## 3. 文件结构
-
-Tuner 有大量的文件、函数和类。 这里只简单介绍最重要的文件:
-
-- `networkmorphism_tuner.py` 是使用 network morphism 算法的 Tuner。
-
-- `bayesian.py` 是用来基于已经搜索道德模型来预测未知模型指标的贝叶斯算法。
-
-- `graph.py` 是元图数据结构。 类 Graph 表示了模型的神经网络图。
- - Graph 从模型中抽取神经网络。
- - 图中的每个节点都是层之间的中间张量。
- - 在图中,边表示层。
- - 注意,多条边可能会表示同一层。
-
-- `graph_transformer.py` 包含了一些图转换,包括变宽,变深,或在图中增加跳跃连接。
-
-- `layers.py` 包括模型中用到的所有层。
-
-- `layer_transformer.py` 包含了一些层转换,包括变宽,变深,或在层中增加跳跃连接。
-- `nn.py` 包含生成初始化网的类。
-- `metric.py` 包括了一些指标类,如 Accuracy 和 MSE。
-- `utils.py` 是使用 Keras 在数据集 `cifar10` 上搜索神经网络的样例。
-
-## 4. 网络表示的 JSON 样例
-
-这是定义的中间表示 JSON 样例,在架构搜索过程中会从 Tuner 传到 Trial。 可调用 "json\_to\_graph()" 函数来将 JSON 文件转化为 Pytoch 或 Keras 模型。 样例如下。
-
-```json
-{
- "input_shape": [32, 32, 3],
- "weighted": false,
- "operation_history": [],
- "layer_id_to_input_node_ids": {"0": [0],"1": [1],"2": [2],"3": [3],"4": [4],"5": [5],"6": [6],"7": [7],"8": [8],"9": [9],"10": [10],"11": [11],"12": [12],"13": [13],"14": [14],"15": [15],"16": [16]
- },
- "layer_id_to_output_node_ids": {"0": [1],"1": [2],"2": [3],"3": [4],"4": [5],"5": [6],"6": [7],"7": [8],"8": [9],"9": [10],"10": [11],"11": [12],"12": [13],"13": [14],"14": [15],"15": [16],"16": [17]
- },
- "adj_list": {
- "0": [[1, 0]],
- "1": [[2, 1]],
- "2": [[3, 2]],
- "3": [[4, 3]],
- "4": [[5, 4]],
- "5": [[6, 5]],
- "6": [[7, 6]],
- "7": [[8, 7]],
- "8": [[9, 8]],
- "9": [[10, 9]],
- "10": [[11, 10]],
- "11": [[12, 11]],
- "12": [[13, 12]],
- "13": [[14, 13]],
- "14": [[15, 14]],
- "15": [[16, 15]],
- "16": [[17, 16]],
- "17": []
- },
- "reverse_adj_list": {
- "0": [],
- "1": [[0, 0]],
- "2": [[1, 1]],
- "3": [[2, 2]],
- "4": [[3, 3]],
- "5": [[4, 4]],
- "6": [[5, 5]],
- "7": [[6, 6]],
- "8": [[7, 7]],
- "9": [[8, 8]],
- "10": [[9, 9]],
- "11": [[10, 10]],
- "12": [[11, 11]],
- "13": [[12, 12]],
- "14": [[13, 13]],
- "15": [[14, 14]],
- "16": [[15, 15]],
- "17": [[16, 16]]
- },
- "node_list": [
- [0, [32, 32, 3]],
- [1, [32, 32, 3]],
- [2, [32, 32, 64]],
- [3, [32, 32, 64]],
- [4, [16, 16, 64]],
- [5, [16, 16, 64]],
- [6, [16, 16, 64]],
- [7, [16, 16, 64]],
- [8, [8, 8, 64]],
- [9, [8, 8, 64]],
- [10, [8, 8, 64]],
- [11, [8, 8, 64]],
- [12, [4, 4, 64]],
- [13, [64]],
- [14, [64]],
- [15, [64]],
- [16, [64]],
- [17, [10]]
- ],
- "layer_list": [
- [0, ["StubReLU", 0, 1]],
- [1, ["StubConv2d", 1, 2, 3, 64, 3]],
- [2, ["StubBatchNormalization2d", 2, 3, 64]],
- [3, ["StubPooling2d", 3, 4, 2, 2, 0]],
- [4, ["StubReLU", 4, 5]],
- [5, ["StubConv2d", 5, 6, 64, 64, 3]],
- [6, ["StubBatchNormalization2d", 6, 7, 64]],
- [7, ["StubPooling2d", 7, 8, 2, 2, 0]],
- [8, ["StubReLU", 8, 9]],
- [9, ["StubConv2d", 9, 10, 64, 64, 3]],
- [10, ["StubBatchNormalization2d", 10, 11, 64]],
- [11, ["StubPooling2d", 11, 12, 2, 2, 0]],
- [12, ["StubGlobalPooling2d", 12, 13]],
- [13, ["StubDropout2d", 13, 14, 0.25]],
- [14, ["StubDense", 14, 15, 64, 64]],
- [15, ["StubReLU", 15, 16]],
- [16, ["StubDense", 16, 17, 64, 10]]
- ]
- }
-```
-
-每个模型的定义都是一个 JSON 对象 (也可以认为模型是一个 [有向无环图](https://en.wikipedia.org/wiki/Directed_acyclic_graph)):
-
-- `input_shape` 是整数的列表,不包括批量维度。
-- `weighted` 表示是否权重和偏移值应该包含在此神经网络图中。
-- `operation_history` 是保存了所有网络形态操作的列表。
-- `layer_id_to_input_node_ids` 是字典实例,将层的标识映射到输入节点标识。
-- `layer_id_to_output_node_ids` 是字典实例,将层的标识映射到输出节点标识。
-- `adj_list` 是二维列表。 是图的邻接列表。 第一维是张量标识。 在每条边的列表中,元素是两元组(张量标识,层标识)。
-- `reverse_adj_list` 是与 adj_list 格式一样的反向邻接列表。
-- `node_list` 是一个整数列表。 列表的索引是标识。
-- `layer_list` 是层的列表。 列表的索引是标识。
-
- - 对于 `StubConv (StubConv1d, StubConv2d, StubConv3d)`,后面的数字表示节点的输入 id(或 id 列表),节点输出 id,input_channel,filters,kernel_size,stride 和 padding。
-
- - 对于 `StubDense`,后面的数字表示节点的输入 id (或 id 列表),节点输出 id,input_units 和 units。
-
- - 对于 `StubBatchNormalization (StubBatchNormalization1d, StubBatchNormalization2d, StubBatchNormalization3d)`,后面的数字表示节点输入 id(或 id 列表),节点输出 id,和特征数量。
-
- - 对于 `StubDropout(StubDropout1d, StubDropout2d, StubDropout3d)`,后面的数字表示节点的输入 id (或 id 列表),节点的输出 id 和 dropout 率。
-
- - 对于 `StubPooling (StubPooling1d, StubPooling2d, StubPooling3d)`后面的数字表示节点的输入 id(或 id 列表),节点输出 id,kernel_size, stride 和 padding。
-
- - 对于其它层,后面的数字表示节点的输入 id(或 id 列表)以及节点的输出 id。
-
-## 5. TODO
-
-下一步,会将 API 从固定的网络生成方法改为更多的网络操作生成方法。 此外,还会使用 ONNX 格式来替代 JSON 作为中间表示结果。
\ No newline at end of file
diff --git a/docs/zh_CN/reference.rst b/docs/zh_CN/reference.rst
index 67f41eed70..1a347a1fbd 100644
--- a/docs/zh_CN/reference.rst
+++ b/docs/zh_CN/reference.rst
@@ -3,10 +3,10 @@
.. toctree::
:maxdepth: 3
-
+
命令行
Python API
Annotation
配置
搜索空间
- 实现训练平台
\ No newline at end of file
+ 实现训练平台
diff --git a/examples/trials/NAS/README_zh_CN.md b/examples/trials/NAS/README_zh_CN.md
deleted file mode 100644
index 37a7af68a8..0000000000
--- a/examples/trials/NAS/README_zh_CN.md
+++ /dev/null
@@ -1,8 +0,0 @@
-**在 NNI 中运行神经网络架构搜索**
-===
-
-参考 [NNI-NAS-Example](https://github.com/Crysple/NNI-NAS-Example),来使用贡献者提供的 NAS 接口。
-
-谢谢可爱的贡献者!
-
-欢迎越来越多的人加入我们!
\ No newline at end of file
diff --git a/examples/trials/README_zh_CN.md b/examples/trials/README_zh_CN.md
index 005f77942d..f854066fa1 100644
--- a/examples/trials/README_zh_CN.md
+++ b/examples/trials/README_zh_CN.md
@@ -137,7 +137,7 @@ def train(args, params):
_, acc = model.evaluate(x_test, y_test, verbose=0)
-...
+...
```
**4) 发送最终结果**
@@ -160,7 +160,7 @@ def train(args, params):
_, acc = model.evaluate(x_test, y_test, verbose=0)
nni.report_final_result(acc)
-...
+...
```
这是完整的样例:
diff --git a/examples/trials/kaggle-tgs-salt/README_zh_CN.md b/examples/trials/kaggle-tgs-salt/README_zh_CN.md
index 662ec750f8..91e8f56b84 100644
--- a/examples/trials/kaggle-tgs-salt/README_zh_CN.md
+++ b/examples/trials/kaggle-tgs-salt/README_zh_CN.md
@@ -17,7 +17,7 @@
将目录 0-3 训练 100 个 epoch,对于每个目录,训练三个模型:
- python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV4
+ python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV4
python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV5 --layers 50
python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV6
@@ -26,7 +26,7 @@
使用余弦退火学习率调度器运行 300 次 epoch 来微调阶段 1 的模型:
- python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4
+ python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4
阶段 3:
diff --git a/examples/trials/network_morphism/README_zh_CN.md b/examples/trials/network_morphism/README_zh_CN.md
index 5b5382ba1f..6803fd41b9 100644
--- a/examples/trials/network_morphism/README_zh_CN.md
+++ b/examples/trials/network_morphism/README_zh_CN.md
@@ -32,7 +32,7 @@ trainingServicePlatform: local
useAnnotation: false
tuner:
#可选项: TPE, Random, Anneal, Evolution, BatchTuner, NetworkMorphism
- #SMAC (SMAC 需要通过 nnictl 安装)
+ #SMAC (SMAC 需要通过 nnictl 安装)
builtinTunerName: NetworkMorphism
classArgs:
#可选项: maximize, minimize
diff --git a/examples/tuners/ga_customer_tuner/README_zh_CN.md b/examples/tuners/ga_customer_tuner/README_zh_CN.md
index 60860f65f5..26b7395599 100644
--- a/examples/tuners/ga_customer_tuner/README_zh_CN.md
+++ b/examples/tuners/ga_customer_tuner/README_zh_CN.md
@@ -1,6 +1,6 @@
# 如何使用 ga_customer_tuner?
-此定制的 Tuner 仅适用于代码 "~/nni/examples/trials/ga_squad", 输入 `cd ~/nni/examples/trials/ga_squad` 查看 readme.md 来了解 ga_squad 的更多信息。
+此定制的 Tuner 仅适用于代码 "~/nni/examples/trials/ga_squad",输入 `cd ~/nni/examples/trials/ga_squad` 查看 readme.md 来了解 ga_squad 的更多信息。
# 配置
diff --git a/examples/tuners/weight_sharing/ga_customer_tuner/README_zh_CN.md b/examples/tuners/weight_sharing/ga_customer_tuner/README_zh_CN.md
index 60860f65f5..26b7395599 100644
--- a/examples/tuners/weight_sharing/ga_customer_tuner/README_zh_CN.md
+++ b/examples/tuners/weight_sharing/ga_customer_tuner/README_zh_CN.md
@@ -1,6 +1,6 @@
# 如何使用 ga_customer_tuner?
-此定制的 Tuner 仅适用于代码 "~/nni/examples/trials/ga_squad", 输入 `cd ~/nni/examples/trials/ga_squad` 查看 readme.md 来了解 ga_squad 的更多信息。
+此定制的 Tuner 仅适用于代码 "~/nni/examples/trials/ga_squad",输入 `cd ~/nni/examples/trials/ga_squad` 查看 readme.md 来了解 ga_squad 的更多信息。
# 配置
diff --git a/test/naive_test/README_zh_CN.md b/test/naive_test/README_zh_CN.md
index 764e837423..9fe1e1da8f 100644
--- a/test/naive_test/README_zh_CN.md
+++ b/test/naive_test/README_zh_CN.md
@@ -15,6 +15,6 @@
## 问题
-* 使用了私有 API 来检测是否 Tuner 和 Assessor 成功结束。
+* 使用了私有 API 来检测是否 Tuner 和 Assessor 成功结束。
* RESTful 服务的输出未测试。
* 远程计算机训练服务没有测试。
\ No newline at end of file
diff --git a/tools/nni_annotation/README_zh_CN.md b/tools/nni_annotation/README_zh_CN.md
index 1639d210b7..a274eafff3 100644
--- a/tools/nni_annotation/README_zh_CN.md
+++ b/tools/nni_annotation/README_zh_CN.md
@@ -27,7 +27,7 @@ NNI 中,有 4 种类型的 Annotation;
**参数**
-- **sampling_algo**: 指定搜索空间的采样算法。 可将其换成 NNI 支持的其它采样函数,函数要以 `nni.` 开头。例如,`choice` 或 `uniform`,详见 [SearchSpaceSpec](https://nni.readthedocs.io/zh/latest/SearchSpaceSpec.html)。
+- **sampling_algo**: 指定搜索空间的采样算法。 可将其换成 NNI 支持的其它采样函数,函数要以 `nni.` 开头。例如,`choice` 或 `uniform`,详见 [SearchSpaceSpec](https://nni.readthedocs.io/zh/latest/SearchSpaceSpec.html)。
- **name**: 将被赋值的变量名称。 注意,此参数应该与下面一行等号左边的值相同。
NNI 支持如下 10 种类型来表示搜索空间:
|