使用普通的 tf1.11 运行宽、线性和深度模型推理,该模型预构建了用于 gpu 的深度学习图像版本 M9,相对于版本 M10(用于 cpu 推理)显示出更好的性能
M9:tf-最新-cu92
M10:tf-最新的 CPU
在这两个图像中,tf 版本都是 1.11,并且它们预先构建了英特尔 mkl 优化的二进制文件。我打开 mkl 指令的详细日志记录,在 M10 图像上我看到很多 mkl 相关设置
KMP_AFFINITY=granularity=fine,verbose,compact,1,0
KMP_BLOCKTIME=0
KMP_SETTINGS=1
OMP_NUM_THREADS=32
并用时间记录 mkl 指令。在 M9 图像上我没有观察到任何这样的事情,即使两个图像都显示版本信息为:
MKL_VERBOSE Intel(R) MKL 2019.0 Product build 20180829 for Intel(R) 64 architecture Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) enabled processors, Lnx 2.20GHz lp64 intel_thread
MKL_VERBOSE SDOT(2,0x5622b7736500,1,0x5622b7736500,1) 2.54ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:16
1.11.0
当使用 intel mkl 指令而不是 M9 图像时,我看到性能降低了 2-4 倍。注意:即使 M9 图像适用于 gpu,我也关闭了 cuda 设备可见性和仅对 cpu 推理进行基准测试。在干净的 virtualenv 中使用 tf 1.11 的 pip install 在另一个 linux 机器上进行了相同的观察。
关于如何调试或充分利用英特尔 mkl 库的任何见解。