65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Intel® 处理器图形加速深度学习推理

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2017 年 6 月 1 日

CPOL

13分钟阅读

viewsIcon

9657

本文介绍了英特尔近期推出的软件工具,这些工具可用于加速嵌入英特尔® 处理器图形解决方案的边缘设备(如智能摄像头、机器人、自动驾驶汽车等)上的深度学习推理,这些解决方案涵盖了英特尔 SOC 的所有系列。

引言

本文介绍了英特尔近期推出的软件工具,这些工具可用于加速嵌入英特尔® 处理器图形解决方案的边缘设备(如智能摄像头、机器人、自动驾驶汽车等)上的深度学习推理,这些解决方案涵盖了英特尔 SOC 的所有系列。特别地,本文介绍了英特尔的深度学习部署工具包(可通过 Intel® Computer Vision SDK Beta 获取),以及这些工具如何帮助开发人员提高产品中 AI 推理的性能,甚至更重要的——每瓦性能。本文还介绍了底层的深度神经网络计算库 (clDNN),这是一个用 OpenCL 编写的神经网络内核优化库,并已开源。

目标受众:希望在英特尔® 处理器图形上最大化深度学习性能的软件开发人员、平台架构师、数据科学家和学者。

注意:本文档中“人工智能 (AI)”、“机器学习 (ML)”和“深度学习 (DL)”可互换使用。更大的领域是人工智能。本文关注的是人工智能的机器学习部分,更具体地说,是机器学习的多层神经网络形式,称为深度学习。

AI 背景及向边缘迁移的趋势

人工智能或 AI 是一个过去 60 年来经历起伏的研究领域。在过去 5 年里,随着海量数据源的可用性、计算引擎的增长以及基于神经网络的现代算法开发,AI 得到了显著发展。机器学习或深度学习的许多层正在通过其在计算机视觉、识别与分类、自然语言处理到预测等各种用途的应用,将 AI 推广到现代生活的各个方面。这些基础任务有助于优化生活中许多领域的决策。

数据科学家 Andrew Ng 指出,AI 是下一个电力:“就像 100 年前电力改变了一切一样,今天我很难想到一个 AI 不会在未来几年内改变的行业。”

这波 AI 工作始于云端服务器。虽然云端 AI 的使用量仍在快速增长,但将 AI 推理部署到边缘设备上已成为一种趋势。这种将机器学习本地执行而非完全依赖云端的趋势是由降低延迟、持续可用性、降低成本和解决隐私问题驱动的。我们正迈向一个设备(从手机、PC 到汽车、机器人、无人机,再到冰箱、洗衣机等嵌入式设备)*全部*都内置 AI 的时代。正如 Andrew Ng 所指出的,所有行业的公司都在制定其 AI 战略。此外,AI 领域正在迅速发展,每周都会引入新的模型拓扑。这要求产品开发人员进行设计,以灵活地频繁修改其产品中的 AI 软件。

Intel® 处理器图形作为边缘 AI 推理的解决方案

Intel 处理器图形(Intel® HD Graphics、Intel® Iris™ Graphics 和 Intel® Iris™ Pro Graphics)提供了固定功能加速与可编程性的良好平衡,可在新兴 AI 工作负载中提供良好的性能/功耗比,并具有灵活性,允许客户采用最新的 AI 拓扑。具体来说,Intel 处理器图形具有以下特点:

普遍性 – 作为 Intel SOC 的一部分,Intel 处理器图形已出货超过十亿台设备,范围从服务器到 PC 再到嵌入式设备。这使其成为运行机器学习算法的广泛可用引擎。

可扩展性 – 随着 AI 嵌入到每个产品中,功耗和性能的设计点将差异很大。Intel 处理器图形提供了一系列广泛的功耗/性能选项,包括 Intel Atom 处理器、Intel® Core™ 处理器和 Intel® Xeon® 处理器。

媒体领域的领导地位 – 超过 **70% 的互联网流量是视频**。设备中 AI 的主要用途之一将是计算机视觉。除了 AI 计算外,还将同时进行视频编码、解码和处理。Intel® Quick Sync Video 技术基于 Intel 处理器图形的专用媒体功能,可提高媒体应用的性能和功耗效率,特别是加速解码、编码和视频处理等功能。请访问 Intel Quick Sync Video 页面 了解更多信息。当开发人员使用 Intel® Media SDKIntel® Media Server Studio 时——API 提供了访问这些媒体功能和适用于 Windows* 和 Linux* 的硬件加速编解码器的接口。

强大灵活的指令集架构 (ISA) - 处理器图形 SIMD 执行单元的指令集架构 (ISA) 非常适合深度学习。该 ISA 支持丰富的 32 位浮点、16 位浮点、32 位整数、16 位整数数据类型,并提供 SIMD 乘加指令。理论峰值情况下,这些操作可以在每个时钟周期为每个执行单元完成。此外,ISA 还提供丰富的子寄存器区域寻址,可实现高效的跨通道共享,以优化卷积实现,或实现高效的水平扫描-约简操作。最后,ISA 还提供高效的内存块加载,以快速加载数据块,用于优化卷积或优化通用矩阵乘法实现。

内存架构 – 使用独立的图形加速进行深度学习时,输入和输出数据需要在每次执行时从系统内存传输到独立图形内存——这会增加延迟和功耗。Intel 处理器图形集成在 CPU 的同一芯片上。这种集成使得 CPU 和处理器图形能够共享系统内存、内存控制器和缓存层次结构的一部分。这种共享内存架构可以实现高效的输入/输出数据传输,甚至“零拷贝”缓冲区共享。此外,Intel 还提供带有额外封装集成 eDRAM 的 SKU。

Intel 深度学习部署工具包

为了轻松有效地利用 Intel 处理器图形的硬件资源,Intel 提供了深度学习部署工具包,可通过 Intel Computer Vision SDK 获取。该工具包接受训练好的模型,并针对特定终端设备的特性进行优化。此外,它还提供了一个统一的 API,用于将推理集成到应用程序逻辑中。

深度学习部署工具包包含两个主要组件:模型优化器和推理引擎(图 1)。

图 1:模型通过深度学习部署工具包的流程

模型优化器是一个跨平台的命令行工具,执行静态模型分析,并调整深度学习模型以在终端目标设备上获得最佳执行效果。具体来说,模型优化器:

  • 以框架特定的格式(例如,来自 Caffe* 框架)的训练好的网络作为输入
  • 执行网络层的水平和垂直融合
  • 剪除网络中未使用的分支
  • 量化权重
  • 生成网络内部表示 (IR) 作为输出——一对描述整个模型的文件
    • 拓扑文件 - 一个描述网络拓扑的 XML 文件
    • 训练数据文件 - 一个包含权重和偏差二进制数据的 .bin 文件

生成的 IR 将用作推理引擎的输入。

推理引擎是一个运行时,提供了一个统一的 API,用于将推理集成到应用程序逻辑中。具体来说,它:

  • 以模型优化器生成的 IR 作为输入
  • 优化目标硬件的推理执行
  • 为嵌入式推理平台提供带有精简占用的推理解决方案。

深度学习部署工具包可以优化在 CPU、GPU 等不同硬件单元上运行的推理,并且未来将支持 FPGA。对于 CPU 加速,它使用 MKL-DNN 插件——Intel® Math Kernel Library 的一部分,其中包含加速最流行的图像识别拓扑所需的功能。计划通过 Intel® Deep Learning Inference Accelerator 的插件添加 FPGA 支持。对于 GPU,深度学习部署工具包拥有 clDNN——一个 OpenCL 内核库。下一节将解释 clDNN 如何帮助提高推理性能。

深度神经网络计算库 (clDNN)

clDNN 是一个内核库,用于加速 Intel® 处理器图形上的深度学习。基于 OpenCL,这些内核加速了流行拓扑(目前支持 AlexNet*、VGG*、GoogleNet*、ResNet*、Faster-RCNN*、SqueezeNet* 和 FCN*,并将添加更多)中的许多常见函数调用。为了给开发人员提供最大的灵活性和可达到的最高性能,Intel 提供了:

1) 完整的开源库,开发人员和客户可以将其作为模型进行扩展,或创建自己的特定硬件内核来运行深度学习。

2) 计算扩展,向开发人员公开完整的硬件功能。

在网络编译期间,clDNN 将工作流优化分为以下三个阶段:

图 2:从拓扑创建到执行的模型流程

网络编译和 clDNN 的三个阶段

阶段 1:网络级别

融合是 DL 中优化图最有效的方法之一。在 clDNN 中,我们创建了两种融合方法——一种是更自动化的,用于在单个加速器上运行(朴素推理客户端),另一种是供更有经验的数据科学家进行调优,以跨多个加速器运行(一组融合的基元)。更详细地说:

  • 朴素推理客户端 – 您有一个工作负载,希望它在一个加速器上运行。在这种情况下,用户可以在网络编译期间要求 clDNN 执行融合。
  • 一组融合的基元 – 在这种方法中,有经验的模型调优用户在其应用程序中通过模式匹配进行图编译,以在各种加速器之间平衡工作负载。对于这种方法,我们暴露了已经融合的基元。

目前,clDNN 支持 3 种融合:卷积与激活、全连接与激活以及反卷积与激活融合基元。其他融合功能正在开发中。

网络级别优化的另一个部分是填充实现。选择 OpenCL 缓冲区作为数据存储要求通过在内核中添加条件或提供带有输入数据周围框架的缓冲区来执行填充。第一种方法将消耗全部寄存器预算,这将限制卷积内核的可用寄存器,从而负面影响性能。

实验表明,在缓冲区周围添加适当对齐的框架可以提供更好的性能结果,方法如下:

考虑一个具有两个基元 A 和 B 的网络。B 的填充值为 2。

图 3:填充示例

这需要添加一个 2x2 大小的框架。

要添加框架,我们需要添加一个 *reorder* 基元。

并将其与基元 A 融合。

阶段 2:内存级别

一旦拓扑定义并提供了数据,网络就准备好进行编译。网络编译的第一步是确定激活布局。在 DNN 中,存储在隐藏层中的数据被定义为 4D 内存块。在 clDNN 中,布局描述由 4 个字母定义:

  • B - 批次中的块数
  • F - 特征图或通道数
  • X - 空间尺寸或宽度
  • Y - 空间尺寸或高度

图 4:内存块示例

图 5:在大多数情况下,最理想的布局是 BFYX。

如果数据类型是半精度 (fp16),批次大小大于或等于 32,并且卷积使用了分割参数(如 Alexnet* 卷积中的深度分割),则 clDNN 布局为 YXFB。

图 6:YXFB 布局

在内存级别优化期间,在选择了每个基元的内核后,clDNN 会运行权重优化,将用户提供的权重转换为适合所选内核的权重。卷积权重存储在:

图 7:IS_IYX_OSV16 中卷积的权重

对于全连接网络,根据数据类型 (fp16/fp32),权重可以转换为以下之一:

图 8:为优化的全连接基元设计的内存布局。

阶段 3:内核级别

为了有效地支持现代拓扑在 Intel® 处理器图形上运行,需要专注于卷积实现。为此,clDNN 使用输出块,允许 Intel 处理器图形上的每个线程一次计算多个输出。块的大小取决于卷积步长。如果块大小大于步长,则 clDNN 使用置换技术在邻域内重用权重和输入。此方法可使 Alexnet* 卷积内核的性能达到理论峰值的 85%。所有读写都使用更优化的 block_read/block_write 函数。类似的方法也应用于实现反卷积和池化基元的高效运行。

性能数据

Intel Iris Pro Graphics 提供更高的峰值性能,而 Intel HD Graphics 提供更高的每瓦性能。

详细说明

Batch1 FP16

Intel® HD Graphics 530(蓝色)配置:Intel® Core™ i5-6500 CPU @ 3.20GHz,Intel® HD Graphics 530,固定频率 - 1000 Mhz,CentOS 7.2 内核 4.2,OpenCL 驱动程序:Intel SRB 4.1,内存:2x8GB DDR4 2133

Intel® Iris® Pro Graphics 580(橙色)配置:Intel® Core™ i7-6770HQ CPU @ 2.60GHz,Intel® Iris® Pro Graphics 580,固定频率 – 950 Mhz,CentOS 7.2 内核 4.2,OpenCL 驱动程序:Intel SRB 4.1,内存:2x4GB DDR4 2133

拓扑: AlexNet*,VGG16-FACE*

内存带宽与计算

在内存绑定的拓扑(如 Alexnet*)中,我们可以增加批次大小,重用多批次中的权重,以获得更高的每秒图像性能。但对于计算绑定的拓扑(如 VGG16-FACE*),即使输入是单张图像,增大批次大小带来的收益也很小。

用于这些测量的系统配置与上一对基准测试相同。

能效

在某些功耗受限的工作负载中,最大化每瓦性能可能比最大化绝对性能更重要。由于降低时钟速率会导致功耗线性下降,而电压是平方的关系,因此 GPU 每瓦性能随频率降低呈线性增长。Intel HD Graphics 在较低频率和较低功耗状态下运行时,可以显示更好的 FPS/Watt 比率。不同的 Intel 处理器产品也提供不同的泄漏和功耗特性。例如,第 6 代和第 7 代 Intel “Y skus”,如 Intel® Core™ m7-6Y75 处理器与 Intel® HD Graphics 515,提供较低的峰值性能,但每瓦性能更高。通过选择适合各种功耗和性能点的正确 Intel SOC 并选择合适的频率,开发人员能够针对广泛的工作负载和功耗范围进行调优。

结论

在过去几年中,得益于机器学习,特别是深度学习的巨大进步,AI 正在变得无处不在。所有边缘设备都在朝着实现某种形式的 AI 迈进,由于成本、延迟和隐私方面的考虑,AI 越来越多地在本地执行。Intel 处理器图形提供了一个很好的解决方案来加速深度学习工作负载。本文介绍了深度学习模型优化器、推理引擎以及 clDNN 库(包含优化的 CNN 内核),这些工具可帮助开发人员将支持 AI 的产品推向市场。

如需了解更多信息或开始使用,请从以下链接下载工具或库:

附录 A:clDNN 库中的基元列表

深度神经网络计算库 (clDNN) 是用于在 Intel® HD 和 Iris™ Pro Graphics 上加速 DNN 推理的中间件软件。该项目包括在 Intel GPU 上实现的 CNN 基元,并提供 C 和 C++ 接口。

clDNN 库实现了一组基元:

  • 计算基元
    • 卷积
    • 反卷积
    • 全连接(内积)
    • 逐元素
  • 池化
    • 平均
    • maximum
    • ROI 池化
  • 规范化
    • LRN 跨通道/通道内
    • Normalize
    • 批标准化
  • 激活
    • ReLU(修正线性单元)
  • 辅助
    • 裁剪
    • 连接
    • 简化 NMS
    • 先验框
    • 检测输出
    • Reorder
  • Softmax

通过这套基元,用户可以构建和执行最常见的图像识别、语义分割和对象检测网络拓扑,例如:

  • AlexNet*
  • GoogleNet*
  • ResNet*
  • VGG16-FACE*
  • Faster-RCNN*
  • FCN*
© . All rights reserved.