登录后再学习,可使用学习中心、个人中心等更完善的课程服务。立即登录>
关闭

英特尔优化的 MxNet 在腾讯云上的 AI 实践

  • 4 课时
  • 369 学过
  • 8 分
GPU 云服务器深度学习

课程概述

本次课程将介绍开源AI框架MxNet以及其在腾讯云上的实践。包括开源AI框架MxNet 和Intel Optimized MXnet的特点和优势,在腾讯云如何使用镜象工具轻松搭建MxNet开发环境,并演示如何运行MXnet demo以及利用英特尔优化过后的MXnet进行性能提升。

【课程大纲】

1. Apache MXNet总览

2. Intel对MXNet的优化

3. Gluon-CV简介和应用

4. 其他MXNet应用案例

机构简介

英特尔(Intel Corporation)

英特尔是半导体行业和计算创新领域的全球领先厂商,以智能互联技术奠定全球创新基石。英特尔创始于1968年,拥有50余年推动技术创新和耕耘产业生态的成功经验。如今,英特尔正转型为一家以数据为中心的公司。英特尔的战略愿景聚焦于三个方面:一是致力于生产世界上最好的半导体芯片;二是引领人工智能与“自能”革命;三是做全球领先的端到端技术平台提供者。英特尔正与合作伙伴一起,共推人工智能、自动驾驶、 5G及物联网等领域的技术创新与应用突破,驱动智能互联世界,从而解决人类面临的重大挑战。 英特尔于1985年进入中国,是在华高科技领域最大的外国投资企业之一,协议总投入约130亿美元。中国是英特尔全球战略之重点,英特尔在中国拥有美国总部之外最为全面的业务部署,覆盖了前沿研究、产品技术开发、精尖制造、产业生态合作、市场营销、客户服务、风险投资和企业社会责任等。英特尔中国现有员工约9,500人。扎根中国三十四年,英特尔见证并深度参与了中国的改革开放,从浦东开发、西部开发到振兴东北等,英特尔一直跟随改革开放的步伐,积极带动区域经济发展,为高端制造持续注入新动力。 2014年12月,英特尔宣布在未来15年将为成都工厂投资16亿美元,首次引入英特尔最先进的高端测试技术( ATT),使成都工厂在原有的芯片封装与测试业务之外进一步升级为英特尔在美国境外唯一的ATT技术工厂;该技术已于2016年11月18日正式投产。 2015年10月,英特尔宣布投资55亿美元,将英特尔大连工厂升级为非易失性存储技术制造基地;该项目已经于2016年7月正式投产, 2017年发布了两款全新的基于3D NAND的数据中心级固态盘;其二期项目已经在2018年9月投产英特尔最先进的96层3D NAND产品。英特尔中国研究院是英特尔全球五大创新中枢之一,而英特尔亚太研发中心已发展成为英特尔在亚洲最大的综合性研发基地之一。 英特尔中国积极履行企业社会责任,涵盖了人才培养、员工关爱、多元化和包容、环境可持续、供应链建设、志愿服务等领域。英特尔连续20多年被教育部评为最佳合作伙伴。我们持续支持英特尔杯嵌入式大赛、英特尔杯软件创新大赛和人工智能人才培养等项目,开展丰富多彩的校园活动,每年都有上万名学生的直接参与,受益青少年数以十万计。英特尔中国员工在2018年参与志愿活动人数达8,636人,贡献志愿服务时间超过12万小时,参与比例为69%; 10年来累计志愿服务时间超过72 万小时。我们把公司运营与环境可持续发展协调并进,积极减少碳足迹;还和政府、产业链以及公益组织深入合作,共同推动绿色可持续发展。全球独立机构声望研究院发布的“中国最具声望的公司”( RepTrak? 100) 2018年百强排行榜中,英特尔荣登榜首。

讲义

Intel优化的MXNet在腾讯云上的实践

课程目标

了解Apache MXNet

  • Apache MXNet的基本功能和特性
  • Apache MXNet对比其他主流框架的优势

了解Intel优化的MXNet

  • Intel MXNet具体的优化内容和性能加速
  • 如何安装Intel MXNet

了解Gluon-CV模型库

  • 什么是Gluon-CV,如何安装Gluon-CV
  • 使用Gluon-CV实践MXNet

目录

第一章 Apache MXNet总览

第二章 Intel对MXNet的优化

第三章 Gluon-CV简介和应用

第四章 其他MXNet应用实例

第一章 Apache MXNet总览

Apache MXNet

GitHub: github.com/apache/incubator-mxnet

Web: https://mxnet.incubator.apache.org/versions/master

轻巧,便携,灵活和高效的框架:

  • 灵活的配置
  • 命令式和符号编程
  • 扩展到多节点
  • 云友好型,与主流S3,HDFS,Azure云兼容
  • 多个前端(Python等)支持

Apache MXNet生态系统

基于MXNet的最佳生态系统和尖端应用程序

工具包

介绍

项目地址

GluonCV

用于计算机视觉的深度学习工具包,实现了业界最佳的CV精度。

https://gluon-cv.mxnet.io/

GluonNLP

用于自然语言处理(NLP)的工具包,可轻松进行文本预处理,数据集加载和神经模型构建。

https://gluon-nlp.mxnet.io/

GluonRT

用于概率时间序列建模的Gluon工具箱。

github.com/awslabs/gluon-ts

DeepGraphLibrary

一个专用于图的深度学习的Python软件包,简化了基于图的神经网络的实现。

github.com/dmlc/dgl

SOCKEYE

基于Apache MXNet(孵化)的神经机器翻译序列到序列框架。

github.com/awslabs/sockeye

github.com/awslabs?utf8=%E2%9C%93&q=mxnet&type=&language=

第二章 Intel对MXNet的优化

Intel优化的MXNet

Intel对MXNet在CPU上深度优化

优化的三个部分:

具有Intel优化的CPU后端的Apache MXNet *包括以下优化:

  • 操作员级别的优化
    • 英特尔MKL-DNN和英特尔MKL库
    • 英特尔DL Boost,VNNI指令:第二个可扩展处理器的速度最高提高约4倍
  • 图级优化
    • 通过图形优化选择模型级别
  • 分布式培训(多节点)

Intel优化的MXNet: 总体优化

英特尔MKL-DNN加速:

  • NN Ops,Conv,Relu,FC,Softmax等
  • 数据处理操作,转置,整形等

英特尔MKL加速:

  • GEMM,MKL批处理GEMM的batch_dot等。
  • 通过OpenMP,SliceChannel进行并行操作

Intel做的全面优化的列表请查看链接

Operator_list: github.com/apache/incubator-mxnet/blob/v1.5.x/docs/tutorials/mkldnn/operator_list.md

Intel优化的MXNet: VNNI优化 (最新优化)

Intel Xeon Cascade Lake (CLX-SP)

通过新的矢量神经网络指令(VNNI)扩展英特尔AVX-512指令集

VNNI使性能提高4倍

使用场景:

深度学习通常采用32位的浮点数做引用和推理,通过VNNI优化之后可以进行8位整型数的模型推理,从而达到性能提升

英特尔,AWS和Apache MXNet的联合工作:

  • 使用MXNet自动工具进行模型量化
  • 离线校准以收集统计信息
  • 支持INT8和UINT8输入
  • 量化计算密集运算符,卷积,FC,DOT
  • 量化内存绑定运算符,例如Concat,Pooling,Sum
  • 同时支持Symbolic和GluonCV模型
  • 支持CNN和非CNN应用程序:分类,对象检测,RNN等。

其中分为两大步骤

1. 校准量化(离线阶段):

  • 从验证数据集中选择一小部分图像(1-5%)
  • 收集统计信息并定义比例因子
  • 输出:带有JSON文件和参数文件的校准模型

2. INT8推理(运行时阶段):

  • 加载并使用量化(校准)模型进行推理
  • 速度更快,精度差异更小

提供校准工具和API,可轻松将Float32模型量化为INT8模型

ResNet 50 v1: 优化前后的对比

深度优化 速推理量化的许多功能:

  • 量化数据加载器
  • 离线校准
  • 图形优化等

从数据加载到计算密集型操作,提供完全量化的INT8网络

提供生产级别的量化质量

常见的计算模式,例如卷积+ relu,由图形优化器融合

紧凑高效,对用户透明

ResNet 50 v1 长久的优化策略

如何安装Intel优化的MXNet并验证安装结果

安装Intel MXNet

1. 从PyPI安装MXNet-MKL

https://mxnet.incubator.apache.org/versions/master/install/index.html?platform=Linux&language=Python&processor=CPU

2. 使用英特尔MKL-DNN后端构建

Download MXNet source code from GitHub:
	$ git clone --recursive 
	     github.com/apache/incubator-mxnet 
	$ cd incubator-mxnet
	$ git checkout 1.5.0
	$ git submodule update --init –recursive

Build with Intel MKL-DNN backend:
	$ make -j USE_OPENCV=1 USE_MKLDNN=1 USE_BLAS=mkl

验证安装成功

limport mxnet as mx

查看MXNet版本和路径

mx.__version__
mx. __path__

检查英特尔优化

exoirt MKLDNN_VERBOSE = 1
python mxnet-test.py

Intel MXNet的性能:

CV模型

利用OP融合和模型量化,在针对CPU后端进行了优化的Apache MXNet v1.5上,推理吞吐量和延迟性能都得到了显着改善。

图1和2说明了用于图像分类的其他中性网络拓扑的推理吞吐量和延迟比较

RNN

英特尔MKL-DNN提供的融合RNN内核的集成为LSTM和Vanilla-RNN的吞吐量和延迟带来了显着的推理性能改进。 以GNMT在LSTM层上的一系列选择性输入形状为例,以反映性能的提高

图3和图4说明了RNN的推理性能比较

Horovod+Intel MPI

Apache MXNet v1.5支持使用Horovod框架和Intel MPI进行分布式培训。

通过更有效地利用网络带宽和扩展深度学习模型来提高CPU后端的多节点训练效率

表1列出了在SKX-6148的不同节点上实现的可扩展性

图5说明了在SKX-6148的8/16节点上的训练趋势和验证准确性,这反映了节点数在收敛时没有紧凑性

第三章 Gluon-CV简介和应用

Gluon-CV简介

  • 计算机视觉中最先进的(SOTA)深度学习算法
  • 快速制作原型产品,验证新想法并学习计算机视觉

官方网址,含有大量训练好的模型:

https://gluon-cv.mxnet.io/index.html

Gluon-CV特性:

  • 再现SOTA结果的训练脚本
  • 大量的预训练模型
  • 精心设计的API和易于理解的实现
  • 完善的社区支持

支持的应用

安装

https://gluon-cv.mxnet.io/install/install-more.html

后端建议选择MKL-DNN

不需要在MXNet上进行这个操作

Gluon-CV实例:图像分类

如何使用Gluon-CV中预训练的模型分类图像

Gluon-CV提供了50多种ImageNet预训练模型。

记录了这些预训练模型的所有推理性能和准确性。

推理吞吐量与验证准确性的可视化。

通过这个图可以有针对性地进行后续的图像分类

通过指定pretrained = True,它将自动从模型库下载模型

测试图像将打印出推理结果中种类可能性最高的图片的名称

重现步骤:

$ cd image-classification/
$ python image-classification-example.py

Gluon-CV实例:目标检测

如何使用Gluon-CV中预训练的模型检测目标

已经训练好的模型在推理精度差异的对比,可以直观了解不同模型差异,选择合适的模型进行目标检测。

不同尾缀含义

所选模型ssd_300_vgg16_atrous_coco的模型属性:

  • ssd表示单发多框对象检测
  • 300是训练图像尺寸。 训练图像的大小调整为300x300,所有锚框都匹配此形状
  • vgg16_atrous 是基本特征提取器网络类型
  • coco是训练数据集。 您可以选择voc或coco等。
  • ssd_300_vgg16_atrous_coco_int8 表明经过了FP32到int8模型的转换

从腾讯云MXnet的镜像里就含有目标检测的例子

$  cd object-detection/
$ python object-detection-example.py

第四章 其他MXNet应用实例

这两个小节包含的实例均以在Intel 优化的MXNet的官方腾讯云镜像上集成,可以直接操作。

Intel MXNet v.s. Public MXNet 见证Intel优化的MXNet在性能上的优势

需要先创造两个MXNet虚拟环境

Intel MXNet

Intel MXNet

$ cd intel-vs-public $ virtualenv -p /usr/bin/python3 virtual_intel_mxnet $ source virtual_intel_mxnet/bin/activate $ pip install mxnet-mkl tqdm opencv-python $ pip install --pre gluoncv $ python detection_fps_encoder.py

$ cd intel-vs-public $ virtualenv -p /usr/bin/python3 virtual_public_mxnet $ source virtual_public_mxnet/bin/activate $ pip install mxnet tqdm opencv-python $ pip install --pre gluoncv $ python detection_fps_encoder.py

确保您已成功设置X11转发环境

比较结果 重点关注FPS(每秒多少帧可以被目标检测)

猫的可能性预测概率

在整个对象检测方面,英特尔MXNet具有比公共MXNet更好的FPS

使用Intel MXNet可以在Intel CPU上加速AI应用程序!

更好性能的环境变量参数设置

MXNet将一台机器上的所有CPU视为一台设备进行处理。 因此,无论您指定cpu(0)还是cpu(),MXNet都将使用计算机上的所有CPU内核。

Intel MXNet INT8 Quantization 探索INT8推理的性能加速

英特尔MXNet通过MKLDNN优化启用了INT8推理。 确保已安装英特尔MXNet 1.5和Gluon-CV:

pip install --pre mxnet-mkl gluoncv

量化脚本imagenet_gen_qsym_mkldnn.py用于启动图像分类模型的量化。 在这种情况下,选择了resent50_v1模型。

要使用Intel MXNet执行INT8量化,请从Gluon-CV下载预训练的完整模型,并将其转换为最终将被量化的符号模型。

$ cd quantization
$ python imagenet_gen_qsym_mkldnn.py --model=resnet50_v1 --num-calib-batches=5 --calib-mode=naive

在腾讯云官方实例上输入这两行命令就可以执行,会把该模型将以融合和量化格式自动替换, 然后将其另存为./model目录中的量化符号和参数文件。

输出

执行推理过程的不同命令

FP32

INT8

$ python imagenet_inference.py --symbol-file=./model/resnet50_v1-symbol.json --param-file=./model/resnet50_v1-0000.params --rgb-mean=123.68,116.779,103.939 --rgb-std=58.393,57.12,57.375 --num-skipped-batches=50 --batch-size=16 --num-inference-batches=50 --dataset=./data/val_256_q90.rec --ctx=cpu --data-nthreads=1

$ python imagenet_inference.py --symbol-file=./model/resnet50_v1-quantized-5batches-naive-symbol.json --param-file=./model/resnet50_v1-quantized-0000.params --rgb-mean=123.68,116.779,103.939 --rgb-std=58.393,57.12,57.375 --num-skipped-batches=50 --batch-size=16 --num-inference-batches=50 --dataset=./data/val_256_q90.rec --ctx=cpu --data-nthreads=1

结果对比

检查每秒图像行的推理性能,并检查精度指标以考虑准确性

上图为FP32 推理结果,下图为INT8 推理结果

与FP32推理相比,INT8推理在SkyLake上的性能可提高1.3倍〜1.8倍,在CascadeLake上可提高约3倍的速度

该测试是在SkyLake上执行的,使用INT8推断的速度约为1.5X

课程评价(0)

感谢你参加本课程,请你作出评价:
0/300

以下选自学员评价

暂无精选评价