First, use Freeze_graph 冻结图形可以提供额外的性能好处。freeze_graph工具,由于所有权重都冻结在结果推理图中,可以期望得到更好的推理时间. Second, Use Optimize_for_inference 在图形被冻结后,额外的转换可以帮助优化用于推理的图形。
TensorFlow运行时选项提高性能
intra_/inter_op_parallelism_threads
intra_op_parallelism = number of physical core per socket #每个插槽的物理内核数
inter_op_parallelism = number of sockets
通过执行bash脚本文件, get the number of physical core per socket and number of sockets on your platform
#!/bin/bash total_cpu_cores=$(nproc) number_sockets=$(($(grep "^physical id" /proc/cpuinfo | awk '{print $4}' | sort -un | tail -1)+1)) number_cpu_cores=$(((total_cpu_cores/2)/ number_sockets))echo"number of CPU cores per socket: $number_cpu_cores"; echo"number of socket: $number_sockets";
NOTE : Intel Optimized TensorFlow supports both plain data formats like NCHW/NHWC and also oneDNN blocked data format since version 2.4. Using blocked format might help on vectorization but might introduce some data reordering operations in TensorFlow.
用户可以通过TF_ENABLE_MKL_NATIVE_FORMAT环境变量在Tensorflow中启用/禁用oneDNN阻塞数据格式。 通过export TF_ENABLE_MKL_NATIVE_FORMAT=0, TensorFlow将使用oneDNN阻塞数据格式代替。 建议通过下面的命令启用NATIVE_FORMAT,以获得良好的开箱即用性能。(to achieve good out-of-box performance.)
NOTE The recommendation changes if Hyperthreading is disabled on your machine. In that case, the recommendation is: KMP_AFFINITY=granularity=fine,verbose,compact if hyperthreading is disabled.
KMP_BLOCKTIME
exportKMP_BLOCKTIME=0(or 1)
这个环境变量设置线程在完成一个并行区域的执行后,在进入睡眠之前应该等待的时间(以毫秒为单位)。缺省值是200ms。(The default value is 200ms.) 在完成一个并行区域的执行后,线程会等待新的并行工作可用。经过一段时间后,它们停止等待,进入睡眠状态。在更多的并行工作可用之前,休眠允许非openmp线程代码或其他应用程序使用线程,这些代码可以在并行区域之间执行。 如果线程仅为OpenMP执行而保留,但可能会惩罚其他并发运行的OpenMP或线程化应用程序,那么更大的KMP_BLOCKTIME值可能更合适。对于基于卷积神经网络(CNN)的模型,建议设置为0。