텐서플로우 실행 오류 경고 해결 방법


텐서플로우 실행 오류 경고 해결 방법
텐서플로우(Tensorflow)를 실행하는 환경에서 발생할 수 있는 오류 및 경고등 해결 방법 대해서 정리하였습니다. Tensorflow Illegal instruction (core dumped), Aborted (core dumped), DeprecationWarning, RuntimeError 등 에러 및 오류에 대해 설명드립니다.

실행오류

만약 우분투에서 텐서플로우를 실행하는 과정중에서 아래와 같은 오류가 발생하는 경우입니다.

Illegal instruction (core dumped)

위의 에러가 아닌 Aborted (core dumped) 에러 메시지가 나나탈 수도 있습니다. 먼저 설치한 텐서플로우의 버전이 1.6 이상인지 확인해 주시기 바랍니다. 버전 1.6 부터 달리진 점 중에 하나가, CPU에서 사용되는 명령어중 AVX가 사용되도록 빌드가 된 것입니다.

만약 CPU에서 AVX 명령어가 지원되지 않는다면, 올바르지 않은 명령어라는 위의 같은 오류가 발생하게 됩니다.
현재 사용하고 있는 CPU에서 AVX 가 지원되는지 확인 하기 위해서는 아래와 같은 명령어를 실행합니다.

$ grep avx /proc/cpuinfo

위의 명령어를 실행하여 아무런 내용도 나타나지 않는다면, AVX가 지원되지 않는 CPU입니다. 설치 명령어로 최신버전의 텐서플로우를 설치하셨을 경우 위와 같은 에러가 발생 할 것입니다.

만약 AVX가 지원될 경우 아래와 비슷한 내용이 나타날 것입니다.

flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single kaiser fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt

AVX를 지원하지 않는 경우, 설치된 현재 버전의 텐서플로우를 삭제하고 다운그레이드를 하거나 직접 빌드할 수도 있습니다.
텐서플로우를 직접 빌드하는 내용은 다음 글을 참고해 주시기 바랍니다.

텐서플로우 소스코드 빌드 방법

정보 안내

Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

만약 텐서플로우를 실행하는 과정에서 위와 비슷한 내용은 오류나 경고가 아닌 안내 메세지입니다. 사용하고 계신 시스템에서 AVX2, FMA 등 명령어를 지원하지만 설치된 텐서플로우에서는 해당 명령어를 사용하지 않도록 빌드가 된 버전이 설치 되었다는 안내입니다.

위의 명령어가 사용될 경우 텐서플로우의 성능을 높을 수 있으며, 위의 CPU 를 이용하는 텐서플로우를 사용하기 위해서는 직접 빌드를 하셔야 합니다. 아래의 페이지를 참고하셔서 직접 빌드 하실 수 있습니다.

텐서플로우 소스코드 빌드 방법

DeprecationWarning

텐서플로우를 실행하는 과정에서 다음과 같은 경고가 출력되는 경우입니다.

/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.py:560: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
  return np.fromstring(tensor.tensor_content, dtype=dtype).reshape(shape)

위와 같은 메시지는 텐서플로우 내부에서 numpy 함수를 호출하는 과정에서 발생하는 경고 메세지 입니다.
텐서플로우에서 numpy의 fromstring 라는 함수를 사용하고 있는데, 사용하고 있는 함수가 아닌 frombuffer 라는 함수를 사용하길 권장하는 내용입니다.

조금 더 자세히 설명을 드리면 numpy 1.14 버전 부터 fromstring 함수에서 sep 값이 전달되지 않으면 경고 메세지가 나타납니다.

https://pypi.python.org/pypi/tensorflow

위의 페이지에 접속하면, 텐서플로우에서 사용하고 있는 numpy 버전을 확인 할 수 있고, 아래의 명령어를 통해서 시스템에 설치된 텐서플로우 버전을 확인 할 수 있습니다.

python -c "import numpy; print numpy.version.version;"

현재 설치된 numpy 버전을 삭제하고 설치요구사항에 맞는 numpy 버전을 설치해 주시면 실행시 발생하는 경고를 없앨 수 있습니다.
아래의 명령어를 이용하여, 시스템에 설치된 numpy를 삭제하고 특정한 버전으로 다시 설치 할 수 있습니다.

pip uninstall numpy
pip install numpy==버전

RuntimeError

런타임에러의 경우 여러가지 형태의 에러가 발생할 수 있습니다. 먼저 아래의 에러 메세지를 설명드리도록 하겠습니다.

RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb

위의 에러 메세지는 빌드가 될 때에 사용된 numpy 버전과 실제 텐서플로우가 실행될 때의 버전이 다르다는 뜻입니다. 현재 설치된 numpy 버전정보를 업그레이드 하시거나 텐서플로우 소스코드 빌드를 현재 환경에 맞게 다시 빌드해 주시면 됩니다.

RuntimeWarning

텐서플로우와 관련이 없지만, 함께 사용되는 라이브러리 중에서 scipy 또는 h5py 등에서 실행 경고가 나타날 수 있습니다.

RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88

위와 비슷한 numpy.dtype size changed, may indicate binary incompatibility. 경고가 나타날 경우 아래 명령어를 이용하여 numpy를 특정 버전으로 설치 해주시기 바랍니다. numpy와 함께 추가로 setuptools에 대해 버전도 맞춰주셔야 할 수도 있습니다.

$ pip install numpy==1.14.5 --upgrade
$ pip install setuptools==39.1.0 --upgrade
본문 내용 인용시에는 출처를 밝혀 주시기 바랍니다.