CPU Anda mendukung instruksi yang biner TensorFlow ini tidak dikompilasi untuk digunakan: AVX AVX2

656

Saya baru mengenal TensorFlow. Saya baru saja menginstalnya (versi Windows CPU) dan menerima pesan berikut:

Berhasil memasang tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2

Lalu ketika saya mencoba lari

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

(yang saya temukan melalui https://github.com/tensorflow/tensorflow )

Saya menerima pesan berikut:

2017-11-02 01: 56: 21.698935: IC: \ tf_jenkins \ home \ workspace \ rel-win \ M \ windows \ PY \ 36 \ tensorflow \ core \ platform \ cpu_feature_guard.cc: 137] CPU Anda mendukung instruksi bahwa ini Biner TensorFlow tidak dikompilasi untuk digunakan: AVX AVX2

Tetapi ketika saya berlari

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

itu berjalan sebagaimana mestinya dan output Hello, TensorFlow!, yang menunjukkan bahwa instalasi memang berhasil tetapi ada hal lain yang salah.

Apakah Anda tahu apa masalahnya dan bagaimana cara memperbaikinya?

csg
sumber
33
Jika berhasil, informasi yang diludahkannya hanya berarti tidak secepat mungkin. Untuk menghilangkannya, Anda dapat menginstalnya dari sumbernya lihat di sini
Ben
Saya juga menghadapi masalah yang sama dengan perintah yang dapat Anda jalankan dengan sukses. >>> 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
@ Jadi itu hanya peringatan, tapi semuanya akan baik-baik saja? (setidaknya dari perspektif pemula)
bvdb
1
Untuk mengkompilasi Tensorflow dengan instruksi AVX, lihat jawaban
Sreeragh AR
2
Saya mendapat pesan yang sangat mirip dalam situasi yang sama, pesannya adalah Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian

Jawaban:

820

Tentang apakah peringatan ini?

CPU modern menyediakan banyak instruksi tingkat rendah, selain aritmatika dan logika yang biasa, dikenal sebagai ekstensi, misalnya SSE2, SSE4, AVX, dll. Dari Wikipedia :

Advanced Vector Extensions ( AVX ) adalah ekstensi untuk arsitektur set instruksi x86 untuk mikroprosesor dari Intel dan AMD yang diusulkan oleh Intel pada Maret 2008 dan pertama kali didukung oleh Intel dengan pengiriman prosesor Sandy Bridge pada Q1 2011 dan kemudian oleh AMD dengan pengiriman prosesor Bulldozer. pada Q3 2011. AVX menyediakan fitur baru, instruksi baru dan skema pengkodean baru.

Secara khusus, AVX memperkenalkan operasi penggandaan multiply-akumulasi (FMA), yang mempercepat perhitungan aljabar linier, yaitu produk-titik, perkalian matriks, konvolusi, dll. Hampir setiap pelatihan pembelajaran mesin melibatkan banyak operasi ini, karenanya akan menjadi lebih cepat pada CPU yang mendukung AVX dan FMA (hingga 300%). Peringatan tersebut menyatakan bahwa CPU Anda mendukung AVX (hore!).

Saya ingin menekankan di sini: ini semua tentang CPU saja .

Mengapa tidak digunakan saat itu?

Karena distribusi standar tensorflow dibangun tanpa ekstensi CPU , seperti SSE4.1, SSE4.2, AVX, AVX2, FMA, dll. Build default (yang berasal dari pip install tensorflow) dimaksudkan agar kompatibel dengan CPU sebanyak mungkin. Argumen lain adalah bahwa meskipun dengan ekstensi ini, CPU jauh lebih lambat daripada GPU, dan diharapkan pelatihan pembelajaran mesin skala menengah dan besar dilakukan pada GPU.

Apa yang harus anda lakukan

Jika Anda memiliki GPU , Anda seharusnya tidak peduli dengan dukungan AVX, karena ops paling mahal akan dikirim pada perangkat GPU (kecuali secara eksplisit diatur untuk tidak melakukannya). Dalam hal ini, Anda bisa mengabaikan peringatan ini dengan

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

... atau dengan mengatur export TF_CPP_MIN_LOG_LEVEL=2jika Anda menggunakan Unix. Tensorflow berfungsi dengan baik, tetapi Anda tidak akan melihat peringatan yang mengganggu ini.


Jika Anda tidak memiliki GPU dan ingin memanfaatkan CPU sebanyak mungkin, Anda harus membuat tensorflow dari sumber yang dioptimalkan untuk CPU Anda dengan AVX, AVX2, dan FMA diaktifkan jika CPU Anda mendukungnya. Sudah dibahas dalam pertanyaan ini dan juga masalah GitHub ini . Tensorflow menggunakan sistem ad-hoc build yang disebut bazel dan membangunnya tidak sepele, tetapi tentu bisa dilakukan. Setelah ini, tidak hanya peringatan akan hilang, kinerja tensorflow juga harus ditingkatkan.

Pepatah
sumber
29
Perlu disebutkan bahwa TensorFlow Serving memiliki pemasangan terpisah untuk CPU yang tidak dioptimalkan dan CPU yang dioptimalkan (AVX, SSE4.1, dll.). detailnya ada di sini: github.com/tensorflow/serving/blob/…
Chris Fregly
9
Menurut jawaban yang dihapus untuk pertanyaan ini, AVX512F pada i9-7900x (Skylake-AVX512) dengan GPU (GTX1080Ti) "membuat keuntungan 28% 68s-> 48d pada iterasi CIFAR10 1000". Apakah Anda yakin saran yang baik untuk mengabaikan peringatan saat menggunakan GPU? Kecuali jika komentar itu palsu, tampaknya ada sesuatu yang didapat dari set instruksi CPU setidaknya dalam beberapa kasus.
Peter Cordes
1
@PeterCordes Jika demikian, saya pasti akan memasukkannya ke dalam jawaban saya. Tetapi pernyataan "model saya mempercepat hingga 30%" terdengar sama dengan "program C ++ saya mempercepat hingga 30%". Model apa sebenarnya? Apakah ada penempatan CPU manual? Bagaimana data ditransfer? Misalnya, mungkin ada banyak pekerjaan di numpy. Tentu saja, adalah mungkin untuk membuat CPU menjadi penghambat dan ada banyak pertanyaan tentang hal itu di SO. Biasanya dianggap sebagai bug.
Maxim
2
@ Maxim: Seluruh teks dari jawaban yang dihapus adalah " Dalam pengujian saya instruksi AVX512F pada I9 (7900x) GPU (GTX1080Ti) membuat keuntungan 28% 68s-> 48s pada iterasi CIFAR10 1000 ". Jadi sayangnya tidak ada detail (atau tanda baca, tata bahasa, atau format).
Peter Cordes
2
Rupanya jika Anda menggunakan Mac, itu tidak akan menggunakan GPU, stackoverflow.com/questions/46364917/…
Dent Arthur Dent
156

Perbarui biner tensorflow untuk CPU & OS Anda menggunakan perintah ini

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

Url unduhan file whl dapat ditemukan di sini

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

HimalayanCoder
sumber
1
Saya mencoba di Windows 10 dengan url stackoverflow.com/questions/47068709/… . Saya mendapatkan pesan kesalahan mengatakan zipfile.BadZipFile: File bukan file zip
Thusitha Thilina Dayaratne
1
Ini bekerja ketika saya mengunduh dan menggunakan versi yang diunduh
Thusitha Thilina Dayaratne
1
siapa pun yang mendapatkan "kesalahan mengatakan zipfile.BadZipFile: File bukan file zip" harus mendapatkan tautan mentah seperti untuk cuda9.2avx2 tautannya adalah github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman
5
Untuk windows, saya mencoba ini. Hapus instalan tensorflow yang ada menggunakan "pip uninstall tensorflow", lalu instal ulang menggunakan "pip install <Path to download WHL file>". Unduh file WHL ini ke komputer Anda - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , jika Anda memiliki 3,6 Python dan jendela 64-bit (abaikan yang Anda lihat). Kalau tidak, navigasikan langkah mundur di github dan cari WHL yang benar. Berhasil
Raja
3
Bekerja untukku. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - mengunduh whl dan diinstal. Saat ini menggunakan contoh aws p2.xLarge. Kinerja ditingkatkan dari 16 detik per iterasi ke 9 detik untuk latihan deteksi objek khusus dengan 230 kelas berjalan pada F-R-CNN yang lebih cepat.
Aprikot
27

Optimasi CPU dengan GPU

Ada keuntungan kinerja yang bisa Anda dapatkan dengan menginstal TensorFlow dari sumbernya bahkan jika Anda memiliki GPU dan menggunakannya untuk pelatihan dan inferensi. Alasannya adalah beberapa operasi TF hanya memiliki implementasi CPU dan tidak dapat berjalan pada GPU Anda.

Juga, ada beberapa tips peningkatan kinerja yang memanfaatkan CPU Anda. Panduan kinerja TensorFlow merekomendasikan yang berikut ini:

Menempatkan operasi pipa input pada CPU dapat secara signifikan meningkatkan kinerja. Memanfaatkan CPU untuk pipa input membebaskan GPU untuk fokus pada pelatihan.

Untuk kinerja terbaik, Anda harus menulis kode Anda untuk menggunakan CPU dan GPU Anda untuk bekerja bersama-sama, dan tidak membuang semuanya pada GPU Anda jika Anda memilikinya. Memiliki biner TensorFlow Anda dioptimalkan untuk CPU Anda bisa melunasi berjam-jam waktu yang dihemat dan Anda harus melakukannya sekali.

Wesam
sumber
13

Untuk Windows, Anda dapat memeriksa optimalisasi Intel MKL resmi untuk roda TensorFlow yang dikompilasi dengan AVX2. Solusi ini mempercepat inferensi saya ~ x3.

conda install tensorflow-mkl
Flayn
sumber
12

Untuk Windows (Terima kasih kepada pemilik f040225), buka di sini: https://github.com/fo40225/tensorflow-windows-wheel untuk mengambil url untuk lingkungan Anda berdasarkan kombinasi "tf + python + cpu_instruction_extension". Kemudian gunakan cmd ini untuk menginstal:

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

Jika Anda menemukan kesalahan "File bukan file zip", unduh .whl ke komputer lokal Anda, dan gunakan cmd ini untuk menginstal:

pip install --ignore-installed --upgrade /path/target.whl
Ya
sumber
yang GPU dibagi menjadi beberapa bagian dan diberi label sebagai file .7z. Bagaimana cara menyatukannya?
user3496060
@ user3496060 Saya menggunakan winrar untuk membuka kompresi file yang dibagi
Alan Dursun
8

Jika Anda menggunakan pip versi tensorflow, itu berarti itu sudah disusun dan Anda hanya menginstal itu. Pada dasarnya Anda menginstal tensorflow-gpu, tetapi ketika Anda mengunduhnya dari repositori dan mencoba membangun, Anda harus membangunnya dengan dukungan CPU AVX. Jika Anda mengabaikannya, Anda akan mendapatkan peringatan setiap kali Anda menjalankan cpu.

Hazarapet Tunanyan
sumber
bagaimana saya bisa menghindari kesalahan ini, hal-hal apa yang harus saya ikuti?
jitsm555
2
Ini bukan sebuah kesalahan. Ini peringatan bahwa thensorflow tidak mendukung AVX untuk cpu. Jika Anda tidak ingin melihatnya, matikan saja dengan mengatur os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan
5

Cara termudah yang saya temukan untuk memperbaikinya adalah dengan menghapus instalan semuanya lalu menginstal versi tensorflow-gpu tertentu:

  1. uninstall tensorflow:
    pip uninstall tensorflow
  1. uninstall tensorflow-gpu: (pastikan untuk menjalankan ini bahkan jika Anda tidak yakin jika Anda menginstalnya)
    pip uninstall tensorflow-gpu
  1. Instal versi tensorflow-gpu tertentu:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Anda dapat memeriksa apakah ini berhasil dengan menambahkan kode berikut ke dalam file 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")

Jalankan file dan kemudian hasilnya akan seperti ini:

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

Semoga ini membantu

James Brett
sumber
ModuleNotFoundError: Tidak ada modul bernama 'tensorflow_hub'
D Adams
ModuleNotFoundError: Tidak ada modul bernama 'tensorflow_datasets'
D Adams
Cobalah untuk menginstal modul secara terpisah: pip install tensorflow_hubdanpip install tensorflow_datasets
James Brett
yup -> hanya berusaha membantu dalam kelengkapan jawaban Anda.
D Adams
Oh, saya tidak ingat harus menginstalnya secara terpisah. Terima kasih!
James Brett
0

Yang berhasil bagi saya adalah perpustakaan ini https://pypi.org/project/silence-tensorflow/

Instal perpustakaan ini dan lakukan seperti yang diperintahkan pada halaman, itu berfungsi seperti pesona!

shivam13juna
sumber