关于ml:SageMaker-Neo优化目标检测模型加速推理

7次阅读

共计 4368 个字符,预计需要花费 11 分钟才能阅读完成。

摘要

该文以指标检测模型着手,演示如何一步步基于 SageMaker Neo 对训练后的模型文件进行编译优化,来晋升模型的推理速度。文中以 yolo3_mobilenet1.0_coco 模型为例,别离演示模型筹备,模型 Neo 编译,模型导出推理测试,可视化等过程,推理结果显示基于 SageMaker Neo 能够显著晋升推理速度,达到一倍以上的减速。

📢 想学习更多人工智能与机器学习前沿案例?来 2021 亚马逊云科技中国峰会 与业内当先的技术践行者们一起探讨交换吧!点击图片报名吧~

模型筹备

在利用 SageMaker Neo 编译模型之前,首先须要依据神经网络的框架筹备模型,具体能够参考官网指南 Compile and Deploy Models with Neo:
https://docs.aws.amazon.com/s…

不同的框架对模型的要求各不相同,以 MXNet 框架为例,其模型的要求形容为:

MXNet models must be saved as a single symbol file *-symbol.json and a single parameter *.params files.

为了阐明整个 SageMaker Neo 优化的具体流程,该文档以
yolo3_mobilenet1.0_coco 人形检测模型为例进行模型筹备,Neo 编译,以及测试。

模型筹备分为两步,别离如下:

第一步:下载

yolo3_mobilenet1.0_coco人形检测模型:

wget -c https://ipc-models-zoo.s3.amazonaws.com/body-detector/body_detector_yolo3_mobilenet1.0_coco-0000.params
wget -c https://ipc-models-zoo.s3.amazonaws.com/body-detector/body_detector_yolo3_mobilenet1.0_coco-symbol.json

第二步:将上述两个文件打成 .tar.gz 包,即执行如下 python 脚本:

import tarfile
tar = tarfile.open("body_detector_yolo3_mobilenet1.0_coco.tar.gz", "w:gz")
for name in ["body_detector_yolo3_mobilenet1.0_coco-0000.params", "body_detector_yolo3_mobilenet1.0_coco-symbol.json"]:
tar.add(name)
tar.close()
Python

脚本执行结束,会在当前目录生成名为

body_detector_yolo3_mobilenet1.0_coco.tar.gz

的文件,该文件为 SageMaker Neo 编译工作的输出。

Neo 编译作业

SageMaker Neo 编译作业能够间接在 SageMaker 控制台实现,它的输出是一个 S3 桶门路,优化后的模型导出也是一个 S3 桶门路,整个过程如下:

1. 将其中生成的

body_detector_yolo3_mobilenet1.0_coco.tar.gz

上传至任意一个指定的 S3 桶门路,如

s3://object-det-neo/input/body_detector_yolo3_mobilenet1.0_coco.tar.gz

2. 进入 SageMaker 控制台,点击左侧导航栏推理 - 编译作业,创立编译作业,输出作业名称,创立具备 S3 桶拜访权限的 IAM 角色,输出配置中的选项包含:

  • 模型构件的地位: 模型存储的 S3 桶门路
  • 数据输出配置: 即模型的推理时输出尺寸,该指南中以宽高比为 3:2 的图像为基准,输出尺度为
  • {"data": [1, 3, 416, 624]
    机器学习框架: 因为该指南以 MXNet 为例,故抉择 MXNet

3. 输入配置选项包含:

  • 指标设施 / 指标平台:抉择指标平
  • 操作系统:抉择 LINUX;
  • 架构:抉择 X86_64
  • 加速器:抉择 NVIDIA
  • 编译器选项:输出
  • {“gpu-code”: “sm_75”, “trt-ver”: “7.0.0”, “cuda-ver”: “10.1”}
    S3 输入地位:指定优化后的模型输入,如
  • s3://object-det-neo/output/
    加密密钥:放弃默认(无自定义加密)

最初点击提交,期待 3 - 5 分钟,待编译作业状态显示实现后编译后的模型(如

s3://object-det-neo/output/body_detector_yolo3_mobilenet1.0_coco-LINUX_X86_64_NVIDIA.tar.gz

)便会输入到指定的 S3 桶地位。

EC2 推理速度测试

启动 EC2 实例

进入 EC2 控制台,启动实例,抉择 Amazon 零碎镜像(AMI)为

Deep Learning AMI (Amazon Linux 2) Version 44.0 - ami-01f1817a8a0c23c2e,

抉择实例类型为g4dn.xlarge,点击下一步配置实例详细信息,放弃默认,点击下一步增加存储,放弃默认根卷大小 95GiB,点击下一步增加标签(可选),点击下一步配置安组,放弃默认,点击审核和启动,抉择现有密钥对或创立新密钥对,点击启动。

稍等几分钟,期待实例的状态查看初始化实现后,通过 terminal 链接该实例:

ssh -i "your_key.pem" ec2-user@ec2-xxx-xxx-xx-xxx.compute-1.amazonaws.com

推理测试

通过 SSH 登录链接到实例之后,下载推理测试的代码和模型(未通过 Neo 优化的和通过 Neo 优化的),具体执行命令如下所示:

git clone https://github.com/aws-samples/amazon-ipc-ai-saas.git
cd amazon-ipc-ai-saas/source/neo
mkdir -p models/human_body_detector
cd models/human_body_detector
wget -c https://ipc-models-zoo.s3.amazonaws.com/body-detector/body_detector_yolo3_mobilenet1.0_coco-0000.params
wget -c https://ipc-models-zoo.s3.amazonaws.com/body-detector/body_detector_yolo3_mobilenet1.0_coco-symbol.json

cd ../../
mkdir -p models/human_body_detector_neo
cd models/human_body_detector_neo
wget -c https://ipc-models-zoo.s3.amazonaws.com/body-detector/body_detector_yolo3_mobilenet1.0_coco-LINUX_X86_64_NVIDIA.tar.gz
tar -zxvf body_detector_yolo3_mobilenet1.0_coco-LINUX_X86_64_NVIDIA.tar.gz

上述命令执行之后,在neo/ 目录下的构造如下所示:

.
├── eval.py
├── models
│   ├── human_body_detector
│   │   ├── body_detector_yolo3_mobilenet1.0_coco-0000.params
│   │   └── body_detector_yolo3_mobilenet1.0_coco-symbol.json
│   └── human_body_detector_neo
│       ├── compiled.meta
│       ├── compiled_model.json
│       ├── compiled.params
│       ├── compiled.so
│       └── manifest
└── test_1280x1920x3.jpg

装置 neo-ai-dlr 软件和 gluoncv 依赖包,参考 https://github.com/neo-ai/neo…;这里测试平台为 Amazon g4dn.xlarge,装置命令如下:

wget -c https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.9.0/gpu/dlr-1.9.0-py3-none-any.whl
source activate mxnet_latest_p37
pip3 install dlr-1.9.0-py3-none-any.whl
pip3 install gluoncv==0.8.0

退回到neo/ 目录,执行速度评估脚本eval.py,如下所示:

python3 eval.py

运行后果会间接打印在 terminal 之上,同时也会将推理的后果绘制进去并保留到当前目录下(未经 SageMaker Neo 优化的检测后果body_det_vis.jpg,经 SageMaker Neo 优化后的推理模型检测后果body_det_vis_with_neo.jpg)。

未经 Neo 优化和通过 Neo 优化后的推理后果可视化别离如下所示:

能够看出 SageMaker Neo 的优化根本没有影响到检测的精确度,运行工夫开销输入后果如下:

[NEO Optimization Disabled] Time Cost per Frame (input size = 1x3x416x624) = 23.388335704803467 ms
[NEO Optimization Enabled] Time Cost per Frame (input size = 1x3x416x624) = 10.05416750907898 ms

SageMaker Neo 优化过的模型能够将推理速度晋升一倍以上,该推理工夫不含将图像进行 base64 解码以及 resize 的局部。

留神:在测试完结之后,敞开该实例,防止产生不必要的费用。

本篇作者


徐高伟
亚马逊云科技解决方案架构师
负责基于亚马逊云科技的云计算计划的征询与架构设计,致力于亚马逊云科技云服务在汽车,物联网,人工智能等行业的利用和推广。在退出亚马逊云科技之前曾在 BMW 无人驾驶研发核心负责机器人和人工智能专家,负责无人车环境感知,行为预测和决策布局研发。

正文完
 0