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

Intel® MKL-DNN:第一部分 – 库概述和安装。

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2017 年 4 月 19 日

CPOL

7分钟阅读

viewsIcon

12356

“Intel MKL-DNN 开发人员入门”系列教程将从开发人员的视角审视 Intel MKL-DNN。第一部分将介绍相关信息资源,并提供有关如何安装和构建库组件的详细说明。

引言

如今,深度学习已成为计算机科学领域最热门的主题之一,这得益于海量数据集、强大的并行处理能力以及构建日益智能的设备的驱动力。Wikipedia 将深度学习描述为机器学习 (ML) 的一个子集,它由模拟数据中高级抽象的算法组成。如图 1 所示,ML 本身又是人工智能 (AI) 的一个子集,AI 是一个广泛的研究领域,致力于开发旨在模仿人类智能的计算机系统。

图 1. 深度学习与 AI 的关系。

英特尔一直积极投身于深度学习领域,通过优化 Caffe* 和 Theano* 等流行框架来充分利用英特尔®架构 (IA) 的优势,创建面向数据科学家的 Intel® Deep Learning SDK 等高级工具,并向开发者社区提供 Intel® Data Analytics Acceleration Library (Intel® DAAL)Intel® Math Kernel Library for Deep Neural Networks (Intel® MKL-DNN) 等软件库。

Intel MKL-DNN 是一个开源的、性能增强型库,用于在 IA 上加速深度学习框架。对深度学习主题感兴趣的软件开发者可能听说过 Intel MKL-DNN,但也许还没有机会亲身体验。

“Intel MKL-DNN 开发人员入门”系列教程将从开发人员的视角审视 Intel MKL-DNN。第一部分将介绍相关信息资源,并提供有关如何安装和构建库组件的详细说明。本教程系列的第二部分将介绍如何配置 Eclipse* 集成开发环境来构建 C++ 代码示例,并包含源代码的讲解。

Intel® MKL-DNN 概述

如图 2 所示,Intel MKL-DNN 旨在加速 IA 上的深度学习框架。它包含高度矢量化和多线程的构建块,用于实现带 C 和 C++ 接口的卷积神经网络。

图 2. IA 上的深度学习框架。

Intel MKL-DNN 操作以下主要对象类型:primitive、engine 和 stream。这些对象在库的文档中定义如下:

  • Primitive - 任何操作,包括卷积、数据格式重排和内存。Primitive 可以以其他 Primitive 作为输入,但只能以内存 Primitive 作为输出。
  • Engine - 执行设备,例如 *CPU*。每个 Primitive 都映射到一个特定的 Engine。
  • Stream - 执行上下文;您将 Primitive 提交到 Stream 并等待其完成。提交到 Stream 的 Primitive 可以具有不同的 Engine。Stream 对象还会跟踪 Primitive 之间的依赖关系。

典型的流程是创建一个 Primitive 集合,将它们推送到 Stream 进行处理,然后等待完成。有关编程模型的更多信息,请参阅 Intel MKL-DNN 文档

资源

网上有很多信息资源,介绍了 Intel MKL-DNN 是什么、不是什么,以及开发者将其集成到自己的深度学习项目中可以实现的目标。

GitHub 存储库

Intel MKL-DNN 是一个开源库,可在 GitHub* 上免费下载,其中将其描述为一个用于 DL 应用程序的性能库,包含带 C 和 C++ 接口的卷积神经网络 (CNN) 的实现构建块。

GitHub 网站上的一个重要提示是,尽管 Intel MKL-DNN 库包含与 Intel® Math Kernel Library (Intel® MKL) 2017 类似的功能,但**它不兼容 API**。在撰写本文时,Intel MKL-DNN 发布版是一个技术预览版,实现了加速 AlexNet* 和 VGG* 等图像识别拓扑所需的全部功能。

Intel 开源技术中心

MKL-DNN|01.org 项目微型网站是 Intel 开源技术中心(称为 01.org)的一个成员。01.org 是一个由英特尔工程师支持的社区,他们参与各种开源项目。您可以在这里找到 Intel MKL-DNN 项目的概述、如何参与和贡献其发展的相关信息,以及 Kent Moffat 撰写的题为“Intel® Math Kernel Library for Deep Neural Networks (Intel® MKL-DNN) 介绍”的介绍性博客。

安装 Intel MKL-DNN

本节将通过提供安装和构建 Intel MKL-DNN 库组件的详细分步说明,来阐述 GitHub 存储库网站上提供的安装信息。您使用的计算机需要一个支持 Intel® Advanced Vector Extensions 2 (Intel® AVX2) 的 Intel® 处理器。具体来说,Intel MKL-DNN 针对 Intel® Xeon® 处理器和 Intel® Xeon Phi™ 处理器进行了优化。

GitHub 指出该软件已在 RedHat* Enterprise Linux* 7 上得到验证;然而,本教程中的信息是在运行 Ubuntu* 16.04 的系统上开发的。

安装依赖项

Intel MKL-DNN 具有以下依赖项:

  • CMake* – 一个跨平台工具,用于构建、测试和打包软件。
  • Doxygen* – 一个用于从注释源代码生成文档的工具。

如果您的计算机上尚未安装这些软件工具,可以通过键入以下命令来安装:

sudo apt install cmake

sudo apt install doxygen

下载并构建源代码

通过打开终端并键入以下命令,从 GitHub 存储库克隆 Intel MKL-DNN 库:

git clone https://github.com/01org/mkl-dnn.git

注意:如果您的计算机上尚未安装 Git*,可以通过键入以下命令来安装:

sudo apt install git

安装完成后,您将在主目录中找到一个名为 *mkl-dnn* 的目录。通过键入以下命令导航到此目录:

cd mkl-dnn

正如 GitHub 存储库网站上所述,Intel MKL-DNN 使用 Intel MKL 中的优化通用矩阵到矩阵乘法 (GEMM) 函数。支持此函数的库也包含在存储库中,可以通过运行位于 *scripts* 目录下的 *prepare_mkl.sh* 脚本来下载:

cd scripts && ./prepare_mkl.sh && cd ..

此脚本会创建一个名为 *external* 的目录,然后将库文件下载并解压到名为 *mkl-dnn/external/mklml_lnx** 的目录中。

下一个命令从 *mkl-dnn* 目录执行;它创建一个名为 *build* 的子目录,然后运行 *CMake* 和 *Make* 来生成构建系统:

mkdir -p build && cd build && cmake .. && make

验证构建

要验证您的构建,请从 *mkl-dnn/build* 目录执行以下命令:

make test

此步骤将执行一系列单元测试以验证构建。所有这些测试都应显示“Passed”(通过),并显示如图 3 所示的处理时间。

图 3. 测试结果。

库文档

Intel MKL-DNN 的文档可在线上获取。也可以通过从 *mkl-dnn/build* 目录执行以下命令在本地系统上生成文档:

make doc

完成安装

通过从 *mkl-dnn/build* 目录执行以下命令来完成 Intel MKL-DNN 的安装:

sudo make install

下一步将在 */usr/local* 目录下安装开发 Intel MKL-DNN 应用程序所需的库和其他组件。

共享库(*/usr/local/lib*)

  • libiomp5.so
  • libmkldnn.so
  • libmklml_intel.so

头文件(*/usr/local/include*)

  • mkldnn.h
  • mkldnn.hpp
  • mkldnn_types.h

文档(*/usr/local/share/doc/mkldnn*)

  • Intel 许可和版权声明
  • 构成 HTML 文档的各种文件(位于 */reference/html* 下)

在命令行构建代码示例

GitHub 存储库包含 C 和 C++ 代码示例,演示了如何构建一个由卷积、整流线性单元、局部响应归一化和池化组成的神经网络拓扑块。下一节将介绍如何在 Linux 命令行中构建这些代码示例。本教程系列的第二部分将演示如何配置 Eclipse 集成开发环境来构建 C++ 代码示例。

C++ 示例命令行构建 (G++)

要构建 Intel MKL-DNN 存储库中包含的 C++ 示例程序 (*simple_net.cpp*),请先转到 *examples* 目录:

cd ~/mkl-dnn/examples

接下来,为可执行文件创建一个目标目录:

mkdir –p bin

通过链接共享 Intel MKL-DNN 库并指定输出目录,如下所示构建 simple_net.cpp 示例:

g++ -std=c++11 simple_net.cpp –lmkldnn –o bin/simple_net_cpp

图 4. 使用 G++ 进行 C++ 命令行构建。

转到 *bin* 目录并运行可执行文件:

cd bin

./simple_net_cpp

使用 GCC 进行 C 命令行构建

要构建 Intel MKL-DNN 存储库中包含的 C 示例应用程序 (simple_net.c),请先转到 *examples* 目录:

cd ~/mkl-dnn/examples

接下来,为可执行文件创建一个目标目录:

mkdir –p bin

通过链接 Intel MKL-DNN 共享库并指定输出目录,如下所示构建 simple_net.c 示例:

gcc –Wall –o bin/simple_net_c simple_net.c -lmkldnn

图 5. 使用 GCC 进行 C 命令行构建。

转到 *bin* 目录并运行可执行文件:

cd bin

./simple_net_c

完成后,C 应用程序将在终端打印“passed”或“failed”。

后续步骤

至此,您应该已成功安装 Intel MKL-DNN 库,执行了单元测试,并构建了存储库中提供的示例程序。在“Intel MKL-DNN 开发人员入门”的第二部分中,您将学习如何配置 Eclipse 集成开发环境来构建 C++ 代码示例,并对其进行讲解。

© . All rights reserved.