source

CPU는 이 TensorFlow 바이너리를 사용하기 위해 컴파일되지 않은 명령을 지원합니다.AVX AVX2

lovecheck 2023. 1. 22. 22:34
반응형

CPU는 이 TensorFlow 바이너리를 사용하기 위해 컴파일되지 않은 명령을 지원합니다.AVX AVX2

최근에 텐서플로우(Windows CPU 버전)를 설치했는데 다음 메시지가 나타납니다.

텐서플로우-1.4.0 텐서플로우-텐서보드-0.4.0rc2 설치 완료

내가 도망치려 했을 때

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

(https://github.com/tensorflow/tensorflow)에서 찾았습니다.

저는 다음과 같은 메시지를 받았습니다.

2017-11-02 01:56:21.698935:I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137] CPU는 이 TensorFlow 바이너리를 사용하기 위해 컴파일되지 않은 명령을 지원합니다.AVX AVX2

하지만 내가 뛰었을 때

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

합니다.Hello, TensorFlow!설치는 성공했지만 다른 문제가 있음을 나타냅니다.

무엇이 문제인지, 어떻게 해결해야 하는지 알고 계십니까?

이 경고는 무엇에 관한 것입니까?

최신 CPU는 SSE2, SSE4, AVX 등 확장이라고 하는 일반적인 산술 및 논리 이외에 많은 하위 수준의 명령을 제공합니다.Wikipedia에서:

Advanced Vector Extensions (AVX)는 인텔이 2008년 3월에 제안한 인텔 및 AMD 마이크로프로세서용 x86 명령어 세트 아키텍처의 확장으로 2011년 1분기 출하된 Sandy Bridge 프로세서와 2011년 3분기 출하된 AMD와 2011년 3분기 출하된 불도저 프로세서가 지원되었습니다.AVX는 새로운 기능, 새로운 명령 및 새로운 코딩 방식을 제공합니다.

특히, AVX는 선형 대수 계산, 즉 도트 곱, 행렬 곱셈, 컨볼루션 등의 속도를 높이는 FMA(Fused Multiply-Acumulate) 연산을 도입한다.거의 모든 머신러닝 트레이닝에는, 이러한 조작이 많이 수반되기 때문에, AVX 와 FMA 를 서포트하는 CPU(최대 300 %)로 고속이 됩니다.이 경고는, 사용의 CPU가 AVX(hooay!)를 서포트하고 있는 것을 나타내고 있습니다.

여기서 강조하고 싶은 것은, 이 모든 것은 CPU에 관한 것입니다.

그럼 왜 안 쓰죠?

Tensorflow 디폴트 배포는 SSE4.1, SSE4.2, AVX, AVX2, FMA 등의 CPU 확장 없이 구축되기 때문입니다.디폴트 빌드(에서1개요pip install tensorflow한 한 되어 있습니다는 가능한 한 많은 CPU와 호환되도록 설계되어 있습니다., 이러한 확장 GPU에 및 됩니다.

어떻게 해야 할까요?

GPU 를 사용하고 있는 경우는, AVX 의 서포트에 신경 쓰지 말아 주세요.이것은, 대부분의 고가의 ops 는 GPU 디바이스로 디스패치 되기 때문입니다(명시적으로 설정하지 않는 한).이 경우 다음 방법으로 이 경고를 무시할 수 있습니다.

# Just disables the warning, doesn't take advantage of AVX/FMA to run faster
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

... 또는 설정에 의해export TF_CPP_MIN_LOG_LEVEL=2사용할 수 있습니다.텐서플로우는 정상적으로 동작하고 있습니다만, 이러한 귀찮은 경고는 표시되지 않습니다.


GPU가 없고 CPU를 최대한 활용하려면 CPU가 지원하는 경우 CPU에 최적화된 소스에서 AVX, AVX2, FMA를 사용하여 텐서플로우를 구축해야 합니다.이것은 이 질문에서 논의되었으며 GitHub에서도 논의되었습니다.Tensorflow는 bazel이라고 불리는 애드혹 빌드 시스템을 사용하며, 구축은 그리 간단하지 않지만 확실히 실행 가능합니다.그 후에는 경고가 사라질 뿐만 아니라 텐서플로우 성능도 개선되어야 한다.

이 명령어를 사용하여 CPU와 OS의 텐서플로우 바이너리를 갱신합니다.

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

whl 파일의 다운로드 URL은 여기에서 찾을 수 있습니다.

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

GPU에 의한 CPU 최적화

GPU를 사용하여 훈련 및 추론에 사용하는 경우에도 소스에서 TensorFlow를 설치하면 성능이 향상됩니다.그 이유는 일부 TF 작업은 CPU만 구현되어 GPU에서 실행할 수 없기 때문입니다.

또, CPU 를 유효하게 사용하는 퍼포먼스 향상에 관한 힌트도 있습니다.TensorFlow의 성능 가이드에서는 다음 사항을 권장합니다.

CPU에 입력 파이프라인 작업을 배치하면 성능이 크게 향상될 수 있습니다.입력 파이프라인에 CPU를 사용하면 GPU는 훈련에 집중할 수 있습니다.

최고의 퍼포먼스를 얻으려면 CPU와 GPU를 동시에 사용하기 위해 코드를 작성하고 GPU에 모든 것을 덤프하지 않도록 해야 합니다.TensorFlow 바이너리를 CPU에 최적화하면 몇 시간 동안 절약된 실행 시간을 회수할 수 있으므로 한 번 실행해야 합니다.

Windows 의 경우는, AVX2 로 컴파일 된 TensorFlow 휠의 인텔 MKL공식 최적화를 확인할 수 있습니다.이 솔루션은 내 추론 속도를 최대 3배 향상시킵니다.

conda install tensorflow-mkl

Windows(소유자 f040225 덕분)의 경우는, 다음의 URL 에 액세스 해, 「tf + python + cpu_instruction_disc」의 편성에 근거해 사용의 환경의 URL 를 취득합니다.그런 다음 이 cmd를 사용하여 설치합니다.

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

"File is not zip file" 오류가 발생할 경우 .whl을 로컬 컴퓨터에 다운로드하고 이 cmd를 사용하여 다음을 설치합니다.

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

Tensor Flow의 pip 버전을 사용하면 이미 컴파일되어 설치 중임을 의미합니다.기본적으로는 TensorFlow-GPU를 설치하지만 저장소에서 다운로드하여 구축하려고 할 때는 CPU AVX 지원을 사용하여 구축해야 합니다.이를 무시하면 CPU에서 실행될 때마다 경고가 표시되므로 이러한 경고도 확인할 수 있습니다.

SSE4.2 및 AVX를 사용하여 Tensorflow를 컴파일하는 적절한 방법

텐서플로우에서의 AVX CPU 지원이란

이 문제를 해결하는 가장 쉬운 방법은 모든 것을 제거한 후 tensorflow-gpu의 특정 버전을 설치하는 것입니다.

  1. 언인스톨 텐서플로우 제거
    pip uninstall tensorflow
  1. uninstall tensorflow-flow: (설치되었는지 확실하지 않은 경우에도 반드시 실행해 주세요)
    pip uninstall tensorflow-gpu
  1. 특정 tensorflow-gpu 버전을 설치합니다.
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

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

파일을 실행하면 다음과 같이 출력됩니다.

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

도움이 되었으면 좋겠다

나에게 효과가 있었던 것은 이 도서관이다.https://pypi.org/project/silence-tensorflow/

이 라이브러리를 설치하고 페이지의 지시대로 하면 마법처럼 작동합니다!

아나콘다를 사용해 보세요.저도 같은 실수를 했어요.한 가지 방법은 오랜 시간이 걸리는 소스로부터 텐서플로우를 구축하는 것이었습니다.콘다를 써봤는데 효과가 있었어요.

  1. 아나콘다에 새로운 환경을 조성합니다.
  2. conda install -c conda-forge tensorflow

그리고 효과가 있었다.

그는 누군가가 삭제한 목록을 제공했지만 정답은 패키지 목록 다운로드입니다.

출력:

F:\temp\Python>python test_tf_logics_.py
[0, 0, 26, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0]
[ 0  0  0 26 12  0  0  0  2  0  0  0  0  0  0  0  0]
[ 0  0 26 12  0  0  0  2  0  0  0  0  0  0  0  0  0]
2022-03-23 15:47:05.516025: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-03-23 15:47:06.161476: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 10 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1
[0 0 2 0 0 0 0 7 0 0 0 0 0 0 0 0 0]
...

출력 화면

메시지에서 알 수 있듯이 CPU는 TensorFlow 바이너리를 사용하기 위해 컴파일되지 않은 명령을 지원합니다.TensorFlow의 CPU 버전에서는 AVX(Advanced Vector Extensions) 명령이 실행되지 않으므로 이 문제는 발생하지 않습니다.단, TensorFlow는 코드의 일부에서 AVX 명령을 사용하고 있으며 메시지는 경고에 불과하므로 무시해도 무방합니다.AVX 명령을 사용하여 자체 버전의 TensorFlow를 컴파일할 수 있습니다.

언급URL : https://stackoverflow.com/questions/47068709/your-cpu-supports-instructions-that-this-tensorflow-binary-was-not-compiled-to-u

반응형