Tensorflow: 如何使用 SSE4.1、SSE4.2 和 AVX 编译 tensorflow。

创建于 2017-03-03  ·  44评论  ·  资料来源: tensorflow/tensorflow

刚刚运行 tensorflow。 现在遇到这个错误。

目前使用 Mac Yosemite,通过 anaconda 使用 pip3 下载 tensorflow,使用 python 3.5。

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.

W tensorflow/core/platform/cpu_feature_guard.cc:45] 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:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.

那么既然 anaconda 有一组特殊的命令,那么如何通过 anaconda 命令系统让 tensorflow 在 SSE4.1、SSE4.2 和 AVX 上运行? 我真的很困惑如何解决这个问题。

最有用的评论

这不是错误,只是警告说如果您从源代码构建 TensorFlow,它在您的机器上会更快。

关于这个的问题: http :
从源代码构建的 TensorFlow 指南: https :

所有44条评论

这不是错误,只是警告说如果您从源代码构建 TensorFlow,它在您的机器上会更快。

关于这个的问题: http :
从源代码构建的 TensorFlow 指南: https :

正如@Carmezim所说,这些只是警告消息。
对于您的每个程序,您只会看到它们一次。
就像警告所说的那样,如果您需要使 TF 更快,您应该只使用这些标志编译 TF。

您可以按照我们的指南从源代码安装 TensorFlow 以编译支持 SIMD 指令集的 TF。

好,谢谢。 我得到它。

有没有办法让我们保持沉默?

消除这些警告消息的唯一方法是从源代码构建,使用--config opt选项。

一种在 Unix/Linux/OSX 上重定向消息的“解决方法”(尽管不完美):
python myscript.py 2>/dev/null

@CGTheLegend @ocampesato你可以使用 TF 环境变量TF_CPP_MIN_LOG_LEVEL ,它的工作原理如下:

  • 默认为0 ,显示所有日志
  • 要过滤INFO日志,请将其设置为1
  • WARNINGS另外, 2
  • 并另外过滤掉ERROR日志将其设置为3

因此,您可以执行以下操作来使警告静音:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

@gunan @mrry我看到很多人对消除警告感兴趣,是否有兴趣将此类信息添加到文档中?

我从 tensorflow 安装指南安装,也收到了这个警告。

pip3 install --upgrade tensorflow

@jadeydi而不是从源代码编译,“pip”只安装二进制文件,这样你仍然会收到这些警告。

我刚刚编译了支持 SSE4.1 SSE4.2 AVX AVX2 和 FMA 的 tensorflow。 该构建可在此处获得: https :

@lakshayg ,感谢分享。 您可能想查看https://github.com/yaroslavvb/tensorflow-community-wheels

与 Ubuntu 上的标准pip install tensorflow-gpu相比,构建速度大约快得多? 它只是对 CPU 计算更快,还是对 GPU 计算有任何好处?

http://www.anandtech.com/show/2362/5

这是在谷歌上提出的,并且有一些不错的技术细节。

测试是使用 VirtualDub 1.7.6 和 DivX 6.7 的 DivX 编码。 如果您选择为运动估计启用新的完整搜索算法,SSE4 就会出现,该算法由两个 SSE4 指令加速: MPSADBWPHMINPOSUW 。 这个想法是运动估计(弄清楚在后续视频帧中会发生什么)需要对绝对差的总和进行大量计算,以及找到这些计算结果的最小值。 SSE2 指令PSADBW可以计算一对 16B 无符号整数的两个差值和; SSE4 指令MPSADBW可以做八个。

...

在我们的 QX9650 上,启用 SSE4 的完整搜索运行速度比仅使用 SSE2 快 45%

现在确定 tensorflow 正在使用哪些函数,但可能值得付出努力。

抱歉,默认情况下在所有 TF 脚本中都有输出是一件荒谬的事情。 大多数人可能不会从源代码编译 TF,也不想编译。

@Tomashley303 ,这是一个非常棒的信息! 我不打算从源代码重新编译。 我不想。 但是这些信息告诉我,如果我的模型变大变慢并且需要提高性能,该怎么办。 考虑到良好的演练(我们确实有)可以最大限度地减少重新编译的劳动力成本(CPU 时间无关紧要,可以在一夜之间运行),使用扩展重新编译通常比购买新硬件更便宜。

我经历了这个过程......很简单,根本没有花时间。 不是你通常的 cmake C++ 有点噩梦。

我有一个小的 bash 脚本可以在 MacOS/Linux 下编译 TF。 它动态计算 CPU 特性并将它们作为构建参数。 我正在考虑创建一个 PR,但没有找到一个包含用于本地构建的脚本(帮助程序)的文件夹,只有 ci_build。 如果有意义,我会去做

要旨
https://gist.github.com/venik/9ba962c8b301b0e21f99884cbd35082f

给@gunan 的一封信

我在第一次安装 TensorFlow 时遇到了这个问题。 现在我不得不弄清楚如何再次解决它,因为我正在一台新机器上安装 TensorFlow。 这是一个令人头疼的问题,您提供的文档根本不清楚。

我必须在我的最后做这件事的事实是荒谬和令人愤怒的。 如果 pip/pip3 整天向您发出警告,那么从 pip/pip3 中提供某些内容是没有用的。

至少,您应该编辑https://www.tensorflow.org/install/install_sources并明确说明如何使用 SSE / AVX 进行编译

对我有用的解决方案:在配置过程中(运行 ./configure 时)出现提示时输入“-mavx -msse4.1 -msse4.2”。

将它添加到您的安装说明中有那么难吗?

谢谢,根据@Carmezim 的回答,我得到了基于 avx 和 sse 的 cpu 加速版本。 我已经在 Intel 上测试过 fast-rcnn(resnet-101)。 成本时间加快了30%左右,真的很有用。

您可以使警告静音。
只需在顶部添加这些代码。
导入操作系统
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
将张量流导入为 tf
正如这里提到的: https :

您可以轻松地在系统环境变量中添加用户变量:
TF_CPP_MIN_LOG_LEVEL, value = 2. 然后重启你的IDE

@mikalyoung无法预期 GPU 计算的改进,因为这些指令集仅适用于 CPU,并且它们允许矢量化操作。
因此,如果您比较两个(理想情况下)100% 在 GPU 上运行的代码,一个在使用 SIMD 支持编译的 Tensorflow 实例上运行,另一个在没有支持的情况下运行,您应该在速度方面得到相同的结果(并且希望在数值上也是如此)。

IC:\tf_jenkinshome\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137] 您的 CPU 支持该 TensorFlow 二进制文件未编译使用的指令:AVX AVX2

正如您所看到的,我的系统也有警告,但是在这种情况下,我无法理解警告开始时的“我”,因此有人可以在这种情况下帮助我

“I”只是“INFO”的简写。 您可以看到的其他字母 E 表示错误,或 F 表示致命。

所以我使用 conda 安装。 如果我现在希望从源代码编译而不是利用任何速度提升,我是否需要做任何事情来删除我的 conda 安装 tensorflow? 还是在它自己的小容器中,我可以从源代码单独编译?

我已经安装了 DeepSpeech 和 DeepSpeech 服务器。 去启动服务器并收到错误消息 - “2018-01-17 08:21:49.120154: F tensorflow/core/platform/cpu_feature_guard.cc:35] TensorFlow 库被编译为使用 AVX2 指令,但这些不是' t 在您的机器上可用。
中止(核心转储)”

显然我需要在同一台计算机上编译 TensorFlow。 请问有没有可以匹配 Kubuntu 17.10.1 和 HP Probook 4330S 的列表?

为什么没有windows编译? 我遇到了同样的问题,但我想使用 GPU,而不是将警告静音,我还有一个和显卡而不是 Nvidia 我该怎么办?

*我没有 Nvidia 显卡,我有一个和一个我该怎么办?

*AMD显卡..自动更正

这些不仅仅是警告,因为它会终止我的测试盒上的进程。 因为我也使用 AMD GPU,所以我启动了一个 Digital Ocean tensorflow box 来试一试,但似乎那里也没有 GPU 支持,而且它失败得很惨。

`# 作业 ID 0

从 /home/science/tf-demo/models/nmt-chatbot/model/hparams 加载 hparams

将 hparams 保存到 /home/science/tf-demo/models/nmt-chatbot/model/hparams
将 hparams 保存到 /home/science/tf-demo/models/nmt-chatbot/model/best_bleu/hparams
注意=scaled_luong
注意_架构=标准
批量大小=128
波束宽度=10
best_bleu=0
best_bleu_dir=/home/science/tf-demo/models/nmt-chatbot/model/best_bleu
check_special_token=真
colocate_gradients_with_ops=真
衰减因子=1.0
衰减_步数=10000
dev_prefix=/home/science/tf-demo/models/nmt-chatbot/data/tst2012
辍学=0.2
编码器类型=双
eos=
epoch_step=0
忘记偏差=1.0
infer_batch_size=32
init_op=统一
init_weight=0.1
学习率=0.001
learning_rate_decay_scheme=
length_penalty_weight=1.0
log_device_placement=假
max_gradient_norm=5.0
max_train=0
指标=['bleu']
num_buckets=5
num_embeddings_partitions=0
num_gpus=1
num_layers=2
num_residual_layers=0
num_train_steps=500000
num_translations_per_input=10
num_units=512
优化器=亚当
out_dir=/home/science/tf-demo/models/nmt-chatbot/model
输出注意=真
override_loaded_hparams=真
pass_hidden_​​state=真
random_seed=无
残差=假
share_vocab=假
sos=
source_reverse=假
源=来自
src_max_len=50
src_max_len_infer=无
src_vocab_file=/home/science/tf-demo/models/nmt-chatbot/data/vocab.from
src_vocab_size=15003
start_decay_step=0
steps_per_external_eval=无
step_per_stats=100
subword_option=
test_prefix=/home/science/tf-demo/models/nmt-chatbot/data/tst2013
tgt=到
tgt_max_len=50
tgt_max_len_infer=无
tgt_vocab_file=/home/science/tf-demo/models/nmt-chatbot/data/vocab.to
tgt_vocab_size=15003
time_major=真
train_prefix=/home/science/tf-demo/models/nmt-chatbot/data/train
unit_type=lstm
vocab_prefix=/home/science/tf-demo/models/nmt-chatbot/data/vocab
warmup_scheme=t2t
热身步骤=0

创建火车图...

num_bi_layers = 1, num_bi_residual_layers=0
cell 0 LSTM,forget_bias=1 DropoutWrapper,dropout=0.2 DeviceWrapper,device=/ gpu:0
cell 0 LSTM,forget_bias=1 DropoutWrapper,dropout=0.2 DeviceWrapper,device=/ gpu:0
cell 0 LSTM,forget_bias=1 DropoutWrapper,dropout=0.2 DeviceWrapper,device=/ gpu:0
单元 1 LSTM,forget_bias=1 DropoutWrapper,dropout=0.2 DeviceWrapper,device=/ gpu:0
learning_rate=0.001,warmup_steps=0,warmup_scheme=t2t
衰减方案=,开始衰减步骤=0,衰减步骤10000,衰减因子1

可训练变量

嵌入/编码器/嵌入_编码器:0 , (15003, 512),
嵌入/解码器/嵌入_解码器:0 , (15003, 512),
dynamic_seq2seq/encoder/bidirectional_rnn/fw/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/fw/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/bw/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/bw/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/memory_layer/ kernel:0 , (1024, 512),
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_0/basic_lstm_cell/ kernel:0 , (1536, 2048), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_0/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_1/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_1/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/attention/luong_attention/attention_g:0, (), / device:GPU :0
dynamic_seq2seq/decoder/attention/attention_layer/ kernel:0 , (1536, 512), / device:GPU :0
dynamic_seq2seq/decoder/output_projection/ kernel:0 , (512, 15003), / device:GPU :0

创建评估图...

num_bi_layers = 1, num_bi_residual_layers=0
单元 0 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0
单元 0 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0
单元 0 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0
单元 1 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0

可训练变量

嵌入/编码器/嵌入_编码器:0 , (15003, 512),
嵌入/解码器/嵌入_解码器:0 , (15003, 512),
dynamic_seq2seq/encoder/bidirectional_rnn/fw/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/fw/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/bw/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/bw/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/memory_layer/ kernel:0 , (1024, 512),
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_0/basic_lstm_cell/ kernel:0 , (1536, 2048), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_0/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_1/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_1/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/attention/luong_attention/attention_g:0, (), / device:GPU :0
dynamic_seq2seq/decoder/attention/attention_layer/ kernel:0 , (1536, 512), / device:GPU :0
dynamic_seq2seq/decoder/output_projection/ kernel:0 , (512, 15003), / device:GPU :0

创建推理图...

num_bi_layers = 1, num_bi_residual_layers=0
单元 0 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0
单元 0 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0
单元 0 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0
单元 1 LSTM,forget_bias=1 DeviceWrapper,device=/ gpu:0

可训练变量

嵌入/编码器/嵌入_编码器:0 , (15003, 512),
嵌入/解码器/嵌入_解码器:0 , (15003, 512),
dynamic_seq2seq/encoder/bidirectional_rnn/fw/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/fw/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/bw/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/encoder/bidirectional_rnn/bw/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/memory_layer/ kernel:0 , (1024, 512),
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_0/basic_lstm_cell/ kernel:0 , (1536, 2048), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_0/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_1/basic_lstm_cell/ kernel:0 , (1024, 2048), / device:GPU :0
dynamic_seq2seq/decoder/attention/multi_rnn_cell/cell_1/basic_lstm_cell/ bias:0 , (2048,), / device:GPU :0
dynamic_seq2seq/decoder/attention/luong_attention/attention_g:0, (), / device:GPU :0
dynamic_seq2seq/decoder/attention/attention_layer/ kernel:0 , (1536, 512), / device:GPU :0
dynamic_seq2seq/decoder/output_projection/ kernel:0 , (512, 15003),

log_file=/home/science/tf-demo/models/nmt-chatbot/model/log_1519669184

2018-02-26 18:19:44.862736: I tensorflow/core/platform/cpu_feature_guard.cc:137] 您的 CPU 支持该 TensorFlow 二进制文件未编译使用的指令:SSE4.1 SSE4.2 AVX AVX2 FMA
杀了`

需要运行什么命令以及在哪里运行这些命令以及如何告诉。 我迫切需要帮助。

但这是否意味着系统没有使用 GPU 进行处理?

好吧,如果您在加速环境中构建 tensorflow,例如在 KerasClassifier 中使用 k-fold,则需要解决此问题。
要解决此问题,您需要按照每个人的建议从源代码构建 tensorflow。
要从源代码构建 tensorflow,您需要使用以下工具

  1. 如果您还没有关闭,请在您的机器上安装 git - 在 ubuntu 机器上只需输入“sudo apt-get install git
  2. 您将需要安装 bazel。 强烈建议使用自定义 APT 存储库。 按照此链接上的说明安装 bazel https://docs.bazel.build/versions/master/install-ubuntu.html。
  3. 您需要以下python依赖项...使用以下命令
    numpy、开发和轮子
    sudo apt-get install python-numpy python-dev python-pip python-wheel
    4.安装所有依赖项后,将 tensorflow github 克隆到本地驱动器
    git 克隆https://github.com/tensorflow/tensorflow
  4. 转到克隆 tensorflow 和 cd 到 tensorflow 文件的位置并运行配置文件
    cd张量
    。/配置

只需按照屏幕上的说明完成 tensorflow 安装。
我强烈建议在安装 tensorflow 后更新您的机器
sudo apt-get 更新

祝你好运,享受...

只是在这个线程上插话,你不应该只是让这些警告静音 - 通过从源代码构建,我获得了大约 43% 的训练时间,我认为这是值得的。

如何使用此文件安装 tensorflow"tensorflow-1.6.0-cp36-cp36m-win_amd64.whl"

@anozele pip3 install --upgrade *path to wheel file*

@gunan --config=opt 还不够,您还应该在从源代码构建 TensorFlow 时添加,例如 --copt="-msse4.2"。

根据英特尔的说法, https: //software.intel.com/en-us/articles/intel-optimization-for-tensorflow-installation-guide ,如果您使用英特尔内置的 Tensorflow,则可以忽略这些警告,因为所有可用的指令集都会由后端 MKL 使用。 Tensorflow 的任何人都可以证实这一点吗?

这不是错误,只是警告说如果您从源代码构建 TensorFlow,它在您的机器上会更快。

关于这个的问题: http :
从源代码构建的 TensorFlow 指南: https :

但是,它并不比我不使用 -FMA -AVX -SSE 快https://stackoverflow.com/questions/57197854/fma-avx-sse-flags-did-not-bring-me-good-performance

你好。 对不起,如果我正在打败一匹死马。 只是想知道为什么默认的 pip 轮不是使用预先说明编译的二进制文件?

你好。 对不起,如果我正在打败一匹死马。 只是想知道为什么默认的 pip 轮不是使用预先说明编译的二进制文件?

这是因为旧的 CPU 架构不支持高级指令集。 有关支持 AVX、AVX2 或 AVX512 的 CPU 的详细列表,请参阅wiki 。 如果默认的 pip 二进制文件是用这些指令集编译的,那么 tensorflow 就不能在旧的 CPU 上工作。

但这是否意味着系统没有使用 GPU 进行处理?

不,即使您正在使用 GPU,它也会显示,如果您没有将消息静音,您还应该看到 Tensorflor 在命令提示符中加载您的 GPU 设备。

If you check with this repo:
请查看下面代码:

https://github.com/fo40225/tensorflow-windows-wheel

He has compiled almost all version of TF with SSE and AVX
他已经将几乎所有TF版本编译好了!

这篇文章是关于如何从包括标志的源代码构建的好教程
https://medium.com/@pierreontech/setup -a-high-performance-conda-tensorflow-environment-976995158cb1

尝试使用额外的 bazel 选项(如--copt=-mavx --copt=-msse4.1 --copt=-msse4.2强制包含适当的扩展

此页面是否有帮助?
0 / 5 - 0 等级