警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

安裝TensorFlow(CPU版本),使用pip install tensorflow安裝,安裝一切順利,但是在跑一個簡單的程序時,遇到如下情況:
這裏寫圖片描述

大概意思是:你的CPU支持AVX擴展,但是你安裝的TensorFlow版本無法編譯使用。

原因:

除了通常的算術和邏輯,現代CPU提供了許多低級指令,稱爲擴展,例如, SSE2,SSE4,AVX等來自維基百科:

高級矢量擴展(AVX)是英特爾在2008年3月提出的英特爾和AMD微處理器的x86指令集體系結構的擴展,英特爾首先通過Sandy Bridge處理器在2011年第一季度推出,隨後由AMD推出Bulldozer處理器在2011年第三季度.AVX提供了新功能,新指令和新編碼方案。
特別是,AVX引入了融合乘法累加(FMA)操作,加速了線性代數計算,即點積,矩陣乘法,卷積等。幾乎所有機器學習訓練都涉及大量這些操作,因此將會支持AVX和FMA的CPU(最高達300%)更快。該警告指出您的CPU確實支持AVX(hooray!)。

在此強調一下:

這只限於CPU。如果你有一個GPU,你不應該關心AVX的支持,因爲大多數昂貴的操作將被分派到一個GPU設備上(除非明確地設置)。在這種情況下,您可以簡單地忽略此警告。

那爲什麼會出現這種警告呢?

由於tensorflow默認分佈是在沒有CPU擴展的情況下構建的,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默認版本(來自pip install tensorflow的版本)旨在與儘可能多的CPU兼容。另一個觀點是,即使使用這些擴展名,CPU的速度也要比GPU慢很多,並且期望在GPU上執行中型和大型機器學習培訓。

解決方法:

  • 如果安裝的是GPU版本

如果你有一個GPU,你不應該關心AVX的支持,因爲大多數昂貴的操作將被分派到一個GPU設備上(除非明確地設置)。在這種情況下,您可以簡單地忽略此警告:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

  • 如果安裝的是CPU版本(pip install tensorflow)

  • 1.在代碼中加入如下代碼,忽略警告:

    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    2.編譯TensorFlow源碼
    如果您沒有GPU並且希望儘可能多地利用CPU,那麼如果您的CPU支持AVX,AVX2和FMA,則應該從針對CPU優化的源構建tensorflow。在這個問題中已經討論過這個問題,也是這個GitHub問題。 Tensorflow使用稱爲bazel的ad-hoc構建系統,構建它並不是那麼簡單,但肯定是可行的。在此之後,不僅警告消失,tensorflow性能也應該改善。

    參考:

    https://stackoverflow.com/questions/47068709/your-cpu-supports-instructions-that-this-tensorflow-binary-was-not-compiled-to-u?answertab=votes#tab-top

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章