本次课程将介绍开源AI框架MxNet以及其在腾讯云上的实践。包括开源AI框架MxNet 和Intel Optimized MXnet的特点和优势,在腾讯云如何使用镜象工具轻松搭建MxNet开发环境,并演示如何运行MXnet demo以及利用英特尔优化过后的MXnet进行性能提升。
【课程大纲】
1. Apache MXNet总览
2. Intel对MXNet的优化
3. Gluon-CV简介和应用
4. 其他MXNet应用案例
英特尔是半导体行业和计算创新领域的全球领先厂商,以智能互联技术奠定全球创新基石。英特尔创始于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年百强排行榜中,英特尔荣登榜首。
了解Apache MXNet
了解Intel优化的MXNet
了解Gluon-CV模型库
第一章 Apache MXNet总览
第二章 Intel对MXNet的优化
第三章 Gluon-CV简介和应用
第四章 其他MXNet应用实例
GitHub: github.com/apache/incubator-mxnet
Web: https://mxnet.incubator.apache.org/versions/master
轻巧,便携,灵活和高效的框架:
基于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在CPU上深度优化
优化的三个部分:
具有Intel优化的CPU后端的Apache MXNet *包括以下优化:
英特尔MKL-DNN加速:
英特尔MKL加速:
Intel做的全面优化的列表请查看链接
Operator_list: github.com/apache/incubator-mxnet/blob/v1.5.x/docs/tutorials/mkldnn/operator_list.md
Intel Xeon Cascade Lake (CLX-SP)
通过新的矢量神经网络指令(VNNI)扩展英特尔AVX-512指令集
VNNI使性能提高4倍
使用场景:
深度学习通常采用32位的浮点数做引用和推理,通过VNNI优化之后可以进行8位整型数的模型推理,从而达到性能提升
英特尔,AWS和Apache MXNet的联合工作:
其中分为两大步骤
1. 校准量化(离线阶段):
2. INT8推理(运行时阶段):
提供校准工具和API,可轻松将Float32模型量化为INT8模型
深度优化 速推理量化的许多功能:
从数据加载到计算密集型操作,提供完全量化的INT8网络
提供生产级别的量化质量
常见的计算模式,例如卷积+ relu,由图形优化器融合
紧凑高效,对用户透明
ResNet 50 v1 长久的优化策略
1. 从PyPI安装MXNet-MKL
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
mx.__version__
mx. __path__
exoirt MKLDNN_VERBOSE = 1
python mxnet-test.py
利用OP融合和模型量化,在针对CPU后端进行了优化的Apache MXNet v1.5上,推理吞吐量和延迟性能都得到了显着改善。
图1和2说明了用于图像分类的其他中性网络拓扑的推理吞吐量和延迟比较
英特尔MKL-DNN提供的融合RNN内核的集成为LSTM和Vanilla-RNN的吞吐量和延迟带来了显着的推理性能改进。 以GNMT在LSTM层上的一系列选择性输入形状为例,以反映性能的提高
图3和图4说明了RNN的推理性能比较
Apache MXNet v1.5支持使用Horovod框架和Intel MPI进行分布式培训。
通过更有效地利用网络带宽和扩展深度学习模型来提高CPU后端的多节点训练效率
表1列出了在SKX-6148的不同节点上实现的可扩展性
图5说明了在SKX-6148的8/16节点上的训练趋势和验证准确性,这反映了节点数在收敛时没有紧凑性
官方网址,含有大量训练好的模型:
https://gluon-cv.mxnet.io/index.html
Gluon-CV特性:
后端建议选择MKL-DNN
不需要在MXNet上进行这个操作
Gluon-CV提供了50多种ImageNet预训练模型。
记录了这些预训练模型的所有推理性能和准确性。
推理吞吐量与验证准确性的可视化。
通过这个图可以有针对性地进行后续的图像分类
通过指定pretrained = True,它将自动从模型库下载模型
测试图像将打印出推理结果中种类可能性最高的图片的名称
重现步骤:
$ cd image-classification/
$ python image-classification-example.py
如何使用Gluon-CV中预训练的模型检测目标
已经训练好的模型在推理精度差异的对比,可以直观了解不同模型差异,选择合适的模型进行目标检测。
所选模型ssd_300_vgg16_atrous_coco的模型属性:
从腾讯云MXnet的镜像里就含有目标检测的例子
$ cd object-detection/
$ python object-detection-example.py
这两个小节包含的实例均以在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转发环境
在整个对象检测方面,英特尔MXNet具有比公共MXNet更好的FPS
使用Intel MXNet可以在Intel CPU上加速AI应用程序!
MXNet将一台机器上的所有CPU视为一台设备进行处理。 因此,无论您指定cpu(0)还是cpu(),MXNet都将使用计算机上的所有CPU内核。
英特尔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推理在SkyLake上的性能可提高1.3倍〜1.8倍,在CascadeLake上可提高约3倍的速度
该测试是在SkyLake上执行的,使用INT8推断的速度约为1.5X
课程学习交流
请扫码关注腾讯产业互联网学堂微信公众号