微软亚洲研究院开源热门AutoML工具NNI2.5最新版本

简介: NNI是微软亚洲研究院为研究人员和算法工程师量身定制的自动机器学习(AutoML)工具。过去的几年中,NNI不断迭代更新,持续将最前沿的算法加入其中,加强对各种分布式训练环境的支持,目前NNI已在Github上获得了10.8k星,成为最热门的自动机器学习开源项目之一。


⚡他来了,他来了,热门开源AutoML工具NNI2.5重磅来袭⚡



NNI是微软亚洲研究院为研究人员和算法工程师量身定制的自动机器学习(AutoML)工具。过去的几年中,NNI不断迭代更新,持续将最前沿的算法加入其中,加强对各种分布式训练环境的支持,目前NNI已在Github上获得了10.8k星,成为最热门的自动机器学习开源项目之一。


AutoML问题构成


AutoML的主要问题可以由三部分构成:特征工程、模型选择、算法选择。


特征工程


特征工程在机器学习中有着举足轻重的作用。在AutoML中,自动特征工程的目的是自动地发掘并构造相关的特征,使得模型可以有最优的表现。除此之外,还包含一些特定的特征增强方法,例如特征选择、特征降维、特征生成、以及特征编码等。这些步骤目前来说都没有达到自动化的阶段。


上述这些步骤也伴随着一定的参数搜索空间。第一种搜索空间是方法自带的,例如PCA自带降维参数需要调整。第二种是特征生成时会将搜索空间扩大。


模型选择


模型选择包括两个步骤:选择一个模型,设定它的参数。相应地,AutoML的目的就是自动选择出一个最合适的模型,并且能够设定好它的最优参数。


算法选择


对于算法选择,AutoML的目的是自动地选择出一个优化算法,以便能够达到效率和精度的平衡。常用的优化方法有SGD、L-BFGS、GD等。使用哪个优化算法、对应优化算法的配置,也需要一组搜索空间。


NNI 提供命令行工具以及用户友好的 WebUI 来管理训练实验。借助可扩展的 API,您可以自定义自己的 AutoML 算法和训练服务。为了方便新用户使用,NNI 还提供了一组内置的最先进的 AutoML 算法和对流行训练平台的开箱即用支持。


在下表中,我们总结了当前的 NNI 功能,我们正在逐步添加新功能,我们很乐意得到您的贡献。



实验:一项任务,例如找出模型的最佳超参数、找出最佳神经网络架构等。它由试验和 AutoML 算法组成。


搜索空间:调整模型的可行区域。例如,每个超参数的取值范围。


配置:来自搜索空间的一个实例,即每个超参数都有一个特定的值。


试验:应用新配置的个人尝试(例如,一组超参数值、特定的神经架构等)。试用代码应该能够使用提供的配置运行。


Tuner:一种 AutoML 算法,为下一次尝试生成新配置。将使用此配置运行新的试用版。


Assessor:分析试验的中间结果(例如,定期评估测试数据集的准确性)以判断该试验是否可以提前停止。


培训平台:进行试验的地方。根据您的实验配置,它可能是您的本地机器、远程服务器或大型训练平台(例如,OpenPAI、Kubernetes)。


基本上,实验运行如下: Tuner 接收搜索空间并生成配置。这些配置将提交给训练平台,例如本地机器、远程机器或训练集群。他们的表演被报告给 Tuner。然后,生成并提交新的配置。


对于每个实验,用户只需要定义一个搜索空间并更新几行代码,然后利用 NNI 内置的 Tuner/Assessor 和训练平台来搜索最佳的超参数和/或神经架构。基本上有3个步骤:



NNI还有个更重要的优点就是能够使用WebUI查看模型训练效果,以及参数空间配置



代码示例


launch.py


from pathlib import Path


from nni.experiment import Experiment


search_space = {

   "dropout_rate": {"_type": "uniform", "_value": [0.5, 0.9]},

   "conv_size": {"_type": "choice", "_value": [2, 3, 5, 7]},

   "hidden_size": {"_type": "choice", "_value": [124, 512, 1024]},

   "batch_size": {"_type": "choice", "_value": [16, 32]},

   "learning_rate": {"_type": "choice", "_value": [0.0001, 0.001, 0.01, 0.1]}

}


experiment = Experiment('local')

experiment.config.experiment_name = 'MNIST example'

experiment.config.trial_concurrency = 2

experiment.config.max_trial_number = 10

experiment.config.search_space = search_space

experiment.config.trial_command = 'python3 mnist.py'

experiment.config.trial_code_directory = Path(__file__).parent

experiment.config.tuner.name = 'TPE'

experiment.config.tuner.class_args['optimize_mode'] = 'maximize'

experiment.config.training_service.use_active_gpu = True


experiment.run(8080)


mnist.py


import logging


import tensorflow as tf

from tensorflow.keras import Model

from tensorflow.keras.callbacks import Callback

from tensorflow.keras.layers import (Conv2D, Dense, Dropout, Flatten, MaxPool2D)

from tensorflow.keras.optimizers import Adam


import nni


_logger = logging.getLogger('mnist_example')

_logger.setLevel(logging.INFO)



class MnistModel(Model):

   def __init__(self, conv_size, hidden_size, dropout_rate):

       super().__init__()

       self.conv1 = Conv2D(filters=32, kernel_size=conv_size, activation='relu')

       self.pool1 = MaxPool2D(pool_size=2)

       self.conv2 = Conv2D(filters=64, kernel_size=conv_size, activation='relu')

       self.pool2 = MaxPool2D(pool_size=2)

       self.flatten = Flatten()

       self.fc1 = Dense(units=hidden_size, activation='relu')

       self.dropout = Dropout(rate=dropout_rate)

       self.fc2 = Dense(units=10, activation='softmax')


   def call(self, x):

       x = self.conv1(x)

       x = self.pool1(x)

       x = self.conv2(x)

       x = self.pool2(x)

       x = self.flatten(x)

       x = self.fc1(x)

       x = self.dropout(x)

       return self.fc2(x)



class ReportIntermediates(Callback):

   def on_epoch_end(self, epoch, logs=None):

       if 'val_acc' in logs:

           nni.report_intermediate_result(logs['val_acc'])

       else:

           nni.report_intermediate_result(logs['val_accuracy'])



def load_dataset():

   mnist = tf.keras.datasets.mnist

   (x_train, y_train), (x_test, y_test) = mnist.load_data()

   x_train, x_test = x_train / 255.0, x_test / 255.0

   x_train = x_train[..., tf.newaxis]

   x_test = x_test[..., tf.newaxis]

   return (x_train, y_train), (x_test, y_test)



def main(params):

   model = MnistModel(

       conv_size=params['conv_size'],

       hidden_size=params['hidden_size'],

       dropout_rate=params['dropout_rate']

   )

   optimizer = Adam(learning_rate=params['learning_rate'])

   model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy', metrics=['accuracy'])

   _logger.info('Model built')


   (x_train, y_train), (x_test, y_test) = load_dataset()

   _logger.info('Dataset loaded')


   model.fit(

       x_train,

       y_train,

       batch_size=params['batch_size'],

       epochs=10,

       verbose=0,

       callbacks=[ReportIntermediates()],

       validation_data=(x_test, y_test)

   )

   _logger.info('Training completed')


   loss, accuracy = model.evaluate(x_test, y_test, verbose=0)

   nni.report_final_result(accuracy)

   _logger.info('Final accuracy reported: %s', accuracy)



if __name__ == '__main__':

   params = {

       'dropout_rate': 0.5,

       'conv_size': 5,

       'hidden_size': 1024,

       'batch_size': 32,

       'learning_rate': 1e-4,

   }


   tuned_params = nni.get_next_parameter()

   params.update(tuned_params)


   _logger.info('Hyper-parameters: %s', params)

   main(params)

目录
相关文章
|
5月前
|
人工智能 自然语言处理 异构计算
微软开源SliceGPT介绍
【2月更文挑战第13天】微软开源SliceGPT介绍
105 6
微软开源SliceGPT介绍
|
5月前
|
人工智能 Apache
社区供稿 | 140B参数、可商用!OpenBuddy 发布首个开源千亿中文 MoE 模型的早期预览版
我们很自豪地于今天发布OpenBuddy最新一代千亿MoE大模型的早期预览版本:OpenBuddy-Mixtral-22Bx8-preview0-65k。此次发布的早期预览版对应约50%的训练进度。
|
机器学习/深度学习 人工智能 搜索推荐
阿里巴巴宣布加入 Linux Foundation AI&Data 基金会,捐赠首个开源项目 DeepRec
持续加大对AI和大数据技术的投入以促进相关开源建设。
|
机器学习/深度学习 SQL 人工智能
ChatGPT Plus 首批70个插件最全解读
OpenAI放出大招,向所有ChatGPT Plus用户开放联网功能和众多插件,允许ChatGPT访问互联网并使用70个第三方插件。 本批第三方插件能够全方位覆盖衣食住行、社交、工作以及学习等日常所需,基本上能够扮演24小时私人助理的角色。
716 0
|
机器学习/深度学习 Kubernetes 算法
微软亚洲研究院开源热门AutoML工具NNI2.5最新版本
微软亚洲研究院开源热门AutoML工具NNI2.5最新版本
235 0
微软亚洲研究院开源热门AutoML工具NNI2.5最新版本
|
机器学习/深度学习 Web App开发 Kubernetes
谷歌云大会最后一天解读开放性:从TensorFlow开源到开放云平台
当地时间 3 月 10 日,Google Cloud Next '17 在美国旧金山顺利闭幕。机器之心作为受邀媒体对这场为期 3 天的会议进行了现场报道,参阅《现场直击 | 李飞飞首度亮相谷歌云大会:发布全新 API,解读 AI 民主化》和《谷歌云官方正式宣布收购数据科学社区 Kaggle》。谷歌云大会的最后一天,Google Cloud 产品开发、计算 & 开发者服务副总裁 Sam Ramji、谷歌大脑 TensorFlow 负责人 Rajat Monga 和 Google Senior Fellow Jeff Dean 等演讲者和受邀嘉宾重点围绕 Kubernetes、TensorFlow
182 0
谷歌云大会最后一天解读开放性:从TensorFlow开源到开放云平台
|
机器学习/深度学习 存储 人工智能
谷歌云官方正式宣布收购数据科学社区Kaggle
当地时间 3 月 8-10 日,Google Cloud NEXT '17 大会在美国旧金山举行,机器之心作为受邀媒体进行了现场报道。在当天 Keynote 演讲中,谷歌云机器学习与人工智能首席科学家李飞飞正式宣布谷歌云收购数据科学社区 Kaggle 这一消息。随后,Kaggle 官方网站和谷歌云平台博客也正式发布了该消息。
148 0
谷歌云官方正式宣布收购数据科学社区Kaggle
|
机器学习/深度学习 自动驾驶 安全
AWS 和 Facebook 合作推出 PyTorch 模型服务框架 TorchServe
  近日,Facebook 和 AWS 合作推出了 PyTorch 模型服务库 TorchServe,强强联手剑指 Google TensorFlow。   PyTorch 是当下最火的深度学习开源库之一,可以帮助开发者和研究人员更轻松地构建和训练模型。即便有了 PyTorch,在生产中部署和管理模型仍然是机器学习的一大难题,包括构建定制的预测 API,对其进行缩放以及保证其安全等问题。   简化模型部署过程的一种方法是使用模型服务器,即专门设计用于在生产中提供机器学习预测的现成的 Web 应用程序。模型服务器可轻松加载一个或多个模型,并自动创建由可伸缩 Web 服务器支持的预测 API。
199 0
|
机器学习/深度学习 人工智能 自动驾驶
Google X的神秘实验室里有什么?
Astro Teller目前负责Google X实验室研究工作,他本人的Title很有趣——他并非该实验室的经理或者主任,正如他在那个有点陈旧的名片里所说的,他其实是“Moonshots船长”,这个称呼,很好的诠释了Google X实验室包罗万象又极有可能对人类发展产生重大影响的研究项目。
263 0
|
传感器 供应链 安全
公司如何利用微软Azure的物联网Hub
本文详细介绍了世界上一些最大的公司如何使用Microsoft Azure将IoT集成到其产品中。
512 0
公司如何利用微软Azure的物联网Hub
下一篇
无影云桌面