mkldnn/onednn/openblas
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mkldnn/onednn/openblas相关的知识,希望对你有一定的参考价值。
参考技术A 需要将 MKL_LIB_PATH="intel_2020.3.279/lib/intel64:intel_2020.3.279/mkl/lib/intel64" 加入到LD_LIBRARY_PATH中。example 目录 intel_2020.3.279/mkl/examples/cblas/source/cblas_sgemmx.c 这是mkl自带的example,还有cblas_gemm_s8u8s32x.c代表signed int8,unsigned int8,signed int32,对应传入的A、B、C矩阵数据类型,表示INT8量化加速接口。
编译命令:
make libintel64 function=cblas_gemm_s8u8s32 compiler=gnu
make libintel64 function=cblas_sgemm compiler=gnu
可以指定编译器为gnu还是intel的,也可以指定是并行多线程parallel还是单线程
先从git clone,然后需要指定make install的安装目录:
编译程序时使用命令 g++ -g -o sgemm -std=c++11 -I$DNNLROOT/include -L$DNNLROOT/lib64 cpu_sgemm_and_matmul.cpp -ldnnl
其中 $DNNLROOT 是make install的目录,否则会报 dnnl_config.h.in 以及 libdnnl.so 找不到的错误。
其中 oneDNN/examples/tutorials/matmul/cpu_sgemm_and_matmul.cpp 是测试矩阵乘接口的文件,但是要放到examples目录下,因为需要引入example_utils.hpp头文件。
在onednn中,gemm有三种实现方案,gemm,static gemm和dynamic gemm。这些在mkl是没有的。
旧版mkl-dnn的gemm使用的是mkl的gemm,mkl对于小矩阵的计算,速度并不快。旧版mkl-dnn主要是做cnn和lstm的优化
onednn中,有两个选择,1继续使用mkl的gemm,2使用新的gemm。
默认安装到/opt/OpenBLAS/lib,否则需要将其加到LD_LIBRARY_PATH。
编译命令: g++ -g -o sgemm compare_sgemm_shgemm.c -I/opt/OpenBLAS/include -L/opt/OpenBLAS/lib/ -lopenblas
centos7.6 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
ubuntu18.04 grep "model name" /proc/cpuinfo |awk -F ':' 'print $NF'
IDC服务器:Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
MIT服务器:Intel(R) Core(TM) i7-7800X CPU @ 3.50GHz
你能在“臀部”或“OpenCL”等“cuda”以外的任何东西上加速 Torch DL 训练吗?
【中文标题】你能在“臀部”或“OpenCL”等“cuda”以外的任何东西上加速 Torch DL 训练吗?【英文标题】:Can you accelerate torch DL training on anything other than "cuda" like "hip" or "OpenCL"? 【发布时间】:2021-02-07 21:44:08 【问题描述】:我注意到torch.device
可以接受一系列参数,确切地说是cpu
、cuda
、mkldnn
、opengl
、opencl
、ideep
、hip
、msnpu
.
但是,在训练深度学习模型时,我只见过cuda
或cpu
被使用。很多时候代码看起来像这样
if torch.cuda.is_available():
device = torch.device("cuda")
else:
device = torch.device("cpu")
我从未见过任何其他人正在使用,并且想知道它们是否可以使用以及如何使用。我相信带有 AMD 显卡的最新 MacBook 应该可以使用"hip"
,但这是真的吗?训练速度是否会与使用一个 CUDA GPU 的速度相似?如果不是,torch.device
接受这么多选项,如果它们实际上无法使用,又有什么意义?
【问题讨论】:
【参考方案1】:如果您想使用 GPU 进行深度学习,可以在 CUDA 和 CUDA 之间进行选择...
更广泛的答案,是的,有 AMD 的臀部和一些 OpenCL 实现:
-
AMD 很时髦 - 类似于 CUDA 的接口,带有 pytorch、hipCaffe、tensorflow 端口,但是
AMD 的 hip/rocm 仅在 Linux 上受支持 - rocm 不提供 Windows 或 Mac OS 支持
即使您想使用带有 AMD GPU + ROCM 的 Linux,您也必须坚持使用 GCN derete 设备(即像 rx 580、Vega 56/64 或 Radeon VII 这样的卡),RDNA 设备不支持 hip/rocm (发布一年后)而且看起来不会很快,APU 也不受臀部支持。
支持 OpenCL 的流行框架只有 Caffe 和 Keras+PlaidML。但
Caffe 的问题:
Caffe 似乎没有得到积极开发,而且按照今天的标准已经有些过时了
Caffe OpenCL 实现的性能大约是 nVidia 的 cuDNN 和 AMD 的 MIOpen 提供的性能的 1/2,但它工作得很好,我在很多情况下都使用它。
最新版本的性能甚至更高 https://github.com/BVLC/caffe/issues/6585,但至少您可以运行一个支持多个更改的版本
Caffe/OpenCL 也可以工作,但我仍然为 OpenCL over AMD 手动修复了一些错误。 https://github.com/BVLC/caffe/issues/6239
Keras/格子-ML
就访问较低级别功能的能力而言,Keras 本身的框架要弱得多
PlaidML 性能仍然是经过优化的 NVidia 的 cuDNN 和 AMD 的 MIOpen-ROCM 的 1/2 到 1/3,并且在我所做的测试中比 caffe OpenCL 慢
keras 的非 TF 后端的未来尚不清楚,因为 2.4 需要 TF...
底线:
-
如果您有 GCN 独立 AMD GPU 并且运行 Linux,则可以使用 ROCM+Hip。但它不如 CUDA 稳定
您可以尝试 OpenCL Caffe 或 Keras-PlaidML - 它可能会比其他解决方案更慢且最佳,但使其发挥作用的机会更大。
编辑 2021-09-14: 有一个新项目 dlprimitives:
https://github.com/artyom-beilis/dlprimitives
它比 Caffe-OpenCL 和 Keras 具有更好的性能 - 与 Keras/TF2 相比,它的训练性能约为 75%,但是它处于早期开发阶段,并且在这一点上具有比 Caffe/ 更有限的层集Keras-PlaidML
与 pytorch 的连接正在进行中,并有一些初步结果:https://github.com/artyom-beilis/pytorch_dlprim
免责声明:我是这个项目的作者
【讨论】:
以上是关于mkldnn/onednn/openblas的主要内容,如果未能解决你的问题,请参考以下文章