NNI使用体验

NNI使用体验

NNI使用体验_第1张图片

一、NNI安装过程体会

NNI在GitHub上的中文页面 点击链接按提示安装即可。
只支持 Linux 和 MacOS。
测试并支持的版本包括:Ubuntu 16.04 及更高版本,MacOS 10.14.1。 在 python >= 3.5 的环境中,只需要运行 pip install 即可完成安装。

   python3 -m pip install --upgrade nni

下载示例

git clone -b v0.5.1 https://github.com/Microsoft/nni.git

若运行mnist 示例,需先安装TensorFlow。

安装TensorFlow

  1. 先安装Anaconda(见官网,很容易);

  2. 创建一个新的Anaconda环境来安装和使用我们的TensorFlow。
    首先创建python3.x下的名为tensorlfow的环境
    $ conda create --name tensotflow python=3.x
    (笔者创建的是在python3.6下的名为tenorflow的环境,环境名无所谓);

  3. 完成后输入$ source activate tensorflow(此处tensorflow只是环境的名字,若前一步命名为别的名字如tenorflow就把这个名字替换tensorflow的位置。此时会出现(环境名称)在前面,如图:第二行前面多了一个(环境名称);

  4. 然后就要安装了,有CPU和GPU不同的版本,上TensorFlow官网查,如图NNI使用体验_第2张图片

  5. 输入$ pip install --ignore-installed --upgrade URL把上一步选好的链接附上,安装就开始了。此处最好科学上网,否则要多重复试几次,如图:NNI使用体验_第3张图片NNI使用体验_第4张图片各种错误,多试几次NNI使用体验_第5张图片完成了。

总地来说,安装nni只需要一行命令,非常简洁,但是安装Anaconda和TensorFlow可能会多花费一些时间。

跑mnist请看下面的使用体会。

二、NNI使用过程体会

NNI上手较为容易。有一定机器学习调参经验的同学都能很快掌握它的使用方法。即使是第一次接触这类工具的萌新也能根据官网上详细的教程在几天内基本学会。个人觉得它最大的特点在于友善度极高的Web UI界面。下面我们以官方给出的mnist例子为例简单说明。(nni/examples/trials/mnist)

调用该例子只需要在安装好NNI的前提下输入以下命令:

nnictl create –config/nni/examples/trials/mnist/config.yml

收到INFO: Successfully started experiment!的成功提示,说明这个例子已经开始跑了。NNI使用体验_第6张图片
我们根据提示的url打开Web UI界面:
NNI使用体验_第7张图片
在整个运行过程中我们可以实时掌握训练进度和结果,查看每一个trial的详细数据:NNI使用体验_第8张图片我们也可以在Web UI中查看训练结果的一些可视化图像:NNI使用体验_第9张图片NNI使用体验_第10张图片
NNI使用体验_第11张图片同时,在训练过程中我们可以通过输入指令查看、终止某一个trial或终止训练。如输入nnictl stop指令使训练停止。

总体来看,NNI这款工具体积小、易操作,可以实时掌握训练进度,训练结果直观可见。是一款机器学习调参的利器。

三、对NNI的建议

在初次使用NNI后,笔者对NNI有如下建议:

  1. 希望能简化通过SDK获取参数和回报指标的方法;
  2. 希望支持非命令行运行程序的方法,即做一个可以运行程序的UI界面;
  3. 希望可以在提供log文档之外,直接在网页上报fail的原因。

相信如此NNI会更容易上手。

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

NNI最主要的优点在于通过多种调优的算法来搜索最好的神经网络结构或超参,同时能够直接使用pip命令安装也是其突出优点之一
一、 NNI与Sklearn的比较
Sklearn作为经典的python的机器学习包,一般用于传统的机器学习任务,即获取数据→数据预处理→训练建模→模型评估→预测这一个完整的流程。Sklearn通过常规方法获取模型参数,调参需要通过Grid Search进行,Grid Search即指穷举搜索的调参手段,在所有已知的参数中,通过遍历循环尝试所有参数以得到最优参数。Grid Search调参方法最大的不足就是耗时较多。与之相比,NNI在准备数据完成后可以自动搜索最佳的超参组合,大大节省了调参过程中的时间和精力。
二、 NNI与Google Vizier的比较
Google Vizier大概是最早的自动调参工具之一,是由Google CloudML提供的云端训练模型和自动调参的功能。Google Vizier通过云端的自动调参算法进行训练并选择最优的超参组合和模型,所有代码运行过程都在后台执行,用户只需要上传python代码并访问获得运行结果即可,不需要更新本地的代码也不占用本地资源。然而其缺点在于云端自动调参是基于数据的学习过程,如果没有样本数据也无法实现所有超参都由机器来学习如何调整,而且由于后端执行代码的需求(只能优化Tensorflow模型的超参),上传前必须按照客户端提供的框架或编码规范修改代码,提高了使用的难度。
NNI相比之,代码主要在本地运行(也可以在远程服务器上执行),通过本地内置的多种自动调参算法对超参进行选择,并且在NNI训练模型时与本地命令行执行代码完全相同,基本可以兼容大部分框架,大大节省了调参过程中的时间和精力。由于已经集成了众多调参框架、兼容多个模型的超参,NNI的使用难度明显低于Google Vizier,用户比较容易实现训练任务。
三、 NNI与Advisor的比较
Advisor也是一个基于Vizier论文实现的开源调参服务,集成了NNI的接口格式,同时Advisor作为黑盒优化服务优于Google Vizier(支持不同编程语言的机器学习框架),安装只需要pip命令也比较简单。Advisor不需要依赖SDK来获取参数和回报指标,在stdout最后一行打印Metrics即可,这使得Advisor在获取反馈时效率更高。NNI作为微软近期开源的工具包,能够更加稳定的帮助用户实现训练任务,Advisor的前景还有待观察。
参考文献:

  1. 从Google Visor到Microsoft NNI再到Advisor调参服务接口发展史https://blog.csdn.net/u010159842/article/details/83043229
  2. 微软开源自动机器学习工具-NNI
    https://www.cnblogs.com/ms-uap/p/9719071.html
  3. 调参必备—FridSearch网格搜索
    https://www.cnblogs.com/ysugyl/p/8711205.html

你可能感兴趣的:(NNI)