本次课程将介绍开源AI框架Tensorflow和Intel优化版本.以及其在云上的实践。课程内容包括开源AI框架Tensorflow和英特尔优化版本的特点和优势,在腾讯云使用镜象工具轻松搭建英特尔优化版本的 Tensorflow 开发环境的步骤,使用Tensorflow进行图像识别的推理过程。以及如何使用Tensorflow框架实现推理:应用CPU进行图像识别。
【课程大纲】
1.Intel优化Tensorflow的原理
2.基于Tensorflow进行图像分类的推理过程
3.腾讯云上创建AI开发环境
4. 动手学习使用Tensorflow进行图像分类
英特尔是半导体行业和计算创新领域的全球领先厂商,以智能互联技术奠定全球创新基石。英特尔创始于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年百强排行榜中,英特尔荣登榜首。
AI 技术咨询工程师张建宇带大家学习要学习的内容是Intel®优化的TensorFlow在腾讯云上的实践
第一章 Intel®优化Tensorflow的原理
第二章 基于Tensorflow进行图像分类的推理过程
第三章 腾讯云上的创建AI开发环境
第四章 动手学习使用Tensorflow 进行图像分类
Intel® CPU上存在的非常多的硬件特性,这些特性可以用来对软件加速
这个表格中我们罗列了两种,
当我们的应用程序采用多线程和多进程的方式开发时,我们就可以充分用多个cpu的核进行运算,从而成倍的提升我们用程序的性能。
这中间常见的是sse avx 和avx2
这些指令集主要是支持向量化运算,它的好处呢就是在可以计算密集型的操作中能极大的提高它的性能。
那么这两个种硬件特性和其他一些特性对于普通的开发者而言,使用这些特性对软件进行加速或者优化难度是比较高的,所以英特尔在这些硬件之上,针对这些硬件开发了一系列的工具和库方便大家来使用这些硬件特性
那么基于对于系列的硬件和工具和库, Intel对Tensorflow进行了优化。
最上面图片中会显示一个普通的二维卷积乘法的一个时间过程,最左侧是一个三乘三的卷积和,中间是我们输入的输入矩阵(二维矩阵)
进行卷积运算的时候,我们先从输入矩阵中选取三乘三的一个子区域,把这个区域和卷积核中对应的位置值相乘,将他们最后所有的结果累加。比较之后的结果会放到我们的输出矩阵,对应的位置是以前的这个输入数据区的中心点。
紧接着,我们会把这个运算的在输入数据区中,由左往右由上往下,进行直到遍历完所有的输入矩阵,这样就完成了一次完整的二维卷积运算。
这个过程每做一次运算,它就会完成一组输入和卷集合的运算。
那么我看下面这个图呢,我们可以有四组卷积和和四组输入数据,这样我们就会有四组输出。
那采用向量和的原理就是我可以把32位浮点书放到一个向量的里面去,这个向量的空间会比较大,比如说AVX指令集的话,它的向量是512个字节,这样的话,他可以放入16个32位浮点数,那么我们拿向量运算的时候呢,我们就可以一次做四组卷积算。这样就提高了我们=的运行效率,另外AVX-512指令集对二维矩阵中常见的乘加这种运算的会有一些优化。
AVX-512指令集做卷积运算的优势
我看到这个例子中,我们用的是四个通道,而是 AVX-512指令集最多存储16个通道。所以当我们把这个数据或者这个问题变成16组的卷积预算的时候呢,就能把 AVX-512指令集
的性能发挥到极致。而通道数少于16时运算市场没有明显变化,处理数据缺少了一些,故在优化的情况下,大量的数据会得到很好的性能提升。
第二个方法是数据重用,这是因为我们cpu在做运算的时候,他有个步骤是需要把数据由内存搬到cpu的寄存器上去,这个过程会有一点时间上的开销。
数据重用原理是帮我们把这个数据放到cpu j寄存器上之后,我们会尽量的把这个寄存器上的数据用完,然后我们再做下一次的这种刷新。
通过这种方式呢,我们就可以减少数据在内存和cpu寄存器之间的搬运,从提高我们整个系统的性能
第三种方法是,并行化。因为二维的卷积运算,第一次卷积运算和下次运算之间是没有任何的依赖关系,所以我们可以利用cpu的多核的特性,用多线程的方式同时去做。这样的话,我们可以提高整个卷积运算的一个处理的速度。
基于深度网络的图优化的方法来,今天我们介绍的其中一种方式叫融合,我们来看左侧就是我们常见的深度神经网络中的一个环节,融合。
那么左侧是输入的输入层,右边的是一个卷积算子。
我们经过二维卷积运算之后我们会得到一个矩阵结果,这个结果我们通过ReLU做一个操作,最后得到一个输入式。
这个结构在我们的深度神经网络中是非常常见的,但这里面有两个问题需要关注一下
· 首先这两个操作需要两次从内存中把数据搬到cpu的寄存器中去,在运算结束之后还需要把这个结果返回保存到内存中去,所以他有两次的内存的读和写操作
· 两次操作对于cpu任务调度而言的话,他有可能会发生一次任务调度,所以当前运行的进程或线程需要睡眠,然后释放cpu资源,那么这样的话就会影响我们的运行效率
那这两点我们可以用右边的方法,融合技术解决。
融合技术是把二维卷积运算和ReLU把它合成一个操作,这样在计算每个卷积算子运算的结果之后就马上对他进行ReLU的操作。
我们使用腾讯云计算资源(CPU)对图像进行分类。
腾讯云中的VM包括CPU:具有4至24个内核的Intel Xeon Cascade Lake或Skylake。
为了充分利用英特尔®架构并提取最大性能,TensorFlow框架已使用用于深度神经网络的英特尔®数学内核库(Intel®MKL-DNN)进行了优化,这是针对深度学习应用程序的流行性能库。 我们将获得明显的性能提升,例如:
大多数AI框架和算法都是在CPU上开发的。 CPU可以用于任何AI培训中,特别是用于新模型/框架。
在迁移学习中,只需要训练几个时期。与完整培训相比,CPU培训时间短且可以接受。
在单个推理任务中需要较少的计算能力。大多数推断可以在CPU上实现。
仅使用CPU可以避免CPU和GPU之间数据传输的额外延迟。
高频和多个CPU内核可以帮助提高吞吐量。
在大多数业务中,CPU就足够了。
在Intel CPU上安装Intel优化的AI框架后,即可开始AI之旅。
Jupyter已安装为IDE和运行环境的开发工具。
已在运行环境中安装了必要的软件和python库。
VMMR
该项目从大规模和多样化的车辆制造和模型识别数据集(VMMRdb)开始,包含9170个类别,包括291,752张图像,涵盖1950年至2016年之间制造的模型。
前10名的集
在此过程中,我们使用VMMR的子集测试推理。 利用数据集,我们将检测前10个类别的分类。因此,我们选择前10类的1193个图像作为工作数据集。
Inception V3是一种卷积神经网络。 用于对图像进行分类。 它由许多卷积和最大池化层组成。 最后,它包括完全连接的神经网络。 最终的FCN包含与类数相同的神经节点数。 原始的Inception V3支持1000个类。 在我们的情况下,我们只需要分类10种汽车模式。 因此,我们向Inception V3模型添加了具有10个神经节点的FCN。
在深度学习中,当我们训练网络时,我们将使用数字化的值代表使用实际值,该数值在通过网络的每批处理的末尾进行预测。
我们需要创建一个文本文件来表示推断后映射到类名称的数值。
在此过程中,我们通过汽车型号设置成目录名字。 当扫描目录结构将得到情况列表,而模型的索引是推断结果中所对应的型号代码。
推理的输入数据格式应与训练的数据格式相同。 否则,模型的输出将与我们预期的不同,更多错误或错误。
Keras提供了批量推断功能。 因此,我们需要输入图像列表。
我们需要将Image对象转换为数组,并向该数组添加一个额外的轴,使其格式为(n,h,w,c)。 注意,n表示图像数。
调用Keras model.predict函数进行推断。
输入为[1、299、299、3]的矩阵,将返回一个二维矩阵。
该矩阵包括[1,10]个元素,这些元素表示要返回的一幅图像的每个类别的置信度值列表
[
[
3.4324284e-08
2.1153181e-09
1.8852608e-09
5.8561973e-09
2.1266361e-10
9.9993837e-01
3.6503025e-05
9.2433492e-09
2.3277202e-05
1.7811669e-06
]
]
我们需要将置信度值映射到正确的类名称。为此,我们获得矩阵中具有最大置信度值的索引。
在某些情况下,我们需要批量运行推理以提高吞吐量。 输入可以是[n,299,299,3]。 输出为[n,10],代表对N张照片的推理结果
二维矩阵显示推断结果的正确状态。
横轴为预测照片的索引号,纵轴为实际索引号 故(n,n)的数字是正确的结果。 另一部分是错误的结果。
对角线的颜色深浅可以判断出各类别预测度的高低,对于预测度低的类型可以进行加强:
1. 提高同一种类图片的数量,提高多样性,从而提高网络对其的判断能力
2. 在训练时候增加精度
3. 更换模型
首先进入腾讯云的管理页面创建虚拟机。
第一步是选择机型。
我们需要配最虚拟机的配置做一些特别的设置,就是因为我们采用Jupyter做我们的这次开发环境。
Jupyter需要监听四个八的网络端口号,所以我们需要在防火墙中把8888端口号打开。
cd ~/course/course_intel_tf
./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拷贝粘贴出来放到我们浏览器的窗口
只需要用虚拟机的公网地址代替的0.0.0.0地址就可以访问Jupyter开发环境了。
第一步,对些必要的环境变量进行设置
第二步,启动脚本从互联网上去下载训练好的的Inception V3模型
第三步,下载好好模型之后,随机选择照片,在目录中获得所有类别的标签信息
第四步,设置数据预处处理的过程,包括图片进行Resize,会把照片装载进内存,完成格式转化
第五步,进行一个推理的操作
第六步,推理输出的结果Map到的label列表中去,从而获得一个人工可识别的inference结果
最后,尝试就是来批量推理,因为我们这个模型支持1000种范围
具体操作请查看教学视频
课程学习交流
请扫码关注腾讯产业互联网学堂微信公众号