NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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/


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

发布了 1836 篇内容, 共 92.5 次阅读, 收获喜欢 73 次。

关注

评论

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

我想做一款软件产品,应该怎么做?

天津汇柏科技有限公司

创新创业 产品原型设计软件

“无法打开应用,因为Apple无法检查其是否包含恶意软件“解决方法

Rose

随想2024.01.15

hackstoic

生活感悟

用二维码介绍产品详情,扫码查看图文并茂的宣传册

草料二维码

【年后跳槽必看篇-非广告】老生常态之Spring AOP/IOC 实现原理

派大星

Java 面试 跳槽

良心推荐!几款收藏的神级IDEA插件分享

Java随想录

Java IDEA

奇遇未来新动态!AIGC产品经理教学终于来了!

Geek_2d6073

什么是互动式数字人?

青否数字人

数字人

面试官:如何保证本地缓存的一致性?

王磊

Java 面试

从前端角度浅谈性能 | 京东物流技术团队

京东科技开发者

第三方 Cookie 被禁用?企业该如何实现用户精准运营和管理

Authing

Cookie Authing 用户运营

ElasticSearch降本增效常见的方法 | 京东云技术团队

京东科技开发者

Prometheus配置Basic Auth进行安全防护,实现登录控制

华为云开发者联盟

开发 华为云 华为云开发者联盟

解决苹果无线鼠标、键盘或触控板无法被 Mac 识别的方法

Rose

软件测试/测试开发/全日制/测试管理丨Appium Inspector

测试人

软件测试

Parallels Desktop 17 安装Windows 11 教程 附激活工具

Rose

软件开发

Geek_8da502

ByConity 社区回顾|ByConity 和开发者们一起展望未来,携手共进!

字节跳动数据平台

开源数据库 ByConity

JavaScript面向对象之实践项目

伤感汤姆布利柏

使用Local Persistent Volume 部署有状态工作负载

华为云开发者联盟

Kubernetes 开发 华为云 华为云开发者联盟

AI遇上传统文化,文心一言上央视带来跨时空访古体验

飞桨PaddlePaddle

人工智能 深度学习

苹果电脑Mac教程:如何开启任何来源选项

Rose

替代关系型数据库 MAX 聚合函数的思路

alexgaoyh

MySQL 替代 聚合函数 最新数据 自关联

京东ES支持ZSTD压缩算法上线了:高性能,低成本 | 京东云技术团队

京东科技开发者

APP加固原理与作用

使用数字人系统源码进行实时互动直播!

青否数字人

数字人

KaiwuDB × 风电企业 | 高性能、低成本、释放数据价值

KaiwuDB

数据库 解决方案

让 K8s 更简单!8款你不得不知的 AI 工具-Part 1

SEAL安全

开源 AI Kubernetes

Acrobat Pro DC 2023如何插入附件?Acrobat Pro DC添加附件方法

Rose

测试工程师必知的10大测试法则

禅道项目管理

测试 自动化测试

数字人的未来发展?

青否数字人

数字人

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