写点什么

Amazon SageMaker Neo,只需训练您的机器学习模型一次,即可随时随地运行它们

2019 年 10 月 14 日

Amazon SageMaker Neo,只需训练您的机器学习模型一次,即可随时随地运行它们

机器学习 (ML) 分为两个不同的阶段:训练和推理。训练涉及构建模型,即在数据集上运行 ML 算法以识别有意义的模式。这通常需要大量的存储和计算能力,从而使云成为了使用 Amazon SageMaker 和 AWS Deep Learning AMI 等服务训练 ML 作业的自然场所。


推理涉及使用模型,即预测模型从未见过的数据样本的结果。要求是不同的:开发人员通常关注优化延迟(单次预测需要多长时间?)和吞吐量(我可以并行运行多少项预测?)。当然,您的预测环境的硬件架构对这些指标有很大影响,特别是您在处理资源受限的设备时:作为 Raspberry Pi 发烧友,我常常希望这个小家伙可以加快推理代码的速度。


可以针对特定硬件架构调整模型,但工具的缺乏使得这个过程容易出错并且耗时。对 ML 框架或模型本身的微小更改通常需要用户重新开始。遗憾的是,这迫使大多数 ML 开发人员在任何地方部署相同的模型,而不管底层硬件如何,从而无法显著提升性能。


好吧,就说到这里了。今天,我非常高兴地宣布推出 Amazon SageMaker Neo,它是 Amazon SageMaker 的一项新功能,它使机器学习模型进行一次训练即可在云端和边缘的任何地方以最佳性能运行。


隆重推出 Amazon SageMaker Neo

在没有任何人工干预的情况下,Amazon SageMaker Neo 可以优化部署在 Amazon EC2 实例、Amazon SageMaker 终端节点和 AWS Greengrass 管理的设备上的模型。


以下是支持的配置:


  • 框架和算法:TensorFlow、Apache MXNet、PyTorch、ONNX 和 XGBoost。

  • 硬件架构:现在开始支持 ARM、Intel 和 NVIDIA,即将对 Cadence、Qualcomm 和 Xilinx 硬件提供支持。此外,Amazon SageMaker Neo 以获得 Apache 软件许可的开源代码形式发布,使硬件供应商能够针对自己的处理器和设备进行定制。

  • Amazon SageMaker Neo 编译器将模型转换为高效的通用格式,通过紧凑型运行时在设备上执行,它使用的资源不足常规框架以往消耗的资源的百分之一。Amazon SageMaker Neo 运行时使用有助于加快 ML 推理的特定指令集,针对底层硬件进行了优化。


这有三个主要好处:


  • 转换模型的速度最多可提升一倍,而且不会降低精确度。

  • 现在,几乎所有资源有限的设备都可以运行复杂的模型,解锁自动驾驶汽车、自动视频安全和制造中的异常检测等创新用例。

  • 开发人员可以在目标硬件上运行模型,而不依赖于框架。


功能揭秘

大多数机器学习框架将模型表示为计算图:顶点表示对数据阵列(张量)的运算,而边表示运算之间的数据依赖项。Amazon SageMaker Neo 编译器利用计算图中的模式进行高级优化,包括运算符融合,将多项小型运算融合在一起;常量合并,静态预计算图形的一部分以节省执行成本;静态内存规划通道,预分配内存以保存每个中间张量;数据布局转换,将内部数据布局转换为适合硬件的形式。然后,编译器会为每个运算符生成有效的代码。


模型编译完成后,可以由 Amazon SageMaker Neo 运行时运行。与热门深度学习库所需的 500MB 到 1GB 磁盘空间相比,此运行时仅需大约 1MB 的磁盘空间。应用程序通过首先加载运行时来调用模型,然后加载模型定义、模型参数和预编译的运算。


我迫不及待想在我的 Raspberry Pi 上体验一番了。我们开始吧。


下载预先训练过的模型

Apache MXNet、Gluon CV 或 TensorFlow 模型库中提供了大量预先训练过的模型:我使用的是基于 ResNet 架构的 50 层模型,它在 ImageNet 数据集上使用 Apache MXNet 进行了预训练。


首先,我下载 227MB 的模型以及定义其不同层的 JSON 文件。这个文件特别重要:它告诉我输入符号称为“数据”,其形态是 [1,3,224,224],即 1 个图像、3 个通道(红色、绿色和蓝色)、224×224 像素。我需要确保传递给模型的图像具有这种精确的形态。输出形态为 [1, 1000],即包含 ImageNet 数据集中存在的 1000 个类中每个类的概率的向量。


为了定义性能基准,我使用此模型和 Apache MXNet 1.2 的普通未优化版本来预测一些图像:平均而言,推理大约需要 6.5 秒,并且需要大约 306MB 的 RAM。


这很慢:我们编译模型,看看它有多快。


编译适用于 Raspberry Pi 的模型

首先,我们将两个模型文件存储在压缩后的 TAR 存档中,并将其上传到 Amazon S3 存储桶。


$ tar cvfz model.tar.gz resnet50_v1-symbol.json resnet50_v1-0000.paramsa resnet50_v1-symbol.jsona resnet50_v1-0000.paramsresnet50_v1-0000.params$ aws s3 cp model.tar.gz s3://jsimon-neo/upload: ./model.tar.gz to s3://jsimon-neo/model.tar.gz
复制代码


然后,我只需要为编译作业编写一个简单的配置文件。如果您对其他框架和硬件目标感到好奇,‘aws sagemaker create-compilation-job help‘ 将为您提供要使用的确切语法。


{    "CompilationJobName": "resnet50-mxnet-raspberrypi",    "RoleArn": $SAGEMAKER_ROLE_ARN,    "InputConfig": {        "S3Uri": "s3://jsimon-neo/model.tar.gz",        "DataInputConfig": "{\"data\": [1, 3, 224, 224]}",        "Framework": "MXNET"    },    "OutputConfig": {        "S3OutputLocation": "s3://jsimon-neo/",        "TargetDevice": "rasp3b"    },    "StoppingCondition": {        "MaxRuntimeInSeconds": 300    }}
复制代码


启动编译过程只需一个命令。


$ aws sagemaker create-compilation-job --cli-input-json file://job.json
复制代码


编译只需几秒钟即可完成。我们弄清楚编译构件的名称,从 Amazon S3 获取它并在本地提取


$ aws sagemaker describe-compilation-job \--compilation-job-name resnet50-mxnet-raspberrypi \--query "ModelArtifacts"{"S3ModelArtifacts": "s3://jsimon-neo/model-rasp3b.tar.gz"}$ aws s3 cp s3://jsimon-neo/model-rasp3b.tar.gz .$ tar xvfz model-rasp3b.tar.gzx compiled.paramsx compiled_model.jsonx compiled.so
复制代码


如您所见,构件包含:


  • 原始模型和符号文件。

  • 存储模型使用的经过编译、针对硬件优化了的运算符的共享对象文件。

  • 为方便起见,我们将它们重命名为“model.params”、“model.json”和“model.so”,然后将它们复制到 Raspberry Pi 上的“resnet50”目录中。


$ mkdir resnet50$ mv compiled.params resnet50/model.params$ mv compiled_model.json resnet50/model.json$ mv compiled.so resnet50/model.so$ scp -r resnet50 pi@raspberrypi.local:~
复制代码


在 Raspberry Pi 上设置推理环境


在我使用模型预测图像之前,我需要在 Raspberry Pi 上安装相应的运行时。可以使用预先构建的软件包 [neopackages]:我只需下载“armv7l”架构的软件包,然后使用提供的脚本即可将其安装在我的 Pi 上。请注意,我不需要安装任何其他深度学习框架(在本例中为 Apache MXNet),可以节省高达 1GB 的永久存储空间。


$ scp -r dlr-1.0-py2.py3-armv7l pi@raspberrypi.local:~<ssh to the Pi>$ cd dlr-1.0-py2.py3-armv7l$ sh ./install-py3.sh
复制代码


现在我们一切准备就绪。预测图像的时间到了!


使用 Amazon SageMaker Neo 运行时

在 Pi 上,运行时以名为“dlr”(深度学习运行时)的 Python 包的形式提供。使用它来预测图像是您所期望的:


加载模型,定义其输入和输出符号。


加载图像。


预测!


下面是相应的 Python 代码。


import osimport numpy as npfrom dlr import DLRModel
# Load the compiled modelinput_shape = {'data': [1, 3, 224, 224]} # A single RGB 224x224 imageoutput_shape = [1, 1000] # The probability for each one of the 1,000 classesdevice = 'cpu' # Go, Raspberry Pi, go!model = DLRModel('resnet50', input_shape, output_shape, device)
# Load names for ImageNet classessynset_path = os.path.join(model_path, 'synset.txt')with open(synset_path, 'r') as f: synset = eval(f.read())
# Load an image stored as a numpy arrayimage = np.load('dog.npy').astype(np.float32)print(image.shape)input_data = {'data': image}
# Predict out = model.run(input_data)top1 = np.argmax(out[0])prob = np.max(out)print("Class: %s, probability: %f" % (synset[top1], prob))
复制代码


我们试一试这个图像。Chihuahuas 和 Raspberry Pis 是否相互兼容?



(1, 3, 224, 224)类:Chihuahua,概率:0.901803
复制代码


预测是正确的,但速度和内存消耗呢? 这次预测用时大约 0.85 秒,需要大约 260MB 的 RAM:使用 Amazon SageMaker Neo,预测速度比使用普通模型快 5 倍,RAM 效率提高 15%。


这种令人印象深刻的性能提升并不需要任何复杂和耗时的工作:我们所要做的就是编译模型。当然,您的具体情况可能会有所不同,具体取决于型号和硬件架构,但您应该会看到全面的显著改进,包括在 Amazon EC2 实例上的改进,例如 C5 或 P3 系列。


现已推出

我希望这篇博文提供了丰富的有用信息。使用 Amazon SageMaker Neo 编译模型是免费的,您只需为使用模型(Amazon EC2 实例、Amazon SageMaker 实例和 AWS Greengrass 管理的设备)的底层资源付费。


该服务现已在美国东部(弗吉尼亚北部)、美国西部(俄勒冈)和欧洲(爱尔兰)正式发布。不妨开始体验,并与我们分享您的想法。我们迫不及待想看看您创建的成果!


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-sagemaker-neo-train-your-machine-learning-models-once-run-them-anywhere/


2019 年 10 月 14 日 11:25265
用户头像

发布了 1282 篇内容, 共 36.7 次阅读, 收获喜欢 39 次。

关注

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

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

进“大厂”的故事

北风

职业规划 职业成长 大厂

sharding-jdbc 分库分表的 4种分片策略,还蛮简单的

程序员内点事

Java 分库分表

只需三步,带你从0到1玩转React,附源码我一定给你讲明白

小Q

Java 学习 编程 架构 面试

1分钟教你如何整理 React 知识体系

Leo

学习 前端 React 前端进阶训练营

Flink State 误用之痛,你中招了吗?

Apache Flink

flink

TCP/IP 基础知识总结

cxuan

后端 计算机网络 计算机

为什么11·11物流一年比一年快?奥秘就在这里!

华为云开发者社区

物联网 物流 仓储

区块链数字货币商城系统开发技术

薇電13242772558

区块链 数字货币

交易所画k线市值管理机器人,做市机器人开发

WX13823153201

Redis还可以做哪些事?

Java旅途

redis

【架构师训练营 1 期】第六周学习总结

诺乐

从零实现一个动态表单设计(编辑)器

徐小夕

Java 编辑器 H5 Node React

Go 与异步 IO - io_uring 的思考

IceberGu

golang Linux 异步IO io_uring

Java-技术专题-时间工具类的使用方案

李浩宇/Alex

训练营第二周课程总结

爱码士

训练营

给打工人熬一锅「毒」鸡汤

Java_若依框架教程

程序员 打工人 毒鸡汤

丑陋的程序员

陆陆通通

程序员 职场 认知

JAVA魅力之神奇的数组带给你不一样的乐趣

小Q

Java 学习 架构 面试 数组

2020双十一终极清单!阿里云CDN&视频云最全优惠攻略

阿里云Edge Plus

CDN

轻量型GPU应用首选 京东智联云推出NVIDIA vGPU实例

京东科技开发者

人工智能 gpu

接口测试(apipost、jmeter和python脚本)

测试人生路

Python 接口测试 测试工具

物联网时代存储告急 边缘存储如何缓解存储压力?

京东科技开发者

云计算 云服务 云存储

国家超算深圳中心计划2年内提升计算能力至少1000倍;图神经网络的生成式预训练论文解读

京东科技开发者

云计算

5G应用的实时决策

VoltDB

5G 物联网 工业互联网 技术分享

基于服务设计的线上展览

京东科技开发者

云安全

架构师训练营第 1 期第 7 周作业

业哥

为什么 React Hooks 优于 HOCs(译)

西贝

Java 翻译 React Hooks HOC

酷睿i5-10600KF对标锐龙7 3700X,游戏表现领先且售价更香

新闻科技资讯

网络直播打赏背后的套路:刺激用户不理智消费

石头IT视角

阿里二面惨败,痛定思痛狂刷1000+面试题,成功五面上岸滴滴(面经+面试题分享)

Java架构追梦

Java 架构 腾讯 面试 蚂蚁金服

华为云FusionInsight湖仓一体解决方案的前世今生

华为云开发者社区

数据库 华为 仓库

Amazon SageMaker Neo,只需训练您的机器学习模型一次,即可随时随地运行它们-InfoQ