免费注册!6月19-20日,「亚马逊云科技中国峰会」重磅来袭! 了解详情
写点什么

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:59960
用户头像

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

关注

评论

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

开发者有话说|在刷怪升级的成长路上,技术人应该掌握的三个大招

迷彩

个人成长 10月月更 学会学习 学会提问 学会思考

【结构体内功修炼】结构体实现位段(二)

Albert Edison

C语言 结构体 10月月更 位段

单模光缆与多模光缆,网络工程师必知的光缆类型

wljslmz

网络工程 10月月更 单模光纤 多模光纤 弱电

免费申请和使用IntelliJ IDEA商业版License指南

程序员欣宸

ide 10月月更 ieda

在Chrome浏览器中最快速实现拾色器(颜色吸管)

茶无味的一天

前端 谷歌浏览器

踩上元宇宙的风口后,消费级AR眼镜真的复兴了吗?

脑极体

【一Go到底】第六天---值类型、引用类型、标识符

指剑

Go golang 10月月更

微信业务架构图 & 学生管理系统方案

无语

「架构实战营」

Vue3入门指北(十)侦听器

Augus

Vue3 10月月更

【一Go到底】第七天---运算符

指剑

Go golang 10月月更

推荐一款id 生成器:Hashids

xiaoxi666

竟然还有人说ArrayList是2倍扩容,今天带你手撕ArrayList源码

一灯架构

Java java面试 10月月更

【牛客刷题-算法】加精 _ 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程

清风莫追

算法 链表 算法数据结构 10月月更

【愚公系列】2022年10月 Go教学课程 020-Go容器之数组

愚公搬代码

10月月更

Go设计模式“金旋风”——代理模式

Regan Yue

Go 设计模式 代理模式 10月月更

Collections之ArrayList源码解读(七)

知识浅谈

ArrayList 10月月更

C++学习---cstdio的源码学习分析07-刷新文件流函数fflush

桑榆

c++ 源码分析 10月月更

2022-10-06:以下go语言代码输出什么?A:[1 2 3] [1 2 3] ;B:[1 2 3] [3 4 5]; C:[1 2 3] [3 4 5 6 7 8 9];D:[1 2 3] [3

福大大架构师每日一题

golang 福大大 选择题

爬虫练习题(二)

张立梵

Python. 10月月更 爬虫案例

一个 ExpressionChangedAfterItHasBeenCheckedError 错误的解决过程

汪子熙

typescript 前端开发 angular web开发 10月月更

pgsql数据库自动备份

衝鋒壹号

10月月更

Qt|使用QuaZip压缩包中文乱码问题解决

中国好公民st

c++ qt 10月月更

与学长共话成长,领跑毕业新未来

宇宙之一粟

校招 10月月更

高效编程不一定意味着要疯狂写代码

宇宙之一粟

程序员 10月月更

HashMap高阶用法,十倍提升开发效率

一灯架构

Java java面试 10月月更

学习编程既要追根溯源、又要紧跟时代步伐

玄兴梦影

c 编程 语法

Android Coder带你了解反射

子不语Any

后端 java; 10月月更

传统架构面临的挑战及上云的优势

穿过生命散发芬芳

企业上云 10月月更

【C语言难点突破】指针的常见易错点

Geek_65222d

10月月更

你不知道的Java工具类库,十倍提升开发效率

一灯架构

Java java面试 10月月更

Python基础(八) | 万字详解深浅拷贝、生成器、迭代器以及装饰器

timerring

装饰器 Python Monad 迭代器 生成器 10月月更

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