【重磅】微软开源自动机器学习工具 - NNI
在机器学习建模时,除了准备数据,最耗时耗力的就是尝试各种超参组合,找到模型最佳效果的过程了。即使是对于有经验的算法工程师和数据科学家,有时候也很难把握其中的规律,只能多次尝试,找到较好的超参组合。而对于初学者来说,要花更多的时间和精力。
自动机器学习这两年成为了热门领域,着力解决超参调试过程的挑战,通过超参选择算法和强大的算力来加速超参搜索的过程。
NNI (Neural Network Intelligence) 是微软开源的自动机器学习工具。与当前的各种自动机器学习服务或工具相比,有非常独特的价值。本文先介绍一下 NNI 的特点,然后在后续的安装、使用章节详细介绍如何上手。
-
支持私有部署。云服务中的自动机器学习直接提供了自动机器学习的服务,不仅包含了自动机器学习的功能,也包含了算力。如果团队或个人已经有了很强的算力资源,就需要支持私有部署的自动学习工具了。
NNI 支持私有部署。整个部署也很简单,使用 pip 即可完成安装。
-
分布式调度。NNI 可以在单机上完成试验,也支持以下两种分布式调度方案:
- GPU 远程服务器。通过 SSH 控制多台 GPU 服务器协同完成试验,并能够计划每个试验所需要的 GPU 的数量。
- OpenPAI。通过 OpenPAI,NNI 的试验可以在独立的 Docker 中运行,支持多样的实验环境。在计算资源规划上,不仅能指定 GPU 资源,还能制定 CPU,内存资源。
-
超参搜索的直接支持。当前,大部分自动机器学习服务与工具都是在某个任务上使用,比如图片分类。这样的好处是,普通用户只要有标记数据,就能训练出一个高质量的平台,不需要任何模型训练方面的知识。但这需要对每个训练任务进行定制,将模型训练的复杂性包装起来。
与大部分现有的自动机器学习服务与工具不同,NNI 需要用户提供训练代码,并指定超参的搜索范围。这样的好处在于,NNI 几乎是通用的工具,任何训练任务都可以使用 NNI 来进行超参搜索。但另一方面,NNI 的通用性,也带来了一定的使用门槛。使用 NNI 需要有基本的模型训练的经验。
兼容已有代码。NNI 使用时,可以通过注释的方法来进行无侵入式的改动。不会影响代码原先的用途。通过注释方式支持 NNI 后,代码还可以单独运行。
-
易于扩展。NNI 的设计上有很强的可扩展性。通过下面这些扩展性,能将系统与算法相隔离,把系统复杂性都包装起来。
Tuner 接口,可以轻松实现新的超参调试算法。研究人员可以使用 NNI 来试验新的超参搜索方法,比如在强化学习时,在 Tuner 中支持 off-policy 来探索比较好的超参组合,在 Trial 里进行 on-policy 的实际验证。也可以使用 Tuner 和训练代码相配合,支持复杂的超参搜索方法。如,实现 ENAS ,将 Tuner 作为 Control,在多个 Trial 中并行试验。
Accessor 接口,可以加速参数搜索,将表现不好的超参组合提前结束。
NNI 还提供了可扩展的集群接口,可以定制对接的计算集群。方便连接已经部署的计算集群。
-
可视化界面。在启动一次超参搜索试验后,就可以通过可视化界面来查看试验进展,并帮助超参结果,洞察更多信息。
-
首页,可以看到当前试验的进展情况,搜索参数和效果最好的一些超参组合。
-
优化进度页面可以看到按时序排列的精度或损失值(此图为精度)。可以看到,时间越靠后(右侧),精度高的越多。这说明选择的超参探索算法随着时间能找到一些好的超参空间继续探索。
- 通过超参的分布图来直观地看到哪些超参值会明显比较好,或者看出它们之间的关联。通过下面的颜色图就能直观地看到红色(即精度较高的超参组合)线条所表达的丰富信息。如:
- 卷积核大一些会表现较好。
- 全连接层大了不一定太好。也许是所需要的训练时间增加了,训练速度太慢造成的。
- 而学习率小一些(小于0.03),表现基本都不错。
- ReLU 比 tanh 等其它激活函数也好不少。
- ...
-
通过试验状态页面,能看到每个试验的时间长度以及具体的超参组合。
-
通过控制页面还可以实时的增加试验的超参组合,或者调整超参的范围。
-
最后,再贴一次地址:https://github.com/microsoft/nni
使用方法和更多详情,可参考 GitHub 的官网,有问题或 bug 可以直接提 Issue。
微软的一贯风格,感觉就是进化算法大合集搞搞搞
NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。
NNI v0.9 已发布!
支持的框架 | 调优算法 | 训练平台 |
|
Tuner(调参器)
超参 Tuner 网络结构 Tuner |
使用场景
- 在本机尝试使用不同的自动机器学习(AutoML)算法来训练模型。
- 在分布式环境中加速自动机器学习(如:远程 GPU 工作站和云服务器)。
- 定制自动机器学习算法,或比较不同的自动机器学习算法。
- 在机器学习平台中支持自动机器学习。
相关项目
以开发和先进技术为目标,Microsoft Research (MSR) 发布了一些开源项目。
- OpenPAI:作为开源平台,提供了完整的 AI 模型训练和资源管理能力,能轻松扩展,并支持各种规模的私有部署、云和混合环境。
- FrameworkController:开源的通用 Kubernetes Pod 控制器,通过单个控制器来编排 Kubernetes 上所有类型的应用。
- MMdnn:一个完整、跨框架的解决方案,能够转换、可视化、诊断深度神经网络模型。 MMdnn 中的 "MM" 表示model management(模型管理),而 "dnn" 是 deep neural network(深度神经网络)的缩写。
- SPTAG : Space Partition Tree And Graph (SPTAG) 是用于大规模向量的最近邻搜索场景的开源库。
我们鼓励研究人员和学生利用这些项目来加速 AI 开发和研究。
当前支持的 Tuner:
Tuner(调参器) | 算法简介 |
---|---|
TPE | Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 参考论文 |
Random Search(随机搜索) | 在超参优化时,随机搜索算法展示了其惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 参考论文 |
Anneal(退火算法) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 |
Naïve Evolution(进化算法) | Naïve Evolution(朴素进化算法)来自于 Large-Scale Evolution of Image Classifiers。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 Naïve Evolution 需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 参考论文 |
SMAC | SMAC 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型优化方法)。 它利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 SMAC 算法包装了 Github 的 SMAC3。 注意:SMAC 需要通过 nnictl package 命令来安装。 参考论文, Github 代码库
|
Batch Tuner(批量调参器) | Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 |
Grid Search(遍历搜索) | Grid Search 会穷举定义在搜索空间文件中的所有超参组合。 遍历搜索可以使用的类型有 choice, quniform, randint。 |
Hyperband | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并使用少量的资源来找到有可能好的配置,然后继续训练找到其中更好的配置。 参考论文 |
Network Morphism | Network Morphism 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 然后使用历史的架构和指标,来估计子网络的值。 然后会选择最有希望的模型进行训练。 参考论文 |
Metis Tuner | 大多数调参工具仅仅预测最优配置,而 Metis 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 它不进行随机取样。 大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。 参考论文 |
BOHB | BOHB 是 Hyperband 算法的后续工作。 Hyperband 在生成新的配置时,没有利用已有的 Trial 结果,而本算法利用了 Trial 结果。 BOHB 中,HB 表示 Hyperband,BO 表示贝叶斯优化(Byesian Optimization)。 BOHB 会建立多个 TPE 模型,从而利用已完成的 Trial 生成新的配置。 参考论文 |
GP Tuner | Gaussian Process(高斯过程) Tuner 是序列化的基于模型优化(SMBO)的方法,并使用了高斯过程来替代。 参考论文,Github 库 |