AVX(Advanced Vector Extensions, 고급 벡터 확장)는 'Sandy Bridge New Extensions'라고도 불리는 x86 명령어 집합 아키텍처의 확장 기술입니다. 인텔이 2008년 3월에 제안했으며, 인텔은 2011년 1분기에 출시된 샌디브리지(Sandy Bridge) 프로세서에서 처음 지원했고, 이후 AMD도 2011년 3분기에 출시된 불도저(Bulldozer) 프로세서에서 이를 지원했습니다. AVX는 새로운 기능과 명령어, 그리고 새로운 코딩 방식을 제공합니다.

이 경고 메시지는 TensorFlow의 공유 라이브러리에서 출력되는 것입니다. 메시지에서 알 수 있듯이, 현재 사용 중인 공유 라이브러리에는 사용자의 CPU가 지원하는 명령어가 포함되어 있지 않다는 의미입니다.
이 경고의 원인은 무엇인가요?
TensorFlow 1.6 버전부터 공식 배포되는 바이너리는 AVX 명령어를 사용하도록 빌드되었기 때문에, 구형 CPU에서는 더 이상 정상적으로 실행되지 않을 수 있습니다. 즉, 구형 CPU에서는 AVX를 실행할 수 없으며, 신형 CPU라 하더라도 자신의 CPU에 맞는 최적화된 성능을 원한다면 TensorFlow를 소스에서 직접 빌드해야 합니다. 아래에서는 이 경고에 대해 반드시 알아야 할 정보와, 향후 이 경고를 제거하는 방법까지 함께 소개합니다.
AVX는 어떤 역할을 하나요?
특히 AVX는 FMA(Fused Multiply-Add, 융합 곱셈-덧셈) 연산을 도입했습니다. FMA는 부동소수점 곱셈-덧셈 연산을 단 한 번의 단계로 처리하는 기능으로, 다양한 연산의 속도를 크게 향상시킵니다. 덕분에 대수 계산이 더욱 빠르고 간편해지며, 내적(dot product), 행렬 곱셈(matrix multiplication), 합성곱(convolution) 등의 연산 성능도 개선됩니다. 이러한 연산들은 모든 머신러닝 학습 과정에서 가장 많이 사용되는 핵심 연산들입니다. 따라서 AVX와 FMA를 지원하는 CPU는 구형 CPU보다 훨씬 빠른 성능을 발휘합니다. 참고로 이 경고는 사용자의 CPU가 AVX를 지원한다는 사실을 알려주는 것이므로, 오히려 좋은 신호라고 볼 수 있습니다.

왜 기본적으로 활성화되어 있지 않나요?
그 이유는 TensorFlow의 기본 배포판이 CPU 확장 기능(AVX, AVX2, FMA 등) 없이 빌드되기 때문입니다. 이 문제를 유발하는 명령어들은 기본 빌드에서 의도적으로 비활성화되어 있습니다. 이렇게 하는 이유는 최대한 다양한 CPU와의 호환성을 확보하기 위해서입니다. 또한 이러한 확장 기능은 CPU에서 실행할 경우 GPU에 비해 상당히 느린 편입니다. 일반적으로 CPU는 소규모 머신러닝 작업에 적합하며, 중·대규모 머신러닝 학습에는 GPU 사용이 권장됩니다.
경고 해결 방법
사실 이러한 경고는 단순한 안내 메시지일 뿐입니다. 이 경고의 목적은 소스에서 직접 빌드한 TensorFlow가 해당 머신에서 더 빠르게 동작할 수 있음을 알려주는 것입니다. 즉, 이 경고들이 전달하려는 핵심은 '자신의 CPU에 맞게 TensorFlow를 소스에서 직접 빌드하면 된다'는 것입니다.
먼저, 머신에 GPU가 장착되어 있다면 AVX 관련 경고는 무시해도 됩니다. 연산 비용이 가장 큰 작업들은 GPU 장치에서 처리되기 때문입니다. 만약 이 오류 메시지를 더 이상 보고 싶지 않다면, 아래 코드를 추가하여 간단히 숨길 수 있습니다.
메인 프로그램 코드에 OS 모듈을 임포트하고 환경 변수 매핑 객체를 설정합니다.
# 경고 비활성화
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
반면 Unix 환경이라면 bash 셸에서 export 명령어를 사용하세요.
export TF_CPP_MIN_LOG_LEVEL=2
하지만 GPU가 없고 CPU 성능을 최대한 끌어내고 싶다면, AVX, AVX2, FMA 옵션을 활성화하여 자신의 CPU에 최적화된 TensorFlow를 소스에서 직접 빌드하는 것이 가장 좋은 해결책입니다.