Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
c5acd8c2
Unverified
Commit
c5acd8c2
authored
May 27, 2019
by
SparkSnail
Committed by
GitHub
May 27, 2019
Browse files
Merge pull request #173 from microsoft/master
merge master
parents
40bae6e2
d135d184
Changes
93
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
238 additions
and
63 deletions
+238
-63
docs/zh_CN/CommunitySharings/AutomlPracticeSharing/NasComparison.md
.../CommunitySharings/AutomlPracticeSharing/NasComparison.md
+5
-5
docs/zh_CN/CommunitySharings/NniPracticeSharing/HpoComparison.md
..._CN/CommunitySharings/NniPracticeSharing/HpoComparison.md
+43
-43
docs/zh_CN/CommunitySharings/NniPracticeSharing/RecommendersSvd.md
...N/CommunitySharings/NniPracticeSharing/RecommendersSvd.md
+13
-0
docs/zh_CN/Contributing.md
docs/zh_CN/Contributing.md
+2
-2
docs/zh_CN/CurvefittingAssessor.md
docs/zh_CN/CurvefittingAssessor.md
+72
-0
docs/zh_CN/CustomizeAdvisor.md
docs/zh_CN/CustomizeAdvisor.md
+0
-0
docs/zh_CN/CustomizeAssessor.md
docs/zh_CN/CustomizeAssessor.md
+0
-0
docs/zh_CN/CustomizeTuner.md
docs/zh_CN/CustomizeTuner.md
+1
-1
docs/zh_CN/EvolutionTuner.md
docs/zh_CN/EvolutionTuner.md
+5
-0
docs/zh_CN/ExperimentConfig.md
docs/zh_CN/ExperimentConfig.md
+1
-1
docs/zh_CN/FAQ.md
docs/zh_CN/FAQ.md
+8
-0
docs/zh_CN/FrameworkControllerMode.md
docs/zh_CN/FrameworkControllerMode.md
+1
-1
docs/zh_CN/GbdtExample.md
docs/zh_CN/GbdtExample.md
+0
-0
docs/zh_CN/GridsearchTuner.md
docs/zh_CN/GridsearchTuner.md
+5
-0
docs/zh_CN/HowToDebug.md
docs/zh_CN/HowToDebug.md
+1
-1
docs/zh_CN/HowToImplementTrainingService.md
docs/zh_CN/HowToImplementTrainingService.md
+2
-2
docs/zh_CN/HyperbandAdvisor.md
docs/zh_CN/HyperbandAdvisor.md
+56
-0
docs/zh_CN/HyperoptTuner.md
docs/zh_CN/HyperoptTuner.md
+13
-0
docs/zh_CN/Installation.md
docs/zh_CN/Installation.md
+9
-6
docs/zh_CN/KubeflowMode.md
docs/zh_CN/KubeflowMode.md
+1
-1
No files found.
docs/zh_CN/
Blog/NAS
Comparison.md
→
docs/zh_CN/
CommunitySharings/AutomlPracticeSharing/Nas
Comparison.md
View file @
c5acd8c2
...
...
@@ -14,7 +14,7 @@
-
NAO:
<https://github.com/renqianluo/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 数据集 。
...
...
@@ -33,7 +33,7 @@
NAO 需要太多的计算资源,因此只使用提供 Pipeline 脚本的 NAO-WS。
对于 Aut
k
eras,使用了 0.2.18 版本的代码, 因为这是开始实验时的最新版本。
对于 Aut
oK
eras,使用了 0.2.18 版本的代码, 因为这是开始实验时的最新版本。
## NAS 结果对比
...
...
@@ -54,13 +54,13 @@ NAO 需要太多的计算资源,因此只使用提供 Pipeline 脚本的 NAO-W
| --------- | ------------ |:----------------:|:----------------:|:--------------:|:-----------:|
| CIFAR- 10 | 88.56(best) | 96.13(best) | 97.11(best) | 97.17(average) | 96.47(best) |
对于
AutoKeras,由于其算法中的随机因素,它在所有数据集中的表现相对较差。
AutoKeras,由于其算法中的随机因素,它在所有数据集中的表现相对较差。
对于
ENAS,ENAS(macro)在 OUI-Adience-Age 数据集中表现较好,并且 ENAS(micro)在 CIFAR-10 数据集中表现较好。
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 中表现非常差。
NAO-WS
在 ImageNet-10-2 中
表现
良好,但在 OUI-Adience-Age 中表现非常差。
## 参考文献
...
...
docs/zh_CN/
Blog/HPO
Comparison.md
→
docs/zh_CN/
CommunitySharings/NniPracticeSharing/Hpo
Comparison.md
View file @
c5acd8c2
...
...
@@ -72,17 +72,17 @@
### 结果
| 算法 | 最好的损失值 | 最好的 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 |
| -------------
------
| ------------ | ------------- | ------------- |
| 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 |
| 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 |
...
...
@@ -189,9 +189,9 @@ IOPS 与在线处理能力有关,我们在实验中使用 IOPS 作为指标。
#### fillrandom 基准
| 模型 | 最高 IOPS(重复 1 次) | 最高 IOPS(重复 2 次) | 最高 IOPS(重复 3 次) |
| --------- | --------------- | --------------- | --------------- |
| ---------
---
| --------------- | --------------- | --------------- |
| Random | 449901 | 427620 | 477174 |
| Anneal
| 461896 | 467150 | 437528 |
| Anneal
(退火算法)
| 461896 | 467150 | 437528 |
| Evolution | 436755 | 389956 | 389790 |
| TPE | 378346 | 482316 | 468989 |
| SMAC | 491067 | 490472 |
**491136**
|
...
...
@@ -204,9 +204,9 @@ IOPS 与在线处理能力有关,我们在实验中使用 IOPS 作为指标。
#### readrandom 基准
| 模型 | 最高 IOPS(重复 1 次) | 最高 IOPS(重复 2 次) | 最高 IOPS(重复 3 次) |
| --------- | --------------- | --------------- | --------------- |
| ---------
---
| --------------- | --------------- | --------------- |
| Random | 2276157 | 2285301 | 2275142 |
| Anneal
| 2286330 | 2282229 | 2284012 |
| Anneal
(退火算法)
| 2286330 | 2282229 | 2284012 |
| Evolution | 2286524 | 2283673 | 2283558 |
| TPE | 2287366 | 2282865 | 2281891 |
| SMAC | 2270874 | 2284904 | 2282266 |
...
...
docs/zh_CN/CommunitySharings/NniPracticeSharing/RecommendersSvd.md
0 → 100644
View file @
c5acd8c2
# 在 NNI 上自动调优 SVD
本教程中,会首先介绍 GitHub 存储库:
[
Recommenders
](
https://github.com/Microsoft/Recommenders
)
。 它使用 Jupyter Notebook 提供了构建推荐系统的一些示例和实践技巧。 其中大量的模型被广泛的应用于推荐系统中。 为了提供完整的体验,每个示例都通过以下五个关键任务中展示:
-
[
准备数据
](
https://github.com/Microsoft/Recommenders/blob/master/notebooks/01_prepare_data/README.md
)
:为每个推荐算法准备并读取数据。
-
[
模型
](
https://github.com/Microsoft/Recommenders/blob/master/notebooks/02_model/README.md
)
:使用各种经典的以及深度学习推荐算法,如交替最小二乘法(
[
ALS
](
https://spark.apache.org/docs/latest/api/python/_modules/pyspark/ml/recommendation.html#ALS
)
)或极限深度分解机(
[
xDeepFM
](
https://arxiv.org/abs/1803.05170
)
)。
-
[
评估
](
https://github.com/Microsoft/Recommenders/blob/master/notebooks/03_evaluate/README.md
)
:使用离线指标来评估算法。
-
[
模型选择和优化
](
https://github.com/Microsoft/Recommenders/blob/master/notebooks/04_model_select_and_optimize/README.md
)
:为推荐算法模型调优超参。
-
[
运营
](
https://github.com/Microsoft/Recommenders/blob/master/notebooks/05_operationalize/README.md
)
:在 Azure 的生产环境上运行模型。
在第四项调优模型超参的任务上,NNI 可以发挥作用。 在 NNI 上调优推荐模型的具体示例,采用了
[
SVD
](
https://github.com/Microsoft/Recommenders/blob/master/notebooks/02_model/surprise_svd_deep_dive.ipynb
)
算法,以及数据集 Movielens100k。 此模型有超过 10 个超参需要调优。
由 Recommenders 提供的
[
Jupyter notebook
](
https://github.com/Microsoft/Recommenders/blob/master/notebooks/04_model_select_and_optimize/nni_surprise_svd.ipynb
)
中有非常详细的一步步的教程。 其中使用了不同的调优函数,包括
`Annealing`
,
`SMAC`
,
`Random Search`
,
`TPE`
,
`Hyperband`
,
`Metis`
以及
`Evolution`
。 最后比较了不同调优算法的结果。 请参考此 Notebook,来学习如何使用 NNI 调优 SVD 模型,并可以继续使用 NNI 来调优 Recommenders 中的其它模型。
\ No newline at end of file
docs/zh_CN/C
ONTRIBUTING
.md
→
docs/zh_CN/C
ontributing
.md
View file @
c5acd8c2
...
...
@@ -29,7 +29,7 @@
拉取请求需要选好正确的标签,表明是 Bug 修复还是功能改进。 所有代码都需要遵循正确的命名约定和代码风格。
参考
[
如何配置 NNI 的开发环境
](
./SetupN
NI
DeveloperEnvironment.md
)
,来安装开发环境。
参考
[
如何配置 NNI 的开发环境
](
./SetupN
ni
DeveloperEnvironment.md
)
,来安装开发环境。
与
[
快速入门
](
QuickStart.md
)
类似。 其它内容,参考
[
NNI 文档
](
http://nni.readthedocs.io
)
。
...
...
@@ -42,7 +42,7 @@
## 代码风格和命名约定
*
NNI 遵循
[
PEP8
](
https://www.python.org/dev/peps/pep-0008/
)
的 Python 代码命名约定。在提交拉取请求时,请尽量遵循此规范。 可通过
`flake8`
或
`pylint`
的提示工具来帮助遵循规范。
*
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
)
来
[
生成文档
](
C
ONTRIBUTING
.md#documentation
)
。
*
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
)
来
[
生成文档
](
C
ontributing
.md#documentation
)
。
## 文档
...
...
docs/zh_CN/CurvefittingAssessor.md
0 → 100644
View file @
c5acd8c2
# NNI 中的 Curve Fitting Assessor
## 1. 介绍
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
)
中选择了大量的参数曲线模型。 学习曲线的形状与先验知识是一致的:都是典型的递增的、饱和的函数。

所有学习曲线模型被合并到了单个,更强大的模型中。 合并的模型通过加权线性混合:

合并后的参数向量

假设增加一个高斯噪声,且噪声参数初始化为最大似然估计。
通过学习历史数据来确定新的组合参数向量的最大概率值。 用这样的方法来预测后面的 Trial 性能,并停止不好的 Trial 来节省计算资源。
具体来说,该算法有学习、预测和评估三个阶段。
*
步骤 1:学习。 从当前 Trial 的历史中学习,并从贝叶斯角度决定
\x
i 。 首先,使用最小二乘法 (由
`fit_theta`
实现) 来节省时间。 获得参数后,过滤曲线并移除异常点(由
`filter_curve`
实现)。 最后,使用 MCMC 采样方法 (由
`mcmc_sampling`
实现) 来调整每个曲线的权重。 至此,确定了
\x
i 中的所有参数。
*
步骤 2:预测。 用
\x
i 和混合模型公式,在目标位置(例如 epoch 的总数)来计算期望的最终结果精度(由
`f_comb`
实现)。
*
步骤 3:如果拟合结果没有收敛,预测结果会是
`None`
,并返回
`AssessResult.Good`
,待下次有了更多精确信息后再次预测。 此外,会通过
`predict()`
函数获得正数。如果该值大于 __历史最好结果__
*
`THRESHOLD`
(默认为 0.95),则返回
`AssessResult.Good`
,否则返回
`AssessResult.Bad`
。
下图显示了此算法在 MNIST Trial 历史数据上结果。其中绿点表示 Assessor 获得的数据,蓝点表示将来,但未知的数据,红色线条是 Curve fitting Assessor 的预测曲线。

## 2. 用法
要使用 Curve Fitting Assessor,需要在 Experiment 的 YAML 配置文件进行如下改动。
assessor:
builtinAssessorName: Curvefitting
classArgs:
# (必须) epoch 的总数。
# 需要此数据来决定需要预测的点。
epoch_num: 20
# (可选) 选项: maximize, minimize
* optimize_mode 的默认值是 maximize
optimize_mode: maximize
# (可选) 为了节约计算资源,在收到了 start_step 个中间结果后,才开始预测。
# start_step 的默认值是 6。
start_step: 6
# (可选) 决定是否提前终止的阈值。
# 例如,如果 threshold = 0.95, optimize_mode = maximize,最好的历史结果是 0.9,那么会在 Trial 的预测值低于 0.95 * 0.9 = 0.855 时停止。
* 阈值的默认值是 0.95。
# 注意:如果选择了 minimize 模式,要让 threshold >= 1.0 (如 threshold=1.1)
threshold: 0.95
# (可选) gap 是两次评估之间的间隔次数。
# 例如:如果 gap = 2, start_step = 6,就会评估第 6, 8, 10, 12... 个中间结果。
* gap 的默认值是 1。
gap: 1
## 3. 文件结构
Assessor 有大量的文件、函数和类。 这里只简单介绍最重要的文件:
*
`curvefunctions.py`
包含了所有函数表达式和默认参数。
*
`modelfactory.py`
包括学习和预测部分,并实现了相应的计算部分。
*
`curvefitting_assessor.py`
是接收 Trial 历史数据并评估是否需要提前终止的 Assessor。
## 4. TODO
*
进一步提高预测精度,并在更多模型上测试。
\ No newline at end of file
docs/zh_CN/Customize
_
Advisor.md
→
docs/zh_CN/CustomizeAdvisor.md
View file @
c5acd8c2
File moved
docs/zh_CN/Customize
_
Assessor.md
→
docs/zh_CN/CustomizeAssessor.md
View file @
c5acd8c2
File moved
docs/zh_CN/Customize
_
Tuner.md
→
docs/zh_CN/CustomizeTuner.md
View file @
c5acd8c2
...
...
@@ -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。
\ No newline at end of file
上述内容足够写出通用的 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
)
。 参考
[
这里
](
CustomizeAdvisor.md
)
来了解如何实现自定义的 Advisor。
\ No newline at end of file
docs/zh_CN/EvolutionTuner.md
0 → 100644
View file @
c5acd8c2
# Naive Evolution Tuner
## Naive Evolution(进化算法)
进化算法来自于
[
Large-Scale Evolution of Image Classifiers
](
https://arxiv.org/pdf/1703.01041.pdf
)
。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。
\ No newline at end of file
docs/zh_CN/ExperimentConfig.md
View file @
c5acd8c2
...
...
@@ -175,7 +175,7 @@ machineList:
-
**remote**
将任务提交到远程的 Ubuntu 上,必须用
**machineList**
来指定远程的 SSH 连接信息。
-
**pai**
提交任务到微软开源的
[
OpenPAI
](
https://github.com/Microsoft/pai
)
上。 更多 OpenPAI 配置,参考
[
pai 模式
](
./P
AI
Mode.md
)
。
-
**pai**
提交任务到微软开源的
[
OpenPAI
](
https://github.com/Microsoft/pai
)
上。 更多 OpenPAI 配置,参考
[
pai 模式
](
./P
ai
Mode.md
)
。
-
**kubeflow**
提交任务至
[
Kubeflow
](
https://www.kubeflow.org/docs/about/kubeflow/
)
。 NNI 支持基于 Kubeflow 的 Kubenetes,以及
[
Azure Kubernetes
](
https://azure.microsoft.com/en-us/services/kubernetes-service/
)
。
...
...
docs/zh_CN/FAQ.md
View file @
c5acd8c2
...
...
@@ -37,6 +37,14 @@ nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下
将虚拟机的网络配置为桥接模式来让虚拟机能被网络访问,并确保虚拟机的防火墙没有禁止相关端口。
### 无法打开 Web 界面的链接
无法打开 Web 界面的链接可能有以下几个原因:
*
http://127.0.0.1,http://172.17.0.1 以及 http://10.0.0.15 都是 localhost。如果在服务器或远程计算机上启动 Experiment, 可将此 IP 替换为所连接的 IP 来查看 Web 界面,如 http://[远程连接的地址]:8080
*
如果使用服务器 IP 后还是无法看到 Web 界面,可检查此服务器上是否有防火墙或需要代理。 或使用此运行 NNI Experiment 的服务器上的浏览器来查看 Web 界面。
*
另一个可能的原因是 Experiment 启动失败了,NNI 无法读取 Experiment 的信息。 可在如下目录中查看 NNIManager 的日志: ~/nni/experiment/[your_experiment_id] /log/nnimanager.log
### Windows 本机模式
参考
[
NNI Windows 本机模式
](
WindowsLocalMode.md
)
...
...
docs/zh_CN/FrameworkControllerMode.md
View file @
c5acd8c2
...
...
@@ -106,4 +106,4 @@ frameworkcontroller 模式中的 Trial 配置使用以下主键:
## 版本校验
从 0.6 开始,NNI 支持查看版本,详情参考
[
这里
](
PAIMode.md
)
。
\ No newline at end of file
从 0.6 开始,NNI 支持版本校验,详情参考
[
这里
](
PaiMode.md
)
。
\ No newline at end of file
docs/zh_CN/
g
bdt
_e
xample.md
→
docs/zh_CN/
G
bdt
E
xample.md
View file @
c5acd8c2
File moved
docs/zh_CN/GridsearchTuner.md
0 → 100644
View file @
c5acd8c2
# Grid Search
## Grid Search(遍历搜索)
Grid Search 会穷举定义在搜索空间文件中的所有超参组合。 注意,搜索空间仅支持
`choice`
,
`quniform`
,
`qloguniform`
。
`quniform`
和
`qloguniform`
中的
**
数字
`q`
有不同的含义(与
[
搜索空间
](
SearchSpaceSpec.md
)
说明不同)。 这里的意义是在
`low`
和
`high`
之间均匀取值的数量。
</p>
\ No newline at end of file
docs/zh_CN/HowToDebug.md
View file @
c5acd8c2
...
...
@@ -19,7 +19,7 @@ NNI 中有三种日志。 在创建 Experiment 时,可增加命令行参数 `-
在启动 NNI Experiment 时发生的错误,都可以在这里找到。
通过
`nnictl log stderr`
命令来查看错误信息。 参考
[
NNICTL
](
N
NICTLDOC
.md
)
了解更多命令选项。
通过
`nnictl log stderr`
命令来查看错误信息。 参考
[
NNICTL
](
N
nictl
.md
)
了解更多命令选项。
### Experiment 根目录
...
...
docs/zh_CN/HowToImplementTrainingService.md
View file @
c5acd8c2
...
...
@@ -8,7 +8,7 @@ TrainingService 是与平台管理、任务调度相关的模块。 TrainingServ

NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 当前,NNI 支持本地平台、
[
远程平台
](
RemoteMachineMode.md
)
、
[
OpenPAI 平台
](
P
AI
Mode.md
)
、
[
Kubeflow 平台
](
KubeflowMode.md
)
和
[
FrameworkController 平台
](
FrameworkController.md
)
。
NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 当前,NNI 支持本地平台、
[
远程平台
](
RemoteMachineMode.md
)
、
[
OpenPAI 平台
](
P
ai
Mode.md
)
、
[
Kubeflow 平台
](
KubeflowMode.md
)
和
[
FrameworkController 平台
](
FrameworkController.md
)
。
在这个文档中,会简要介绍 TrainingService 的设计。 如果要添加新的 TrainingService,只需要继承 TrainingServcie 类并实现相应的方法,不需要理解NNIManager、Dispatcher 等其它模块的细节。
## 代码文件夹结构
...
...
@@ -151,4 +151,4 @@ NNI 提供了 TrialKeeper 工具,用来帮助维护 Trial 任务。 可以在
## 参考
更多关于如何调试的信息,请
[
参考这里
](
HowToDebug.md
)
。
关于如何贡献代码,请
[
参考这里
](
CONTRIBUTING
)
。
\ No newline at end of file
关于如何贡献代码,请
[
参考这里
](
Contributing.md
)
。
\ No newline at end of file
docs/zh_CN/HyperbandAdvisor.md
0 → 100644
View file @
c5acd8c2
# NNI 中使用 Hyperband
## 1. 介绍
[
Hyperband
](
https://arxiv.org/pdf/1603.06560.pdf
)
是一种流行的自动机器学习算法。 Hyperband 的基本思想是对配置分组,每组有
`n`
个随机生成的超参配置,每个配置使用
`r`
次资源(如,epoch 数量,批处理数量等)。 当
`n`
个配置完成后,会选择最好的
`n/eta`
个配置,并增加
`r*eta`
次使用的资源。 最后,会选择出的最好配置。
## 2. 实现并行
首先,此样例是基于 MsgDispatcherBase 来实现的自动机器学习算法,而不是基于 Tuner 和Assessor。 这种实现方法下,Hyperband 集成了 Tuner 和 Assessor 两者的功能,因而将它叫做 Advisor。
其次,本实现完全利用了 Hyperband 内部的并行性。 具体来说,下一个分组不会严格的在当前分组结束后再运行,只要有资源,就可以开始运行新的分组。
## 3. 用法
要使用 Hyperband,需要在 Experiment 的 YAML 配置文件进行如下改动。
advisor:
#可选项: Hyperband
builtinAdvisorName: Hyperband
classArgs:
#R: 最大的步骤
R: 100
#eta: 丢弃的 Trial 的比例
eta: 3
#可选项: maximize, minimize
optimize_mode: maximize
注意,一旦使用了 Advisor,就不能在配置文件中添加 Tuner 和 Assessor。 使用 Hyperband 时,Trial 代码收到的超参(如键值对)中,除了用户定义的超参,会多一个
`TRIAL_BUDGET`
。
**
使用
`TRIAL_BUDGET`
,Trial 能够控制其运行的时间。
</p>
对于 Trial 代码中
`report_intermediate_result(metric)`
和
`report_final_result(metric)`
的
**`指标` 应该是数值,或者用一个 dict,并保证其中有键值为 default 的项目,其值也为数值型**
。 这是需要进行最大化或者最小化优化的数值,如精度或者损失度。
`R`
和
`eta`
是 Hyperband 中可以改动的参数。
`R`
表示可以分配给 Trial 的最大资源。 这里,资源可以代表 epoch 或 批处理数量。
`TRIAL_BUDGET`
应该被尝试代码用来控制运行的次数。 参考样例
`examples/trials/mnist-advisor/`
,了解详细信息。
`eta`
表示
`n`
个配置中的
`n/eta`
个配置会留存下来,并用更多的资源来运行。
下面是
`R=81`
且
`eta=3`
时的样例:
| | s=4 | s=3 | s=2 | s=1 | s=0 |
| - | ---- | ---- | ---- | ---- | ---- |
| i | n r | n r | n r | n r | n r |
| 0 | 81 1 | 27 3 | 9 9 | 6 27 | 5 81 |
| 1 | 27 3 | 9 9 | 3 27 | 2 81 | |
| 2 | 9 9 | 3 27 | 1 81 | | |
| 3 | 3 27 | 1 81 | | | |
| 4 | 1 81 | | | | |
`s`
表示分组,
`n`
表示生成的配置数量,相应的
`r`
表示配置使用多少资源来运行。
`i`
表示轮数,如分组 4 有 5 轮,分组 3 有 4 轮。
关于如何实现 Trial 代码,参考
`examples/trials/mnist-hyperband/`
中的说明。
## 4. 待改进
当前实现的 Hyperband 算法可以通过改进支持的提前终止算法来提高,原因是最好的
`n/eta`
个配置并不一定都表现很好。 不好的配置可以更早的终止。
在当前实现中,遵循了
[
此论文
](
https://arxiv.org/pdf/1603.06560.pdf
)
的设计,配置都是随机生成的。 要进一步提升,配置生成过程可以利用更高级的算法。
\ No newline at end of file
docs/zh_CN/HyperoptTuner.md
0 → 100644
View file @
c5acd8c2
# TPE, Random Search, Anneal Tuners
## TPE
Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 TPE 方法对 P(x|y) 和 P(y) 建模,其中 x 表示超参,y 表示相关的评估指标。 P(x|y) 通过变换超参的生成过程来建模,用非参数密度(non-parametric densities)代替配置的先验分布。 细节可参考
[
Algorithms for Hyper-Parameter Optimization
](
https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf
)
。
## Random Search(随机搜索)
[
Random Search for Hyper-Parameter Optimization
](
http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf
)
中介绍了随机搜索惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。
## Anneal(退火算法)
这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了响应面的平滑性。 退火率不是自适应的。
\ No newline at end of file
docs/zh_CN/Installation.md
View file @
c5acd8c2
...
...
@@ -31,7 +31,9 @@
在第一次使用 PowerShell 运行脚本时,需要用
**使用管理员权限**
运行如下命令:
bash
Set-ExecutionPolicy -ExecutionPolicy Unrestricted 强烈推荐使用 Anaconda。
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
推荐使用 Anaconda 或 Miniconda。
*
**通过 pip 命令安装 NNI**
...
...
@@ -43,8 +45,9 @@
*
**通过源代码安装 NNI**
先决条件:
`python >=3.5`
,
`git`
,
`powershell`
可使用管理员或当前用户权限运行下列命令:
先决条件:
`python >=3.5`
,
`git`
,
`PowerShell`
然后可以使用管理员或当前用户安装 NNI:
```
bash
git clone
-b
v0.7 https://github.com/Microsoft/nni.git
...
...
@@ -93,12 +96,12 @@
## 更多
*
[
概述
](
Overview.md
)
*
[
使用命令行工具 nnictl
](
N
NICTLDOC
.md
)
*
[
使用命令行工具 nnictl
](
N
nictl
.md
)
*
[
使用 NNIBoard
](
WebUI.md
)
*
[
定制搜索空间
](
SearchSpaceSpec.md
)
*
[
配置 Experiment
](
ExperimentConfig.md
)
*
[
如何在本机运行 Experiment (支持多 GPU 卡)?
](
LocalMode.md
)
*
[
如何在多机上运行 Experiment?
](
RemoteMachineMode.md
)
*
[
如何在 OpenPAI 上运行 Experiment?
](
P
AI
Mode.md
)
*
[
如何在 OpenPAI 上运行 Experiment?
](
P
ai
Mode.md
)
*
[
如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?
](
KubeflowMode.md
)
*
[
如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?
](
FrameworkControllerMode.md
)
\ No newline at end of file
docs/zh_CN/KubeflowMode.md
View file @
c5acd8c2
...
...
@@ -204,6 +204,6 @@ Kubeflow 模式的配置有下列主键:
## 版本校验
从 0.6 开始,NNI 支持版本校验,详情参考
[
这里
](
P
AI
Mode.md
)
。
从 0.6 开始,NNI 支持版本校验,详情参考
[
这里
](
P
ai
Mode.md
)
。
如果在使用 Kubeflow 模式时遇到任何问题,请到
[
NNI Github
](
https://github.com/Microsoft/nni
)
中创建问题。
\ No newline at end of file
Prev
1
2
3
4
5
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment