본문 바로가기

프로그래밍/AI:ML:DL

[TENSORFLOW] cpu버전 tensorflow 1.6 이상에서 DLL 초기화 루틴을 실행할 수 없습니다 에러.

반응형

cpu버전의 tensorflow 를 윈도우 피씨(한국어 윈도우 10)에 설치해서 잘 테스트해 보고 있었다. 

그런데, 오늘 tensorflow 를 다시 설치하고, 테스트 하려 하였더나, import tensorflow as tf 문에서 에러가 발생했다.

에러 메시지는 대략 다음과 같았다.


  File "", line 994, in _gcd_import

  File "", line 971, in _find_and_load

  File "", line 955, in _find_and_load_unlocked

  File "", line 658, in _load_unlocked

  File "", line 571, in module_from_spec

  File "", line 922, in create_module

  File "", line 219, in _call_with_frames_removed

ImportError: DLL load failed: DLL 초기화 루틴을 실행할 수 없습니다.



During handling of the above exception, another exception occurred:



Traceback (most recent call last):

  File "D:\Python3664\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in 

    from tensorflow.python.pywrap_tensorflow_internal import *

  File "D:\Python3664\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 17, in 

    _pywrap_tensorflow_internal = swig_import_helper()

  File "D:\Python3664\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 16, in swig_import_helper

    return importlib.import_module('_pywrap_tensorflow_internal')

  File "D:\Python3664\lib\importlib\__init__.py", line 126, in import_module

    return _bootstrap._gcd_import(name[level:], package, level)

ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

보통 DLL load failed 에러는 vc 2015 재배포 패키지가 깔리지 않았을 때 발생하는 것이어서, 확인해 보았는데, 프로그램 기능에 재배포 패키지는 잘 설치되어 있는 것으로 나와 있었다. 혹시 윈도우 업데이트가 일어나면서, 재배포 패키기 설치가 망가졌나 생각했었는데, 다시 설치하고 하는 것은 약간 리스크가 컸다.

(그리고, 나중에 확인하니, 재배포 패키지가 설치되지 않았을 때에는 메시지가 비슷하지만, 조금 다르다. "DLL load failed: 지정된 모듈을 찾을 수 없습니다."로 나온다.)


그래서, 혹시 최근에 업데이트된 tensorflow 1.8 이 문제인가 생각해서, 1.7 로 버전을 낮추어 다시 테스트 해 보았다. ( pip install "tensorflow<1.7" ) 하지만 여전히 동일한 에러.


구글링을 해 보니, stackoverflow 에 CPU의 AVX 인스트럭션 지원 때문에 문제일 수 있다는 글이 보였다. 즉, tensorflow 1.6 부터는 패키지 빌드시에 AVX 지원을 활성화해서 빌드하였고, 따라서 AVX 를 지원하지 않는 CPU에서는 빌드된 pip tensorflow 패키지는 동작에 문제가 발생한다.

https://stackoverflow.com/questions/49932993/importerror-dll-load-failed-a-dynamic-link-library-dll-initialization-routin

https://github.com/tensorflow/tensorflow/issues/17386


그래서, tensorflow 를 다시 1.6 아래로 다운시켜 ( pip install "tensorflow<1.6" ) 실행해 보니, import tensorflow as tf 가 성공했다. 

그리고, 내 피씨의 Celeron CPU의 지원을 확인해 보니, http://www.cpu-world.com/CPUs/Celeron_Dual-Core/Intel-Mobile%20Celeron%202957U.html 아니나 다를까 AVX 기능을 지원하지 않는 것으로 나타났다. 조금 오래된 노트북을 사용하는 경우 문제를 만날 수 있겠다. 아이고, 이 피씨에서는 최신버전의 tensorflow 테스트는 못하겠네.


----

18년 6월 11일 추가

다행히도 아나콘다 배포판에 포함된 tensorflow 패키지는 위와 같은 에러가 발생하지 않는다. 모든 버전에 대해 그런 것인지는 모르겠지만, 테스트한 윈도우 아나콘다의 다음과 같은 버전의 패키지는 위와 같은 문제가 발생하지 않았다.

tensorflow                1.8.0                         0
tensorflow-base           1.8.0            py36h1a1b453_0

19년 3월 27일 추가

다른 방법으로는 https://github.com/fo40225/tensorflow-windows-wheel 에서 원하는 버전에 맞는 AVX 인스트럭션이 비활성화되어 빌드된 설치 바이너리 파일을 찾아서, 다운로드하여 pip install <다운로드한 tensorflow whl 파일> 명령으로 설치하여 테스트해 볼 수있겠다.

728x90