MATLAB编码器:如何为深度学习c++代码生成和部署构建英特尔mml - dnn库?

283次浏览(过去30天)
我看到了一些使用MATLAB Coder支持代码生成的深度学习网络:金宝app
我希望从我的深度学习网络(如AlexNet, GoogLeNet, ResNet, SqueezeNet, VGG-16/19等)生成代码,使用MATLAB Coder和英特尔MKL-DNN库在英特尔cpu上运行。做这件事的步骤是什么?

接受的答案

比尔周"class=
比尔周 2021年5月13日
编辑:比尔周 2022年7月29日
注:以下内容适用于R2021a和更新版本的MATLAB Coder和MKL-DNN v1.4 在这里 .对于更新的版本,请参阅下面的下一个答案。
注意:英特尔最近将库从mml - dnn重命名为oneDNN,因此我们可以互换使用mml - dnn和oneDNN。
背景
要生成和运行用于深度学习的c++代码,您必须拥有用于深度神经网络的英特尔数学内核库(Intel MKL-DNN)。不要使用预构建的库,因为缺少一些必需的文件。相反,从源代码构建库。
下面描述了Windows和Linux平台上的MKL-DNN的构建说明。
要从源代码构建英特尔mml - dnn库,您必须具备:
  • 操作系统与Intel 64架构支持金宝app
  • c++编译器与c++ 11标准的支持金宝app
  • CMake 2.8.11及以上版本
Windows mml - dnn构建指令
这些MKL-DNN构建步骤已经在64位Windows平台上使用Visual Studio 2017 version 15.0进行了验证。如果您想使用更新版本的Visual Studio来构建可工作的MKL-DNN库,请自行决定是否使用它。
1.从此链接下载mml - dnn v1.4源代码( https://github.com/oneapi-src/oneDNN/archive/v1.4.zip ),并提取源代码。此操作将创建文件夹 onednn - 1.4
2.在Windows命令行中,将当前目录更改为 onednn - 1.4 .生成Microsoft Visual Studio解决方案“Intel(R) MKL-DNN”。通过运行这些命令:
mkdir构建
cd构建
cmake“Visual Studio 15 2017 Win64”..
3.将当前目录更改为 onednn - 1.4 \构建 .执行如下命令:
cmake——构建。——配置版本
该操作在文件夹中创建这些库 onednn - 1.4 \制造\ src \释放
  • dnnl.lib
  • dnnl.dll
在文件夹里面 C:\Program Files ,创建名为 mkl-dnn .然后,在文件夹内 C:\Program Files\mkl-dnn ,创建名为 自由 .将生成的库复制到文件夹中 C:\Program Files\mkl-dnn\lib
在Windows操作系统中,只有启用了8.3文件名,才允许在路径中使用特殊字符和空格。如果没有启用,请更换 C:\Program Files\mkl-dnn\lib 通过不包含空格的路径。有关8.3文件名的更多信息,请参阅Windows文档。
复制包含文件 onednn - 1.4 \包括 而且 onednn - 1.4 \制造\包括 C:\Program Files\mkl-dnn\include
4.设置MATLAB环境变量 INTEL_MKLDNN C:\Program Files\mkl-dnn .在MATLAB命令提示符中,输入:
setenv (“INTEL_MKLDNN”“C: \ Program Files \ mkl-dnn”
添加 C:\Program Files\mkl-dnn\lib 到PATH变量:
setenv (“路径”,采用“INTEL_MKLDNN”) filesep“自由”pathsep getenv (“路径”)))
5.如果还没有这样做,则必须为Windows设置环境变量。在Windows命令行输入:
路径=% %路径;C:\Program Files\mkl-dnn\lib
属性 INTEL_MKLDNN 的环境变量 C:\Program Files\mkl-dnn
Linux MKL-DNN构建指令
c++编译器要求:
  • 从GNU编译器集合中安装任意一个GNU编译器版本。版本包括4.8、5.4、6.1、7.2和8.1。
1.从此链接下载mml - dnn v1.4源代码( https://github.com/oneapi-src/oneDNN/archive/v1.4.tar.gz ),然后在Linux终端上执行以下命令解压源代码:
焦油-xvzf oneDNN-1.4.tar.gz
此操作将创建文件夹 onednn - 1.4
2.要生成用于编译的makefile,请在终端上从 onednn - 1.4 文件夹:
mkdir- p构建
cd构建
cmake-DCMAKE_BUILD_TYPE =释放. .
3.要构建库,请在终端上从 onednn - 1.4 /构建 文件夹:
使- j
这些命令在文件夹中创建这些库 onednn - 1.4 /构建/ src
  • libdnnl.so
  • libdnnl.so.1
  • libdnnl.so.1.4
将这些库复制到 /usr/local/mkl-dnn/lib
复制包含文件 onednn - 1.4 /包括 而且 onednn - 1.4 /构建/包括 /usr/local/mkl-dnn/include
4.设置MATLAB环境变量 INTEL_MKLDNN /usr/local/mkl-dnn .在MATLAB命令行输入:
setenv (“INTEL_MKLDNN”/usr/local/mkl-dnn”)
5.添加 /usr/local/mkl-dnn/lib 路径 变量:
setenv (“LD_LIBRARY_PATH”,采用“INTEL_MKLDNN”) filesep“自由”pathsep getenv (“LD_LIBRARY_PATH”)));
如果您还没有这样做,那么您必须为Linux设置环境变量。在Linux终端上使用Linux语法设置变量 LD_LIBRARY_PATH /usr/local/mkl-dnn/lib ,为环境变量 INTEL_MKLDNN /usr/local/mkl-dnn
macOS mml - dnn构建指令
c++编译器要求:
1.从此链接下载mml - dnn v1.4源代码( https://github.com/oneapi-src/oneDNN/archive/v1.4.tar.gz ),然后在终端运行下面的命令来解压源代码:
焦油-xvzf oneDNN-1.4.tar
此操作将创建文件夹 onednn - 1.4
2.macOS clang编译器不附带OpenMP。要获得一个OpenMP启用的mkldnn库,你必须安装brew和libomp:
a.在bash终端执行该命令,在主机mac PC上安装home brew软件
/usr/bin/ruby - e"$(curl - ssl https://raw.githubusercontent.com/Homebrew/install/master/install)"
b.使用brew with命令安装OpenMP:
(BREW_INSTALL_PATH) /酿造安装libomp
3.要生成用于编译的makefile,请在终端上从 onednn - 1.4 文件夹:
mkdir- p构建
cd构建
(CMAKE_INSTALL_PATH) cmake . .-DOpenMP_CXX_FLAGS =-Xclang -fopenmp -I$(OMP_INSTALL_PATH)/include"-DOpenMP_C_FLAGS =-Xclang -fopenmp -I$(OMP_INSTALL_PATH)/include"-DOpenMP_CXX_LIB_NAMES=libomp -DOpenMP_libomp_LIBRARY=(OMP_INSTALL_PATH) / lib / libomp。dylib -DCMAKE_SHARED_LINKER_FLAGS =“- l (OMP_INSTALL_PATH) / lib -lomp美元”
4.要构建库,请在终端上从 onednn - 1.4 /建立文件夹
使- j
这些命令在文件夹中创建这些库 onednn - 1.4 /构建/ src
  • libdnnl.dylib
  • libdnnl.1.dylib
  • libdnnl.1.4.dylib
将这些库复制到 /usr/local/mkl-dnn/lib
复制包含文件 onednn - 1.4 /包括 /usr/local/mkl-dnn/include
5.复制mml - dnn所需的OpenMP依赖项:
  • OpenMP库美元(OMP_INSTALL_PATH) / lib/usr/local/mkl-dnn/lib
  • OpenMP包含的文件(OMP_INSTALL_PATH) /包括美元/usr/local/mkl-dnn/include
6.OpenMP库路径硬绑定到mkldnn库。要列出这个硬绑定,运行下面的命令:
otool- l libdnnl.dylib
7.必须更改路径的这种硬绑定,以便可移植到其他mac机器。要做到这一点,运行:
install_name_tool改改/usr/local/opt/libomp/lib/libomp.dylib @rpath / libomp。dylib libdnnl.1.dylib
install_name_toolid“@rpath / libomp。dylib”libomp.dylib
改变, rpath 的可移植性 mkldnn / OpenMP 库到其他MAC机器。这避免了任何运行时链接问题。
8.设置MATLAB环境变量 INTEL_MKLDNN /usr/local/mkl-dnn .在MATLAB命令行输入:
setenv (“INTEL_MKLDNN”/usr/local/mkl-dnn”)
11日评论
Naga Sai Pavan Swaroop Ainapurapu"class=
移动:比尔周 2023年2月14日18:58
我有一个错误
mkldnn目标不支持为FeatureInputLayer输入生成代码。金宝app看到
每个目标所支持的层列表的文档。金宝app

登录评论。

更多答案(2)

比尔周"class=
比尔周 2019年2月27日
编辑:比尔周 2023年2月14日18:53
注:以下内容适用于R2018b、R2019a和R2019b版本的MATLAB Coder和MKL-DNN v0.14 在这里 .对于更新的版本,请参见上面和下面的答案。
背景
要生成和运行用于深度学习的c++代码,您必须拥有用于深度神经网络的英特尔数学内核库(Intel MKL-DNN)。不要使用预构建的库,因为缺少一些必需的文件。相反,从源代码构建库。
下面描述了Windows和Linux平台上的MKL-DNN的构建说明。
Windows mml - dnn构建指令
要遵循这些说明,请获取推荐的编译器和IDE:
  • 微软Visual Studio 2017
  • 英特尔c++编译器18.0从英特尔并行工作室
这些说明假定使用Microsoft Visual Studio IDE和编译器。Cmake也是必需的。
2.将源代码解压缩到文件夹MKLDNN中。在MKLDNN文件夹中,在命令提示符中输入:
cd脚本
。\ prepare_mkl.bat
cd..
这将在MKLDNN\external\mklml_win_*\lib中创建这些库:
  • libiomp5md.dll
  • libiomp5md.lib
  • mklml.dll
  • mklml.lib
3.从MKLDNN文件夹运行这些命令:
mkdir- p构建
cd构建
cmake“Visual Studio 15 2017 Win64”..
这将在/build中创建Visual Studio解决方案文件:
  • 英特尔MKL-DNN.sln (R)
4.在Visual Studio中打开解决方案文件。设置 解决方案配置 下拉, 释放 .点击 构建>构建解决方案 .这将在MKLDNN\build\src\Release中创建这些库:
  • mkldnn.dll
  • mkldnn.lib
将这些库和步骤2中生成的库复制到C:\Program Files\mkl-dnn\lib.
注意,在Windows®操作系统上,只有启用8.3文件名时才允许在路径中使用特殊字符和空格。如果它们未启用,请将'C:\Program Files\ mhl -dnn\lib '替换为不包含空格的路径。有关8.3文件名的更多信息,请参阅Windows文档。
从MKLDNN\include复制以下文件到C:\Program Files\mkl-dnn\ include:
  • mkldnn.h
  • mkldnn.hpp
  • mkldnn_debug.h
  • mkldnn_types.h
5.将MATLAB环境变量INTEL_MKLDNN设置为C:\Program Files\mkl-dnn.在MATLAB命令窗口中输入:
setenv (“INTEL_MKLDNN”“C: \ Program Files \ mkl-dnn \”
将C:\Program Files\mkl-dnn\lib添加到PATH变量中。
setenv (“路径”,采用“INTEL_MKLDNN”) filesep“自由”pathsep getenv (“路径”)))
6.如果您还没有这样做,您还应该为Windows设置环境变量。在Windows命令提示符中输入:
路径=% %路径;C:\Program Files\mkl-dnn\
Linux MKL-DNN构建指令
要遵循这些说明,请获取推荐的编译器:
  • 支持c++ 11的GNU g++金宝app
Cmake也是必需的。
2.将源代码解压缩到文件夹MKLDNN中。在MKLDNN文件夹中,在命令提示符中输入:
cd脚本
修改文件权限+ x prepare_mkl.sh
。/ prepare_mkl.sh
这将在MKLDNN/external/mklml_lnx_*/lib中创建这些库:
libiomp5.so
libmklml_intel.so。
3.从MKLDNN文件夹运行这些命令:
mkdir- p构建
cd构建
cmake..
使
4.这将在MKLDNN/build/src下创建这些库:
  1. libmkldnn.so
  2. libmkldnn.so.0
  3. libmkldnn.so.0.14.0。
将这些库和步骤2中生成的库复制到/usr/local/mkl-dnn/lib.
将以下文件从MKLDNN/include复制到/usr/local/ mml -dnn/include:
  • mkldnn.h
  • mkldnn.hpp
  • mkldnn_debug.h
  • mkldnn_types.h
5.将MATLAB环境变量INTEL_MKLDNN设置为/usr/local/mkl-dnn.在MATLAB命令窗口中输入:
setenv (“INTEL_MKLDNN”/usr/local/mkl-dnn”)
在PATH变量中添加/usr/local/ mml -dnn/lib:
setenv (“LD_LIBRARY_PATH”,采用“INTEL_MKLDNN”) filesep“自由”pathsep getenv (“LD_LIBRARY_PATH”)));
如果您还没有这样做,那么还应该为Linux设置环境变量。在Linux终端中使用Linux语法设置变量LD_LIBRARY_PATH为/usr/local/mkl-dnn/lib,环境变量INTEL_MKLDNN为/usr/local/mkl-dnn.
21日的评论

登录评论。


比尔周"class=
比尔周 2020年6月11日
编辑:比尔周 2023年2月14日18:52
注:以下内容适用于MATLAB Coder和mml - dnn v1.0版本的R2020a和R2020b版本 在这里 .对于更新的版本,请参阅上面的另一个答案。
注意:英特尔最近将库从mml - dnn重命名为oneDNN,因此我们可以互换使用mml - dnn和oneDNN。
背景
要生成和运行用于深度学习的c++代码,您必须拥有用于深度神经网络的英特尔数学内核库(Intel MKL-DNN)。不要使用预构建的库,因为缺少一些必需的文件。相反,从源代码构建库。
下面描述了Windows和Linux平台上的MKL-DNN的构建说明。
要从源代码构建英特尔mml - dnn库,您必须具备:
  • 操作系统与Intel 64架构支持金宝app
  • c++编译器与c++ 11标准的支持金宝app
  • CMake 2.8.11及以上版本
Windows mml - dnn构建指令
c++编译器要求:
  • Microsoft Visual c++ 14.0 (Visual Studio 2015 Update 3)
  • 如果您在构建mml - dnn时遇到编译错误,请使用MSVC编译器19.16版。Xx或更新
1.从链接下载mkldnn v1.0源代码( https://github.com/oneapi-src/oneDNN/archive/v1.0.zip ),并提取源代码。此操作将创建文件夹 onednn - 1.0
2.生成Microsoft Visual Studio解决方案“Intel(R) MKL-DNN”。在at命令行中运行这些命令 onednn - 1.0 文件夹:
mkdir构建
cd构建
cmake“Visual Studio 15 2017 Win64”..
3.在命令行at中运行以下命令 onednn - 1.0 \构建 文件夹:
cmake——构建。——配置版本
该操作在文件夹中创建这些库 onednn - 1.0 \制造\ src \释放
  • mkldnn.lib
  • mkldnn.dll
将这些生成的库复制到 C:\Program Files\mkl-dnn\lib
注意,在Windows操作系统上,只有启用了8.3文件名,才允许在路径中使用特殊字符和空格。如果没有启用,请更换 C:\Program Files\mkl-dnn\lib 使用不包含空格的路径。有关8.3文件名的更多信息,请参阅Windows文档。
复制包含文件 onednn - 1.0 \包括 而且 onednn - 1.0 \制造\包括 C:\Program Files\mkl-dnn\include
4.设置MATLAB环境变量 INTEL_MKLDNN C:\Program Files\mkl-dnn .在MATLAB命令提示符中,输入:
setenv (“INTEL_MKLDNN”“C: \ Program Files \ mkl-dnn”
添加 C:\Program Files\mkl-dnn\lib 路径 变量。
setenv (“路径”,采用“INTEL_MKLDNN”) filesep“自由”pathsep getenv (“路径”)))
5.如果还没有这样做,则必须为Windows设置环境变量。在Windows命令提示符中输入:
路径=% %路径;C:\Program Files\mkl-dnn\lib
还可以创建和设置 INTEL_MKLDNN 环境变量在Windows中指向 C:\Program Files\mkl-dnn
Linux MKL-DNN构建指令
c++编译器要求:
  • 安装GNU编译器集合4.8、5.4、6.1、7.2和8.1中的任意一个GNU编译器版本
1.从链接下载mkldnn v1.0源代码( https://github.com/oneapi-src/oneDNN/archive/v1.0.tar.gz ),然后在终端上运行这个命令来解压源代码:
焦油-xvzf oneDNN-1.0.tar.gz
此操作将创建文件夹 onednn - 1.0
2.要生成用于编译的makefile,请在终端上从 onednn - 1.0 文件夹:
mkdir- p构建
cd构建
cmake-DCMAKE_BUILD_TYPE =释放. .
3.要构建库,请在终端上从 onednn - 1.0 /构建 文件夹:
使- j
这些命令在文件夹中创建这些库 onednn - 1.0 /构建/ src
  • libmkldnn.so
  • libmkldnn.so.0
  • libmkldnn.so.1.0.0.0
将这些库复制到 /usr/local/mkl-dnn/lib
复制包含文件 onednn - 1.0 /包括 而且 onednn - 1.0 /构建/包括 /usr/local/mkl-dnn/include
4.设置MATLAB环境变量 INTEL_MKLDNN /usr/local/mkl-dnn .在MATLAB命令提示符中,输入:
setenv (“INTEL_MKLDNN”/usr/local/mkl-dnn”)
5.添加 /usr/local/mkl-dnn/lib 路径 变量:
setenv (“LD_LIBRARY_PATH”,采用“INTEL_MKLDNN”) filesep“自由”pathsep getenv (“LD_LIBRARY_PATH”)));
如果您还没有这样做,那么您必须为Linux设置环境变量。在Linux终端中使用Linux语法设置该变量 LD_LIBRARY_PATH /usr/local/mkl-dnn/lib ,为环境变量 INTEL_MKLDNN /usr/local/mkl-dnn
macOS MKL-DNN构建说明(适用于R2020b及更新版本)
c++编译器要求:
  • 安装https:金宝app//www.tatmou.com/support/requirements/supported-compilers.html中提到的支持的Xcode版本
1.从链接中下载mkldnn v1.0源代码,在终端执行以下命令进行解压:
焦油-xvzf mkl-dnn-1.0.tar.gz
此操作将创建文件夹 mkl - - 1.0款
2.macOS clang编译器不附带OpenMp。要启用OpenMp mkldnn库,我们需要安装 啤酒,libomp
a.在主机mac PC上使用bash终端安装home brew
/usr/bin/ruby - e"$(curl - ssl https://raw.githubusercontent.com/Homebrew/install/master/install)"
b.使用brew with命令安装OpenMp
(BREW_INSTALL_PATH) /酿造安装libomp
3.要生成用于编译的makefile,在终端的mkl-dnn-1.0文件夹中运行以下命令:
mkdir- p构建
cd构建
(CMAKE_INSTALL_PATH) cmake . .-DOpenMP_CXX_FLAGS =-Xclang -fopenmp -I$(OMP_INSTALL_PATH)/include"-DOpenMP_C_FLAGS =-Xclang -fopenmp -I$(OMP_INSTALL_PATH)/include"-DOpenMP_CXX_LIB_NAMES=libomp -DOpenMP_libomp_LIBRARY=(OMP_INSTALL_PATH) / lib / libomp。dylib -DCMAKE_SHARED_LINKER_FLAGS =“- l (OMP_INSTALL_PATH) / lib -lomp美元”
这些命令在文件夹mml -dnn-1.0/build/src中创建这些库:
  • libmkldnn.dylib
  • libmkldnn.0.dylib
  • libmkldnn.1.0.0.0.dylib
将这些库复制到 /usr/local/mkl-dnn/lib
复制包含文件 mkld - - 1.0款/包括 /usr/local/mkl-dnn/include
4.复制mkldnn所需的OpenMp依赖项
  • OpenMP库美元(OMP_INSTALL_PATH) / lib/usr/local/mkl-dnn/lib
  • OpenMP包含的文件(OMP_INSTALL_PATH) /包括美元/usr/local/mkl-dnn/include
5.OpenMp库路径硬绑定到mkldnn库。下面的命令将列出这方面
otool- l libmkldnn.dylib
6.必须更改路径的这种硬绑定,以便可移植到其他mac机器。使用下面的命令
install_name_tool改改/usr/local/opt/libomp/lib/libomp.dylib @rpath / libomp。dylib libmkldnn.0.dylib
install_name_toolid“@rpath / libomp。dylib”libomp.dylib
更改为rpath将使mkldnn/OpenMP库可移植到不同的mac机器。这避免了任何运行时链接问题。
7.将MATLAB环境变量INTEL_MKLDNN设置为/usr/local/mkl-dnn.在MATLAB命令提示符中,输入:
setenv (“INTEL_MKLDNN”/usr/local/mkl-dnn”)
9日评论
Praveen Kumar Gajula"class=
Praveen Kumar Gajula 2021年8月16日
嗨Junyu,
您需要创建文件夹“mkl-dnn”,“lib”并将库复制到 C:\Program Files\mkl-dnn\lib
谢谢,
Praveen

登录评论。

类别

了解更多源代码和二进制部署帮助中心而且文件交换

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!