本次课程将介绍开源AI框架Intel Cafe.包括在云上的实践,包括开源AI框架caffe和Intel 优化的 caffe, 特点和优势,掌握在腾讯云使用镜象工具轻松搭建Intel Caffe 开发环境,使用Intel caffe 进行图像分类的推理过程,案例所需的深度网络模型,并指导学员编写代码, 进行图片数据和格式处理.
帮助大家掌握使用Caffe框架使用CPU对图片进行分类推理.
【课程大纲】
1. Intel优化Caffe的原理
2. 基于Intel Distribution of Caffe进行图像分类的推理过程
3. 腾讯云上创建AI开发环境
4. 动手学习图像分类
英特尔是半导体行业和计算创新领域的全球领先厂商,以智能互联技术奠定全球创新基石。英特尔创始于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技术咨询工程师张建宇跟大家一起来学习Intel Caffe 在腾讯云上的实践。
通过使用Intel优化Caffe来学习图像分类的推理过程
Caffe 是一个非常实用非常广泛的框架,它的技术也比较复杂,Intel 优化 Caffe要使用的非常多的技术,我们可能在短期之内很难给大家罗列。
这里面我们挑三个主要方面做一个例子,让大家对Intel®优化Caffe的基本原理有一个概念性的了解。
我们 Intel® CPU上存在的非常多的硬件特性,这些特性可以用来对软件加速
这个表格中我们罗列了两种,
当我们的应用程序采用多线程和多进程的方式时,我们就可以充分用多个cpu的核进行运算,从而成倍的提升我们用程序的性能。
这中间常见的是sse avx 和avx2
这些指令集主要是支持向量化运算呃,它的好处呢就是在可以计算密集型的操作中能极大的提高它的性能。
那么这两个种硬件特性和其他一些特性对于普通的开发者而言,使用这些特性对软件进行加速或者优化难度是比较高的,所以英特尔在这些硬件之上,针对这些硬件开发了一系列的工具和库方便大家来使用这些硬件特性。
ICC指的是Intel的411编译器,它可以对代码,在CPU上进行编译和优化,从而使得用户不用再修改任何源代码的情况下获得一个非常明显的性能提升。
OpenMp和TBB是两个intel开发的进行并行化的库,他提供非常简单的编程接口,用户通过这两个库可以很容易地把用户的应用程序进行变形的话的设置,从在多核CPU上获得非常好的性能提升。
MKL, MKL-DNN是英特尔数学核心库和数学核心库的深度神经网络扩展。
那么Intel Caffe 实际上是基于正确的工具和技术,然后做了非常深度的优化能在 Intel® CPU上或者非常大的一个性能提升。
我们的应用程序可以基于 Intel® CPU的开发呃,从而间接的也获得非常好的一个性能。
我们来看到最上面图片中会显示一个普通的二维卷积乘法的一个时间过程,最左侧是一个三乘三的卷积和,中间是我们输入的输入矩阵(二维矩阵)
进行卷积运算的时候,我们先从输入矩阵中选取三乘三的一个子区域,把这个区域和卷积核中对应的位置值相乘,将他们最后所有的结果累加。比较之后的结果会放到我们的输出矩阵,对应的位置是以前的这个输入数据区的中心点。
紧接着,我们会把这个运算的在输入数据区中,由左往右由上往下,进行直到遍历完所有的输入矩阵,这样就完成了一次完整的二维卷积运算。
这个过程每做一次运算,它就会完成一组输入和卷集合的运算,那么我看下面这个图下面这个图呢,我们可以有四组卷积和和四组输入数据,这样我们就会有四组输出。
那采用向量和的原理就是我可以把32位浮点书放到一个向量的里面去,这个向量的空间会比较大,比如说AVX指令集的话,它的向量是512个字节,这样的话,他可以放入16个32位浮点数,那么我们拿向量运算的时候呢,我们就可以一次做四组卷积算。这样就提高了我们=的运行效率,另外AVX-512指令集对二维矩阵中常见的乘加这种运算的会有一些优化。
AVX-512指令集做卷积运算的优势
我看到这个例子中,我们用的是四个通道,而是 AVX-512指令集最多存储16个通道。所以当我们把这个数据或者这个问题变成16组的卷积预算的时候呢,就能把 AVX-512指令集
的性能发挥到极致。而通道数少于16时运算市场没有明显变化,处理数据缺少了一些,故在优化的情况下,大量的数据会得到很好的性能提升。
第二个方法是数据重用,这是因为我们cpu在做运算的时候,他有个步骤是需要把数据由内存搬到cpu的寄存器上去,这个过程会有一点时间上的开销。
数据重用原理是帮我们把这个数据放到cpu j寄存器上之后,我们会尽量的把这个寄存器上的数据用完,然后我们再做下一次的这种刷新。
通过这种方式呢,我们就可以减少数据在内存和cpu寄存器之间的搬运,从提高我们整个系统的性能
第三种方法是,并行化。因为二维的卷积运算,第一次卷积运算和下次运算之间是没有任何的依赖关系,所以我们可以利用cpu的多核的特性,用多线程的方式同时去做。这样的话,我们可以提高整个卷积运算的一个处理的速度。
基于深度网络的图优化的方法来,今天我们介绍的其中一种方式叫融合,我们来看左侧就是我们常见的深度神经网络中的一个环节。
那么左侧是输入的输入层,右边的是一个卷积算子。
我们经过二维卷积运算之后我们会得到一个矩阵结果,这个结果我们通过ReLU做一个操作,最后得到一个输入式。
这个结构在我们的深度神经网络中是非常常见的,但这里面有两个问题需要关注一下
那这两点我们可以用右边的方法,融合技术解决。
融合技术是把二维卷积运算和ReLU把它合成一个操作,这样在计算每个卷积算子运算的结果之后就马上对他进行ReLU的操作。
我们使用腾讯云计算资源(CPU)对图像进行分类。
腾讯云中的VM包括CPU:具有4至24个内核的Intel Xeon Cascade Lake或Skylake。
Caffe是一个深度学习框架,考虑了表达,速度和模块化。它是由伯克利视觉与学习中心(BVLC)和社区贡献者开发的。它被使用在CNN模型上并且很受欢迎。
英特尔Caffe发行版专门用于提高在CPU(特别是英特尔®至强处理器)上运行时Caffe的性能。它支持多节点培训,这超出了本课程的范围。
在本课程中,我们将使用英特尔Caffe进行推理。更多信息,请参考维基百科
英特尔Caffe发行
英特尔Caffe分发目前已与最新版本的英特尔®数学内核库(英特尔®MKL)集成,并且已针对英特尔®高级矢量扩展2(英特尔®AVX2)进行了优化,并将包括英特尔®高级矢量扩展512(英特尔®AVX-512)指令,这些指令受英特尔®至强®处理器支持。有关编译,培训,微调,测试以及使用各种可用工具的详细说明,请阅读使用针对英特尔®架构优化的Caffe *进行培训和部署深度学习网络。
借助英特尔®至强®8180处理器上的ResNet-50,在推理吞吐量下,英特尔Caffe获利超过基准(BVLC Caffe),性能提高50倍
大多数AI框架和算法都是在CPU上开发的。 CPU可以用于任何AI培训中,特别是用于新模型/框架。
在迁移学习中,只需要训练几个时期。与完整培训相比,CPU培训时间短且可以接受。
在单个推理任务中需要较少的计算能力。大多数推断可以在CPU上实现。
仅使用CPU可以避免CPU和GPU之间数据传输的额外延迟。
高频和多个CPU内核可以帮助提高吞吐量。
在大多数业务中,CPU就足够了。
在Intel CPU上安装Intel优化的AI框架后,即可开始AI之旅。
Jupyter已安装为IDE和运行环境的开发工具。
已在运行环境中安装了必要的软件和python库。
采用的模型是Caffenet
Caffenet基于Alexnet,擅长分类1000个类别。
输入是1x3x227x227矩阵,输出是2D矩阵1x1000(1:一张照片的结果 1000: 一千个分类)
获取训练好的模型
因为这次的模型主要为了用Intel Caffe做推论,故跳过了模型训练的过程
因此,我们将从互联网下载Caffenet模型并保存在本地文件夹中:models / bvlc_reference_cafenet
下载好后,有4个文件:
推理的输入数据格式应与训练的数据格式相同。 否则,模型的输出将与我们预期的不同,更多误差或错误。
Caffe对输入有特殊要求:
附加要求:
我们使用Caffe的caffe.io.Transformer的库可以处理上述预处理输入。
调用net.forward()函数进行推断。
输入为[1、3、227、227]。 将有一个二维矩阵要返回。 矩阵包括[1,1000]个元素,表示要返回的每个模型的置信度值。
[1、3、227、227]
1张照片,3个channel, 227×227大小
置信度
0 为这张照片的概率为 0%
1 为这张照片的概率为 100%
[
[
9.59036517e-10
1.65431775e-05
…
9.83424564e-09
…
2.1153181e-09
1.8852608e-09
]
]
映射到模型号名称
我们需要将置信度值映射到正确的模型名称。
为此,我们将获得矩阵中具有最大置信度值的索引。
Map 的过程是可视化的过程,让人可以理解图像处理的结果。
将图像下载到本地,然后推断图像。
它还支持批量推断以提高吞吐量。 输入可以是[n,3,227,227]。 输出为[n,1000]。
得到跟高的性能提升。
首先进入腾讯云的管理页面创建虚拟机。
第一步是选择机型。
通常我们会选择和我们地理位置接近的区域的服务器。
在选择合适的网络选择实例时我们需要关注一下服务器的处理器型号,
推荐大家选择英特尔至强Caffe那个cpu,因为这款cpu是英特尔最新型号的服务器cpu。针对于intel优化的Caffe有着更好的支持和更优秀的性能表现.
在选择cpu核数和内存时,我们推荐最少使用四核和8g内存。
然后这两个处理器的话,我们选择的cpu的核数越多越好,因为核数数多的话,加速效果就越明显。
我们需要配最虚拟机的配置做一些特别的设置,就是因为我们采用Jupyter做我们的这次开发环境。
Jupyter需要监听四个八的网络端口号,所以我们需要在防火墙中把8888端口号打开。
cd ~/course/course_intel_caffe
./run.sh
// 打印的地址
…
The Jupyter Notebook is running at:
http://0.0.0.0:8888/?token=43f7b33b9712f050219745bcb6fce60ddd3e86d1151fda4d
…
Access the link http://PUBLIC_IP:PORT/?token=TOKEN in web browser (Firefox, Chrome)
Like http://10.10.10.10:8888/?token=43f7b33b9712f050219745bcb6fce60ddd3e86d1151fda4d
把url拷贝粘贴出来放到我们浏览器的窗口
只需要用虚拟机的公网地址代替的四零地址就可以访问Jupyter开发环境了。
第一步,对些必要的环境变量进行设置
第二步,启动脚本从互联网上去下载训练好的Caffenet的模型,这个过程可能比较耗时
第三步,下载好好模型之后,会用Caffe实例去装载模型
第四步,设置数据处理的过程,包括图片进行Resize,会把照片装载进内存,完成格式转化,
第五步,进行一个推理的操作
第六步,输出的结果Map到的label列表中去,从而获得一个人工可识别的inference结果
最后,尝试就是来识别你自己的照片,因为我们这个模型支持1000种范围
具体操作请查看教学视频
课程学习交流
请扫码关注腾讯产业互联网学堂微信公众号