上新了!热门开源AutoML工具 NNI 2.0 来袭

编者按:NNI(NeuralNetworkIntelligence)是微软亚洲研究院为研究人员和算法工程师量身定制的自动机器学习(AutoML)工具 。 在过去的两年中 , NNI不断迭代更新 , 持续将最前沿的算法加入其中 , 加强对各种分布式训练环境的支持 , 目前NNI已在GitHub上获得了8.7K星 , 成为最热门的自动机器学习开源项目之一 。
近期 , 微软亚洲研究院发布了NNI2.0版本 , 其中加入了对“探索性训练”框架Retiarii、基于掩码的模型压缩加速工具的支持 , 提供了利用Python发起实验(预览功能)与多种算力混合训练的能力 , 并简化了自定义算法的安装方法 。 本文将全方位解读NNI2.0最新版本中的各项功能 , 让大家了解这个简单、易用的自动机器学习工具 。
NNI官方GitHub地址:
https://github.com/microsoft/nni

上新了!热门开源AutoML工具 NNI 2.0 来袭
文章图片
近年来 , 随着AI技术的不断发展 , 自动机器学习正释放更多可能性 , 让奇思妙想成为现实 。 面对错综复杂的机器学习参数 , 人们往往耗费无数日夜进行调试 , 宛若海底捞针 。
作为微软亚洲研究院为研究人员和算法工程师量身定制的自动机器学习工具 , NNI通过前沿的算法、自动化的框架和高效的分布式配置 , 可以节省训练时间与人力成本 , 赋能超参调优(HyperparameterOptimization)、神经网络架构搜索(NeuralArchitectureSearch)、特征工程(FeatureEngineering)和模型压缩(ModelCompression)等各个机器学习生命周期 , 具有易于使用、可扩展、灵活和高效的特点:
易于使用:NNI可通过pip安装;只需要添加几行代码 , 就可以利用NNI来调优参数;支持使用简单的命令行工具或Web界面来查看实验(Experiment) , 并拥有大量示例和详细的中英文档 。 可扩展:调优超参或网络结构通常需要大量的计算资源 , NNI支持多种计算资源 , 如远程服务器组、训练平台(包括OpenPAI , Kubernetes)等 , 可并行运行数百个Trial , 适用于具有不同能力的培训平台 。 灵活性:除内置的算法外 , NNI还能轻松集成自定义的超参调优算法、神经网络架构搜索算法、提前终止算法等 。 此外 , NNI还可以连接到更多训练平台上 , 如云中的虚拟机集群、Kubernetes服务 , 或外部环境中的特殊应用和模型上 。 高效性:在系统及算法级别上 , NNI始终在加速改进 , 以提高调优效率 。 例如:NNI支持通过早期反馈来加速调优过程 。支持“探索性训练”框架Retiarii
深度学习框架(DeepLearningFramework)是目前研究人员开发深度神经网络(DeepNeuralNetwork)的主要工具 , 对深度神经网络的成功应用和快速发展有重要的促进作用 。 设计深度学习网络是一个“探索性训练”(Exploratory-Training)的过程 , 通常以构建一个基础网络(BaseGraph)为出发点进行训练 , 根据训练情况的反馈 , 对该神经网络的结构进行调整 , 然后通过一系列反复训练、调整 , 最终找到符合要求的神经网络 。
训练过程中 , 研究人员往往需要探索一类神经网络结构 , 而不是单个具体的神经网络 。 目前的深度学习框架 , 如TensorFlow和PyTorch , 仅支持开发单个神经网络 , 但这只是探索性训练过程中的一步而已 。 另一方面 , 现有自动机器学习的方案如神经网络结构搜索或超参数优化 , 缺乏可编程性和模块化 , 这使得一种NAS/HPO解决方案通常只能应用在某一类神经网络结构上 。 此外 , 在探索性训练过程中 , 很多神经网络结构是相似的 , 但现有深度神经网络开发工具却没有系统性地利用相似性加速探索过程 。
针对以上问题 , 微软亚洲研究院系统与网络组的研究员们在系统领域顶会OSDI2020的论文中提出了一种支持“探索性训练”的新型深度学习框架Retiarii 。 Retiarii能够帮助用户灵活、自由地表示各种搜索空间、重用前沿搜索算法 , 并利用系统级优化加速搜索过程 。 目前 , Retiarii已经正式集成在NNI2.0中 。
Retiarii创新性地将神经网络的开发看成一系列网络模型的“变形”(Mutation) , 这一系列变形组成了在网络空间(ModelSpace)内的搜索过程 。 Retiarii提出将“变形器”(Mutator)作为基本编程范式 , 神经网络开发人员可以利用“变形器”对基础网络进行编程变形 , 如增加或删除某个网络节点 。 在每次变形时 , “变形器”通过选择(choose())接口将网络变形的选择权交给“探索策略”(ExplorationStrategy) , 甚至可以实时地交给开发者本人 。 由此 , 整个探索性训练将一系列的“变形器”作用于一个基础网络上 , 并交由探索策略来驱动整个探索过程 。