CPU của bạn hỗ trợ các hướng dẫn rằng tệp nhị phân TensorFlow này không được biên dịch để sử dụng: AVX AVX2


655

Tôi chưa quen với TensorFlow. Gần đây tôi đã cài đặt nó (phiên bản CPU Windows) và nhận được thông báo sau:

Đã cài đặt thành công tenorflow-1.4.0 tenorflow-tenorboard-0.4.0rc2

Sau đó khi tôi cố chạy

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

(mà tôi đã tìm thấy qua https://github.com/tensorflow/tensorflow )

Tôi nhận được tin nhắn sau:

2017-11 / 02 01: 56: 21,698935: IC: \ tf_jenkins \ home \ workspace \ rel-win \ M \ windows \ PY \ 36 \ tenorflow \ core \ platform \ cpu_feature_guard.cc: 137] CPU của bạn hỗ trợ các hướng dẫn này Nhị phân TensorFlow không được biên dịch để sử dụng: AVX AVX2

Nhưng khi tôi chạy

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

nó chạy như bình thường và đầu ra Hello, TensorFlow!, điều đó chỉ ra rằng việc cài đặt đã thực sự thành công nhưng có một cái gì đó sai.

Bạn có biết vấn đề là gì và cách khắc phục?


33
tf hoạt động, thông tin nó phun ra chỉ có nghĩa là nó không nhanh như nó có thể. Để thoát khỏi nó, bạn có thể cài đặt nó từ nguồn xem tại đây
Ben

Tôi cũng đang đối mặt với vấn đề tương tự với các lệnh mà bạn có thể chạy thành công. >>> 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 vì vậy nó chỉ là một cảnh báo, nhưng mọi thứ sẽ hoạt động tốt? (ít nhất là từ góc nhìn của người mới bắt đầu)
bvdb

1
Để biên dịch Tensorflow với hướng dẫn AVX, hãy xem câu trả lời
Sreeragh AR

2
Tôi nhận được một tin nhắn rất giống nhau trong tình huống tương tự, tin nhắn là Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian

Câu trả lời:


817

Cảnh báo này là gì?

Các CPU hiện đại cung cấp rất nhiều hướng dẫn cấp thấp, bên cạnh số học và logic thông thường, được gọi là các phần mở rộng, ví dụ SSE2, SSE4, AVX, v.v. Từ Wikipedia :

Phần mở rộng Vector nâng cao ( AVX ) là phần mở rộng cho kiến ​​trúc tập lệnh x86 cho bộ vi xử lý của Intel và AMD được Intel đề xuất vào tháng 3 năm 2008 và được Intel hỗ trợ đầu tiên với bộ xử lý Sandy Bridge trong quý 1 năm 2011 và sau đó là AMD với bộ xử lý Bulldozer trong quý 3 năm 2011. AVX cung cấp các tính năng mới, hướng dẫn mới và sơ đồ mã hóa mới.

Cụ thể, AVX giới thiệu các hoạt động tích lũy nhân (FMA) hợp nhất, giúp tăng tốc tính toán đại số tuyến tính, cụ thể là sản phẩm chấm, nhân ma trận, tích chập, v.v ... Hầu như mọi hoạt động đào tạo máy học đều liên quan đến rất nhiều hoạt động này, do đó sẽ nhanh hơn trên CPU hỗ trợ AVX và FMA (lên tới 300%). Cảnh báo cho biết CPU của bạn không hỗ trợ AVX (hooray!).

Tôi muốn nhấn mạnh ở đây: tất cả chỉ là về CPU .

Tại sao nó không được sử dụng sau đó?

Bởi vì phân phối mặc định tenorflow được xây dựng mà không có phần mở rộng CPU , chẳng hạn như SSE4.1, SSE4.2, AVX, AVX2, FMA, v.v. Các bản dựng mặc định (từ pip install tensorflow) được dự định tương thích với càng nhiều CPU càng tốt. Một lập luận khác là ngay cả với các phần mở rộng này, CPU chậm hơn rất nhiều so với GPU và dự kiến ​​việc đào tạo học máy ở quy mô vừa và lớn sẽ được thực hiện trên GPU.

Những gì bạn nên làm?

Nếu bạn có GPU , bạn không nên quan tâm đến hỗ trợ AVX, vì hầu hết các op đắt tiền sẽ được gửi trên thiết bị GPU (trừ khi được đặt rõ ràng là không). Trong trường hợp này, bạn chỉ cần bỏ qua cảnh báo này bằng cách

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

... hoặc bằng cách cài đặt export TF_CPP_MIN_LOG_LEVEL=2nếu bạn đang dùng Unix. Tensorflow vẫn hoạt động tốt, nhưng bạn sẽ không thấy những cảnh báo khó chịu này.


Nếu bạn không có GPU và muốn sử dụng CPU càng nhiều càng tốt, bạn nên xây dựng dòng chảy từ nguồn được tối ưu hóa cho CPU của bạn với AVX, AVX2 và FMA được bật nếu CPU của bạn hỗ trợ chúng. Nó đã được thảo luận trong câu hỏi này và cả vấn đề GitHub này . Tensorflow sử dụng một hệ thống xây dựng đặc biệt gọi là bazel và xây dựng nó không phải là chuyện nhỏ, nhưng chắc chắn là có thể thực hiện được. Sau này, không chỉ cảnh báo sẽ biến mất, hiệu suất của dòng chảy cũng sẽ được cải thiện.


29
Điều đáng nói là Dịch vụ TensorFlow có các bản cài đặt riêng cho CPU không được tối ưu hóa và CPU được tối ưu hóa (AVX, SSE4.1, v.v.). các chi tiết có tại đây: github.com/tensorflow/serving/blob/,
Chris Fregly

9
Theo câu trả lời đã bị xóa cho câu hỏi này, AVX512F trên i9-7900x (Skylake-AVX512) với GPU (GTX1080Ti) "giúp tăng 28% 68s-> 48 giây trên CIFAR10 1000 lần lặp". Bạn có chắc rằng lời khuyên tốt là bỏ qua cảnh báo khi sử dụng GPU? Trừ khi nhận xét đó là không có thật, có vẻ như có một cái gì đó để đạt được từ các tập lệnh CPU trong ít nhất là một số trường hợp.
Peter Cordes

1
@PeterCordes Nếu vậy, chắc chắn tôi sẽ đưa nó vào câu trả lời của mình. Nhưng tuyên bố "mô hình của tôi tăng tốc 30%" nghe giống như "chương trình C ++ của tôi tăng tốc 30%". Mô hình nào chính xác? Có vị trí CPU thủ công? Dữ liệu được truyền như thế nào? Ví dụ, có thể có rất nhiều công việc trong numpy. Tất nhiên, có thể làm cho CPU trở thành nút cổ chai và có rất nhiều câu hỏi về nó trên SO. Nó thường được coi là một lỗi.
Tối đa

2
@Maxim: Toàn bộ văn bản của câu trả lời đã bị xóa là " Trong thử nghiệm của tôi, hướng dẫn AVX512F trên GPU I9 (7900x) (GTX1080Ti) giúp tăng 28% 68s-> 48 giây trên CIFAR10 1000 lần lặp ". Thật không may, không có chi tiết (hoặc dấu câu, ngữ pháp hoặc định dạng).
Peter Cordes

2
Rõ ràng nếu bạn đang sử dụng máy Mac, nó sẽ không sử dụng GPU, stackoverflow.com/questions/46364917/ mẹo
Dent Arthur Dent

156

Cập nhật nhị phân căng thẳng cho CPU & HĐH của bạn bằng lệnh này

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

Url tải xuống của tập tin whl có thể được tìm thấy ở đây

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


1
Tôi đã thử trên Windows 10 wuth url stackoverflow.com/questions/47068709/ . Tôi gặp lỗi khi nói zipfile.BadZipFile: Tệp không phải là tệp zip
Doesitha Thilina Dayaratne

1
Nó hoạt động khi tôi tải xuống và sử dụng phiên bản đã tải xuống
Doesitha Thilina Dayaratne

1
bất cứ ai nhận được "lỗi nói zipfile.BadZipFile: Tệp không phải là tệp zip" nên lấy liên kết thô như đối với cuda9.2avx2, liên kết là github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/
Yeasin Ar Rahman

5
Đối với các cửa sổ, tôi đã thử điều này. Gỡ cài đặt tenorflow hiện tại bằng cách sử dụng "pip gỡ cài đặt tenorflow", sau đó cài đặt lại bằng "cài đặt pip <Đường dẫn đến tệp WHL đã tải xuống>". Tải tập tin WHL này vào máy tính của bạn - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/ , nếu bạn có 3.6 Python và các cửa sổ 64 bit (bỏ qua amd bạn thấy). Nếu không, điều hướng một bước trở lại trong github và tìm kiếm WHL chính xác. Nó hoạt động
King

3
Đã làm cho tôi. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - đã tải xuống whl và cài đặt. Hiện đang sử dụng một ví dụ aws p2.xLarge. Hiệu suất được cải thiện từ 16 giây mỗi lần lặp thành 9 giây cho bài tập phát hiện đối tượng tùy chỉnh với 230 lớp chạy trên Faster R-CNN.
mai

27

Tối ưu hóa CPU với GPU

Có những mức tăng hiệu suất mà bạn có thể nhận được bằng cách cài đặt TensorFlow từ nguồn ngay cả khi bạn có GPU và sử dụng nó để đào tạo và suy luận. Lý do là một số hoạt động TF chỉ có triển khai CPU và không thể chạy trên GPU của bạn.

Ngoài ra, có một số mẹo nâng cao hiệu suất giúp sử dụng tốt CPU của bạn. Hướng dẫn hiệu suất của TensorFlow khuyến nghị như sau:

Đặt các hoạt động đường ống đầu vào trên CPU có thể cải thiện đáng kể hiệu suất. Việc sử dụng CPU cho đường ống đầu vào sẽ giải phóng GPU để tập trung vào đào tạo.

Để có hiệu suất tốt nhất, bạn nên viết mã để sử dụng CPU và GPU để hoạt động song song và không đổ tất cả vào GPU nếu bạn có. Việc các nhị phân TensorFlow của bạn được tối ưu hóa cho CPU của bạn có thể trả hết thời gian chạy đã lưu và bạn phải thực hiện một lần.



12

Đối với Windows (Nhờ chủ sở hữu f040225), đi đến đây: https://github.com/fo40225/tensorflow-windows-wheel để lấy url cho môi trường của bạn dựa trên sự kết hợp của "tf + python + cpu_instruction_extension". Sau đó sử dụng cmd này để cài đặt:

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

Nếu bạn gặp phải lỗi "Tệp không phải là tệp zip", hãy tải xuống .whl về máy tính cục bộ của bạn và sử dụng cmd này để cài đặt:

pip install --ignore-installed --upgrade /path/target.whl

các GPU được chia thành các phần và được gắn nhãn là các tệp .7z. Làm thế nào để ghép chúng lại với nhau?
dùng3496060

@ user3496060 Tôi đã sử dụng winrar để giải nén các tệp bị chia
Alan Dursun

8

Nếu bạn sử dụng phiên bản pip của tenorflow, điều đó có nghĩa là nó đã được biên dịch và bạn chỉ đang cài đặt nó. Về cơ bản, bạn cài đặt tenorflow-gpu, nhưng khi bạn tải xuống từ kho lưu trữ và cố gắng xây dựng, bạn nên xây dựng nó với sự hỗ trợ CPU AVX. Nếu bạn bỏ qua nó, bạn sẽ nhận được cảnh báo mỗi khi bạn chạy trên cpu.


Làm thế nào tôi có thể tránh được lỗi này, những điều tôi cần phải làm theo?
jitsm555

2
Đây không phải là một lỗi. Đó là một cảnh báo rằng thensorflow không hỗ trợ AVX cho cpu. Nếu bạn không muốn xem nó, thì hãy tắt nó đi bằng cách đặt os.envir ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan

4

Cách dễ nhất mà tôi tìm thấy để khắc phục điều này là gỡ cài đặt mọi thứ sau đó cài đặt một phiên bản cụ thể của tenorflow-gpu:

  1. gỡ cài đặt tenorflow:
    pip uninstall tensorflow
  1. gỡ cài đặt tenorflow-gpu: (đảm bảo chạy nó ngay cả khi bạn không chắc chắn nếu bạn đã cài đặt nó)
    pip uninstall tensorflow-gpu
  1. Cài đặt phiên bản tenorflow-gpu cụ thể:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Bạn có thể kiểm tra xem điều này có hiệu quả không bằng cách thêm đoạn mã sau vào tệp 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")

Chạy tệp và sau đó đầu ra phải giống như thế này:

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

Hi vọng điêu nay co ich


ModuleNotFoundError: Không có mô-đun nào có tên 'tenorflow_hub'
D Adams

ModuleNotFoundError: Không có mô-đun nào có tên 'tenorflow_datasets'
D Adams

Hãy thử cài đặt các mô-đun riêng biệt: pip install tensorflow_hubpip install tensorflow_datasets
James Brett

yup -> chỉ cố gắng để có ích trong câu trả lời của bạn.
D Adams

Oh tôi không nhớ phải cài đặt riêng. Cảm ơn!
James Brett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.