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

update Chinese file path as en_US (#764)

parent 7242098e
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
[![Pull Requests](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) [![Pull Requests](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen)
[![Version](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![Join the chat at https://gitter.im/Microsoft/nni](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Version](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![Join the chat at https://gitter.im/Microsoft/nni](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[简体中文](zh_CN/README.md) [简体中文](README_zh_CN.md)
NNI (Neural Network Intelligence) is a toolkit to help users run automated machine learning (AutoML) experiments. NNI (Neural Network Intelligence) is a toolkit to help users run automated machine learning (AutoML) experiments.
The tool dispatches and runs trial jobs generated by tuning algorithms to search the best neural architecture and/or hyper-parameters in different environments like local machine, remote servers and cloud. The tool dispatches and runs trial jobs generated by tuning algorithms to search the best neural architecture and/or hyper-parameters in different environments like local machine, remote servers and cloud.
......
<p align="center"> <p align="center">
<img src="https://github.com/Microsoft/nni/blob/master/docs/img/nni_logo.png" width="300"/> <img src="docs/img/nni_logo.png" width="300"/>
</p> </p>
* * * * * *
[![MIT 许可证](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/Microsoft/nni/blob/master/LICENSE) [![生成状态](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/Microsoft.nni)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=6) [![问题](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) [![Bug](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [![拉取请求](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) [![版本](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![进入 https://gitter.im/Microsoft/nni 聊天室提问](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![MIT 许可证](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE) [![生成状态](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/Microsoft.nni)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=6) [![问题](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) [![Bug](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [![拉取请求](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) [![版本](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![进入 https://gitter.im/Microsoft/nni 聊天室提问](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[English](../README.md) [English](README.md)
NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。 NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。
### **NNI [v0.5.1](https://github.com/Microsoft/nni/releases) 已发布!** ### **NNI [v0.5.1](https://github.com/Microsoft/nni/releases) 已发布!**
<p align="center"> <p align="center">
<a href="#nni-v05-has-been-released"><img src="https://github.com/Microsoft/nni/blob/master/docs/img/overview.svg" /></a> <a href="#nni-v05-has-been-released"><img src="docs/img/overview.svg" /></a>
</p> </p>
<table> <table>
...@@ -21,15 +21,15 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -21,15 +21,15 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
<tr align="center" valign="bottom"> <tr align="center" valign="bottom">
<td> <td>
<b>支持的框架</b> <b>支持的框架</b>
<img src="https://github.com/Microsoft/nni/blob/master/docs/img/bar.png"/> <img src="docs/img/bar.png"/>
</td> </td>
<td> <td>
<b>调优算法</b> <b>调优算法</b>
<img src="https://github.com/Microsoft/nni/blob/master/docs/img/bar.png"/> <img src="docs/img/bar.png"/>
</td> </td>
<td> <td>
<b>训练服务</b> <b>训练服务</b>
<img src="https://github.com/Microsoft/nni/blob/master/docs/img/bar.png"/> <img src="docs/img/bar.png"/>
</td> </td>
</tr> </tr>
<tr/> <tr/>
...@@ -47,33 +47,33 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -47,33 +47,33 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
</ul> </ul>
</td> </td>
<td> <td>
<a href="docs/Builtin_Tuner.md">Tuner(调参器)</a> <a href="docs/zh_CN/Builtin_Tuner.md">Tuner(调参器)</a>
<ul> <ul>
<li><a href="docs/Builtin_Tuner.md#TPE">TPE</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#TPE">TPE</a></li>
<li><a href="docs/Builtin_Tuner.md#Random">Random Search(随机搜索)</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#Random">Random Search(随机搜索)</a></li>
<li><a href="docs/Builtin_Tuner.md#Anneal">Anneal(退火算法)</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#Anneal">Anneal(退火算法)</a></li>
<li><a href="docs/Builtin_Tuner.md#Evolution">Naive Evolution(进化算法)</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#Evolution">Naive Evolution(进化算法)</a></li>
<li><a href="docs/Builtin_Tuner.md#SMAC">SMAC</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#SMAC">SMAC</a></li>
<li><a href="docs/Builtin_Tuner.md#Batch">Batch(批处理)</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#Batch">Batch(批处理)</a></li>
<li><a href="docs/Builtin_Tuner.md#Grid">Grid Search(遍历搜索)</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#Grid">Grid Search(遍历搜索)</a></li>
<li><a href="docs/Builtin_Tuner.md#Hyperband">Hyperband</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#Hyperband">Hyperband</a></li>
<li><a href="docs/Builtin_Tuner.md#NetworkMorphism">Network Morphism</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#NetworkMorphism">Network Morphism</a></li>
<li><a href="examples/tuners/enas_nni/README.md">ENAS</a></li> <li><a href="examples/tuners/enas_nni/README_zh_CN.md">ENAS</a></li>
<li><a href="docs/Builtin_Tuner.md#NetworkMorphism#MetisTuner">Metis Tuner</a></li> <li><a href="docs/zh_CN/Builtin_Tuner.md#NetworkMorphism#MetisTuner">Metis Tuner</a></li>
</ul> </ul>
<a href="docs/Builtin_Assessors.md#assessor">Assessor(评估器)</a> <a href="docs/zh_CN/Builtin_Assessors.md#assessor">Assessor(评估器)</a>
<ul> <ul>
<li><a href="docs/Builtin_Assessors.md#Medianstop">Median Stop</a></li> <li><a href="docs/zh_CN/Builtin_Assessors.md#Medianstop">Median Stop</a></li>
<li><a href="docs/Builtin_Assessors.md#Curvefitting">Curve Fitting</a></li> <li><a href="docs/zh_CN/Builtin_Assessors.md#Curvefitting">Curve Fitting</a></li>
</ul> </ul>
</td> </td>
<td> <td>
<ul> <ul>
<li><a href="docs/tutorial_1_CR_exp_local_api.md">本地计算机</a></li> <li><a href="docs/zh_CN/tutorial_1_CR_exp_local_api.md">本地计算机</a></li>
<li><a href="docs/RemoteMachineMode.md">远程计算机</a></li> <li><a href="docs/zh_CN/RemoteMachineMode.md">远程计算机</a></li>
<li><a href="docs/PAIMode.md">OpenPAI</a></li> <li><a href="docs/zh_CN/PAIMode.md">OpenPAI</a></li>
<li><a href="docs/KubeflowMode.md">Kubeflow</a></li> <li><a href="docs/zh_CN/KubeflowMode.md">Kubeflow</a></li>
<li><a href="docs/FrameworkControllerMode.md">基于 Kubernetes(AKS 等等)的 FrameworkController</a></li> <li><a href="docs/zh_CN/FrameworkControllerMode.md">基于 Kubernetes(AKS 等等)的 FrameworkController</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>
...@@ -108,7 +108,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -108,7 +108,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
注意: 注意:
* 如果需要将 NNI 安装到自己的 home 目录中,可使用 `--user`,这样也不需要任何特殊权限。 * 如果需要将 NNI 安装到自己的 home 目录中,可使用 `--user`,这样也不需要任何特殊权限。
* 如果遇到如`Segmentation fault` 这样的任何错误请参考[常见问题](docs/FAQ.md) * 如果遇到如`Segmentation fault` 这样的任何错误请参考[常见问题](docs/zh_CN/FAQ.md)
**通过源代码安装** **通过源代码安装**
...@@ -121,7 +121,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -121,7 +121,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
source install.sh source install.sh
``` ```
参考[安装 NNI](docs/Installation.md) 了解系统需求。 参考[安装 NNI](docs/zh_CN/Installation.md) 了解系统需求。
**验证安装** **验证安装**
...@@ -168,7 +168,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -168,7 +168,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
----------------------------------------------------------------------- -----------------------------------------------------------------------
* 在浏览器中打开 `Web UI url`,可看到下图的 Experiment 详细信息,以及所有的 Trial 任务。 查看[这里的](docs/WebUI.md)更多页面示例。 * 在浏览器中打开 `Web UI url`,可看到下图的 Experiment 详细信息,以及所有的 Trial 任务。 查看[这里的](docs/zh_CN/WebUI.md)更多页面示例。
<table style="border: none"> <table style="border: none">
<th><img src="./docs/img/webui_overview_page.png" alt="drawing" width="395"/></th> <th><img src="./docs/img/webui_overview_page.png" alt="drawing" width="395"/></th>
...@@ -177,31 +177,31 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -177,31 +177,31 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
## **文档** ## **文档**
* [NNI 概述](docs/Overview.md) * [NNI 概述](docs/zh_CN/Overview.md)
* [快速入门](docs/QuickStart.md) * [快速入门](docs/zh_CN/QuickStart.md)
## **入门** ## **入门**
* [安装 NNI](docs/Installation.md) * [安装 NNI](docs/zh_CN/Installation.md)
* [使用命令行工具 nnictl](docs/NNICTLDOC.md) * [使用命令行工具 nnictl](docs/zh_CN/NNICTLDOC.md)
* [使用 NNIBoard](docs/WebUI.md) * [使用 NNIBoard](docs/zh_CN/WebUI.md)
* [如何定义搜索空间](docs/SearchSpaceSpec.md) * [如何定义搜索空间](docs/zh_CN/SearchSpaceSpec.md)
* [如何定义一次 Trial](docs/Trials.md) * [如何定义一次 Trial](docs/zh_CN/Trials.md)
* [如何选择 Tuner、搜索算法](docs/Builtin_Tuner.md) * [如何选择 Tuner、搜索算法](docs/zh_CN/Builtin_Tuner.md)
* [配置 Experiment](docs/ExperimentConfig.md) * [配置 Experiment](docs/zh_CN/ExperimentConfig.md)
* [如何使用 Annotation](docs/Trials.md#nni-python-annotation) * [如何使用 Annotation](docs/zh_CN/Trials.md#nni-python-annotation)
## **教程** ## **教程**
* [在本机运行 Experiment (支持多 GPU 卡)](docs/tutorial_1_CR_exp_local_api.md) * [在本机运行 Experiment (支持多 GPU 卡)](docs/zh_CN/tutorial_1_CR_exp_local_api.md)
* [在多机上运行 Experiment](docs/RemoteMachineMode.md) * [在多机上运行 Experiment](docs/zh_CN/RemoteMachineMode.md)
* [在 OpenPAI 上运行 Experiment](docs/PAIMode.md) * [在 OpenPAI 上运行 Experiment](docs/zh_CN/PAIMode.md)
* [在 Kubeflow 上运行 Experiment。](docs/KubeflowMode.md) * [在 Kubeflow 上运行 Experiment。](docs/zh_CN/KubeflowMode.md)
* [尝试不同的 Tuner](docs/tuners.rst) * [尝试不同的 Tuner](docs/zh_CN/tuners.rst)
* [尝试不同的 Assessor](docs/assessors.rst) * [尝试不同的 Assessor](docs/zh_CN/assessors.rst)
* [实现自定义 Tuner](docs/Customize_Tuner.md) * [实现自定义 Tuner](docs/zh_CN/Customize_Tuner.md)
* [实现自定义 Assessor](docs/Customize_Assessor.md) * [实现自定义 Assessor](docs/zh_CN/Customize_Assessor.md)
* [使用进化算法为阅读理解任务找到好模型](examples/trials/ga_squad/README.md) * [使用进化算法为阅读理解任务找到好模型](examples/trials/ga_squad/README_zh_CN.md)
## **贡献** ## **贡献**
...@@ -209,12 +209,12 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -209,12 +209,12 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
推荐新贡献者从标有 **good first issue** 的简单需求开始。 推荐新贡献者从标有 **good first issue** 的简单需求开始。
如要安装 NNI 开发环境,参考: [配置 NNI 开发环境](docs/SetupNNIDeveloperEnvironment.md) 如要安装 NNI 开发环境,参考: [配置 NNI 开发环境](docs/zh_CN/SetupNNIDeveloperEnvironment.md)
在写代码之前,请查看并熟悉 NNI 代码贡献指南:[贡献](docs/CONTRIBUTING.md) 在写代码之前,请查看并熟悉 NNI 代码贡献指南:[贡献](docs/zh_CN/CONTRIBUTING.md)
我们正在编写 [如何调试](docs/HowToDebug.md) 的页面,欢迎提交建议和问题。 我们正在编写[如何调试](docs/zh_CN/HowToDebug.md) 的页面,欢迎提交建议和问题。
## **许可协议** ## **许可协议**
代码库遵循 [MIT 许可协议](https://github.com/Microsoft/nni/blob/master/LICENSE) 代码库遵循 [MIT 许可协议](LICENSE)
\ No newline at end of file \ No newline at end of file
*/_build **/_build
\ No newline at end of file
...@@ -4,10 +4,15 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 As ...@@ -4,10 +4,15 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 As
注意:点击 **Assessor 的名称**可跳转到算法的详细描述,点击**用法**可看到 Assessor 的安装要求、建议场景和使用样例等等。 注意:点击 **Assessor 的名称**可跳转到算法的详细描述,点击**用法**可看到 Assessor 的安装要求、建议场景和使用样例等等。
| Assessor | 算法简介 | 当前支持的 Assessor:
| ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Medianstop](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/medianstop_assessor/README.md) [(用法)](#MedianStop) | Medianstop 是一个简单的提前终止算法。 如果 Trial X 的在步骤 S 的最好目标值比所有已完成 Trial 的步骤 S 的中位数值明显要低,就会停止运行 Trial X。 [参考论文](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf) | * [Medianstop(中位数终止)](medianstopAssessor.md)
| [Curvefitting](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md) [(用法)](#Curvefitting) | Curve Fitting Assessor 是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的 Trial X 在 step S 比性能最好的 Trial要差,就会提前终止它。 此算法中采用了 12 种曲线来拟合精度曲线。 [参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf) | * [Curvefitting(曲线拟合)](curvefittingAssessor.md)
| Assessor | 算法简介 |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| __Medianstop__ [(用法)](#MedianStop) | Medianstop 是一个简单的提前终止算法。 如果 Trial X 的在步骤 S 的最好目标值比所有已完成 Trial 的步骤 S 的中位数值明显要低,这个 Trial 就会被提前停止。 [参考论文](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf) |
| __Curvefitting__ [(用法)](#Curvefitting) | Curve Fitting Assessor 是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的 Trial X 在 step S 比性能最好的 Trial 要差,就会提前终止它。 此算法中采用了 12 种曲线来拟合精度曲线。 [参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf) |
## 用法 ## 用法
......
...@@ -4,18 +4,31 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tu ...@@ -4,18 +4,31 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tu
注意:点击 **Tuner 的名称**可跳转到算法的详细描述,点击**用法**可看到 Tuner 的安装要求、建议场景和使用样例等等。 注意:点击 **Tuner 的名称**可跳转到算法的详细描述,点击**用法**可看到 Tuner 的安装要求、建议场景和使用样例等等。
| Tuner | 算法简介 | 当前支持的 Tuner:
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [TPE](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperopt_tuner/README.md) [(用法)](#TPE) | Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 [参考论文](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf) | * [TPE](hyperoptTuner.md)
| [Random Search](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperopt_tuner/README.md) [(用法)](#Random) | 在超参优化时,随机搜索算法展示了其惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 [参考论文](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) | * [Random Search(随机搜索)](hyperoptTuner.md)
| [Anneal](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperopt_tuner/README.md) [(用法)](#Anneal) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 | * [Anneal(退火算法)](hyperoptTuner.md)
| [Naive Evolution](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/evolution_tuner/README.md) [(Usage)](#Evolution) | 朴素进化算法来自于大规模图像分类进化。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 [参考论文](https://arxiv.org/pdf/1703.01041.pdf) | * [Naive Evolution(进化算法)](evolutionTuner.md)
| [SMAC](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/smac_tuner/README.md) [(用法)](#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) | * [SMAC](smacTuner.md)
| [Batch tuner](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/batch_tuner/README.md) [(用法)](#Batch) | Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 | * [Batch Tuner(批量调参器)](batchTuner.md)
| [Grid Search](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/gridsearch_tuner/README.md) [(用法)](#GridSearch) | 网格搜索会穷举定义在搜索空间文件中的所有超参组合。 网格搜索可以使用的类型有 choice, quniform, qloguniform。 quniform 和 qloguniform 中的数值 q 具有特别的含义(不同于搜索空间文档中的说明)。 它表示了在最高值与最低值之间采样的值的数量。 | * [Grid Search(网格搜索)](gridsearchTuner.md)
| [Hyperband](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperband_advisor/README.md) [(用法)](#Hyperband) | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并运行少量的步骤来找到有可能好的配置,然后继续训练找到其中更好的配置。 [参考论文](https://arxiv.org/pdf/1603.06560.pdf) | * [Hyperband](hyperbandAdvisor.md)
| [Network Morphism](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/networkmorphism_tuner/README.md) [(用法)](#NetworkMorphism) | Network Morphism 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 然后使用历史的架构和指标,来估计子网络的值。 最后会选择最有希望的模型进行训练。 [参考论文](https://arxiv.org/abs/1806.10282) | * [Network Morphism](networkmorphismTuner.md)
| [Metis Tuner](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/metis_tuner/README.md) [(用法)](#MetisTuner) | 大多数调参工具仅仅预测最优配置,而 Metis 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 它不进行随机取样。 大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。 [参考论文](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) | * [Metis Tuner](metisTuner.md)
| 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/) |
<br /> <br />
...@@ -210,7 +223,7 @@ tuner: ...@@ -210,7 +223,7 @@ tuner:
**建议场景** **建议场景**
注意,搜索空间仅支持 `choice`, `quniform`, `qloguniform``quniform``qloguniform` 中的 **数字 `q` 有不同的含义(与[搜索空间](./SearchSpaceSpec.md)说明不同)。 这里意味着会`low``high` 之间均匀取值的数量。</p> 注意,搜索空间仅支持 `choice`, `quniform`, `qloguniform``quniform``qloguniform` 中的 **数字 `q` 有不同的含义(与[搜索空间](./SearchSpaceSpec.md)说明不同)。 这里的意义是`low``high` 之间均匀取值的数量。</p>
当搜索空间比较小,能够遍历整个搜索空间。 当搜索空间比较小,能够遍历整个搜索空间。
......
...@@ -14,16 +14,16 @@ ...@@ -14,16 +14,16 @@
在提出问题时,请说明以下事项: 在提出问题时,请说明以下事项:
- 按照问题模板的内容来填写安装的细节,以便评审者检查。 * 按照问题模板的内容来填写安装的细节,以便评审者检查。
- 出现问题的场景 (尽量详细,以便重现问题)。 * 出现问题的场景 (尽量详细,以便重现问题)。
- 错误和日志消息。 * 错误和日志消息。
- 其它可能有用的细节信息。 * 其它可能有用的细节信息。
## 提交新功能建议 ## 提交新功能建议
- 在适配使用场景时,总会需要一些新的功能。 可以加入新功能的讨论,也可以直接提交新功能的拉取请求。 * 在适配使用场景时,总会需要一些新的功能。 可以加入新功能的讨论,也可以直接提交新功能的拉取请求。
- 在自己的 github 账户下 fork 存储库。 在 fork 后, 对于 add, commit, push, 或 squash (如需要) 等改动都需要详细的提交消息。 然后就可以提交拉取请求了。 * 在自己的 github 账户下 fork 存储库。 在 fork 后, 对于 add, commit, push, 或 squash (如需要) 等改动都需要详细的提交消息。 然后就可以提交拉取请求了。
## 参与源代码和 Bug 修复 ## 参与源代码和 Bug 修复
...@@ -41,4 +41,16 @@ ...@@ -41,4 +41,16 @@
## 代码风格和命名约定 ## 代码风格和命名约定
NNI 遵循 [PEP8](https://www.python.org/dev/peps/pep-0008/) 的 Python 代码命名约定。在提交拉取请求时,请尽量遵循此规范。 可通过`flake8``pylint`的提示工具来帮助遵循规范。 * NNI 遵循 [PEP8](https://www.python.org/dev/peps/pep-0008/) 的 Python 代码命名约定。在提交拉取请求时,请尽量遵循此规范。 可通过`flake8``pylint`的提示工具来帮助遵循规范。
\ No newline at end of file * NNI 还遵循 [NumPy Docstring 风格](https://www.sphinx-doc.org/en/master/usage/extensions/example_numpy.html#example-numpy) 的 Python Docstring 命名方案。 Python API 使用了[sphinx.ext.napoleon](https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html)[生成文档](CONTRIBUTING.md#documentation)
## 文档
文档使用了 [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> 目录下。
* 在提交文档改动前,请先**在本地生成文档**`cd docs/en_US && make html`,然后,可以在 `docs/en_US/_build/html` 目录下找到所有生成的网页。 请认真分析生成日志中的**每个 WARNING**,这非常有可能是或**空连接**或其它问题。
* 需要链接时,尽量使用**相对路径**。 但如果文档是 Markdown 格式的,并且:
* 图片需要通过嵌入的 HTML 语法来格式化,则需要使用绝对链接,如 `https://user-images.githubusercontent.com/44491713/51381727-e3d0f780-1b4f-11e9-96ab-d26b9198ba65.png`。可以通过将图片拖拽到 [Github Issue](https://github.com/Microsoft/nni/issues/new) 框中来生成这样的链接。
* 如果不能被 sphinx 重新格式化,如源代码等,则需要使用绝对链接。 如果源码连接到本代码库,使用 `https://github.com/Microsoft/nni/tree/master/` 作为根目录 (例如:[mnist.py](https://github.com/Microsoft/nni/blob/master/examples/trials/mnist/mnist.py))。
\ No newline at end of file
############################### ###############################
为 NNI 做贡献 贡献代码
############################### ###############################
.. toctree:: .. toctree::
......
# **指南** - 自定义 advisor # **指南** - 自定义 Advisor
*Advisor 用于同时需要 Tuner 和 Assessor 方法的自动机器学习算法。 Advisor 与 Tuner 类似,它接收 Trial 的参数请求、最终结果,并生成 Trial 的参数。 另外,它也能像 Assessor 一样接收中间结果、Trial 的最终状态,并可以发送终止 Trial 的命令。 注意,在使用 Advisor 时,不能同时使用 Tuner 和 Assessor。* *Advisor 用于同时需要 Tuner 和 Assessor 方法的自动机器学习算法。 Advisor 与 Tuner 类似,它接收 Trial 的参数请求、最终结果,并生成 Trial 的参数。 另外,它也能像 Assessor 一样接收中间结果、Trial 的最终状态,并可以发送终止 Trial 的命令。 注意,在使用 Advisor 时,不能同时使用 Tuner 和 Assessor。*
......
...@@ -109,4 +109,4 @@ tuner: ...@@ -109,4 +109,4 @@ tuner:
### 实现更高级的自动机器学习算法 ### 实现更高级的自动机器学习算法
上述内容足够写出通用的 Tuner。 但有时可能需要更多的信息,例如,中间结果, Trial 的状态等等,从而能够实现更强大的自动机器学习算法。 因此,有另一个叫做 `advisor` 的类,直接继承于 `MsgDispatcherBase`,它位于 [`src/sdk/pynni/nni/msg_dispatcher_base.py`](https://github.com/Microsoft/nni/tree/master/src/sdk/pynni/nni/msg_dispatcher_base.py)。 参考[这里](Customize_Advisor.md)来了解如何实现自定义的 advisor。 上述内容足够写出通用的 Tuner。 但有时可能需要更多的信息,例如,中间结果, Trial 的状态等等,从而能够实现更强大的自动机器学习算法。 因此,有另一个 `Advisor` 类,直接继承于 `MsgDispatcherBase`,它在 [`src/sdk/pynni/nni/msg_dispatcher_base.py`](https://github.com/Microsoft/nni/tree/master/src/sdk/pynni/nni/msg_dispatcher_base.py)。 参考[这里](Customize_Advisor.md)来了解如何实现自定义的 Advisor。
\ No newline at end of file \ No newline at end of file
...@@ -286,7 +286,7 @@ machineList: ...@@ -286,7 +286,7 @@ machineList:
**gpuNum** 指定了运行 Assessor 进程的 GPU 数量。 此字段的值必须是正整数。 **gpuNum** 指定了运行 Assessor 进程的 GPU 数量。 此字段的值必须是正整数。
注意: 只能使用一种方法来指定评估器,例如:设置 {assessorName, optimizationMode} 或 {assessorCommand, assessorCwd},不能同时设置。如果不需要使用评估器,可将其置为空。 注意: 只能使用一种方法来指定 Assessor,例如:设置 {assessorName, optimizationMode} 或 {assessorCommand, assessorCwd},不能同时设置。如果不需要使用 Assessor,可将其置为空。
* **trial (local, remote)** * **trial (local, remote)**
...@@ -368,7 +368,7 @@ machineList: ...@@ -368,7 +368,7 @@ machineList:
* **image** * **image**
**iamge** 设置了 **ps** 使用的 docker 映像。 **image** 设置了 **ps** 使用的 docker 映像。
* **worker** * **worker**
......
# **在 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 的准备工作 ## 私有部署的 Kubernetes 的准备工作
......
# **在 NNI 中调试代码**
## 概述
NNI 中的日志分为三部分。 包括 NNI Manager, Dispatcher 以及 Trial。 这里会简单介绍这些组件。 更多信息可参考[概述](Overview.md)
- **NNI Controller**:NNI Controller (nnictl) 是命令行工具,用来管理 Experiments(如:启动 Experiment)。
- **NNI Manager**:这是 NNI 的核心。当 Experiment 出现严重错误时,从它的日志中才能找到原因。(例如,Web 界面无法打开,或者训练服务失败)
- **Dispatcher**: Dispatcher 调用 **Tuner****Assessor** 的方法。 它的日志与 Tuner 和 Assessor 代码有关。
- **Tuner**: Tuner 是一个自动机器学习算法,会为下一个 Trial 生成新的配置。 新的 Trial 会使用这组配置来运行。
- **Assessor**:Assessor 分析 Trial 的中间结果(例如,测试数据集上定期的精度),来确定 Trial 是否应该被提前终止。
- **Trial**:Trial 的代码是用户编写的代码,每次 Trial 运行时会尝试一组新的配置(例如,一组新的超参值,或者某个神经网络结构)。
## 日志的位置
NNI 中有三种日志。 在创建 Experiment 时,可增加命令行参数 `--debug`,将日志级别设置为 debug 级别。 此外,还可以在配置文件中使用 `logLevel` 来设置日志级别。 可设置的日志级别包括:`trace`, `debug`, `info`, `warning`, `error`, `fatal`
### NNI Controller
在启动 NNI Experiment 时发生的错误,都可以在这里找到。
通过 `nnictl log stderr` 命令来查看错误信息。 参考 [NNICTL](NNICTLDOC.md) 了解更多命令选项。
### Experiment 根目录
每个 Experiment 都有一个根目录,会显示在 Web 界面的右上角。 如果无法打开 Web 界面,可将 `~/nni/experiment/experiment_id/` 中的 `experiment_id` 替换为实际的 Experiment ID,来组合出根目录。 `experiment_id` 可以在运行 `nnictl create ...` 来创建新 Experiment 的输出中找到。
> 如有需要,可以在配置文件中修改 `logDir`,来指定存储 Experiment 的目录。(默认为 `~/nni/experiment`)。 参考[配置](ExperimentConfig.md)文档,了解更多信息。
在此目录下,还会有另一个叫做 `log` 的目录,`nnimanager.log``dispatcher.log` 都在此目录中。
### Trial 根目录
在 Web 界面中,可通过点击每个 Trial 左边的 `+` 来展开详情并看到它的日志路径。
在 Experiment 的根目录中,会有一个 `trials` 目录,这里存放了所有 Trial 的信息。 每个 Trial 都有一个用其 ID 命名的目录。 目录中会有一个 `stderr` 文件,是 Trial 的错误信息。另一个 `trial.log` 文件是 Trial 的日志。
## 不同类型的错误
NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 NNI 中发生错误时,需要按顺序检查以下三种错误。
一般情况下,打开 Web 界面,可以在 `Overview` 标签的 `Status` 上看到错误信息。 如果 Web 界面无法打开,可以通过命令行来检查。
### **NNI** 失败
这是最严重的错误。 发生这种错误时,整个 Experiment 都会失败,Trial 也不会运行。 这通常是由安装问题导致的。
先检查 `nnictl` 的错误输出文件 `stderr` (运行 nnictl log stderr),然后检查 `nnimanager` 的日志来看看是否由任何错误。
### **Dispatcher** 失败
这通常是 Tuner 失败的情况。 可检查 Dispatcher 的日志来分析出现了什么问题。 对于内置的 Tuner,常见的错误可能是无效的搜索空间(不支持的搜索空间类型,或配置文件中的 Tuner 参数的错误)。
以后一种情况为例。 某自定义的 Tuner,*\_init*\_ 函数有名为 `optimize_mode` 的参数,但配置文件中没有提供此参数。NNI 就会因为初始化 Tuner 失败而造成 Experiment 失败。 可在 Web 界面看到如下错误:
![](../img/dispatcher_error.jpg)
可以看到这是一个 Dispatcher 的错误。 因此,检查 Dispatcher 的日志,可找到如下信息:
[2019-02-19 19:36:45] DEBUG (nni.main/MainThread) START
[2019-02-19 19:36:47] ERROR (nni.main/MainThread) __init__() missing 1 required positional arguments: 'optimize_mode'
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/nni/__main__.py", line 202, in <module>
main()
File "/usr/lib/python3.7/site-packages/nni/__main__.py", line 164, in main
args.tuner_args)
File "/usr/lib/python3.7/site-packages/nni/__main__.py", line 81, in create_customized_class_instance
instance = class_constructor(**class_args)
TypeError: __init__() missing 1 required positional arguments: 'optimize_mode'.
### **Trial** 失败
这种情况下,NNI 可以继续运行,并创建新的 Trial。
这表示 Trial 代码中出现了失败。 这种错误与 Trial 代码相关。 需检查 Trial 的日志来修复错误。
如,其中常见的一种错误是在运行 MNIST 示例时没有安装 TensorFlow。 因为导入模块的错误(没有安装 Tensorflow,但在 Trial 代码中有 import tensorflow 的语句),每次 Trial 都会运行失败。
![](../img/trial_error.jpg)
如图,每个 Trial 都有日志路径,可以从中找到 Trial 的日志和 stderr。
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment