Twój procesor obsługuje instrukcje, których ten plik binarny TensorFlow nie skompilował do użycia: AVX AVX2

656

Jestem nowy w TensorFlow. Niedawno go zainstalowałem (wersja procesora Windows) i otrzymałem następujący komunikat:

Pomyślnie zainstalowano tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2

Potem, kiedy próbowałem uciec

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()

(które znalazłem na https://github.com/tensorflow/tensorflow )

Otrzymałem następującą wiadomość:

02.11.2017 01: 56: 21.698935: IC: \ tf_jenkins \ home \ workspace \ rel-win \ M \ windows \ PY \ 36 \ tensorflow \ core \ platform \ cpu_feature_guard.cc: 137] Twój procesor obsługuje instrukcje, które to Plik binarny TensorFlow nie został skompilowany do użycia: AVX AVX2

Ale kiedy uciekłem

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

działał tak, jak powinien i wyświetlał dane wyjściowe Hello, TensorFlow!, co wskazuje, że instalacja rzeczywiście się powiodła, ale jest coś jeszcze nie tak.

Czy wiesz na czym polega problem i jak go naprawić?

csg
źródło
33
Gdy działa, informacja, którą wyrzuca, oznacza po prostu, że nie jest tak szybka, jak mogłaby być. Aby się go pozbyć, możesz zainstalować go ze źródła, patrz tutaj
Ben
Mam również ten sam problem z poleceniami, które można pomyślnie uruchomić. >>> sess = tf.Session() 2017-11-05 18:02:44.670825: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\ 35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instruct ions that this TensorFlow binary was not compiled to use: AVX AVX2
M. Oguz Ozcan
@Ben, więc to tylko ostrzeżenie, ale wszystko będzie działać dobrze? (przynajmniej z perspektywy początkującego)
bvdb
1
Aby skompilować Tensorflow z instrukcjami AVX, zapoznaj się z tą odpowiedzią
Sreeragh AR
2
Mam bardzo podobną wiadomość w tej samej sytuacji, wiadomość jest Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian

Odpowiedzi:

818

O czym jest to ostrzeżenie?

Nowoczesne procesory zapewniają wiele instrukcji niskiego poziomu, oprócz zwykłej arytmetyki i logiki, znanych jako rozszerzenia, np. SSE2, SSE4, AVX itp. Z Wikipedii :

Advanced Vector Extensions ( AVX ) to rozszerzenia architektury zestawu instrukcji x86 dla mikroprocesorów Intel i AMD, zaproponowane przez Intela w marcu 2008 r. I najpierw obsługiwane przez Intel z procesorem Sandy Bridge w pierwszym kwartale 2011 r., A później przez AMD z procesorem Bulldozer w trzecim kwartale 2011 roku. AVX zapewnia nowe funkcje, nowe instrukcje i nowy schemat kodowania.

W szczególności AVX wprowadza fusion multiply-akumulate (FMA) operacje, które przyspieszają obliczenia algebry liniowej, a mianowicie iloczyn iloczynu, mnożenie macierzy, splot itp. Prawie każde szkolenie w uczeniu maszynowym wymaga dużej liczby tych operacji, stąd też szybciej na procesorze obsługującym AVX i FMA (do 300%). Ostrzeżenie mówi, że twój procesor obsługuje AVX (hura!).

Chciałbym tutaj podkreślić: chodzi tylko o procesor .

Dlaczego więc nie jest używany?

Ponieważ domyślna dystrybucja tensorflow jest budowana bez rozszerzeń CPU , takich jak SSE4.1, SSE4.2, AVX, AVX2, FMA itp. Domyślne kompilacje (te z pip install tensorflow) mają być kompatybilne z jak największą liczbą procesorów. Kolejnym argumentem jest to, że nawet przy tych rozszerzeniach procesor jest znacznie wolniejszy niż procesor graficzny i oczekuje się, że na GPU zostanie przeprowadzone szkolenie w zakresie uczenia maszynowego na średnim i dużym poziomie.

Co powinieneś zrobić?

Jeśli masz procesor graficzny , nie powinieneś przejmować się obsługą AVX, ponieważ najdroższe operacje będą wysyłane na urządzenie GPU (chyba że jawnie nie jest ustawione). W takim przypadku możesz po prostu zignorować to ostrzeżenie przez

# Just disables the warning, doesn't enable AVX/FMA
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

... lub przez ustawienie, export TF_CPP_MIN_LOG_LEVEL=2jeśli korzystasz z Uniksa. Tensorflow i tak działa dobrze, ale nie zobaczysz tych irytujących ostrzeżeń.


Jeśli nie masz procesora graficznego i chcesz maksymalnie wykorzystać procesor, powinieneś zbudować tensorflow ze źródła zoptymalizowanego dla twojego procesora z włączonymi AVX, AVX2 i FMA, jeśli twój procesor je obsługuje. Zostało to omówione w tym pytaniu, a także w problemie GitHub . Tensorflow wykorzystuje system kompilacji ad-hoc o nazwie bazel, a budowanie go nie jest aż tak trywialne, ale z pewnością jest wykonalne. Następnie nie tylko zniknie ostrzeżenie, ale również poprawi się wydajność przepływu tensorowego.

Maksyma
źródło
29
Warto wspomnieć, że TensorFlow Serving ma osobne instalacje dla niezoptymalizowanego procesora i zoptymalizowanego procesora (AVX, SSE4.1 itp.). szczegóły są tutaj: github.com/tensorflow/serving/blob/…
Chris Fregly
9
Zgodnie z usuniętą odpowiedzią na to pytanie, AVX512F na i9-7900x (Skylake-AVX512) z GPU (GTX1080Ti) „daje 28% wzrost 68s-> 48s na iteracjach CIFAR10 1000”. Czy na pewno warto zignorować ostrzeżenie podczas korzystania z procesora graficznego? O ile ten komentarz nie jest fałszywy, wydaje się, że przynajmniej w niektórych przypadkach można zyskać na zestawach instrukcji procesora.
Peter Cordes
1
@PeterCordes Jeśli tak, z pewnością dołączę to do mojej odpowiedzi. Ale stwierdzenie „mój model przyspiesza o 30%” brzmi tak samo, jak „mój program C ++ przyspiesza o 30%”. Jaki dokładnie model? Czy istnieje ręczne ustawienie procesora? Jak przesyłane są dane? Np. Może być dużo pracy w numpy. Oczywiście możliwe jest, aby procesor stał się wąskim gardłem i na SO jest wiele pytań. Zwykle jest to uważane za błąd.
Maxim
2
@ Maxim: Cały tekst usuniętej odpowiedzi brzmi: „ W moim teście instrukcja AVX512F na GPU I9 (7900x) (GTX1080Ti) daje 28% wzrost 68s-> 48s na iteracjach CIFAR10 1000 ”. Więc niestety nie ma żadnych szczegółów (ani interpunkcji, gramatyki ani formatowania).
Peter Cordes
2
Najwyraźniej jeśli używasz komputera Mac, nie będzie korzystał z procesora graficznego, stackoverflow.com/questions/46364917/...
Dent Arthur Dent
156

Zaktualizuj plik binarny tensorflow dla twojego CPU i systemu operacyjnego za pomocą tego polecenia

pip install --ignore-installed --upgrade "Download URL"

Adres URL pobierania pliku whl można znaleźć tutaj

https://github.com/lakshayg/tensorflow-build

HimalayanCoder
źródło
1
Próbowałem na systemie Windows 10 wuth url stackoverflow.com/questions/47068709/... . I pojawia się błąd mówiąc zipfile.BadZipFile: Plik nie jest plikiem zip
Thusitha Thilina Dayaratne
1
Działa, gdy
pobieram
1
każdy, kto dostaje komunikat o błędzie „zipfile.BadZipFile: plik nie jest plikiem zip”, powinien otrzymać nieprzetworzony link, jak w przypadku cuda9.2avx2, link to github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/...
Yeasin Ar Rahman
5
W przypadku systemu Windows próbowałem tego. Odinstaluj istniejący tensorflow za pomocą „pip uninstall tensorflow”, a następnie zainstaluj go ponownie za pomocą „pip install <Ścieżka do pobranego pliku WHL>”. Pobierz ten plik WHL na swój komputer - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , jeśli masz 3.6 Pythona i 64-bitowe okna (zignoruj ​​amd, który widzisz). W przeciwnym razie przejdź krok wstecz w github i wyszukaj prawidłowy WHL. Działa
król
3
Pracował dla mnie. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - pobrany plik whl i zainstalowany. Obecnie używa instancji ps.xLarge aws. Wydajność poprawiona z 16 sekund na iterację do 9 sekund dla niestandardowego ćwiczenia na wykrywanie obiektów z 230 klasami działającymi na Szybszym R-CNN.
Morela
27

Optymalizacja procesora z GPU

Istnieją korzyści w zakresie wydajności, które można uzyskać, instalując TensorFlow ze źródła, nawet jeśli masz procesor graficzny i używasz go do szkolenia i wnioskowania. Powodem jest to, że niektóre operacje TF mają tylko implementację procesora i nie mogą działać na twoim GPU.

Ponadto istnieje kilka wskazówek dotyczących zwiększania wydajności, które dobrze wykorzystują procesor. Przewodnik po wydajności TensorFlow zaleca:

Umieszczenie operacji potoku wejściowego na procesorze może znacznie poprawić wydajność. Wykorzystanie procesora do potoku wejściowego pozwala GPU skupić się na szkoleniu.

Aby uzyskać najlepszą wydajność, powinieneś napisać kod, aby wykorzystać procesor i kartę graficzną do pracy w tandemie, a nie zrzucać wszystko na GPU, jeśli taki masz. Zoptymalizowanie plików binarnych TensorFlow pod kątem procesora może spłacić godziny zaoszczędzonego czasu pracy i trzeba to zrobić raz.

Wesam
źródło
12

W systemie Windows (dzięki właścicielowi f040225) przejdź tutaj: https://github.com/fo40225/tensorflow-windows-wheel, aby pobrać adres URL swojego środowiska na podstawie kombinacji „tf + python + cpu_instruction_extension”. Następnie użyj tego cmd, aby zainstalować:

pip install --ignore-installed --upgrade "URL"

Jeśli wystąpi błąd „Plik nie jest plikiem zip”, pobierz plik .whl na komputer lokalny i użyj tego polecenia cmd, aby zainstalować:

pip install --ignore-installed --upgrade /path/target.whl
Z.Wei
źródło
te GPU są podzielone na części i oznaczone jako pliki .7z. Jak je złożyć?
user3496060
@ user3496060 Użyłem winrar do rozpakowania podzielonych plików
Alan Dursun
8

Jeśli używasz pip wersję tensorflow, oznacza to, że już skompilowane i jesteś po prostu instalacji. Zasadniczo instalujesz tensorflow-gpu, ale kiedy pobierasz go z repozytorium i próbujesz kompilować, powinieneś zbudować go z obsługą CPU AVX. Jeśli go zignorujesz, otrzymasz ostrzeżenie za każdym razem, gdy uruchomisz procesor.

Hazarapet Tunanyan
źródło
jak mogę uniknąć tego błędu, jakie rzeczy powinienem przestrzegać?
jitsm555
2
to nie jest błąd. Jest to ostrzeżenie, że thensorflow nie obsługuje AVX dla procesora. Jeśli nie chcesz tego widzieć, wyłącz go, ustawiając os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan
5

Najłatwiejszym sposobem, aby to naprawić, jest odinstalowanie wszystkiego, a następnie zainstalowanie określonej wersji tensorflow-gpu:

  1. odinstaluj tensorflow:
    pip uninstall tensorflow
  1. odinstaluj tensorflow-gpu: (upewnij się, że uruchomisz to, nawet jeśli nie jesteś pewien, czy go zainstalowałeś)
    pip uninstall tensorflow-gpu
  1. Zainstaluj konkretną wersję tensorflow-gpu:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Możesz sprawdzić, czy to zadziałało, dodając następujący kod do pliku python:

from __future__ import absolute_import, division, print_function, unicode_literals

import numpy as np

import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_datasets as tfds

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub Version: ", hub.__version__)
print("GPU is", "available" if tf.config.experimental.list_physical_devices("GPU") else "NOT AVAILABLE")

Uruchom plik, a następnie wynik powinien wyglądać mniej więcej tak:

Version:  2.0.0
Eager mode:  True
Hub Version:  0.7.0
GPU is available

Mam nadzieję że to pomoże

James Brett
źródło
ModuleNotFoundError: Żaden moduł o nazwie „tensorflow_hub”
D Adams
ModuleNotFoundError: Żaden moduł o nazwie „tensorflow_datasets”
D Adams
Spróbuj zainstalować moduły osobno: pip install tensorflow_hubipip install tensorflow_datasets
James Brett
tak - po prostu staram się być pomocny w kompletności odpowiedzi.
D Adams
Och, nie pamiętam, aby instalować je osobno. Dzięki!
James Brett