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ć?
źródło
>>> 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
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
.Odpowiedzi:
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 :
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
... lub przez ustawienie,
export TF_CPP_MIN_LOG_LEVEL=2
jeś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.
źródło
Zaktualizuj plik binarny tensorflow dla twojego CPU i systemu operacyjnego za pomocą tego polecenia
Adres URL pobierania pliku whl można znaleźć tutaj
https://github.com/lakshayg/tensorflow-build
źródło
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:
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.
źródło
W systemie Windows można sprawdzić oficjalną optymalizację Intel MKL dla kół TensorFlow skompilowanych z AVX2. To rozwiązanie przyspiesza moje wnioskowanie ~ x3.
źródło
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ć:
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ć:
źródło
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.
źródło
Najłatwiejszym sposobem, aby to naprawić, jest odinstalowanie wszystkiego, a następnie zainstalowanie określonej wersji tensorflow-gpu:
Możesz sprawdzić, czy to zadziałało, dodając następujący kod do pliku python:
Uruchom plik, a następnie wynik powinien wyglądać mniej więcej tak:
Mam nadzieję że to pomoże
źródło
pip install tensorflow_hub
ipip install tensorflow_datasets