TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 딥러닝, 신경망>

[텐서플로우 설치] X고생한 텐서플로우 import 성공기

by 기록자_Recordian 2024. 9. 7.
728x90
반응형

지금 이 글은 나와 비슷한 상황을 겪고 있는 분들을 위해서,

그리고 회사 컴퓨터(월급루팡...)와 집 노트북 (또 미래의 새 노트북 구입) 2가지로 파이썬을 하고 있는 필자를 위해 남겨두는 기록이다.

이미지 분류 CNN 딥러닝 모델을 구현하기 위해 텐서플로우 설치 및 import 가 필수적이었다.

 

[머신러닝] 텐서플로우(TensorFlow)란?

텐서플로우(TensorFlow)란? 텐서플로우(TensorFlow)는 구글에서 개발한 오픈소스 머신러닝 프레임워크이다. 주로 딥러닝 모델을 만들고 학습시키는 데 사용되며, 다양한 플랫폼에서 실행이 가능하다.

puppy-foot-it.tistory.com

 

텐서플로우 설치는 쉬우나, 이를 import 하는데 각종 에러가 난무하였다.

에러1을 해결하면, 에러2라는 새로운 에러가 나오고, 이를 해결하면 또 에러3... 끝없는 에러의 연속이었다.

 

대표적인 에러로는,

1) 'ImportError: DLL 초기화 루틴을 실행할 수 없습니다.'

2) import tensorflow as tf 명령어 입력 시, TypeError: unhashable type: 'list'

3) TypeError: unhashable type: 'list'

4) TypeError: Descriptors cannot be created directly.

 

등이 있었다. (물론, 그 외에도 수많은 오류가 있었으나 기억이 다 나질 않는다.)


해결 방법

 

아무튼, 어떻게 해결했는지는 몇 시간 동안 메달렸었기에 따로 기록을 남겨두진 않았으나,

대표적으로는

 

1) 파이썬 버전을 3.9 버전으로 낮춤

기존에 pc에 설치되어있는 파이썬 3.12 버전이었기 때문에 텐서플로우 지원이 안 되었던 걸로 보인다. (하단 이미지 확인)

출처: 텐서플로우 공식 홈페이지

 

 

TensorFlow

시스템에 TensorFlow를 설치하는 방법을 알아봅니다. pip 패키지를 다운로드하거나 Docker 컨테이너에서 실행하거나 소스에서 빌드합니다. 지원되는 카드에서 GPU를 사용 설정합니다.

www.tensorflow.org

 

 

따라서, 3.12 버전을 삭제 후 (제어판), 3.9 버전을 다시 설치해줬다.

 

Python Release Python 3.9.0

The official home of the Python Programming Language

www.python.org

 

★ 설치 후에 시스템 환경 변수 편집은 필수이다. 아마 기존에 등록한 환경 변수 path 에서 뒤의 312(기존 버전)를 39로만 바꾸면 될 것이다.

 

2) 실행은 아나콘다 주피터 노트북이 아닌, vs code 에서

회사에서 파이썬을 3.9로 다운그레이드하여 설치했음에도 주피터 노트북으로 텐서플로우를 import 했을 때 여전히 'dll 초기화 루틴' 관련 에러 메시지가 계속 떴다.

anaconda prompt에서 파이썬 버전을 확인해보면 계속 3.17 버전이 떴었다. 뭐 정확한 이유는 모르겠으나, 대충 주피터 노트북은 웹을 기반으로 실행되는.... 은 잘 모르겠고,

챗gpt에 물어보니

가상 환경(venv, conda 등): Jupyter용 특정 Python 버전으로 가상 환경을 설정했을 수 있지만 터미널에서는 전역 Python 버전을 사용합니다.
Conda 환경: Anaconda를 사용하는 경우 각 환경은 자체 Python 버전을 가질 수 있으며 Jupyter는 터미널과 다른 환경에서 실행될 수 있습니다.

 

아무튼, 버전이 달라서 그냥 vs code에서 사용해보기로 했다.

 

3) 텐서플로우 버전 다운 그레이드

vs code 터미널에서 pip install tensorflow 를 입력하여 텐서플로우를 설치한 후, import 하니 이번엔 다른 에러메시지가 떴다.

TypeError: unhashable type: 'list'

 

이 문제를 해결하는 데 역시 조금 시간이 걸렸다.

원인 이런 거 생략하고, 해결책만 얘기하면 텐서플로우 버전을 현재의 파이썬 버전과 호환되는 버전으로 재설치를 해주면 된다.

기존에 설치되어있는 텐서플로우를 삭제하고, 현재의 파이썬 버전이 3.9 버전이므로, 이에 맞는 텐서플로우 버전을 설치해주면 된다.

 

[먼저 기존 텐서플로우 삭제]

pip uninstall tensorflow

 

[현재 설치된 파이썬 버전과 동일한 텐서플로우 버전 확인]

 

[호환되는 버전의 텐서플로우 재설치]

pip install tensorflow==2.7.0

 

관련 패키지 역시 버전에 맞게 재설치 되었다.

 

4) protobuf 패키지 버전 다운그레이드

 

이제 다 해결되었겠구나 하며 import tensorflow as tf 를 입력하였으나, 새로운 에러 메시지를 받았다.

TypeError: Descriptors cannot be created directly.

 

이를 검색해보니,

최신 버전의 protobuf는 텐서플로와 충돌할 수 있기 때문에, 3.20.x 이하 버전으로 다운그레이드하면 문제를 해결할 수 있습니다.

 

라는 답변을 받아서 protobuf 를 다운그레이드 하였다. 이 과정에서도 몇 번 오류가 있긴 했는데, 생략하겠다.

pip install protobuf==3.20.3

 

여기까지 하고나서, 텐서플로우를 import 해보니

 

import가 잘 되었다.

 

 

+ 추가!!

여기까지 했음에도, 만약 아래와 같은 에러 메시지를 받는다면

TypeError: Unable to convert function return value to a Python type! The signature was
        () -> handle

 

아래의 명령어를 통해 변경된 numpy 버전을 설치하면 된다. 

pip install numpy==1.22

 

 

★ 터미널에 나타난 경고 메시지 안내

2024-09-07 10:31:35.813521: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll not found
2024-09-07 10:31:35.813756: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
이 경고 메시지는 TensorFlow가 CUDA 관련 파일(cudart64_110.dll)을 로드하려고 했지만, 해당 파일을 찾지 못했기 때문에 발생하는 문제입니다. 이는 주로 GPU 환경에서 TensorFlow를 사용할 때 발생합니다.

상황 분석
- GPU 사용 환경이 아닌 경우: 만약 GPU를 사용하지 않거나 GPU 드라이버 및 CUDA가 설치되어 있지 않다면, 이 경고 메시지는 무시해도 됩니다. TensorFlow는 CPU 모드로 실행되며, 경고가 발생해도 정상 작동합니다.

- GPU를 사용하고자 할 경우: GPU를 사용하려고 하지만, CUDA 및 cuDNN 설치가 제대로 이루어지지 않은 경우라면 해당 라이브러리와 드라이버를 올바르게 설치해야 합니다.

 

어쨌든, 현재로써는 텐서플로우 실행 시에 GPU를 사용하지 못하긴 하나, CPU를 사용하는 데는 문제가 없다는 얘기다. 

GPU를 써야하는 상황에서는 그때 또 해결하면 된다.

 

그리고 참고로,

AVX 미지원, CUDA, 인텔 프로세서 식별 유틸리티, visual c++, vc_redist.x64.exe. 다운로드 등

구글링에서 나온 다양한 해결책을 다 따라해봤지만 전부 실패했다.

나와 같은 상황을 겪은 이들에게 도움이 됐으면 좋겠다

728x90
반응형