問題描述
我是TensorFlow的新手。我最近安裝了Tensorflow(Windows CPU版本),但收到以下消息:
Successfully installed tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2
然後當我嘗試運行一下代碼:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
sess.run(hello)
'Hello, TensorFlow!'
a = tf.constant(10)
b = tf.constant(32)
sess.run(a + b)
42
sess.close()
(上述代碼是通過https://github.com/tensorflow/tensorflow找到的)
我收到以下消息:
2017-11-02 01:56:21.698935: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
但是當我運行以下代碼時:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
很奇怪,代碼居然會按預期運行,並正常輸出Hello, TensorFlow!
,這表明安裝確實成功了,但是還有其他錯誤。
那麽問題到底是什麽以及如何解決呢?謝謝。
最佳答案
首先,這是關於什麽的警告?
除了常見的算術和邏輯運算之外,現代CPU還提供了許多底層指令(也叫擴展extension),如 SSE2,SSE4,AVX等。參考來自Wikipedia的資料:
Advanced Vector Extensions (AVX) are extensions to the x86 instruction set architecture for microprocessors from Intel and AMD proposed by Intel in March 2008 and first supported by Intel with the Sandy Bridge processor shipping in Q1 2011 and later on by AMD with the Bulldozer processor shipping in Q3 2011. AVX provides new features, new instructions and a new coding scheme.
譯文是:Advanced Vector Extensions(AVX)是Intel在2008年3月提出的,針對Intel和AMD的x86指令集體係結構的擴展,由Intel於2011年第一季度發布的Sandy Bridge處理器首先得到支持,隨後在2011年第三季度由AMD與Bulldozer處理器一起發布。AVX提供了新功能,新指令和新編碼方案。
特別是,AVX引入了fused multiply-accumulate(FMA)操作,可加快線性代數的計算速度,即向量點積,矩陣乘法,卷積等。幾乎每個機器學習訓練都會涉及大量這類操作,因此在支持AVX和FMA的CPU上將更快(最高300%)。而該警告指出您的CPU確實支持了AVX!
我想在此強調一下:這僅與CPU有關。
那為什麽不使用呢?
因為tensorflow默認發行版是按無CPU擴展(without CPU extensions,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等)來構建的。默認發行版(pip install tensorflow
的發行版)旨在與盡可能多的CPU兼容。另一個論點是,即使有了這些擴展,如果想要進行中等和大規模的機器學習訓練,CPU也要比GPU慢很多。所以默認情況是不使用的。
你該怎麽辦?
如果您有GPU,則不必在意AVX的支持,因為大多數昂貴的操作都會在GPU設備上調度(除非明確設置為不這樣做)。在這種情況下,您可以通過以下方式忽略此警告
# Just disables the warning, doesn't enable AVX/FMA
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
…,或者如果您使用的是Unix,則可以通過設置export TF_CPP_MIN_LOG_LEVEL=2
來設置。無論如何,Tensorflow都運行良好,但是這樣設置之後,您不會再看到這些煩人的警告了。
如果您沒有GPU並希望盡可能多地利用CPU,則應從啟用了AVX,AVX2和FMA的CPU優化源中構建Tensorflow(如果您的CPU支持)。參考在this question和this GitHub issue中進行的討論。 Tensorflow使用了一個名為bazel的專門構建係統,構建它並不是那麽簡單,但是肯定是可行的。此後,不僅警告會消失,而且tensorflow性能也應提高。
補充資料一
使用如下命令,為您的CPU和操作係統更新tensorflow二進製文件。也可以解決上述問題!
pip install --ignore-installed --upgrade "Download URL"
您可以在此處找到whl文件的下載網址
https://github.com/lakshayg/tensorflow-build
如果遇到“文件不是zip文件”錯誤,請將.whl下載到本地計算機,然後使用此cmd進行安裝:
pip install --ignore-installed --upgrade /path/target.whl
參考資料