"sgl-router/py_test/vscode:/vscode.git/clone" did not exist on "5ee777c98ff558d1acc089e162f22fb9cde1b3e0"
Unverified Commit 704b50e2 authored by SparkSnail's avatar SparkSnail Committed by GitHub
Browse files

Merge pull request #200 from microsoft/master

merge master
parents 755ac5f0 3a6d1372
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
NNI 经验分享<nni_practice_sharing> Recommenders 中使用 NNI<RecommendersSvd>
神经网络结构搜索的对比<CommunitySharings/NasComparison> 神经网络结构搜索(NAS)的对比<NasComparision>
超参调优算法的对比<CommunitySharings/HpoComparison> 超参调优算法的对比<HpoComparision>
TPE 的并行优化<ParallelizingTpeSearch>
...@@ -10,7 +10,7 @@ NNI (Neural Network Intelligence) 是一个工具包,可有效的帮助用户 ...@@ -10,7 +10,7 @@ NNI (Neural Network Intelligence) 是一个工具包,可有效的帮助用户
下图显示了 NNI 的体系结构。 下图显示了 NNI 的体系结构。
<p align="center"> <p align="center">
<img src="https://user-images.githubusercontent.com/23273522/51816536-ed055580-2301-11e9-8ad8-605a79ee1b9a.png" alt="drawing" width="700"/> <img src="https://user-images.githubusercontent.com/23273522/51816536-ed055580-2301-11e9-8ad8-605a79ee1b9a.png" alt="绘图" width="700"/>
</p> </p>
## 主要概念 ## 主要概念
...@@ -31,29 +31,29 @@ NNI (Neural Network Intelligence) 是一个工具包,可有效的帮助用户 ...@@ -31,29 +31,29 @@ NNI (Neural Network Intelligence) 是一个工具包,可有效的帮助用户
Experiment 的运行过程为:Tuner 接收搜索空间并生成配置。 这些配置将被提交到训练平台,如本机,远程服务器组或训练集群。 执行的性能结果会被返回给 Tuner。 然后,再生成并提交新的配置。 Experiment 的运行过程为:Tuner 接收搜索空间并生成配置。 这些配置将被提交到训练平台,如本机,远程服务器组或训练集群。 执行的性能结果会被返回给 Tuner。 然后,再生成并提交新的配置。
每次 Experiment 执行时,用户只需要定义搜索空间,改动几行代码,就能利用 NNI 内置的 Tuner/Assessor 和训练服务来搜索最好的超参组合以及神经网络结构。 基本上分为三步: 每次 Experiment 执行时,用户只需要定义搜索空间,改动几行代码,就能利用 NNI 内置的 Tuner/Assessor 和训练平台来搜索最好的超参组合以及神经网络结构。 基本上分为三步:
> 第一步:[定义搜索空间](SearchSpaceSpec.md) > 第一步:[定义搜索空间](Tutorial/SearchSpaceSpec.md)
> >
> 第二步:[改动模型代码](Trials.md) > 第二步:[改动模型代码](TrialExample/Trials.md)
> >
> 第三步:[定义 Experiment 配置](ExperimentConfig.md) > 第三步:[>定义 Experiment 配置](Tutorial/ExperimentConfig.md)
<p align="center"> <p align="center">
<img src="https://user-images.githubusercontent.com/23273522/51816627-5d13db80-2302-11e9-8f3e-627e260203d5.jpg" alt="drawing"/> <img src="https://user-images.githubusercontent.com/23273522/51816627-5d13db80-2302-11e9-8f3e-627e260203d5.jpg" alt="绘图"/>
</p> </p>
更多 Experiment 运行的详情,参考[快速入门](QuickStart.md) 更多 Experiment 运行的详情,参考[快速入门](Tutorial/QuickStart.md)
## 了解更多信息 ## 了解更多信息
* [开始使用](QuickStart.md) * [入门](Tutorial/QuickStart.md)
* [如何为 NNI 调整代码?](Trials.md) * [如何为 NNI 调整代码?](TrialExample/Trials.md)
* [NNI 支持哪些 Tuner?](BuiltinTuner.md) * [NNI 支持哪些 Tuner?](Tuner/BuiltinTuner.md)
* [如何自定义 Tuner?](CustomizeTuner.md) * [如何自定义 Tuner?](Tuner/CustomizeTuner.md)
* [NNI 支持哪些 Assessor?](BuiltinAssessors.md) * [NNI 支持哪些 Assessor?](Assessor/BuiltinAssessor.md)
* [如何自定义 Assessor?](CustomizeAssessor.md) * [如何自定义 Assessor?](Assessor/CustomizeAssessor.md)
* [如何在本机上运行 Experiment?](LocalMode.md) * [如何在本机上运行 Experiment?](TrainingService/LocalMode.md)
* [如何在多机上运行 Experiment?](RemoteMachineMode.md) * [如何在多机上运行 Experiment?](TrainingService/RemoteMachineMode.md)
* [如何在 OpenPAI 上运行 Experiment?](PaiMode.md) * [如何在 OpenPAI 上运行 Experiment?](TrainingService/PaiMode.md)
* [样例](MnistExamples.md) * [示例](TrialExample/MnistExamples.md)
\ No newline at end of file \ No newline at end of file
# 更改日志 # 更改日志
## 发布 0.9 - 7/1/2019
### 主要功能
* 生成 NAS 编程接口
* 为 NAS 接口添加 `enas-mode``oneshot-mode`[PR #1201](https://github.com/microsoft/nni/pull/1201#issue-291094510)
* [有 Matern 核的高斯 Tuner](Tuner/GPTuner.md)
* 支持多阶段 Experiment
* 为多阶段 Experiment 增加新的训练平台:pai 模式从 v0.9 开始支持多阶段 Experiment。
* 为以下内置 Tuner 增加多阶段的功能:
* TPE, Random Search, Anneal, Naïve Evolution, SMAC, Network Morphism, Metis Tuner。
有关详细信息,参考[实现多阶段的 Tuner](AdvancedFeature/MultiPhase.md)
* Web 界面
* 在 Web 界面中可比较 Trial。 有关详细信息,参考[查看 Trial 状态](Tutorial/WebUI.md)
* 允许用户调节 Web 界面的刷新间隔。 有关详细信息,参考[查看概要页面](Tutorial/WebUI.md)
* 更友好的显示中间结果。 有关详细信息,参考[查看 Trial 状态](Tutorial/WebUI.md)
* [命令行接口](Tutorial/Nnictl.md)
* `nnictl experiment delete`:删除一个或多个 Experiment,包括其日志,结果,环境信息核缓存。 用于删除无用的 Experiment 结果,或节省磁盘空间。
* `nnictl platform clean`:用于清理目标平台的磁盘空间。 所提供的 YAML 文件包括了目标平台的信息,与 NNI 配置文件的格式相同。
### Bug 修复和其它更新
* 改进 Tuner 安装过程:增加 [sklearn](https://scikit-learn.org/stable/) 依赖。
* (Bug 修复) 连接 OpenPAI 失败的 HTTP 代码 - [Issue #1076](https://github.com/microsoft/nni/issues/1076)
* (Bug 修复) 为 OpenPAI 平台验证文件名 - [Issue #1164](https://github.com/microsoft/nni/issues/1164)
* (Bug 修复) 更新 Metis Tunerz 中的 GMM
* (Bug 修复) Web 界面负数的刷新间隔时间 - [Issue #1182](https://github.com/microsoft/nni/issues/1182), [Issue #1185](https://github.com/microsoft/nni/issues/1185)
* (Bug 修复) 当只有一个超参时,Web 界面的超参无法正确显示 - [Issue #1192](https://github.com/microsoft/nni/issues/1192)
## 发布 0.8 - 6/4/2019 ## 发布 0.8 - 6/4/2019
### 主要功能 ### 主要功能
...@@ -12,7 +48,7 @@ ...@@ -12,7 +48,7 @@
* 在已经运行非 NNI 任务的 GPU 上也能运行 Trial * 在已经运行非 NNI 任务的 GPU 上也能运行 Trial
* 支持 Kubeflow v1beta2 操作符 * 支持 Kubeflow v1beta2 操作符
* 支持 Kubeflow TFJob/PyTorchJob v1beta2 * 支持 Kubeflow TFJob/PyTorchJob v1beta2
* [通过 NAS 编程接口](./GeneralNasInterfaces.md) * [生成 NAS 编程接口](AdvancedFeature/GeneralNasInterfaces.md)
* 实现了 NAS 的编程接口,可通过 NNI Annotation 很容易的表达神经网络架构搜索空间 * 实现了 NAS 的编程接口,可通过 NNI Annotation 很容易的表达神经网络架构搜索空间
* 提供新命令 `nnictl trial codegen` 来调试 NAS 代码生成部分 * 提供新命令 `nnictl trial codegen` 来调试 NAS 代码生成部分
* 提供 NAS 编程接口教程,NAS 在 MNIST 上的示例,用于 NAS 的可定制的随机 Tuner * 提供 NAS 编程接口教程,NAS 在 MNIST 上的示例,用于 NAS 的可定制的随机 Tuner
...@@ -31,22 +67,22 @@ ...@@ -31,22 +67,22 @@
* 修复表格的 Bug * 修复表格的 Bug
* 优化嵌套搜索空间 * 优化嵌套搜索空间
* 优化 'randint' 类型,并支持下限 * 优化 'randint' 类型,并支持下限
* [比较不同超参搜索调优算法](./CommunitySharings/HpoComparision.md) * [比较不同超参搜索调优算法](CommunitySharings/HpoComparision.md)
* [NAS 算法的对比](./CommunitySharings/NasComparision.md) * [NAS 算法的对比](CommunitySharings/NasComparision.md)
* [Recommenders 上的实践](./CommunitySharings/NniPracticeSharing/RecommendersSvd.md) * [Recommenders 上的实践](CommunitySharings/RecommendersSvd.md)
## 发布 0.7 - 4/29/2018 ## 发布 0.7 - 4/29/2018
### 主要功能 ### 主要功能
* [支持在 Windows 上使用 NNI](./WindowsLocalMode.md) * [支持在 Windows 上使用 NNI](Tutorial/NniOnWindows.md)
* NNI 可在 Windows 上使用本机模式 * NNI 可在 Windows 上使用本机模式
* [支持新的 Advisor: BOHB](./BohbAdvisor.md) * [支持新的 Advisor: BOHB](Tuner/BohbAdvisor.md)
* 支持新的 BOHB Advisor,这是一个健壮而有效的超参调优算法,囊括了贝叶斯优化和 Hyperband 的优点 * 支持新的 BOHB Advisor,这是一个健壮而有效的超参调优算法,囊括了贝叶斯优化和 Hyperband 的优点
* [支持通过 nnictl 来导入导出 Experiment 数据](./Nnictl.md#experiment) * [支持通过 nnictl 来导入导出 Experiment 数据](Tutorial/Nnictl.md#experiment)
* 在 Experiment 执行完后,可生成分析结果报告 * 在 Experiment 执行完后,可生成分析结果报告
* 支持将先前的调优数据导入到 Tuner 和 Advisor 中 * 支持将先前的调优数据导入到 Tuner 和 Advisor 中
* [可为 NNI Trial 任务指定 GPU](./ExperimentConfig.md#localConfig) * [可为 NNI Trial 任务指定 GPU](Tutorial/ExperimentConfig.md#localConfig)
* 通过 gpuIndices 配置来为 Trial 任务指定GPU。如果 Experiment 配置文件中有 gpuIndices,则只有指定的 GPU 会被用于 NNI 的 Trial 任务。 * 通过 gpuIndices 配置来为 Trial 任务指定GPU。如果 Experiment 配置文件中有 gpuIndices,则只有指定的 GPU 会被用于 NNI 的 Trial 任务。
* 改进 Web 界面 * 改进 Web 界面
* 在 Web 界面上使用十进制格式的指标 * 在 Web 界面上使用十进制格式的指标
...@@ -66,18 +102,18 @@ ...@@ -66,18 +102,18 @@
### 主要功能 ### 主要功能
* [版本检查](https://github.com/Microsoft/nni/blob/master/docs/zh_CN/PaiMode.md#version-check) * [版本检查](TrainingService/PaiMode.md)
* 检查 nniManager 和 trialKeeper 的版本是否一致 * 检查 nniManager 和 trialKeeper 的版本是否一致
* [提前终止的任务也可返回最终指标](https://github.com/Microsoft/nni/issues/776) * [提前终止的任务也可返回最终指标](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](https://github.com/microsoft/nni/issues/841)
* 增加两个管道来分离 Tuner 和 Assessor 的消息 * 增加两个管道来分离 Tuner 和 Assessor 的消息
* 使日志集合功能可配置 * 使日志集合功能可配置
* 为所有 Trial 增加中间结果的视图 * 为所有 Trial 增加中间结果的视图
### Bug 修复 ### Bug 修复
* [为 OpenPAI 增加 shmMB 配置](https://github.com/Microsoft/nni/issues/842) * [为 OpenPAI 增加 shmMB 配置](https://github.com/microsoft/nni/issues/842)
* 修复在指标为 dict 时,无法显示任何结果的 Bug。 * 修复在指标为 dict 时,无法显示任何结果的 Bug。
* 修复 hyperband 中浮点类型的计算问题 * 修复 hyperband 中浮点类型的计算问题
* 修复 SMAC Tuner 中搜索空间转换的错误 * 修复 SMAC Tuner 中搜索空间转换的错误
...@@ -93,15 +129,15 @@ ...@@ -93,15 +129,15 @@
### 文档 ### 文档
* 发布中文文档网站:https://nni.readthedocs.io/zh/latest/ * 发布中文文档网站:https://nni.readthedocs.io/zh/latest/
* 调试和维护:https://nni.readthedocs.io/en/latest/HowToDebug.html * 调试和维护:https://nni.readthedocs.io/zh/latest/Tutorial/HowToDebug.html
* Tuner、Assessor 参考:https://nni.readthedocs.io/en/latest/sdk_reference.html#tuner * Tuner、Assessor 参考:https://nni.readthedocs.io/zh/latest/sdk_reference.html#tuner
### Bug 修复和其它更新 ### Bug 修复和其它更新
* 修复了在某些极端条件下,不能正确存储任务的取消状态。 * 修复了在某些极端条件下,不能正确存储任务的取消状态。
* 修复在使用 SMAC Tuner 时,解析搜索空间的错误。 * 修复在使用 SMAC Tuner 时,解析搜索空间的错误。
* 修复 CIFAR-10 样例中的 broken pipe 问题。 * 修复 CIFAR-10 样例中的 broken pipe 问题。
* 为本地训练服务和 NNI 管理器添加单元测试。 * 为本地训练和 NNI 管理器添加单元测试。
* 为远程服务器、OpenPAI 和 Kubeflow 训练平台在 Azure 中增加集成测试。 * 为远程服务器、OpenPAI 和 Kubeflow 训练平台在 Azure 中增加集成测试。
* 在 OpenPAI 客户端中支持 Pylon 路径。 * 在 OpenPAI 客户端中支持 Pylon 路径。
...@@ -109,8 +145,8 @@ ...@@ -109,8 +145,8 @@
### 改进 ### 改进
* [日志目录](https://github.com/Microsoft/nni/blob/v0.5.1/docs/zh_CN/ExperimentConfig.md)可配置 * 可配置[日志目录](https://github.com/microsoft/nni/blob/v0.5.1/docs/ExperimentConfig_zh_CN.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/ExperimentConfig_zh_CN.md),使其更易于调试。
### 文档 ### 文档
...@@ -128,14 +164,14 @@ ...@@ -128,14 +164,14 @@
#### 支持新的 Tuner 和 Assessor #### 支持新的 Tuner 和 Assessor
* 支持新的 [Metis Tuner](MetisTuner.md)**在线**超参调优的场景下,Metis 算法已经被证明非常有效。 * 支持新的 [Metis Tuner](Tuner/MetisTuner.md)**在线**超参调优的场景下,Metis 算法已经被证明非常有效。
* 支持 [ENAS customized tuner](https://github.com/countif/enas_nni)。由 GitHub 社区用户所贡献。它是神经网络的搜索算法,能够通过强化学习来学习神经网络架构,比 NAS 的性能更好。 * 支持 [ENAS customized tuner](https://github.com/countif/enas_nni)。由 GitHub 社区用户所贡献。它是神经网络的搜索算法,能够通过强化学习来学习神经网络架构,比 NAS 的性能更好。
* 支持 [Curve fitting (曲线拟合)Assessor](CurvefittingAssessor.md),通过曲线拟合的策略来实现提前终止 Trial。 * 支持 [Curve fitting (曲线拟合)Assessor](Assessor/CurvefittingAssessor.md),通过曲线拟合的策略来实现提前终止 Trial。
* 进一步支持 [Weight Sharing(权重共享)](./AdvancedNas.md):为 NAS Tuner 通过 NFS 来提供权重共享。 * 进一步支持 [Weight Sharing(权重共享)](AdvancedFeature/AdvancedNas.md):为 NAS Tuner 通过 NFS 来提供权重共享。
#### 改进训练平台 #### 改进训练平台
* [FrameworkController 训练平台](./FrameworkControllerMode.md): 支持使用在 Kubernetes 上使用 FrameworkController。 * [FrameworkController 训练平台](TrainingService/FrameworkControllerMode.md)支持使用在 Kubernetes 上使用 FrameworkController 运行
* FrameworkController 是 Kubernetes 上非常通用的控制器(Controller),能用来运行基于各种机器学习框架的分布式作业,如 TensorFlow,Pytorch, MXNet 等。 * FrameworkController 是 Kubernetes 上非常通用的控制器(Controller),能用来运行基于各种机器学习框架的分布式作业,如 TensorFlow,Pytorch, MXNet 等。
* NNI 为作业定义了统一而简单的规范。 * NNI 为作业定义了统一而简单的规范。
* 如何使用 FrameworkController 的 MNIST 样例。 * 如何使用 FrameworkController 的 MNIST 样例。
...@@ -153,11 +189,11 @@ ...@@ -153,11 +189,11 @@
#### 支持新的 Tuner #### 支持新的 Tuner
* 支持新的 [network morphism](NetworkmorphismTuner.md) Tuner。 * 支持新的 [network morphism](Tuner/NetworkmorphismTuner.md) Tuner。
#### 改进训练平台 #### 改进训练平台
*[Kubeflow 训练平台](KubeflowMode.md)的依赖从 kubectl CLI 迁移到 [Kubernetes API](https://kubernetes.io/docs/concepts/overview/kubernetes-api/) 客户端。 * [Kubeflow 训练平台](TrainingService/KubeflowMode.md)的依赖从 kubectl CLI 迁移到 [Kubernetes API](https://kubernetes.io/docs/concepts/overview/kubernetes-api/) 客户端。
* Kubeflow 训练平台支持 [Pytorch-operator](https://github.com/kubeflow/pytorch-operator) * Kubeflow 训练平台支持 [Pytorch-operator](https://github.com/kubeflow/pytorch-operator)
* 改进将本地代码文件上传到 OpenPAI HDFS 的性能。 * 改进将本地代码文件上传到 OpenPAI HDFS 的性能。
* 修复 OpenPAI 在 WEB 界面的 Bug:当 OpenPAI 认证过期后,Web 界面无法更新 Trial 作业的状态。 * 修复 OpenPAI 在 WEB 界面的 Bug:当 OpenPAI 认证过期后,Web 界面无法更新 Trial 作业的状态。
...@@ -177,18 +213,18 @@ ...@@ -177,18 +213,18 @@
### 新示例 ### 新示例
* [FashionMnist](https://github.com/Microsoft/nni/tree/master/examples/trials/network_morphism),使用 network morphism Tuner * [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) * 使用 PyTorch 的[分布式 MNIST 样例](https://github.com/microsoft/nni/tree/master/examples/trials/mnist-distributed-pytorch)
## 发布 0.4 - 12/6/2018 ## 发布 0.4 - 12/6/2018
### 主要功能 ### 主要功能
* [Kubeflow 训练服务](./KubeflowMode.md) * [Kubeflow 训练平台](TrainingService/KubeflowMode.md)
* 支持 tf-operator * 支持 tf-operator
* 使用 Kubeflow 的[分布式 Trial 样例](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-distributed/dist_mnist.py) * 使用 Kubeflow 的[分布式 Trial 样例](https://github.com/microsoft/nni/tree/master/examples/trials/mnist-distributed/dist_mnist.py)
* [网格搜索 Tuner](GridsearchTuner.md) * [遍历搜索 Tuner](Tuner/GridsearchTuner.md)
* [Hyperband Tuner](HyperbandAdvisor.md) * [Hyperband Tuner](Tuner/HyperbandAdvisor.md)
* 支持在 MAC 上运行 NNI Experiment * 支持在 MAC 上运行 NNI Experiment
* Web 界面 * Web 界面
* 支持 hyperband Tuner * 支持 hyperband Tuner
...@@ -204,7 +240,7 @@ ...@@ -204,7 +240,7 @@
* 异步调度 * 异步调度
* 更新 Docker 文件,增加 pytorch 库 * 更新 Docker 文件,增加 pytorch 库
* 重构 'nnictl stop' 过程,发送 SIGTERM 给 NNI 管理器进程,而不是调用停止 Restful API. * 重构 'nnictl stop' 过程,发送 SIGTERM 给 NNI 管理器进程,而不是调用停止 Restful API.
* 修复 OpenPAI 训练服务的 Bug * 修复 OpenPAI 训练平台的 Bug
* 在 NNI 管理器中为 OpenPAI 集群配置文件支持 IP 配置(nniManagerIp),来修复用户计算机没有 eth0 设备的问题。 * 在 NNI 管理器中为 OpenPAI 集群配置文件支持 IP 配置(nniManagerIp),来修复用户计算机没有 eth0 设备的问题。
* codeDir 中的文件数量上限改为1000,避免用户无意中填写了 root 目录。 * codeDir 中的文件数量上限改为1000,避免用户无意中填写了 root 目录。
* 移除 OpenPAI 作业的 stdout 日志中无用的 ‘metrics is empty’。 在新指标被记录时,仅输出有用的消息,来减少用户检查 OpenPAI Trial 输出时的困惑。 * 移除 OpenPAI 作业的 stdout 日志中无用的 ‘metrics is empty’。 在新指标被记录时,仅输出有用的消息,来减少用户检查 OpenPAI Trial 输出时的困惑。
...@@ -222,7 +258,7 @@ ...@@ -222,7 +258,7 @@
nnictl create --port 8081 --config <config file path> nnictl create --port 8081 --config <config file path>
``` ```
* 支持更新最大 Trial 的数量。 使用 `nnictl update --help` 了解详情。 或参考 [NNICTL](Nnictl.md) 查看完整帮助。 * 支持更新最大 Trial 的数量。 使用 `nnictl update --help` 了解详情。 或参考 [NNICTL](Tutorial/Nnictl.md) 查看完整帮助。
### API 的新功能和更新 ### API 的新功能和更新
...@@ -231,7 +267,7 @@ ...@@ -231,7 +267,7 @@
* 新 API **nni.get_sequence_id()**。 每个 Trial 任务都会被分配一个唯一的序列数字,可通过 nni.get_sequence_id() API 来获取。 * 新 API **nni.get_sequence_id()**。 每个 Trial 任务都会被分配一个唯一的序列数字,可通过 nni.get_sequence_id() API 来获取。
```bash ```bash
git clone -b v0.3 https://github.com/Microsoft/nni.git git clone -b v0.3 https://github.com/microsoft/nni.git
``` ```
* **nni.report_final_result(result)** API 对结果参数支持更多的数据类型。 * **nni.report_final_result(result)** API 对结果参数支持更多的数据类型。
...@@ -254,34 +290,29 @@ ...@@ -254,34 +290,29 @@
docker pull msranni/nni:latest docker pull msranni/nni:latest
``` ```
* 新的 Trial 样例: [NNI Sklearn 样例](https://github.com/Microsoft/nni/tree/master/examples/trials/sklearn) * 新的 Trial 样例:[NNI Sklearn 样例](https://github.com/microsoft/nni/tree/master/examples/trials/sklearn)
* 新的竞赛样例:[Kaggle Competition TGS Salt](https://github.com/Microsoft/nni/tree/master/examples/trials/kaggle-tgs-salt) * 新的竞赛样例:[Kaggle Competition TGS Salt](https://github.com/microsoft/nni/tree/master/examples/trials/kaggle-tgs-salt)
### 其它 ### 其它
* 界面重构,参考[网页文档](WebUI.md),了解如何使用新界面。 * 界面重构,参考[网页文档](Tutorial/WebUI.md),了解如何使用新界面。
* 持续集成:NNI 已切换到 Azure pipelines。 * 持续集成:NNI 已切换到 Azure pipelines。
* [0.3.0 的已知问题](https://github.com/Microsoft/nni/labels/nni030knownissues)
## 发布 0.2.0 - 9/29/2018 ## 发布 0.2.0 - 9/29/2018
### 主要功能 ### 主要功能
* 支持 [OpenPAI](https://github.com/Microsoft/pai) (又称 pai) 训练服务 (参考[这里](./PaiMode.md)来了解如何在 OpenPAI 下提交 NNI 任务) * 支持 [OpenPAI](https://github.com/microsoft/pai) (又称 pai) 训练平台 (参考[这里](TrainingService/PaiMode.md)来了解如何在 OpenPAI 下提交 NNI 任务)
* 支持 pai 模式的训练服务。 NNI Trial 可发送至 OpenPAI 集群上运行 * 支持 pai 模式的训练平台。 NNI Trial 可发送至 OpenPAI 集群上运行
* NNI Trial 输出 (包括日志和模型文件) 会被复制到 OpenPAI 的 HDFS 中。 * 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) Tuner (参考[这里](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 虚拟环境中。 * 支持将 NNI 安装在 [conda](https://conda.io/docs/index.html) 和 Python 虚拟环境中。
* 其它 * 其它
* 更新 ga squad 样例与相关文档 * 更新 ga squad 样例与相关文档
* 用户体验改善及 Bug 修复 * 用户体验改善及 Bug 修复
### 已知问题
[0.2.0 的已知问题](https://github.com/Microsoft/nni/labels/nni020knownissues)
## 发布 0.1.0 - 9/10/2018 (首个版本) ## 发布 0.1.0 - 9/10/2018 (首个版本)
首次发布 Neural Network Intelligence (NNI)。 首次发布 Neural Network Intelligence (NNI)。
...@@ -303,7 +334,3 @@ ...@@ -303,7 +334,3 @@
* 使用 Ubuntu 的 [travis-ci](https://github.com/travis-ci) 来支持持续集成 * 使用 Ubuntu 的 [travis-ci](https://github.com/travis-ci) 来支持持续集成
* 其它 * 其它
* 支持简单的 GPU 任务调度 * 支持简单的 GPU 任务调度
\ No newline at end of file
### 已知问题
[0.1.0 的已知问题](https://github.com/Microsoft/nni/labels/nni010knownissues)
\ No newline at end of file
# 在 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 的准备工作
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
``` ```
6. 参考[指南](QuickStart.md)安装 **NNI** 6. 参考[指南](../Tutorial/QuickStart.md)安装 **NNI**
## Azure 部署的 Kubernetes 的准备工作 ## Azure 部署的 Kubernetes 的准备工作
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
## 设计 ## 设计
参考[Kubeflow 训练服务](./KubeflowMode.md),FrameworkController 服务管道非常类似。 参考[Kubeflow 训练平台](KubeflowMode.md)的设计,FrameworkController 训练平台与其类似。
## 样例 ## 样例
...@@ -109,7 +109,7 @@ frameworkcontroller 模式中的 Trial 配置使用以下主键: ...@@ -109,7 +109,7 @@ frameworkcontroller 模式中的 Trial 配置使用以下主键:
## 如何运行示例 ## 如何运行示例
准备好配置文件后,通过运行 nnictl 来启动 Experiment。 在 FrameworkController 上开始 Experiment 的方法与 Kubeflow 类似,可参考[指南](./KubeflowMode.md)了解更多信息。 准备好配置文件后,通过运行 nnictl 来启动 Experiment。 在 FrameworkController 上开始 Experiment 的方法与 Kubeflow 类似,可参考[指南](KubeflowMode.md)了解更多信息。
## 版本校验 ## 版本校验
......
...@@ -6,9 +6,9 @@ TrainingService 是与平台管理、任务调度相关的模块。 TrainingServ ...@@ -6,9 +6,9 @@ TrainingService 是与平台管理、任务调度相关的模块。 TrainingServ
## 系统架构 ## 系统架构
![](../img/NNIDesign.jpg) ![](../../img/NNIDesign.jpg)
NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 当前,NNI 支持本机,[远程平台](RemoteMachineMode.md)[OpenPAI 平台](PaiMode.md)[Kubeflow 平台](KubeflowMode.md) 以及 [FrameworkController 平台](FrameworkController.md) NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 当前,NNI 支持[本机](LocalMode.md)[远程平台](RemoteMachineMode.md)[OpenPAI 平台](PaiMode.md)[Kubeflow 平台](KubeflowMode.md) 以及 [FrameworkController 平台](FrameworkControllerMode.md)
本文中,会介绍 TrainingService 的简要设计。 如果要添加新的 TrainingService,只需要继承 TrainingServcie 类并实现相应的方法,不需要理解NNIManager、Dispatcher 等其它模块的细节。 本文中,会介绍 TrainingService 的简要设计。 如果要添加新的 TrainingService,只需要继承 TrainingServcie 类并实现相应的方法,不需要理解NNIManager、Dispatcher 等其它模块的细节。
...@@ -160,12 +160,12 @@ NNI 提供了 TrialKeeper 工具,用来帮助维护 Trial 任务。 可以在 ...@@ -160,12 +160,12 @@ NNI 提供了 TrialKeeper 工具,用来帮助维护 Trial 任务。 可以在
TrialKeeper 的架构如下: TrialKeeper 的架构如下:
![](../img/trialkeeper.jpg) ![](../../img/trialkeeper.jpg)
当用户需要在远程云平台上运行作业,要把作业启动的命令行传入 TrailKeeper 中,并在远程云平台上启动 TrailKeeper 进程。 注意,TrialKeeper 在远程平台中使用 RESTful 服务来和 TrainingService 进行通信,用户需要在本地机器启动一个 RESTful 服务来接受 TrialKeeper 的请求。 关于 RESTful 服务的源代码可以在 `nni/src/nni_manager/training_service/common/clusterJobRestServer.ts` 文件夹中找到. 当用户需要在远程云平台上运行作业,要把作业启动的命令行传入 TrailKeeper 中,并在远程云平台上启动 TrailKeeper 进程。 注意,TrialKeeper 在远程平台中使用 RESTful 服务来和 TrainingService 进行通信,用户需要在本地机器启动一个 RESTful 服务来接受 TrialKeeper 的请求。 关于 RESTful 服务的源代码可以在 `nni/src/nni_manager/training_service/common/clusterJobRestServer.ts` 文件夹中找到.
## 参考 ## 参考
有关调试的进一步信息,可参考[这里](HowToDebug.md) 有关调试的进一步信息,可参考[这里](../Tutorial/HowToDebug.md)
如何参与贡献的指南,请参考[这里](Contributing.md) 如何参与贡献的指南,请参考[这里](../Tutorial/Contributing.md)
\ No newline at end of file \ No newline at end of file
...@@ -13,7 +13,7 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 ...@@ -13,7 +13,7 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为
5. 准备 **NFS 服务器** 并导出通用的装载 (mount),推荐将 NFS 服务器路径映射到 `root_squash 选项`,否则可能会在 NNI 复制文件到 NFS 时出现权限问题。 参考[页面](https://linux.die.net/man/5/exports),来了解关于 root_squash 选项,或 **Azure File Storage** 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``` 6. 在安装 NNI 并运行 nnictl 的计算机上安装 **NFS 客户端**。 运行此命令安装 NFSv4 客户端: ```apt-get install nfs-common```
7. 参考[指南](QuickStart.md)安装 **NNI** 7. 参考[指南](../Tutorial/QuickStart.md)安装 **NNI**
## Azure 部署的 Kubernetes 的准备工作 ## Azure 部署的 Kubernetes 的准备工作
...@@ -25,9 +25,9 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 ...@@ -25,9 +25,9 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为
## 设计 ## 设计
![](../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/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,以便浏览日志和输出文件。 对于每个 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) ## 支持的操作符(operator)
...@@ -192,6 +192,8 @@ Kubeflow 模式的配置有下列主键: ...@@ -192,6 +192,8 @@ Kubeflow 模式的配置有下列主键:
* image * image
* 必填。 在 kubeflow 模式中,Kubernetes 会安排 Trial 程序在 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/) 中执行。 此键用来指定 Trial 程序的 pod 使用的 Docker 映像。 * 必填。 在 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)。 可以直接使用此映像,或参考它来生成自己的映像。 * [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)。 可以直接使用此映像,或参考它来生成自己的映像。
* privateRegistryAuthPath
* 可选字段,指定 `config.json` 文件路径。此文件,包含了 Docker 注册的认证令牌,用来从私有 Docker 中拉取映像。 [参考文档](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
* apiVersion * apiVersion
* 必填。 Kubeflow 的 API 版本。 * 必填。 Kubeflow 的 API 版本。
* ps (可选)。 此部分用于配置 TensorFlow 的 parameter 服务器角色。 * ps (可选)。 此部分用于配置 TensorFlow 的 parameter 服务器角色。
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
} }
参考 [SearchSpaceSpec.md](./SearchSpaceSpec.md) 进一步了解搜索空间。 参考 [SearchSpaceSpec.md](../Tutorial/SearchSpaceSpec.md) 进一步了解搜索空间。
> 第三步:定义 Experiment > 第三步:定义 Experiment
> >
...@@ -85,9 +85,9 @@ ...@@ -85,9 +85,9 @@
python ~/nni/examples/trials/mnist-annotation/mnist.py python ~/nni/examples/trials/mnist-annotation/mnist.py
上面的命令会写在 YAML 文件中。 参考[这里](Trials.md)来写出自己的 Experiment 代码。 上面的命令会写在 YAML 文件中。 参考[这里](../TrialExample/Trials.md)来写出自己的 Experiment 代码。
**准备 Tuner**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(进化算法)等等。 也可以实现自己的 Tuner(参考[这里](CustomizeTuner.md))。下面使用了 NNI 内置的 Tuner: **准备 Tuner**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(进化算法)等等。 也可以实现自己的 Tuner(参考[这里](../Tuner/CustomizeTuner.md))。下面使用了 NNI 内置的 Tuner:
tuner: tuner:
builtinTunerName: TPE builtinTunerName: TPE
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
optimize_mode: maximize optimize_mode: maximize
*builtinTunerName* 用来指定 NNI 中的 Tuner,*classArgs* 是传入到 Tuner的参数(内置 Tuner 在[这里](BuiltinTuner.md)),*optimization_mode* 表明需要最大化还是最小化 Trial 的结果。 *builtinTunerName* 用来指定 NNI 中的 Tuner,*classArgs* 是传入到 Tuner的参数(内置 Tuner 在[这里](../Tuner/BuiltinTuner.md)),*optimization_mode* 表明需要最大化还是最小化 Trial 的结果。
**准备配置文件**:实现 Trial 的代码,并选择或实现自定义的 Tuner 后,就要准备 YAML 配置文件了。 NNI 为每个 Trial 样例都提供了演示的配置文件,用命令`cat ~/nni/examples/trials/mnist-annotation/config.yml` 来查看其内容。 大致内容如下: **准备配置文件**:实现 Trial 的代码,并选择或实现自定义的 Tuner 后,就要准备 YAML 配置文件了。 NNI 为每个 Trial 样例都提供了演示的配置文件,用命令`cat ~/nni/examples/trials/mnist-annotation/config.yml` 来查看其内容。 大致内容如下:
...@@ -126,14 +126,14 @@ ...@@ -126,14 +126,14 @@
gpuNum: 0 gpuNum: 0
因为这个 Trial 代码使用了 NNI Annotation 的方法(参考[这里](AnnotationSpec.md) ),所以*useAnnotation* 为 true。 *command* 是运行 Trial 代码所需要的命令,*codeDir* 是 Trial 代码的相对位置。 命令会在此目录中执行。 同时,也需要提供每个 Trial 进程所需的 GPU 数量。 因为这个 Trial 代码使用了 NNI Annotation 的方法(参考[这里](../Tutorial/AnnotationSpec.md) ),所以*useAnnotation* 为 true。 *command* 是运行 Trial 代码所需要的命令,*codeDir* 是 Trial 代码的相对位置。 命令会在此目录中执行。 同时,也需要提供每个 Trial 进程所需的 GPU 数量。
完成上述步骤后,可通过下列命令来启动 Experiment: 完成上述步骤后,可通过下列命令来启动 Experiment:
nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml
参考[这里](Nnictl.md)来了解 *nnictl* 命令行工具的更多用法。 参考[这里](../Tutorial/Nnictl.md)来了解 *nnictl* 命令行工具的更多用法。
## 查看 Experiment 结果 ## 查看 Experiment 结果
......
...@@ -4,7 +4,7 @@ NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运 ...@@ -4,7 +4,7 @@ NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运
## 设置环境 ## 设置环境
参考[指南](QuickStart.md)安装 NNI。 参考[指南](../Tutorial/QuickStart.md)安装 NNI。
## 运行 Experiment ## 运行 Experiment
...@@ -43,7 +43,7 @@ paiConfig: ...@@ -43,7 +43,7 @@ paiConfig:
注意:如果用 pai 模式运行,需要在 YAML 文件中设置 `trainingServicePlatform: pai` 注意:如果用 pai 模式运行,需要在 YAML 文件中设置 `trainingServicePlatform: pai`
与本机模式,以及[远程计算机模式](RemoteMachineMode.md)相比,pai 模式的 Trial 额外的配置: [本机模式](LocalMode.md),以及[远程计算机模式](RemoteMachineMode.md)相比,pai 模式的 Trial 需要额外的配置:
* cpuNum * cpuNum
* 必填。 Trial 程序的 CPU 需求,必须为正数。 * 必填。 Trial 程序的 CPU 需求,必须为正数。
...@@ -53,30 +53,34 @@ paiConfig: ...@@ -53,30 +53,34 @@ paiConfig:
* 必填。 在 pai 模式中,Trial 程序由 OpenPAI 在 [Docker 容器](https://www.docker.com/)中安排运行。 此键用来指定 Trial 程序的容器使用的 Docker 映像。 * 必填。 在 pai 模式中,Trial 程序由 OpenPAI 在 [Docker 容器](https://www.docker.com/)中安排运行。 此键用来指定 Trial 程序的容器使用的 Docker 映像。
* [Docker Hub](https://hub.docker.com/) 上有预制的 NNI Docker 映像 [nnimsra/nni](https://hub.docker.com/r/msranni/nni/)。 它包含了用来启动 NNI Experiment 所依赖的所有 Python 包,Node 模块和 JavaScript。 生成此 Docker 映像的文件在[这里](https://github.com/Microsoft/nni/tree/master/deployment/docker/Dockerfile)。 可以直接使用此映像,或参考它来生成自己的映像。 * [Docker Hub](https://hub.docker.com/) 上有预制的 NNI Docker 映像 [nnimsra/nni](https://hub.docker.com/r/msranni/nni/)。 它包含了用来启动 NNI Experiment 所依赖的所有 Python 包,Node 模块和 JavaScript。 生成此 Docker 映像的文件在[这里](https://github.com/Microsoft/nni/tree/master/deployment/docker/Dockerfile)。 可以直接使用此映像,或参考它来生成自己的映像。
* virtualCluster * virtualCluster
* 可选。 设置 OpenPAI 的 virtualCluster,即虚拟集群。 如果未设置此参数,将使用默认虚拟集群。 * 可选。 设置 OpenPAI 的 virtualCluster,即虚拟集群。 如果未设置此参数,将使用默认(default)虚拟集群。
* shmMB * shmMB
* 可选。 设置 OpenPAI 的 shmMB,即 Docker 中的共享内存。 * 可选。 设置 OpenPAI 的 shmMB,即 Docker 中的共享内存。
* authFile
* 可选,设置在使用 OpenPAI 时的私有 Docker 认证文件路径。[参考文档](https://github.com/microsoft/pai/blob/2ea69b45faa018662bc164ed7733f6fdbb4c42b3/docs/faq.md#q-how-to-use-private-docker-registry-job-image-when-submitting-an-openpai-job)
完成并保存 NNI Experiment 配置文件后(例如可保存为:exp_pai.yml),运行以下命令: 完成并保存 NNI Experiment 配置文件后(例如可保存为:exp_pai.yml),运行以下命令:
nnictl create --config exp_pai.yml nnictl create --config exp_pai.yml
来在 pai 模式下启动 Experiment。 NNI 会为每个 Trial 创建 OpenPAI 作业,作业名称的格式为 `nni_exp_{experiment_id}_trial_{trial_id}`。 可以在 OpenPAI 集群的网站中看到 NNI 创建的作业,例如: ![](../img/nni_pai_joblist.jpg) 来在 pai 模式下启动 Experiment。 NNI 会为每个 Trial 创建 OpenPAI 作业,作业名称的格式为 `nni_exp_{experiment_id}_trial_{trial_id}`。 可以在 OpenPAI 集群的网站中看到 NNI 创建的作业,例如: ![](../../img/nni_pai_joblist.jpg)
注意:pai 模式下,NNIManager 会启动 RESTful 服务,监听端口为 NNI 网页服务器的端口加1。 例如,如果网页端口为`8080`,那么 RESTful 服务器会监听在 `8081`端口,来接收运行在 Kubernetes 中的 Trial 作业的指标。 因此,需要在防火墙中启用端口 `8081` 的 TCP 协议,以允许传入流量。 注意:pai 模式下,NNIManager 会启动 RESTful 服务,监听端口为 NNI 网页服务器的端口加1。 例如,如果网页端口为`8080`,那么 RESTful 服务器会监听在 `8081`端口,来接收运行在 Kubernetes 中的 Trial 作业的指标。 因此,需要在防火墙中启用端口 `8081` 的 TCP 协议,以允许传入流量。
当一个 Trial 作业完成后,可以在 NNI 网页的概述页面(如:http://localhost:8080/oview)中查看 Trial 的信息。 当一个 Trial 作业完成后,可以在 NNI 网页的概述页面(如:http://localhost:8080/oview)中查看 Trial 的信息。
在 Trial 列表页面中展开 Trial 信息,点击如下的 logPath: ![](../img/nni_webui_joblist.jpg) 在 Trial 列表页面中展开 Trial 信息,点击如下的 logPath: ![](../../img/nni_webui_joblist.jpg)
接着将会打开 HDFS 的 WEB 界面,并浏览到 Trial 的输出文件: ![](../img/nni_trial_hdfs_output.jpg) 接着将会打开 HDFS 的 WEB 界面,并浏览到 Trial 的输出文件: ![](../../img/nni_trial_hdfs_output.jpg)
在输出目录中可以看到三个文件:stderr, stdout, 以及 trial.log 在输出目录中可以看到三个文件:stderr, stdout, 以及 trial.log
如果希望将 Trial 的模型数据等其它输出保存到HDFS中,可在 Trial 代码中使用 `NNI_OUTPUT_DIR` 来自己保存输出文件,NNI SDK会从 Trial 的容器中将 `NNI_OUTPUT_DIR` 中的文件复制到 HDFS 中。 ## 数据管理
如果在使用 pai 模式时遇到任何问题,请到 [NNI Github](https://github.com/Microsoft/nni) 中创建问题。 如果训练数据集不大,可放在 codeDir中,NNI会将其上传到 HDFS,或者构建 Docker 映像来包含数据。 如果数据集非常大,则不可放在 codeDir 中,可参考此[指南](https://github.com/microsoft/pai/blob/master/docs/user/storage.md)来将数据目录挂载到容器中。
如果要将 Trial 的其它输出保存到 HDFS 上,如模型文件等,需要在 Trial 代码中使用 `NNI_OUTPUT_DIR` 来保存输出文件。NNI 的 SDK 会将文件从 Trial 容器的 `NNI_OUTPUT_DIR` 复制到 HDFS 上,目标路径为:`hdfs://host:port/{username}/nni/{experiments}/{experimentId}/trials/{trialId}/nnioutput`
## 版本校验 ## 版本校验
...@@ -86,4 +90,4 @@ paiConfig: ...@@ -86,4 +90,4 @@ paiConfig:
2. 从 NNIManager 0.6 开始,与 triakKeeper 的版本必须一致。 例如,如果 NNIManager 是 0.6 版,则 trialKeeper 也必须是 0.6 版。 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 版本一起使用。 3. 注意,只有版本的前两位数字才会被检查。例如,NNIManager 0.6.1 可以和 trialKeeper 的 0.6 或 0.6.2 一起使用,但不能与 trialKeeper 的 0.5.1 或 0.7 版本一起使用。
如果 Experiment 无法运行,而且不能确认是否是因为版本不匹配造成的,可以在 Web 界面检查是否有相关的错误消息。 ![](../img/version_check.png) 如果 Experiment 无法运行,而且不能确认是否是因为版本不匹配造成的,可以在 Web 界面检查是否有相关的错误消息。 ![](../../img/version_check.png)
\ No newline at end of file \ No newline at end of file
...@@ -12,7 +12,7 @@ NNI 支持通过 SSH 通道在多台计算机上运行 Experiment,称为 `remo ...@@ -12,7 +12,7 @@ NNI 支持通过 SSH 通道在多台计算机上运行 Experiment,称为 `remo
## 设置 NNI 环境 ## 设置 NNI 环境
按照[指南](QuickStart.md)在每台计算机上安装 NNI。 按照[指南](../Tutorial/QuickStart.md)在每台计算机上安装 NNI。
## 运行 Experiment ## 运行 Experiment
......
...@@ -51,7 +51,7 @@ python3 -m pip install torchvision ...@@ -51,7 +51,7 @@ python3 -m pip install torchvision
*实现代码:[main.py](https://github.com/Microsoft/nni/blob/master/examples/trials/cifar10_pytorch/main.py)* *实现代码:[main.py](https://github.com/Microsoft/nni/blob/master/examples/trials/cifar10_pytorch/main.py)*
还可直接修改现有的代码来支持 NNI,参考:[如何编写 Trial](Trials.md) 还可直接修改现有的代码来支持 Nni,参考:[如何实现 Trial](Trials.md)
**配置** **配置**
......
...@@ -103,7 +103,7 @@ if __name__ == '__main__': ...@@ -103,7 +103,7 @@ if __name__ == '__main__':
} }
``` ```
参考[这里](SearchSpaceSpec.md),了解更多变量类型。 参考[这里](../Tutorial/SearchSpaceSpec.md),了解更多变量类型。
### 3.3 在代码中使用 NNI SDK ### 3.3 在代码中使用 NNI SDK
...@@ -153,7 +153,7 @@ if __name__ == '__main__': ...@@ -153,7 +153,7 @@ if __name__ == '__main__':
run(lgb_train, lgb_eval, PARAMS, X_test, y_test) run(lgb_train, lgb_eval, PARAMS, X_test, y_test)
``` ```
### 3.4 编写配置文件并运行 ### 3.4 实现配置文件并运行
在配置文件中,可以设置如下内容: 在配置文件中,可以设置如下内容:
......
...@@ -6,7 +6,7 @@ NNI 支持多种调优算法来为 scikit-learn 搜索最好的模型和超参 ...@@ -6,7 +6,7 @@ NNI 支持多种调优算法来为 scikit-learn 搜索最好的模型和超参
## 1. 如何运行此样例 ## 1. 如何运行此样例
安装 NNI 包,并使用命令行工具 `nnictl` 来启动 Experiment。 有关安装和环境准备的内容,参考[这里](QuickStart.md) 安装 NNI 包,并使用命令行工具 `nnictl` 来启动 Experiment。 有关安装和环境准备的内容,参考[这里](../Tutorial/QuickStart.md)
安装完 NNI 后,进入相应的目录,输入下列命令即可启动 Experiment: 安装完 NNI 后,进入相应的目录,输入下列命令即可启动 Experiment:
...@@ -82,7 +82,7 @@ nnictl create --config ./config.yml ...@@ -82,7 +82,7 @@ nnictl create --config ./config.yml
} }
``` ```
就可以使用这些变量来编写 scikit-learn 的代码。 就可以使用这些变量来实现 scikit-learn 的代码。
* **第三步** * **第三步**
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
6. ADD-SKIP (在随机层之间一致). 6. ADD-SKIP (在随机层之间一致).
7. REMOVE-SKIP (移除随机跳过). 7. REMOVE-SKIP (移除随机跳过).
![](../../examples/trials/ga_squad/ga_squad.png) ![](../../../examples/trials/ga_squad/ga_squad.png)
### 新版本 ### 新版本
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
} }
``` ```
参考 [SearchSpaceSpec.md](./SearchSpaceSpec.md) 进一步了解搜索空间。 Tuner 会根据搜索空间来生成配置,即从每个超参的范围中选一个值。 参考 [SearchSpaceSpec.md](../Tutorial/SearchSpaceSpec.md) 进一步了解搜索空间。 Tuner 会根据搜索空间来生成配置,即从每个超参的范围中选一个值。
### 第二步:更新模型代码 ### 第二步:更新模型代码
...@@ -45,7 +45,7 @@ RECEIVED_PARAMS = nni.get_next_parameter() ...@@ -45,7 +45,7 @@ RECEIVED_PARAMS = nni.get_next_parameter()
nni.report_intermediate_result(metrics) nni.report_intermediate_result(metrics)
``` ```
`指标`可以是任意的 Python 对象。 如果使用了 NNI 内置的 Tuner/Assessor,`指标`只可以是两种类型:1) 数值类型,如 float、int, 2) dict 对象,其中必须由键名为 `default`,值为数值的项目。 `指标`会发送给[Assessor](BuiltinAssessors.md)。 通常,`指标`是损失值或精度。 `指标`可以是任意的 Python 对象。 如果使用了 NNI 内置的 Tuner/Assessor,`指标`只可以是两种类型:1) 数值类型,如 float、int, 2) dict 对象,其中必须由键名为 `default`,值为数值的项目。 `指标`会发送给 [Assessor](../Assessor/BuiltinAssessor.md)。 通常,`指标`是损失值或精度。
* 返回配置的最终性能 * 返回配置的最终性能
...@@ -53,7 +53,7 @@ nni.report_intermediate_result(metrics) ...@@ -53,7 +53,7 @@ nni.report_intermediate_result(metrics)
nni.report_final_result(metrics) nni.report_final_result(metrics)
``` ```
`指标`也可以是任意的 Python 对象。 如果使用了内置的 Tuner/Assessor,`指标`格式和 `report_intermediate_result` 中一样,这个数值表示模型的性能,如精度、损失值等。 `指标`会发送给 [Tuner](BuiltinTuner.md) `指标`也可以是任意的 Python 对象。 如果使用了内置的 Tuner/Assessor,`指标`格式和 `report_intermediate_result` 中一样,这个数值表示模型的性能,如精度、损失值等。 `指标`会发送给 [Tuner](../Tuner/BuiltinTuner.md)
### 第三步:启用 NNI API ### 第三步:启用 NNI API
...@@ -64,9 +64,9 @@ useAnnotation: false ...@@ -64,9 +64,9 @@ useAnnotation: false
searchSpacePath: /path/to/your/search_space.json searchSpacePath: /path/to/your/search_space.json
``` ```
参考 [这里](ExperimentConfig.md) 进一步了解如何配置实验 参考[这里](../Tutorial/ExperimentConfig.md)进一步了解如何配置 Experiment
* 参考[这里](https://nni.readthedocs.io/en/latest/sdk_reference.html),了解更多 NNI API (例如 `nni.get_sequence_id()`)。 * 参考[这里](https://nni.readthedocs.io/zh/latest/sdk_reference.html),了解更多 NNI API (例如 `nni.get_sequence_id()`)。
<a name="nni-annotation"></a> <a name="nni-annotation"></a>
...@@ -123,7 +123,7 @@ with tf.Session() as sess: ...@@ -123,7 +123,7 @@ with tf.Session() as sess:
* `@nni.variable` 会对它的下面一行进行修改,左边被赋值变量必须在 `@nni.variable``name` 参数中指定。 * `@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) Annotation 的语法和用法等,参考 [Annotation](../Tutorial/AnnotationSpec.md)
### 第二步:启用 Annotation ### 第二步:启用 Annotation
...@@ -158,7 +158,7 @@ echo $? `date +%s%3N` >/home/user_name/nni/experiments/$experiment_id$/trials/$t ...@@ -158,7 +158,7 @@ echo $? `date +%s%3N` >/home/user_name/nni/experiments/$experiment_id$/trials/$t
当 Trial 运行在 OpenPAI 这样的远程服务器上时,`NNI_OUTPUT_DIR` 仅会指向 Trial 的输出目录,而 `run.sh` 不会在此目录中。 `trial.log` 文件会被复制回本机的 Trial 目录中。目录的默认位置在 `~/nni/experiments/$experiment_id$/trials/$trial_id$/` 当 Trial 运行在 OpenPAI 这样的远程服务器上时,`NNI_OUTPUT_DIR` 仅会指向 Trial 的输出目录,而 `run.sh` 不会在此目录中。 `trial.log` 文件会被复制回本机的 Trial 目录中。目录的默认位置在 `~/nni/experiments/$experiment_id$/trials/$trial_id$/`
详细信息,可参考[调试指南](HowToDebug.md) 详细信息,可参考[调试指南](../Tutorial/HowToDebug.md)
<a name="more-examples"></a> <a name="more-examples"></a>
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
## Batch Tuner(批处理 Tuner) ## Batch Tuner(批处理 Tuner)
Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 的[搜索空间](SearchSpaceSpec.md)只支持 `choice` Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 的[搜索空间](../Tutorial/SearchSpaceSpec.md)只支持 `choice`
建议场景:如果 Experiment 配置已确定,可通过 choice 将它们罗列到搜索空间文件中运行即可。 建议场景:如果 Experiment 配置已确定,可通过 choice 将它们罗列到搜索空间文件中运行即可。
\ No newline at end of file
...@@ -12,7 +12,7 @@ BOHB 依赖 HB(Hyperband)来决定每次跑多少组参数和每组参数分 ...@@ -12,7 +12,7 @@ BOHB 依赖 HB(Hyperband)来决定每次跑多少组参数和每组参数分
按照 Hyperband 的方式来选择每次跑的参数个数与分配多少资源(budget),并继续使用“连续减半(SuccessiveHalving)”策略,更多有关Hyperband算法的细节,请参考[NNI 中的 Hyperband](HyperbandAdvisor.md)[Hyperband 的参考论文](https://arxiv.org/abs/1603.06560)。 下面的伪代码描述了这个过程。 按照 Hyperband 的方式来选择每次跑的参数个数与分配多少资源(budget),并继续使用“连续减半(SuccessiveHalving)”策略,更多有关Hyperband算法的细节,请参考[NNI 中的 Hyperband](HyperbandAdvisor.md)[Hyperband 的参考论文](https://arxiv.org/abs/1603.06560)。 下面的伪代码描述了这个过程。
![](../img/bohb_1.png) ![](../../img/bohb_1.png)
### BO(贝叶斯优化) ### BO(贝叶斯优化)
...@@ -20,11 +20,11 @@ BOHB 的 BO 与 TPE 非常相似, 它们的主要区别是: BOHB 中使用一个 ...@@ -20,11 +20,11 @@ BOHB 的 BO 与 TPE 非常相似, 它们的主要区别是: BOHB 中使用一个
树形超参评估器 (TPE): 使用 KDE (核密度估计) 来对密度进行建模。 树形超参评估器 (TPE): 使用 KDE (核密度估计) 来对密度进行建模。
![](../img/bohb_2.png) ![](../../img/bohb_2.png)
为了建模有效的核密度估计(KDE),设置了一个建立模型所需的最小观察点数(Nmin),在 Experiment 中它的默认值为 d+1(d是搜索空间的维度),其中 d 也是一个可以设置的超参数。 因为希望尽早地建立模型,所以当 Nb = |Db|,即当已经观察到的计算资源(budget)为 b 的点数满足 q · Nb ≥ Nmin 时,立即建立模型来指导之后参数的选择。所以,在使用了刚开始Nmin + 2 个随机选择的参数之后,会按照下式将观察到的点进行分类 为了建模有效的核密度估计(KDE),设置了一个建立模型所需的最小观察点数(Nmin),在 Experiment 中它的默认值为 d+1(d是搜索空间的维度),其中 d 也是一个可以设置的超参数。 因为希望尽早地建立模型,所以当 Nb = |Db|,即当已经观察到的计算资源(budget)为 b 的点数满足 q · Nb ≥ Nmin 时,立即建立模型来指导之后参数的选择。所以,在使用了刚开始Nmin + 2 个随机选择的参数之后,会按照下式将观察到的点进行分类
![](../img/bohb_3.png) ![](../../img/bohb_3.png)
按照公式将观察到的点分成好与坏两类点,来分别拟合两个不同的密度分布。 按照公式将观察到的点分成好与坏两类点,来分别拟合两个不同的密度分布。
...@@ -32,13 +32,13 @@ BOHB 的 BO 与 TPE 非常相似, 它们的主要区别是: BOHB 中使用一个 ...@@ -32,13 +32,13 @@ BOHB 的 BO 与 TPE 非常相似, 它们的主要区别是: BOHB 中使用一个
## 2. 流程 ## 2. 流程
![](../img/bohb_6.jpg) ![](../../img/bohb_6.jpg)
以上这张图展示了 BOHB 的工作流程。 将每次训练的最大资源配置(max_budget)设为 9,最小资源配置设为(min_budget)1,逐次减半比例(eta)设为 3,其他的超参数为默认值。 那么在这个例子中,s_max 计算的值为 2, 所以会持续地进行 {s=2, s=1, s=0, s=2, s=1, s=0, ...} 的循环。 在“逐次减半”(SuccessiveHalving)算法的每一个阶段,即图中橙色框,都将选取表现最好的前 1/eta 个参数,并在赋予更多计算资源(budget)的情况下运行。不断重复“逐次减半” (SuccessiveHalving)过程,直到这个循环结束。 同时,收集这些试验的超参数组合,使用了计算资源(budget)和其表现(metrics),使用这些数据来建立一个以使用了多少计算资源(budget)为维度的多维核密度估计(KDE)模型。 这个多维的核密度估计(KDE)模型将用于指导下一个循环的参数选择。 以上这张图展示了 BOHB 的工作流程。 将每次训练的最大资源配置(max_budget)设为 9,最小资源配置设为(min_budget)1,逐次减半比例(eta)设为 3,其他的超参数为默认值。 那么在这个例子中,s_max 计算的值为 2, 所以会持续地进行 {s=2, s=1, s=0, s=2, s=1, s=0, ...} 的循环。 在“逐次减半”(SuccessiveHalving)算法的每一个阶段,即图中橙色框,都将选取表现最好的前 1/eta 个参数,并在赋予更多计算资源(budget)的情况下运行。不断重复“逐次减半” (SuccessiveHalving)过程,直到这个循环结束。 同时,收集这些试验的超参数组合,使用了计算资源(budget)和其表现(metrics),使用这些数据来建立一个以使用了多少计算资源(budget)为维度的多维核密度估计(KDE)模型。 这个多维的核密度估计(KDE)模型将用于指导下一个循环的参数选择。
有关如何使用多维的KDE模型来指导参数选择的采样规程,用以下伪代码来描述。 有关如何使用多维的KDE模型来指导参数选择的采样规程,用以下伪代码来描述。
![](../img/bohb_4.png) ![](../../img/bohb_4.png)
## 3. 用法 ## 3. 用法
...@@ -50,7 +50,7 @@ nnictl package install --name=SMAC ...@@ -50,7 +50,7 @@ nnictl package install --name=SMAC
要使用 BOHB,需要在 Experiment 的 YAML 配置文件进行如下改动: 要使用 BOHB,需要在 Experiment 的 YAML 配置文件进行如下改动:
```yml ```yaml
advisor: advisor:
builtinAdvisorName: BOHB builtinAdvisorName: BOHB
classArgs: classArgs:
...@@ -96,6 +96,6 @@ Advisor 有大量的文件、函数和类。 文件内容的简单介绍: ...@@ -96,6 +96,6 @@ Advisor 有大量的文件、函数和类。 文件内容的简单介绍:
使用BOHB这个调参算法,在CNN模型上跑MNIST数据集。 下面是实验结果: 使用BOHB这个调参算法,在CNN模型上跑MNIST数据集。 下面是实验结果:
![](../img/bohb_5.png) ![](../../img/bohb_5.png)
更多的实验结果可以在 [参考论文](https://arxiv.org/abs/1807.01774)中看到,们可以发现BOHB很好的利用了之前的试验结果,且在开发与探索中得到了一个很好的平衡。 更多的实验结果可以在 [参考论文](https://arxiv.org/abs/1807.01774)中看到,们可以发现BOHB很好的利用了之前的试验结果,且在开发与探索中得到了一个很好的平衡。
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tuner 的简单介绍: NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tuner 的简单介绍:
注意:点击 **Tuner 的名称**可看到 Tuner 的安装需求,建议的场景以及示例。 算法的详细说明在每个 Tuner 建议场景的最后。 [本文](./CommunitySharings/HpoComparision.md)对比了不同 Tuner 在几个问题下的不同效果。 注意:点击 **Tuner 的名称**可看到 Tuner 的安装需求,建议的场景以及示例。 算法的详细说明在每个 Tuner 建议场景的最后。 [本文](../CommunitySharings/HpoComparision.md)对比了不同 Tuner 在几个问题下的不同效果。
当前支持的 Tuner: 当前支持的 Tuner:
...@@ -11,10 +11,10 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tu ...@@ -11,10 +11,10 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tu
| [**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) | | [**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) | | [**Random Search(随机搜索)**](#Random) | 在超参优化时,随机搜索算法展示了其惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 [参考论文](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) |
| [**Anneal(退火算法)**](#Anneal) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 | | [**Anneal(退火算法)**](#Anneal) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 |
| [**Naive Evolution(进化算法)**](#Evolution) | 朴素进化算法来自于大规模图像分类进化。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 [参考论文](https://arxiv.org/pdf/1703.01041.pdf) | | [**Naïve Evolution(进化算法)**](#Evolution) | Naïve Evolution(朴素进化算法来自于 Large-Scale Evolution of Image Classifiers。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 Naïve 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) | | [**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 类型。 | | [**Batch Tuner(批量调参器)**](#Batch) | Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 |
| [**Grid Search(遍历搜索)**](#GridSearch) | Grid Search 会穷举定义在搜索空间文件中的所有超参组合。 网格搜索可以使用的类型有 choice, quniform, qloguniform。 quniform 和 qloguniform 中的数值 q 具有特别的含义(不同于搜索空间文档中的说明)。 它表示了在最高值与最低值之间采样的值的数量。 | | [**Grid Search(遍历搜索)**](#GridSearch) | Grid Search 会穷举定义在搜索空间文件中的所有超参组合。 遍历搜索可以使用的类型有 choice, quniform, randint。 |
| [**Hyperband**](#Hyperband) | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并使用少量的资源来找到有可能好的配置,然后继续训练找到其中更好的配置。 [参考论文](https://arxiv.org/pdf/1603.06560.pdf) | | [**Hyperband**](#Hyperband) | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并使用少量的资源来找到有可能好的配置,然后继续训练找到其中更好的配置。 [参考论文](https://arxiv.org/pdf/1603.06560.pdf) |
| [**Network Morphism**](#NetworkMorphism) | Network Morphism 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 然后使用历史的架构和指标,来估计子网络的值。 然后会选择最有希望的模型进行训练。 [参考论文](https://arxiv.org/abs/1806.10282) | | [**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/) | | [**Metis Tuner**](#MetisTuner) | 大多数调参工具仅仅预测最优配置,而 Metis 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 它不进行随机取样。 大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。 [参考论文](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) |
...@@ -41,6 +41,8 @@ TPE 是一种黑盒优化方法,可以使用在各种场景中,通常情况 ...@@ -41,6 +41,8 @@ TPE 是一种黑盒优化方法,可以使用在各种场景中,通常情况
* **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 * **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
注意:为实现大规模并发 Trial,TPE 的并行性得到了优化。 有关优化原理或开启优化,参考 [TPE 文档](HyperoptTuner.md)
**示例** **示例**
```yaml ```yaml
...@@ -105,13 +107,13 @@ tuner: ...@@ -105,13 +107,13 @@ tuner:
<a name="Evolution"></a> <a name="Evolution"></a>
![](https://placehold.it/15/1589F0/000000?text=+) `Naive Evolution` ![](https://placehold.it/15/1589F0/000000?text=+) `Naïve Evolution`
> 名称:**Evolution** > 名称:**Evolution**
**建议场景** **建议场景**
此算法对计算资源的需求相对较高。 需要非常大的初始种群,以免落入局部最优中。 如果 Trial 时间很短,或使用了 Assessor,就非常适。 如果 Trial 代码支持权重迁移,即每次 Trial 会从上一轮继承已经收敛的权重,建议使用此算法。 这会大大提高训练速度。 [详细说明](./EvolutionTuner.md) 此算法对计算资源的需求相对较高。 需要非常大的初始种群,以免落入局部最优中。 如果 Trial 时间很短,或使用了 Assessor,就非常适合此算法。 如果 Trial 代码支持权重迁移,即每次 Trial 会从上一轮继承已经收敛的权重,建议使用此算法。 这会大大提高训练速度。 [详细说明](./EvolutionTuner.md)
**示例** **示例**
...@@ -208,7 +210,7 @@ tuner: ...@@ -208,7 +210,7 @@ tuner:
**建议场景** **建议场景**
注意,搜索空间仅支持 `choice`, `quniform`, `qloguniform``quniform``qloguniform` 中的 **数字 `q` 有不同的含义(与[搜索空间](./SearchSpaceSpec.md)说明不同)。 这里的意义是在 `low``high` 之间均匀取值的数量。</p> 注意,搜索空间仅支持 `choice`, `quniform`, `randint`
当搜索空间比较小,能够遍历整个搜索空间。 [详细说明](./GridsearchTuner.md) 当搜索空间比较小,能够遍历整个搜索空间。 [详细说明](./GridsearchTuner.md)
...@@ -260,7 +262,7 @@ advisor: ...@@ -260,7 +262,7 @@ advisor:
**安装** **安装**
必须先安装 [pyTorch](https://pytorch.org/get-started/locally) NetworkMorphism 需要先安装 [PyTorch](https://pytorch.org/get-started/locally)[Keras](https://keras.io/#installation) 才能使用。 对应的 requirements 文件在[这里](https://github.com/microsoft/nni/blob/master/examples/trials/network_morphism/requirements.txt)
**建议场景** **建议场景**
...@@ -326,7 +328,7 @@ tuner: ...@@ -326,7 +328,7 @@ tuner:
**安装** **安装**
BOHB Advisor 的使用依赖 [ConfigSpace](https://github.com/automl/ConfigSpace) 包,第一次使用 BOHB ,在命令行运行以下命令安装 ConfigSpace。 BOHB Advisor 的使用依赖 [ConfigSpace](https://github.com/automl/ConfigSpace) 包,第一次使用 BOHB 的时候,在命令行运行以下的指令来安装 ConfigSpace。
```bash ```bash
nnictl package install --name=BOHB nnictl package install --name=BOHB
...@@ -353,7 +355,7 @@ nnictl package install --name=BOHB ...@@ -353,7 +355,7 @@ nnictl package install --name=BOHB
**示例** **示例**
```yml ```yaml
advisor: advisor:
builtinAdvisorName: BOHB builtinAdvisorName: BOHB
classArgs: classArgs:
......
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