Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
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
Hide 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
...
...
@@ -71,33 +71,33 @@
### 结果
| 算法 | 最好的损失值 | 最好的 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 |
| 算法
| 最好的损失值 | 最好的 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。
...
...
@@ -188,14 +188,14 @@ IOPS 与在线处理能力有关,我们在实验中使用 IOPS 作为指标。
#### 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 |
| 模型
| 最高 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 |
图:
...
...
@@ -203,14 +203,14 @@ IOPS 与在线处理能力有关,我们在实验中使用 IOPS 作为指标。
#### 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 |
| 模型
| 最高 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 |
图:
...
...
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
...
...
@@ -28,10 +28,12 @@
## **在 Windows 上安装**
在第一次使用 PowerShell 运行脚本时,需要用
**使用管理员权限**
运行如下命令:
在第一次使用 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