微软开源自动机器学习工具NNI安装与使用
微软开源自动机器学习工具 – NNI安装与使用
在机器学习建模时,除了准备数据,最耗时耗力的就是尝试各种超参组合,找到最佳模型的过程了。对于初学者来说,常常是无从下手。即使是对于有经验的算法工程师和数据科学家,也是很难把握所有的规律,只能多次尝试,找到较好的超参组合。而自动机器学习这两年成为了热门领域,它将机器学习过程中包括自动特征提取、模型选择、参数调节等过程自动化地学习,使学习过程在给定数据和任务上学习和泛化能力非常强大。NNI (Neural Network Intelligence) 是微软开源的自动机器学习工具包,与当前的各种自动机器学习服务或工具相比,有非常独特的价值。NNI着力解决超参调试过程的挑战,通过内置的超参选择算法、算力的强大支持和便捷的交互方式来加速和简化超参搜索的过程。更多详细内容和代码可以参考NNI的github地址。
本篇是NNI (Neural Network Intelligence) 系列文章的开篇,将首先介绍NNI 的特点和价值,然后用一个简单的mnist样例带您开启自动化机器学习之旅。后续系列文章还将从NNI的高效率——能够帮助节省时间和减少代码、NNI的分布式——支持OpenPAI等多端部署、NNI的可扩展性——支持多种tuner和assessor等特点介绍NNI。
NNI的众多特点
1. 安装简洁:通过pip命令就能完成安装;
2. 支持私有部署,用自己的计算资源就能进行自动机器学习;
3. 支持分布式调度:NNI 可以在单机上进行试验,还支持多种分布式调度平台,如通过 SSH 控制多台 GPU 服务器协同完成试验,或通过OpenPAI, Azure, Kubernetes等在独立的 Docker 中运行;
4. 对超参搜索的底层支持:大部分自动机器学习服务与工具的服务都是针对于图片分类等特定的任务。而NNI通过让用户提供训练代码和超参搜索范围, 依靠NNI内置算法和训练服务来搜索最佳的超参和神经架构,NNI为有一定模型训练经验的用户提供更加通用的调参方式,便于用户做出更多尝试、决策和加入思考,并完整参与整个训练过程;
5. 随库自带众多实例和流行的调参算法;
6. 架构简洁、对开发和扩展及其友好。
开启你的第一次NNI之旅
这部分将以识别手写字体mnist为例介绍NNI如何在本地机器使用注释方式定义搜索空间提交训练任务而提高效率,并介绍NNI的基础功能与使用。要通过NNI进行实验,用户只需要三步即可完成实验准备, (1)定义搜索空间(search space); (2)上传代码(codes); (3)定义实验 ,用户可以使用一行命令行即可开始实验,并可使用webUI在网页端实时查看实验进程和结果。
读完这部分,你将了解如何编写配置文件和通过注释形式定义搜索空间,你将了解如何使用NNI在本地机器上提交任务,并了解如何通过webUI清晰地检查实验结果和超参数的使用对结果的影响。nni提供的mnist代码示例文件已开源至github,克隆后可在目录~/nni/examples/mnist中查看,此外本例依赖tensorflow框架,还需要使用pip安装tensorflow。
$ git clone https://github.com/Microsoft/nni.git
$ python3 -m pip install tensorflow
· 安装
介绍例子之前首先安装NNI,NNI提供简单快速的源码编译或pip安装方式,NNI目前支持在ubuntu 16.04及更高版本和Mac OS系统上进行安装,用户需要环境中安装有python高于3.5的版本,本例在ubuntu16.04系统上通过一行pip命令安装 :
$ python3 -m pip install --user --upgrade nni
· 三步准备实验
用户只需要三步即可完成实验准备,(1)定义搜索空间(search space);(2)上传代码(codes);(3)定义实验(experiment) 。

代码结构非常简单,其中文件search_space.json代表定义搜索空间,代码mnist.py代表上传代码,配置文件config.yml代码定义实验,可在~/nni/example/trials/mnist目录中看到目录结构。

(1) 准备搜索空间
首先使用json文件定义超参数的搜索空间,搜索空间包括搜索的变量名、搜索的类型和搜索的值范围。此例定义了网络的卷积层尺寸(conv_size)在(2,3,5,7)的范围中搜索,隐藏层的尺寸(hidden_size)在(124,512,1024)的范围搜索,学习率(learning_rate)在(0.0001,0.1)的范围搜索等等。

(2) 准备实验代码
在实验代码中引入nni包,并以几行代码加入nni的参数传递和结果回传即可将nni与实验代码结合起来。

(3)定义实验配置
通过yaml配置文件来定义实验, 配置文件中包含实验的基础信息、训练平台的选择、搜索空间的使用注释选择、协调器的选择和训练任务的配置等。此处定义方式是:在本地训练任务、使用注释方式定义搜索空间、使用TPE算法, 其内容基本如下所示:

· 一行命令开始训练
完成以上三步(定义搜索空间、上传代码、定义实验)后,你已经有配置文件、搜索空间和训练代码,配置文件的训练任务配置中连接了定义主代码的路径和执行命令、定义搜索空间定义方式及位置。此时,只需要一句命令即可提交任务。
$ nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml
· webUI查看结果
提交训练任务之后终端会返回提交任务的索引ID及webUI的网址,在浏览器中打开url地址即可得到NNI解析出的实验信息及实验实时结果。
首页可以所有训练信息和具体的超参组合,并支持对回传结果排序。

优化进度页面可以看到按时序排列的精度或损失值(此图为精度)。可以看到,时间越靠后(右侧),精度高的越多,这说明选择的超参探索算法随着时间能找到一些好的超参空间继续探索。

通过超参的分布图来直观地看到哪些超参值会明显比较好,或者看出它们之间的关联。通过下面的颜色图就能直观地看到红色(即精度较高的超参组合)线条所表达的丰富信息。如:卷积核大一些会表现较好;学习率小一些,表现基本都不错;Batch_size较大时变现更好等等。

第一次NNI之旅的体验如何?本文通过阐述NNI 的特点、后续的安装和如何使用简单例程动手实践对NNI做了一个简单的介绍,但NNI的功能不止于此,它的多平台支持、多种配置方式、分布式调度模式、多种算法支持还等待你来发现和发掘,甚至你也可以作为NNI代码的贡献者来自己定义需求。
扩展阅读
· 基础定义
1.如何在你的机器上安装nni?
2.如何使用nnictl工具命令?
3.如何使用web UI?
4.如何定义搜索空间?
5.如何配置定义实验?
6.如何使用注释定义搜索空间?
7.如何写训练实验?
· 扩展训练
1.如何在本地训练任务?
2.如何在多个机器上训练任务?
3.如何在OpenPAI上训练任务?
4.如何在远程服务器训练任务?
5.尝试更多不同的tuners和assessors
6.自己定义一个tuner
7.自己定义一个assessor
· 更多
1.如何创建NNI环境?
2.如何贡献代码?
3.如何debug?
微软开源自动机器学习工具NNI安装与使用的更多相关文章
- 【重磅】微软开源自动机器学习工具 - NNI
[重磅]微软开源自动机器学习工具 - NNI 在机器学习建模时,除了准备数据,最耗时耗力的就是尝试各种超参组合,找到模型最佳效果的过程了.即使是对于有经验的算法工程师和数据科学家,有时候也很难把握其中 ...
- zz【重磅】微软开源自动机器学习工具 - NNI
[重磅]微软开源自动机器学习工具 - NNI 在机器学习建模时,除了准备数据,最耗时耗力的就是尝试各种超参组合,找到模型最佳效果的过程了.即使是对于有经验的算法工程师和数据科学家,有时候也很难把握其中 ...
- NNI (Neurol Network Intelligence) 是微软开源的自动机器学习工具
NNI (Neurol Network Intelligence) 是微软开源的自动机器学习工具 https://www.cnblogs.com/ms-uap/p/9719071.html [重磅]微 ...
- 微软推 Azure 机器学习工具:Algorithm Cheat Sheet
微软推 Azure 机器学习工具:Algorithm Cheat Sheet [日期:2015-05-15] 来源:CSDN 作者:Linux [字体:大 中 小] Azure Machine ...
- 微软开源的 AI 工具,让旧照片焕发新生
原文地址:Bringing Old Photos Back to Life 原文作者:Ziyu Wan 译者 & 校正:HelloGitHub-小鱼干 & 鸭鸭 写在前面 在 GitH ...
- 机器学习工具Octave安装(Win10环境)
介绍 Octave是一个旨在提供与MATLAB语法兼容的开放源代码计算与数值分析的工具:同时也是GNU成员之一.Octave最初的设计以MATLAB为模板,在功能上与MATLAB有许多相似之处.但相较 ...
- Ibatis代码自动生成工具——Abator安装与应用实例(图解)
Abator 能自动生成DAO,DTO和sqlMap,大大提高开发效率.Abator 的官方网站:http://ibatis.apache.org/ibator.html 使用也比较简单,以下做个实例 ...
- 秒杀Sublime Text的微软开源代码编辑工具Visual Studio Code
1. 下载链接: https://code.visualstudio.com/ 2. 秒开一个ASP.NET网站源码 3.编辑CSS颜色支持 4.Git支持 5.常用快捷键 Ctrl+Shift+P ...
- 自动机器学习(AutoML)
自动机器学习(AutoML) 不再需要苦恼于学习各种机器学习的算法 目录: 一.为什么需要自动机器学习 二.超参数优化 Hyper-parameter Optimization 三.元学习 Meta ...
随机推荐
- Ocelot中文文档-GraphQL
好吧!你明白我的意思Ocelot并不直接支持GraphQL,但有这么多人问起它,我想表明整合graphql-dotnet库是多么容易 请参阅示例项目OcelotGraphQL. 结合使用graphql ...
- Java 包装类笔记
@(JDK)[包装类] Java 包装类笔记 当需要使用到集合的时候,如果是基础数据类型,需要转换为包装类,再使用,在JDK1.5之前,每次使用的时候,都需要手动转换为包装类(称为装箱),然后在使用的 ...
- JSF-使用JSF标记
使用JSF标记 基于Facelets技术的JSF页面是一个 XHTML页面,文件扩展名为 .xhtml 1)JSF页面可用html标记,但必须满足: ①所有标记都必须闭合.如<p>开始,& ...
- SpringBoot 创建可执行Jar
创建可执行JAR 我们也可以通过插件创建一个在生产环境中运行的可执行jar文件来完成我们的示例. 首先引入依赖: <build> <plugins> <plugin> ...
- 单片机开发——01工欲善其事必先利其器(Keil软件安装破解)
本文是博主<单片机开发>博客第一篇文章,主要讲述51单片机编程软件Keil uVision4的安装及破解过程. 1. Keil uVision4安装包文件 PATH:链接 ...
- 第五章 MySQL函数
一.数学函数 (1) 绝对值函数:ABS(x) ABS(x) 用于返回 x 的绝对值 mysql> SELECT ABS(2), ABS(-2.3), ABS(-33); +--------+- ...
- Docker 多主机网络总结(非常全)
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- 统一流控服务开源-1:场景&业界做法&算法篇
最近团队在搞流量安全控制,为了应对不断增大的流量安全风险.Waf防护能做一下接入端的拦截,但是实际流量会打到整个分布式系统的每一环:Nginx.API网关.RPC服务.MQ消息应用中心.数据库.瞬间的 ...
- RN 开发常见小问题
1 定时器每隔多少秒调用一次 直接贴代码 可复制使用 componentWillUnmount() { this.timer && clearInterval(this.timer) ...
- mondrian 4.7 源码部署
mondrian是一个开源的数据分析工程, 网上有关mondrian3.X的源码部署比较多, 有关4.X的部署较少. 目前官方推荐使用的时mondrian3.7的修订版, 可以再github上下载到最 ...