oneDNN
介绍
oneDNN 是 Intel 开源的跨平台深度学习性能加速库,通过 文档 可以了解到被支持的原语,DeepRec 中已经加入了 oneDNN 的支持,只需要在 DeepRec 编译命令中加入关于 oneDNN 的编译选项:--config=mkl_threadpool
即可开启 oneDNN 加速算子计算。在支持 AVX512 指令集的机器(Sky Lake 及其之后的 CPU)上添加 --config=opt
选项,默认会打开 --copt=-march=native
的优化,可以进一步加速算子计算性能。
Tips: MKL-DNN 被重命名为 DNNL,之后又被重命名为 oneDNN;TensorFlow 初期采用的是 MKL 加速算子计算,在之后的版本迭代中,逐步使用 oneDNN 替换了 MKL,但宏定义还是仍然保留。
DeepRec 关于 oneDNN 的宏定义:
宏定义 |
可设值(默认值加粗) |
解释 |
---|---|---|
TF_MKL_PRIMITIVE_ONLY_FOR_RECO |
1/true, 0/false |
1: 仅替换推荐模型中oneDNN支持算子;0: 替换成所有oneDNN支持的的算子 |
TF_MKL_OPTIMIZE_PRIMITIVE_MEMUSE |
1/true, 0/false |
1: 通过释放原语来减少内存,再次使用会重建;0: 不释放原语 |
TF_DISABLE_MKL |
0, 1 |
0: Enable MKL; 1: Disable MKL |
TF_MKL_NUM_INTRAOP |
整数值,如14,默认不设置 |
整数值:设置 oneDNN 使用的 intra 线程数;不设置:使用最多的 TF intra 线程数 |
ONEDNN_VERBOSE |
0/1/2 |
打印 oneDNN 原语输出的 log 的等级 |
DNNL_MAX_CPU_ISA |
ALL, AVX512_CORE_AMX, AVX512_CORE_BF16, … |
指定 oneDNN(版本小于2.5.0时) 使用的最高指令集 |
ONEDNN_MAX_CPU_ISA |
ALL, AVX512_CORE_AMX, AVX512_CORE_BF16, … |
指定 oneDNN(版本大于等于2.5.0时) 使用的最高指令集 |
oneDNN 支持的原语:
原语 |
支持的类型 |
支持的后向操作 |
---|---|---|
Matrix Multiplication |
f32, bf16, f16, u8, s8 |
Scale, Zero, Eltwise, Sum, Binary |
Inner Product |
f32, bf16, f16, u8, s8 |
Scale, Eltwise, Sum, Binary |
Layer Normalization |
f32, bf16, f16 |
/ |
Batch Normalization |
f32, bf16, f16, s8 |
Eltwise |
Local Response Normalization (LRN) |
f32, bf16, f16 |
/ |
Binary (+, =, *, /, >, <, min, max...) |
f32, bf16, f16, u8, s8 |
Scale, Eltwise, Sum, Binary |
Eltwise (relu, gelu, tanh, linear...) |
f32, s32, bf16, f16, u8, s8 |
Binary |
PReLU |
f32, s32, bf16, s8, u8 |
/ |
Sum |
f32, s32, bf16, f16, u8, s8 |
/ |
Reduction |
f32, bf16, u8, s8 |
Eltwise, Sum, Binary |
Softmax |
f32, bf16, f16 |
/ |
LogSoftmax |
f32, bf16 |
/ |
Reorder |
f32, s32, bf16, f16, u8, s8 |
Scale, Sum |
Concat |
f32, s32, bf16, f16, u8, s8 |
/ |
Convolution |
f32, bf16, f16, u8, s8 |
Scale, Zero, Eltwise, Sum, Binary |
Pooling |
f32, s32, bf16, f16, u8, s8 |
Binary |
RNN (LSTM, GRU, Vanilla RNN...) |
f32, bf16, f16, u8, s8 |
/ |
Resampling |
f32, s32, bf16, f16, s8, u8 |
Eltwise, Sum, Binary |
Shuffle |
f32, s32, bf16, s8, u8 |
/ |