写点什么

Amazon Elastic Inference GPU 支持的深度学习推理加速

  • 2019-10-14
  • 本文字数:3495 字

    阅读完需:约 11 分钟

Amazon Elastic Inference  GPU 支持的深度学习推理加速

最近人工智能和深度学习的发展迅速,其中一个原因是图形处理单元 (GPU) 神奇的计算能力。大约十年前,研究人员学会了如何利用大规模硬件并行架构来进行机器学习和高性能计算:爱好探索的人将对 2009 年斯坦福大学发表的半年度报告 (PDF) 趋之若鹜。


今天,GPU 已经帮助开发人员和数据学家利用大规模的医学影像分析或自动驾驶数据集训练了复杂的模型。例如,Amazon EC2 P3 系列实例最高允许您同时使用八个 NVIDIA V100 GPU,最高可实现 1 PetaFLOP 的混合精确性能:但您是否相信在 10 年前这是有史以来速度最快的超级计算机的性能?


当然,模型的训练只是问题的一半:在推理上又如何,也就是将模型投入运行,用于为新的数据样本预测结果? 遗憾的是,开发人员往往在选择实例类型和大小上犯难。事实上,对于大型的模型,CPU 的推理延迟可能不满足在线应用的需要,而全能 GPU 的成本可能又不值当。此外,与原始推理速度相比,RAM 内存和 CPU 等资源可能对应用程序的总体性能更为重要。


例如,假设您渴求算力的应用程序要求采用一个 c5.9xlarge 实例(在 us-east-1 的成本为每小时 1.53 USD):使用 SSD 模型的单次推理调用需要接近 400 毫秒时间,这对于实时交互而言肯定太慢。如果将您的应用程序迁移到 p2.xlarge 实例(这是成本最低廉的通用型 GPU 实例,在 us-east-1 的成本为每小时 0.90 USD),可以将推理时间缩短至 180 毫秒:同样,这将影响应用程序的性能,因为 p2.xlarge 实例的 vCPU 数量和 RAM 内存容量更少。


好了,不能再妥协了。今天,我很高兴地宣布推出 Amazon Elastic Inference,这是一项新的服务,可让您为任何 Amazon EC2 实例附加恰当数量的 GPU 类推理加速功能。Amazon SageMaker 笔记本实例和终端节点也提供此功能,为内置算法和深度学习环境提供加速。


为应用程序选择最佳的 CPU 实例类型,然后挂载正确数量的 GPU 加速,从而兼得两者的最佳性能! 当然,您可以使用 EC2 Auto Scaling 来根据需要自动添加和删除加速实例。


推出 Amazon Elastic Inference


Amazon Elastic Inference 支持 TensorFlow、Apache MXNet 和 ONNX(通过 MXNet 执行)等常见的机器学习框架。对现有代码的更改需求极少,但您将需要使用 AWS 优化的解析版,它会自动检测挂载到实例的加速器,确保仅允许授权的访问,跨本地 CPU 资源和挂载的加速器分配计算资源。这些解析版可在 Amazon S3 上的 AWS Deep Learning AMI 使用,因此您可以在自己的映像或容器中构建它,并在您使用 Amazon SageMaker 时自动预置。


Amazon Elastic Inference 目前有三个型号,从而确保对多种推理模型的高效性,包括计算机视觉、自然语言处理和语音识别等。


  • eia1.medium:8 TeraFLOP 的混合精度性能。

  • eia1.large:16 TeraFLOP 的混合精度性能。

  • eia1.xlarge:32 TeraFLOP 的混合精度性能。

  • 这可让您根据应用程序选择最佳的性价比。例如,c5.large 实例搭配 eia1.medium 加速的成本为 0.22 USD/小时 (us-east-1)。这一组合仅比 p2.xlarge 实例慢 10-15%,而后者需要使用专用的 NVIDIA K80 GPU,成本高达 0.90 USD/小时 (us-east-1)。结果:您获得了同等的 GPU 性能,但成本减少了 75%,同时为您的应用程序选择了最契合的实例类型。


下面我们更深入一些,介绍 Amazon EC2 实例上的 Apache MXNet 和 TensorFlow 例子。


Amazon Elastic Inference 的设置


下面是将此服务用于 Amazon EC2 实例的简要步骤。


1.为实例创建一个安全组,仅允许入站 SSH 流量。


2.为实例创建一个 IAM 角色,允许它连接到 Amazon Elastic Inference 服务。


3.在将要运行实例的 VPC 中为 Amazon Elastic Inference 创建一个 VPC 终端节点,附加一个仅允许来自实例的入站 HTTPS 流量的安全组。请注意每个 VPC 中只能执行一次此操作,终端节点的费用将包含在加速器的成本中。



创建加速实例


现在终端节点已经可用,让我们使用 AWS CLI 来启动一个带 AWS Deep Learning AMI 的 c5.large 实例。


aws ec2 run-instances --image-id $AMI_ID \--key-name $KEYPAIR_NAME --security-group-ids $SG_ID \--subnet-id $SUBNET_ID --instance-type c5.large \--elastic-inference-accelerator Type=eia1.large
复制代码


一切搞定! 您不需要学习任何新的 API 即可使用 Amazon Elastic Inference:只需输入描述加速器类型的任何额外参数即可。几分钟后,实例将会启动,我们可以连接到该实例。


Apache MXNet 加速


在此经典示例中,我们将在 Amazon Elastic Inference 加速器上加载一个经过预训练的大型卷积神经网络(如果您不熟悉经过预训练的模型,请参阅我的上一篇博文)。具体而言,我们将使用借助 ImageNet 数据集训练的 ResNet-152 网络。


然后我们将借助 the Amazon Elastic Inference 加速器对一个图像进行分类。


import mxnet as mximport numpy as npfrom collections import namedtupleBatch = namedtuple('Batch', ['data'])
# Download model (ResNet-152 trained on ImageNet) and ImageNet categoriespath='http://data.mxnet.io/models/imagenet/'[mx.test_utils.download(path+'resnet/152-layers/resnet-152-0000.params'), mx.test_utils.download(path+'resnet/152-layers/resnet-152-symbol.json'), mx.test_utils.download(path+'synset.txt')]
# Set compute context to Elastic Inference Accelerator# ctx = mx.gpu(0) # This is how we'd predict on a GPUctx = mx.eia() # This is how we predict on an EI accelerator
# Load pre-trained modelsym, arg_params, aux_params = mx.model.load_checkpoint('resnet-152', 0)mod = mx.mod.Module(symbol=sym, context=ctx, label_names=None)mod.bind(for_training=False, data_shapes=[('data', (1,3,224,224))], label_shapes=mod._label_shapes)mod.set_params(arg_params, aux_params, allow_missing=True)
# Load ImageNet category labelswith open('synset.txt', 'r') as f: labels = [l.rstrip() for l in f]
# Download and load test imagefname = mx.test_utils.download('https://github.com/dmlc/web-data/blob/master/mxnet/doc/tutorials/python/predict_image/dog.jpg?raw=true')img = mx.image.imread(fname)
# Convert and reshape image to (batch=1, channels=3, width, height)img = mx.image.imresize(img, 224, 224) # Resize to training settingsimg = img.transpose((2, 0, 1)) # Channels img = img.expand_dims(axis=0) # Batch size# img = img.as_in_context(ctx) # Not needed: data is loaded automatically to the EIA
# Predict the imagemod.forward(Batch([img]))prob = mod.get_outputs()[0].asnumpy()
# Print the top 3 classesprob = np.squeeze(prob)a = np.argsort(prob)[::-1]for i in a[0:3]: print('probability=%f, class=%s' %(prob[i], labels[i]))
复制代码


您可以看出,只有少量的差异:


  • 我将计算上下文设置为 mx.eia()。无需编号,因为一个 Amazon EC2 实例只能挂载一个 Amazon Elastic Inference 加速器。

  • 我没有并没有像使用 GPU 时那样,明确将图像加载到 Amazon Elastic Inference 加速器上。这将自动完成。

  • 运行此示例会生成如下结果。



probability=0.979113, class=n02110958 pug, pug-dogprobability=0.003781, class=n02108422 bull mastiffprobability=0.003718, class=n02112706 Brabancon griffon
复制代码


性能如何? 借助我们的 c5.large 实例,此预测花费的 CPU 时间约为 0.23 秒,而在其 eia1.large 加速器上花费的时间仅 0.031 秒。在配备全能 NVIDIA V100 GPU 的 p3.2xlarge 实例上花费的时间约为 0.015 秒。如果改用 eia1.medium 加速器,则预测会花费 0.046 秒,与 p2.xlarge(0.042 秒)一样快,但成本降低了 75%!


TensorFlow 加速


您可以使用 TensorFlow Serving 来进行加速预测:它是一种模型服务器,通过 REST API 和 gRPC 来加载保存的模型并提供更性能的预测。


Amazon Elastic Inference 包含了 TensorFlow Serving 的加速版本,使用方法如下。


$ ei_tensorflow_model_server --model_name=resnet --model_base_path=$MODEL_PATH --port=9000$ python resnet_client.py --server=localhost:9000
复制代码


现已推出


我希望这篇博文提供了丰富的有用信息。Amazon Elastic Inference 现已在美国东部(弗吉尼亚北部和俄亥俄)、美国西部(俄勒冈)、欧洲(爱尔兰)和太地区(首尔和东京)区域推出。您可以立即开始使用它来构建应用程序!


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-elastic-inference-gpu-powered-deep-learning-inference-acceleration/


2019-10-14 13:59945
用户头像

发布了 1870 篇内容, 共 134.0 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

如何讲好故事

Bob Jiang

工信部报告显示:电话越打越少 、短信越发越多……这是怎么回事?

赵新龙

短信 工信部

有趣的解谜:Python Challenge

封不羁

Python

物联网技术栈之通信技术

老任物联网杂谈

物联网 通信

回顾 | Apache Flink Meetup 杭州站圆满结束(附PPT下载)

Apache Flink

大数据 flink 流计算 实时计算

霸榜 GitHub,一款开源的 Linux 神器!

GitHubDaily

GitHub Linux 编程 开发者工具 计算机网络

SQL 找出 100 以内的质数

zero

sql MySQ

一款Python实用神器,5 行 Python 代码 实现一键批量扣图

狂师

Python 学习 效率工具 开发者工具 开发

干货分享:分布式场景之刚性事务-2PC详解

奈学教育

分布式

Flink Weekly | 每周社区动态更新-20200513

Apache Flink

大数据 flink 实时计算

编辑距离的计算

zikcheng

算法 编辑距离

Flink 与 Hive 的磨合期

Apache Flink

大数据 flink 实时计算

【玩转写作社区】Markdown & 快捷键详解

InfoQ写作社区官方

写作平台 markdown 编辑器 快捷键 玩转写作平台

Java开发架构篇:初识领域驱动设计DDD落地

小傅哥

设计模式 领域驱动设计 DDD 小傅哥 架构设计

单例模式——独一无二的对象

大头星

Java 面试 设计模式 单例模式

使用gitlab ci构建IOS包并发送通知消息到企业微信

Zoe

ios ci gitlab

MySQL实战四十五讲基础篇总结(二)

一个有志气的DB

MySQL 日志

为什么window.open只是打开了一个空白页

阡陌r

Java 踩坑 网络协议

如何成为一名具备产品思维的软件工程师?

顾强

产品 开发者 职场

都在这儿了!5月 Flink 社区发版、更新汇总

Apache Flink

大数据 flink 流计算 实时计算

MySQL实战四十五讲基础篇总结(一)

一个有志气的DB

MySQL

MySQL实战四十五讲基础篇总结(三)

一个有志气的DB

MySQL mysql事务

识别代码中的坏味道(四)

Page

敏捷开发 面向对象 重构 CleanCode 代码坏味道

程序员的晚餐 | 5 月 19 日 蒜香鸡腿,味道令人惊讶

清远

美食

任何事物当中的百分之九十都是垃圾?

池建强

互联网 信息噪声

比特币为什么值两万亿?

Haiyung

比特币

视频 | 5款免费翻译软件实测对比,从花花董花花的被删微博到北京话“你丫给我站住了”都能翻译

赵新龙

翻译

spring事务原理

年轮

spring 源码分析

你是不是对副业有什么误解?

一尘观世界

程序员 副业 认知提升 思维方式 格局

【教你如何写作】参与创作,领取 InfoQ 编辑训练营内训课程

InfoQ写作社区官方

写作平台 投稿 热门活动

亲密爱人

Janenesome

爱情

Amazon Elastic Inference  GPU 支持的深度学习推理加速_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章