微信扫一扫
分享到朋友圈

业界 | MXNet开放支持Keras,高效实现CNN与RNN的分布式训练

作者:机器之心 来源:机器之心 公众号
分享到:

05-22

选自AWS Machine Learning Blog

作者:Lai Wei、Kalyanee Chendke、Aaron Markham、Sandeep Krishnamurthy

机器之心编译

参与:路、王淑婷


今日 AWS 发布博客宣布 Apache MXNet 已经支持 Keras 2,开发者可以使用 Keras-MXNet 深度学习后端进行 CNN 和 RNN 的训练,安装简便,速度提升,同时支持保存 MXNet 模型。


感谢 Keras 和 Apache MXNet(孵化)开源项目的贡献者,Keras-MXNet 深度学习后端现已可用。


地址:https://github.com/awslabs/keras-apache-mxnet


Keras 是用 Python 编写的高级神经网络 API,因其快速、简单的 CNN 和 RNN 原型而广受欢迎。


Keras 开发人员现在可以使用高性能的 MXNet 深度学习引擎展开卷积神经网络(CNN)和循环神经网络(RNN)的分布式训练。通过更新几行代码,Keras 开发人员可以利用 MXNet 的多 GPU 分布式训练功能来提高训练速度。保存 MXNet 模型是该版本的另一个宝贵功能。你可以在 Keras 中进行设计,利用 Keras-MXNet 进行训练,并使用 MXNet 在生产中运行大规模推断。


用 Keras 2 和 MXNet 进行分布式训练


本文介绍了如何安装 Keras-MXNet,以及如何训练 CNN 和 RNN。如果你以前使用过其它深度学习引擎进行分布式训练,那你可能了解其中的难度和无趣。本文将展示如何使用 Keras-MXNet 进行训练。


安装仅需几步


1. 部署 AWS 深度学习 AMI

2. 安装 Keras-MXNet

3. 配置 Keras-MXNet


1. 部署 AWS 深度学习 AMI


按照 AWS 深度学习 AMI(DLAMI)部署教程来操作,教程地址:https://aws.amazon.com/getting-started/tutorials/get-started-dlami/。要利用多 GPU 训练示例,请启用 p3.8xlarge 或类似的多 GPU 实例类型。


想安装用于运行 CUDA、Keras、MXNet 和其他框架(如 TensorFlow)的依赖项?请根据 Keras-MXNet 安装指南进行操作:https://github.com/awslabs/keras-apache-mxnet/blob/master/docs/mxnet_backend/installation.md。


2. 安装 Keras-MXNet


在 DLAMI 上的 MXnet Conda 环境中安装 Keras-MXnet 及其依赖项。它已经包含 Keras 1.0 版,因此你需要先卸载此版本。登录到 DLAMI 并运行以下命令:


# Activate the MXNet Python 3 environment on the DLAMI
$ source activate mxnet_p36

# Install a dependency needed for Keras datasets
$ pip install h5py

# Uninstall older versions Keras-MXNet
$ pip uninstall keras-mxnet

# Install Keras-MXNet v2.1.6
$ pip install keras-mxnet


Keras-MXnet 及其依赖项现已安装在 DLAMI 上的 MXnet Conda 环境中。


3. 验证 Keras-MXNet 安装是否正确


使用以下代码验证 Keras 是否正在运行 MXNet 后端:


$ python
>>>import keras as k
  Using MXNet backend


支持 CNN


现在我们在 CIFAR-10 数据集上训练 ResNet 模型,来识别 10 个类别:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。我们可以使用 Keras-MXNet repo 示例部分中的 Keras 2 示例脚本(https://github.com/awslabs/keras-apache-mxnet/blob/master/examples/cifar10_resnet_multi_gpu.py)。使用 MXNet 作为 Keras 的后端几乎不需要对脚本进行什么更新。


首先,从 Keras-MXNet repo 文件夹中下载示例脚本:


$ wget https://raw.githubusercontent.com/awslabs/keras-apache-mxnet/master/examples/cifar10_resnet_multi_gpu.py


脚本启用 multi_gpu_model API,并输入要使用的 GPU 数量。


然后,在终端窗口运行 nvidia-smi,以确定 DLAMI 上可用 GPU 的数量。接下来,如果你有四个 GPU,那么你需要原样运行该脚本;否则,你需要运行以下命令来打开脚本进行编辑:


$ vi cifar10_resnet_multi_gpu.py


该脚本具备以下行,该行定义 GPU 的数量。如有必要,更新该行。


model = multi_gpu_model(model, gpus=4)


现在,开始训练。


$ python cifar10_resnet_multi_gpu.py


(可选)训练过程中,使用 nvidia-smi 命令检查 GPU 利用和内存使用。打开另一个终端会话。


支持 RNN


Keras-MXNet 目前提供对 RNN 的实验性支持。在使用 RNN 和 MXNet 后端时有一些局限性。更多信息,请查看 Keras-MXNet 文档:https://github.com/awslabs/keras-apache-mxnet/blob/master/docs/mxnet_backend/using_rnn_with_mxnet_backend.md。此处的示例包括使用 LSTM 层训练 IMDB 数据集时需要的一些变通方案。尽管有这些方案,但在多 GPU AMI 上训练 RNN 会比你之前的训练经验容易一些,速度也更快。


使用 imdb_lstm 示例脚本:https://github.com/awslabs/keras-apache-mxnet/blob/master/examples/imdb_lstm.py。将输入长度传输到嵌入层,按以下说明设置 unroll=True。


首先,在 DLAMI 的终端会话中,从 Keras-MXNet repo 文件夹中下载示例脚本:


$ wget https://raw.githubusercontent.com/awslabs/keras-apache-mxnet/master/examples/imdb_lstm.py


然后,打开脚本,跳至下列行进行 review:


model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(LSTM(128, unroll=True))


现在,示例脚本已经过修改,可与 MXNet 后端兼容,你可以运行以下行:


$ python imdb_lstm.py


(可选)训练过程中使用 nvidia-smi 命令检查 GPU 利用和内存使用。打开另一个终端会话进行该操作。


基准


为了帮助大家评估不同 Keras 后端的性能,AWS 向 Keras-MXNet 添加了一个基准模块。按表中描述在 CPU、单个 GPU 和多 GPU 上使用不同的模型和数据集,你会发现 Keras-MXNet 训练 CNN 的速度更快,且在多个 GPU 上实现高效的性能提升。详见训练速度柱状图。关于如何运行基准脚本以及生成详细的基准结果,详见 Keras Benchmarks readme 文档:https://github.com/awslabs/keras-apache-mxnet/tree/master/benchmark。


基准配置


  • Keras Version 2.1.6

  • MXNet Version 1.2.0

  • Image Data Format: Channel first


训练 CIFAR10 数据集导致子线性缩放,因为该数据集图像更小。CIFAR10 数据集包含 5 万张图像,每张图像的大小是 32×32 像素。使用四个 GPU 传输这些小图像所需的通信开销比使用八个 GPU 的开销高。ImageNet 和合成数据数据集更好地展示了 Keras-MXNet 可能带来的性能改进。详见下表。



使用 Keras-MXNet 的图像处理速度对比



接下来


尝试其他的 Keras-MXNet 教程或阅读版本注释。


  • Keras-MXNet 教程地址:https://github.com/awslabs/keras-apache-mxnet/tree/master/docs/mxnet_backend

  • 版本注释:https://github.com/awslabs/keras-apache-mxnet/releases/tag/v2.1.6 


原文链接:https://aws.amazon.com/cn/blogs/machine-learning/apache-mxnet-incubating-adds-support-for-keras-2/



本文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com

阅读9151
举报0
关注机器之心微信号:almosthuman2014

用微信扫描二维码即可关注
声明

1、头条易读遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2、本文内容来自“机器之心”微信公众号,文章版权归机器之心公众号所有。

评论
更多

文章来自于公众号:

机器之心

微信号:almosthuman2014

邮箱qunxueyuan#163.com(将#换成@)
微信编辑器
免责声明
www.weixinyidu.com   免责声明
版权声明:本站收录微信公众号和微信文章内容全部来自于网络,仅供个人学习、研究或者欣赏使用。版权归原作者所有。禁止一切商业用途。其中内容并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现头条易读网站上有侵犯您的知识产权的内容,请与我们联系,我们会及时修改或删除。
本站声明:本站与腾讯微信、微信公众平台无任何关联,非腾讯微信官方网站。