我有一个训练有素的 tensorflow.keras 模型。我正在加载我的模型并从 Ubuntu 18.04 上的 CPU 上的 C 代码进行推理。出于性能原因,我正在比较不同的 Tensorflow 构建。
我拥有的第一个版本是我从https://www.tensorflow.org/install/lang_c下载的预编译版本。
https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-2.4.0.tar.gz
然后我按照此处的安装过程从源代码构建了 tensorflow 2.4 。我在 ./configure 中使用了默认值。然后我跑了,
bazel build --config=opt //tensorflow/tools/lib_package:libtensorflow
然后我解压下面生成的文件并进行必要的导出(我没有解压到 /usr/local),
~/tensorflow/bazel-bin/tensorflow/tools/lib_package/libtensorflow.tar.gz
最后,我从源代码重建了 tensorflow 2.4,再次使用了 ./configure 中的默认值。然后我跑了,
bazel build --config=mkl --config=noaws --config=nogcp --config=nohdfs -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 //tensorflow/tools/lib_package:libtensorflow
根据我的阅读,这个命令应该使用 intel-mkl 支持和 avx、avx2、fma、sse4.1 和 sse4.2 指令集构建 tensorflow。我检查了我的 CPU 是否支持这些指令。然后我解压缩生成的文件并进行导出。
性能结果表明,预编译库的速度几乎是我从源代码构建的库的两倍。我在这里做错了什么,除了使用之外我找不到其他方法
--config=mkl -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2
使用这些选项进行构建并没有显示出任何性能变化。有没有办法了解预编译版本是用哪些标志构建的,我该如何重现它?
谢谢,