微软AutoML_NNI综述

NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。NNI也是非常友好的开源工具,用户可以方便地拓展自己的搜索算法。

知乎的官方介绍如下:
如何看待微软最新发布的AutoML平台NNI?

特点

作为微软亚洲研究院为研究人员和算法工程师量身定制的自动机器学习工具, NNI 通过前沿的算法、自动化的框架和高效的分布式配置,可以节省训练时间与人力成本,赋能超参调优(Hyperparameter Optimization)、神经网络架构搜索(Neural Architecture Search)、特征工程(Feature Engineering)和模型压缩(Model Compression)等各个机器学习生命周期,具有易于使用、可扩展、灵活和高效的特点:

易于使用:NNI 可通过 pip 安装;只需要添加几行代码,就可以利用 NNI 来调优参数;支持使用简单的命令行工具或 Web 界面来查看实验(Experiment),并拥有大量示例和详细的中英文档。
可扩展:调优超参或网络结构通常需要大量的计算资源,NNI 支持多种计算资源,如远程服务器组、训练平台(包括OpenPAI,Kubernetes)等,可并行运行数百个 Trial,适用于具有不同能力的培训平台。
灵活性:除内置的算法外,NNI 还能轻松集成自定义的超参调优算法、神经网络架构搜索算法、提前终止算法等。此外,NNI 还可以连接到更多训练平台上,如云中的虚拟机集群、Kubernetes 服务,或外部环境中的特殊应用和模型上。
高效性:在系统及算法级别上,NNI 始终在加速改进 ,以提高调优效率。例如:NNI 支持通过早期反馈来加速调优过程。

支持“探索性训练”框架 Retiarii

深度学习框架(Deep Learning Framework)是目前研究人员开发深度神经网络(Deep Neural Network)的主要工具,对深度神经网络的成功应用和快速发展有重要的促进作用。设计深度学习网络是一个“探索性训练”(Exploratory-Training)的过程,通常以构建一个基础网络(Base Graph)为出发点进行训练,根据训练情况的反馈,对该神经网络的结构进行调整,然后通过一系列反复训练、调整,最终找到符合要求的神经网络。

训练过程中,研究人员往往需要探索一类神经网络结构,而不是单个具体的神经网络。目前的深度学习框架,如 TensorFlow 和 PyTorch,仅支持开发单个神经网络,但这只是探索性训练过程中的一步而已。另一方面,现有自动机器学习的方案如神经网络结构搜索或超参数优化,缺乏可编程性和模块化,这使得一种 NAS(神经结构搜索)/HPO (超参数优化)解决方案通常只能应用在某一类神经网络结构上。此外,在探索性训练过程中,很多神经网络结构是相似的,但现有深度神经网络开发工具却没有系统性地利用相似性加速探索过程。

Retiarii 能够帮助用户灵活、自由地表示各种搜索空间、重用前沿搜索算法,并利用系统级优化加速搜索过程。目前,Retiarii 已经正式集成在 NNI 2.0 中。

Retiarii 创新性地将神经网络的开发看成一系列网络模型的“变形”(Mutation),这一系列变形组成了在网络空间(Model Space)内的搜索过程。Retiarii 提出将“变形器”(Mutator)作为基本编程范式,神经网络开发人员可以利用“变形器”对基础网络进行编程变形,如增加或删除某个网络节点。在每次变形时,“变形器”通过选择(choose())接口将网络变形的选择权交给“探索策略”(Exploration Strategy),甚至可以实时地交给开发者本人。由此,整个探索性训练将一系列的“变形器”作用于一个基础网络上,并交由探索策略来驱动整个探索过程。

实验结果表明,Retiarii 通过单个变形器的抽象将 DNN 模型空间、探索策略和跨模型优化完美地分离开来,能够简化编程过程,重用各个组件,极大地改善整个探索性训练过程的效率,在实验中达到了8.58倍的搜索加速。

使用 Retiarii 框架并不需要学习一门全新的框架语言,只需要对原始 TensorFlow 或 PyTorch 代码进行细小的改动。对 NNI 的“老粉”来说,Retiarii 也将是一种全新的体验:搜索空间直接定义在用户模型代码中,实验直接由 Python 启动,NAS 和 HPO 候选项的支持也更为友好…… NNI 目前正在将原始的 NAS 框架迁移到 Retiarii 框架,在此,推荐大家尝试新的框架并帮助 NNI 进行改进。

image

Retiarii 使用示例

想要了解更多 Retiarii 的详细信息,请点击:

• 文档链接:https://nni.readthedocs.io/en/latest/NAS/retiarii/retiarii_index.html

• 论文链接:https://www.usenix.org/conference/osdi20/presentation/zhang-quanlu

基于掩码的模型压缩加速工具

随着更多层和节点大型神经网络的使用,降低模型的存储和计算成本变得至关重要。NNI 的模型压缩工具包能够有效解决此问题。该工具包提供了最先进的模型压缩算法和策略,可以在不显著损失模型性能的条件下压缩并加速模型。

模型压缩技术可以分为两类:剪枝和量化。NNI 内置了丰富的剪枝算法,它们通常使用权重掩码来模拟实际的剪枝,然而掩码虽然可以用来检验压缩模型的性能(如精度),但并没有真正加速模型,而加速模型才是剪枝算法的最终目标。为此,NNI 从1.4版本开始就提供了通用的、基于掩码的模型加速工具,以减少推理延迟和模型大小,并在1.7版本和1.8版本中持续改进和更新。

NNI 的模型压缩加速工具目前支持粗粒度剪枝算法。该工具利用稀疏的掩码将待剪枝模块更换为压缩后的模块。更换模块后,权重或输入输出张量的形状常常会被改变,所以此工具还具备形状推理功能,以检查其他未修剪的层由于形状变化是否需要被替换。加速后的模型有着较低的时延,Resnet18 的实验效果如下:

image

欲了解更多关于基于掩码的模型压缩加速工具的信息,请点击链接:

https://nni.readthedocs.io/en/latest/Compression/ModelSpeedup.html

支持通过 Python 发起实验(预览功能)

在 NNI 1.0 版本中,使用 NNI 发起实验需要四个步骤:编写 JSON 格式的搜索空间文件、修改 Trial 代码获取超参、定义 YAML 格式的配置文件、使用交互式命令 nnictl 启动实验。对于 Trial 的管理,交互式的命令是非常自然合理的,但只能利用日志进行调试,过程相对繁琐。

在 2.0 版本中,NNI 提供了一种全新的、更为灵活的启动模式,用户可以直接在 Python 文件中定义搜索空间、配置和发起实验。开发者可以直接在代码里初始化调参器(tuner)对象,tuner 处于当前进程,更加易于 debug 和做一些“魔改”。

目前利用 Python 启动实验的功能尚处于 Alpha 阶段,暂不支持断点和交互式执行。NNI 团队将会在以后的版本中改进这个功能,并提供更多 API 来编程式地操控实验,以收集实验结果并基于实验结果进行更加高阶的分析,也希望广大 NNI 粉丝们在 GitHub 提出宝贵的意见和建议,共同将该功能做的更实用。

欲了解更多该功能的相关信息,请点击链接:

https://nni.readthedocs.io/en/latest/Tutorial/HowToLaunchFromPython.html

支持多种算力的混合训练

自动机器学习属于计算密集型工作,发现最佳的超参数/挖掘最优的神经网络架构往往会消耗大量算力资源与时间。为了节约时间,研究人员总希望自己拥有的各种设备能够“齐心协力”。在 2.0 版本中,NNI 提供了混合训练模式(Hybrid Mode),支持同一个实验(Experiment) 在不同训练平台上并行运行,以实现资源利用效率最大化。例如,以前的实验只能单独使用远程机器或者 AML,现在则可以同时使用两个训练平台。

需要注意的是,NNI 混合训练模式目前只支持本地、远程、AML 和 PAI 四种训练平台的混合训练。此外,在发起实验之前,需要开启训练平台并配置对应的环境。

更多关于混合训练模式的详细信息,请点击链接:
https://nni.readthedocs.io/en/latest/TrainingService/HybridMode.html

新增对全部实验的统一管理界面

为了更加友好地可视化实验结果、方便快捷地操控和管理实验,除了命令行工具 nnictl 之外,NNI 还提供了简单易用的 Web 界面,使得用户能够直接查看实验的状态、更改实验的配置,对实验结果做更高级的分析。

在2.0 版本中,NNI 新增了实验管理页,所有运行过(包括运行中、运行完成、已停止状态)的实验都会在此页面上展示,并通过点击实验 ID 可以轻松切换到任意一个未停止实验的详情页,这无疑为用户查看历史实验信息和管理所有实验提供了一个新的窗口,实验之间的切换也更加快速便捷。

image

NNI 实验管理界面示例

更多相关信息,请点击:

https://nni.readthedocs.io/en/latest/Tutorial/WebUI.html

简化自定义算法的安装

NNI 内置了丰富的前沿 Tuner、Advisor 和 Assessor,可以直接应用于超参数优化中。同时,为了满足不同场景下的需求,NNI 允许自定义 Tuner、Advisor 和 Assessor,并通过简单易用的接口将其安装注册为内置算法。

在 NNI 2.0中,自定义算法的安装进一步得到了简化。通过运行简单的命令用户可以将自定义的算法打包成 whl 文件,其他用户则可以通过 pip install 安装算法,并通过 nnictl algo register 将其注册到 NNI 中,就可以用与 NNI 内置算法相同的方式使用自定义的算法了。这使得自定义算法在不同用户之间的分享和传播变得更加轻松、容易。通过提供一个强大完备的系统,NNI 希望帮助研究人员专注于 Tuner、Advisor 和 Assessor 算法研发,推动各类想法方案应用的落地。

关于简化自定义算法安装方面的更多信息,请点击链接:

https://nni.readthedocs.io/en/latest/Tutorial/InstallCustomizedAlgos.html

降低人工智能门槛,加速深度学习普及化是微软一直追求的目标。NNI 内置的前沿自动机器学习(AutoML)算法,能够帮助用户在没有专业机器学习专家指导的情况下,获得高质量的模型,着重解决了一系列支持 AutoML 的系统问题,并通过开放的方式有效加速算法研究者在这一领域的创新。未来,NNI 将会以更强的自动化框架、更丰富的算法、更高效的分布式调参效率帮助研究人员和算法工程师们,以更灵活的方式从海量数据中洞察未来的人工智能世界。

兼容性

Linux Ubuntu 16.04 或更高版本
MacOS 10.14.1
Windows 10.1809

安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple nni

为了更好地理解NNI的工作流程,首先需要认识几个概念:

Trial:Trial 是一次尝试,它会使用某组配置(例如,一组超参值,或者特定的神经网络架构)来进行训练,并返回该配置下的得分。本质上就是加入了NNI_API的用户的原始代码。
Experiment:实验是一次找到模型的最佳超参组合,或最好的神经网络架构的任务。 它由Trial和自动机器学习算法所组成。
Searchspace:搜索空间是模型调优的范围。 例如,超参的取值范围。
Configuration:配置是来自搜索空间的一个参数实例,每个超参都会有一个特定的值。
Tuner:Tuner是一个自动机器学习算法,会为下一个Trial生成新的配置。新的 Trial 会使用这组配置来运行。
Assessor:Assessor分析Trial的中间结果(例如,测试数据集上定期的精度),来确定 Trial 是否应该被提前终止。
Training Platform:训练平台是Trial的执行环境。根据Experiment的配置,可以是本机,远程服务器组,或其它大规模训练平台(例如,OpenPAI,Bitahub)。
那么你的实验(Experiment)便是在一定的搜索空间(Searchspace)内寻找最优的一组超参数(Configuration),使得该组参数对应的Mnist(Trail)有最大的准确率,在有限的时间和资源限制下,Tuner和Assessor帮助你更快更好的找到这组参数。

工作流程&快速上手

为了理解NNI的工作流程,我们不妨来训练一个Mnist手写体识别,网络结构确定之后,NNI可以来帮你找到最优的超参。一个朴素的想法是:在有限的时间内,NNI测试一定量的超参,返回给你最优的参数组合。

【微软AutoML】AutoML工具 NNI 安装及使用体验

你可能感兴趣的:(微软AutoML_NNI综述)