为了账号安全,请及时绑定邮箱和手机立即绑定

如何用SSE4.2和AVX指令编译TensorFlow?

如何用SSE4.2和AVX指令编译TensorFlow?

如何用SSE4.2和AVX指令编译TensorFlow?这是运行脚本以检查TensorFlow是否工作的消息:I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations. W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations. I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero我注意到它提到了SSE4.2和AVX,1)什么是SSE4.2和AVX?2)这些SSE4.2和AVX如何改进TensorFlow任务的CPU计算。3)如何利用这两个库进行TensorFlow编译?
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

让我们先来解释一下你为什么一开始就看到这些警告?.


很可能您还没有从源代码中安装tf,而是使用了如下所示的pip install tensorflow..这意味着您安装了预先构建(由其他人构建的)二进制文件,这些二进制文件没有针对您的体系结构进行优化。这些警告正好告诉您:您的体系结构上有可用的东西,但是不会使用它,因为二进制文件不是用它编译的。这是文献资料.

TensorFlow在启动时检查它是否已使用CPU上可用的优化进行编译。如果不包括优化,TensorFlow将发出警告,例如不包括AVX、AVX 2和FMA指令。

好消息是很可能你只是想用TF来学习/实验,这样一切都会正常工作,你就不用担心了。


什么是SSE4.2和AVX?

维基百科对SSE4.2AVX..这种知识不一定要善于机器学习.你可以把它们看作是一组额外的东西指令计算机对单个指令使用多个数据点来执行可以自然并行化的操作(例如,添加两个数组)。

SSE和AVX都是对SIMD(单指令、多个数据),这是

弗林分类学中的一类并行计算机。它描述了具有多个处理元素的计算机,这些处理元素同时对多个数据点执行相同的操作。因此,这类机器利用数据级的并行性,而不是并发性:有同时(并行)计算,但在给定时刻只有一个进程(指令)。

这足以回答你的下一个问题。


这些SSE4.2和AVX如何改进TF任务的CPU计算

它们允许更有效地计算各种向量(矩阵/张量)运算。你可以读到更多这些幻灯片


如何使用这两个库使TensorFlow编译?

您需要使用这些指令编译的二进制文件。最简单的方法就是自己编译..正如Mike和Yaroslav建议的那样,您可以使用以下Bazel命令

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 1955 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信