NNI V0.5.1 内测使用体验

NNI与其他自动机器学习工具的比较

目前市面上常用的机器学习工具主要有TensorFlow,Pytorch,Keras,CNTK等框架。
TensorFlow是目前最为流行的机器学习框架,主要的优点在于体量较小,易于移植。支持Java,C,C++,MatLab等编程语言,支持GPU加速,而且是目前为数不多的全平台支持的机器学习框架。TensorFlow的大版本更新不支持向下兼容。Google对于TensorFlow的维护与更新目前比较频繁,在添加新功能的同时加入了许多新的概念需要额外学习,提高了学习时间成本。同样由于更新频繁,帮助文档也开始变得混乱起来。目前主要的问题在于TensorFlow的运行基于很多第三方API,出现的许多漏洞都是由于第三方API引起的。
Pytorch的前身是Torch,由Facebook的AI小组研发,主要是使用Python面向对象编程。主要特点是封装简洁,代码易于理解,便于学习而且在相同的运算环境下速度更快。但是编译环境配置需要一定的时间,对于系统平台不熟悉的用于会消耗较长的时间在这个方面。而且只能使用Python进行编程。Pytorch发布时间不长,目前相关的文档和学习书籍还不是很丰富。
Keras可以认为是Google公司在TensorFlow、Theano的基础上精简而成的一个API。同时也是机器学习框架中最容易学习的一个框架之一。不过有些人并不认为它属于一种机器学习的框架,而是TensorFlow的接口精简版本。同时由于它的过度封装,内部可能包含有很多BUG,运行速度是比较慢的。
CNTK目前的使用占比不是很高,主要是由于Microsoft对于CNTK的推广上并没有给予太多的支持。CNTK可以配合Windows的命令行系统使用会取得比较好的效果。他和TensorFlow一样功能强大,内部功能丰富,同时支持CPU与GPU加速。CNTK早期的帮助文档比较难以理解,而且不支持Python语言,让它在深度学习工具中处于落后地位。由于初期研发团队主要是将CNTK应用于语音处理领域,所以CNTK目前还主要是在语音处理领域使用。
NNI作为Microsoft近期推出的一款内测框架,主要支持在MacOS和Linux平台上运行。同时对于市面上所有的主流框架都进行支持。支持GPU加速,分布式环境机器学习,可以自行定制机器学习算法或者比较不同的机器学习算法。
下列表格是我们总结的不同的机器学习工具之间的对比。

|  |TensorFlow  |Pytorch |Keras |CNTK |NNI ||--|--||  |  |

NNI安装过程体会

NNI主要有两种安装方式:通过Pip命令安装和通过源码安装。
我们的计算机硬件平台是intel i5-7300HQ,16GB RAM,GTX1050,分配存储空间200GB。运行环境是Ubuntu18.04 LTS版,Python3.6.7。另一台机器的计算机硬件平台是intel i5-3230M,12GB RAM,集成显卡,分配存储空间140GB。运行环境是Ubuntu16.04 LTS版,Python3.5.2。我们对于两种不同的安装方式都进行了尝试。

Pip命令安装方式

对于某些Pip工具比较老的机器来说,系统会提示需要先去升级Pip工具再去进行后续操作。整个whl文件大小是在30MB左右,由于国内的服务器限制,下载花费时间较长。建议国内的用户使用国内的清华镜像或者阿里云镜像进行安装。后续的附加工具包,编译与设置会在终端中自动完成配置。

源码安装方式

源码安装方式要求提前安装好wget和git工具,然后根据指定的链接从GitHub上下载安装包再进行解压安装。需要注意以下问题:

  1. 运用当前用户命身份行安装,如果使用超级用户身份会出现如下错误。
    在这里插入图片描述
  2. 安装时要求安装额外的软件包 nodejs,yarn,npm等工具包。同样由于软件包的体积较大和国内服务器的限制原因,国内下载速度有限。建议将需要的软件包集成在一个压缩包内通过一次下载就可以进行离线安装。之后尝试运行nnictl尝试运行例程的命令时候会显示安装初始化成功,但是之后运行的WebUI时候会出现打开失败的情况。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

另外Docker方式也可以安装,由于没有安装dock,所以我们没有进行尝试。

NNI使用过程体会

易于上手

NNI的使用主要分为以下4个步骤。

  1. 定义JSON格式的搜索空间:包括所有需要搜索的超参的名称和分布(离散和连续值均可)
  2. 修改Trial代码来从 NNI 获取超参,并返回 NNI 最终结果,对于给出的例子修改如下:在这里插入图片描述
  3. 定义 YAML 格式的配置文件:其中声明了搜索空间,运行时间,优化参数方式,最大运行时间,最大运行次数等必要参数。
  4. 执行nnictl中的相关命令,运行config.yml

总体来说使用起来比较方便,能够在现有的代码基础上去进行少量的修改就可以实现。

例程齐全

在Github中官方基本上给出了所有的支持的运行方式的例程与具体说明。支持的方式比较全面,方便直接在例程上面修改。

对NNI的建议

定义搜索空间

有些数据可能是数量较多大的离散数据,保存在excel表格中。建议可以提供相应的函数直接导入离散数据表,而不依赖python的其他第三方包生成相应的离散数据表。

开发环境

希望nni的后续开发环境支持Windows系统的开发,可以省去日常实验中切换系统的麻烦。

参数配置问题

NNI的配置文件config.yml和搜索空间search_space.json都是比较简洁易于设置的。但是在如果要是在NNI的代码中嵌入原来的机器学习代码就会比较麻烦。官方给出的Github中的例子是比较规范的,例如在mnist的CNN例子中使用 class MnistNetwork(object): 对神经网络进行创建,用def get_params():对所有参数进行初始化。如果是自己开发或者定义的代码未必也可以这样的规范,建议在原来的例程中加入更多的注释,能够具体了解参数的配置问题。如果要去解决自己的问题,那么必定需要自己去一点一点的进行参数配置,未必能够如Github中说明文档所说的那样只需要简单的嵌入几行代码就可以实现。

训练数据

对于训练数据,每次运行时候根据Ubuntu的资源管理器,会发现每次训练都需要重新读取数据。建议将数据读写单独开辟成一个文件,只在第一次训练前加载即可,可以节省计算资源。而且对于训练数据的测试集和训练集,在定义中没有明确的划分,每次训练划定的测试集和测试集不固定。

学习帮助文档

官方的帮助文档在Github的说明页中,有时候网络连接情况较差,跳转时候是很耗时。可以集成到文件包内制成一份含有目录的PDF文档,可以清楚学习和使用思路,也可以方便离线学习。

其他建议

相比于其他的机器学习框架,在实验的过程中,NNI可以根据收到的Report绘制图表,直观反映了具体的训练过程,有利于后续的数据研究与分析。我们在实验中发现,NNI其实更适合CNN,DNN这些参数较多比较复杂的深度学习案例,对于传统的机器学习,参数本身比不是很多,调试的过程也不复杂,如果对于这些任务引入NNI,反而会怎加代码的工作量。例如在另一篇博文中的随机森林调参实验中,主要的几个参数都是以Python中第三方包GridSearchCV进行调参。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值