微软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 安装及使用体验
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 微软AutoML_NNI综述