NNI使用体验
NNI简介
NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。
NNI开源地址:https://github.com/Microsoft/nni
NNI与其他自动机器学习工具的比较
通用性:与大部分现有的自动机器学习服务与工具不同,NNI 需要用户提供训练代码,并指定超参的搜索范围。这样的好处在于,NNI 几乎是通用的工具,任何训练任务都可以使用 NNI 来进行超参搜索。
简洁易用:安装NNI仅需一条命令,只需对代码进行少量的修改即可通过NNI进行模型的训练,并且可以对搜索空间、Tuners等进行配置,Web UI的界面显示也非常有利于开发人员对模型训练过程的监控和分析,非常方便易用。
快速性:NNI内置了超参探索算法,可以在好的超参空间范围内对超参组合进行进一步的探索,加快超参组合搜索速度,减少时间消耗。
NNI安装过程及体会
当前NNI测试版只支持现阶段的Linux和MacOS,其中Ubuntu 16.04或更高版本以及MacOS 10.14.1已经过测试和支持。
- 通过pip安装
在python >= 3.5的环境下,运行
以下命令即可安装。
$ python3 -m pip install --upgrade nni
- 通过源代码安装
在具备python >= 3.5,git和wget的环境下
,运行以下命令即可安装。
$ git clone -b v0.5.1 https://github.com/Microsoft/nni.git
$ cd nni
$ source install.sh
通过pip单条命令即可成功安装nni,非常简洁方便。以下为通过pip命令安装过程的截图:
接下来,下载源代码示例:
$ git clone -b v0.5.1 https://github.com/Microsoft/nni.git
以mnist示例为例,由于该示例是在TensorFlow上构建的实验,所以在运行之前要确保安装了TensorFlow。
安装Tensorflow
- 安装Anaconda,下载地址,下载完成后,使用sudo sh *.sh命令进行安装(用文件名替代*号)
- 创建新的Anaconda环境,
python >= 3.5。
$ conda create --name test python=3.x
注:test为环境名称,可以自定义。
- 切换环境:
$ conda activate test
此时, 将切换至test环境下,环境名称会出现在命令行之前。
- 安装Tensorflow
$ pip install --upgrade --ignore-installed tensorflow
至此,mnist运行环境搭建完成。其中nni只需一条命令即可成功安装,过程简洁方便。
NNI使用过程及体会
在使用机器学习算法建模时,超参组合的调整一直都是一项非常耗费时间的工作,通过使用NNI自动机器学习工具包,可以省去人工调参的时间消耗,加速和简化超参搜索的过程。
以下我们以官方提供的mnist示例为例。首先进行三项准备工作:
- 定义搜索空间:search_space.json
- 修改源代码:mnist.py
- 定义实验配置:config.yml
以上准备工作完成后,使用以下命令启动示例:
$ nnictl create --config nni/examples/trials/mnist/config.yml
显示出Successfully started experiment即示例启动成功。 通过提示的url在Web UI界面查看详细信息:
通过数据可视化,将数据以图表、图像的方式呈现出来:
可对单个Trail的详细信息进行查看:
通过以下的优化进度页面可以看到按时序排列的度量值,在本示例中,该度量值为精度值。从图上可以看出,越靠右侧,度量值在较高的位置保持相对稳定,这说明NNI中的超参探索算法能够在一些好的超参范围内继续探索。
通过以下代码可以终止当前模型的训练:
$ nnictl stop
通过以下代码可以查看当前运行示例的详细信息。
$ nnictl experiment show
NNI工具简洁且上手容易,其超参探索的算法极大的便利了机器学习相关开发人员的模型参数优化工作,并且通过Web UI界面的数据可视化显示,使开发人员能够对数据进行更快速地分析和理解,并能够对模型训练过程进行实时监控,操作的简易性极大地便利了开发人员。对于刚开始接触AutoML工具的同学来说也是非常容易上手的,值得推荐!
建议
通过对NNI的使用,本人有如下建议:
- 在使用时发现NNI只能显示一个配置性能指标,没有办法一次显示多个指标与参数之间的关系
- 对于GAN网络两个指标没有办法很好的表示
上一篇: Scala入门到放弃
下一篇: Java——03——类和对象