ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Anaconda] tensorflow 사용 중 만난 세 가지 에러
    Programming (Others)/각종 에러 해결 일지 2022. 1. 26. 23:36

    ! 맨 아래에 결론이 있으니 그것만 보는 것을 추천 !

     

     

    실행 환경 : Windows

    1. assertion failed: [0] [Op:Assert] name: EagerVariableNameReuse 에러

    어제 오랜만에 Windows 환경에서 tensorflow를 작동시켰더니..... 에러가 났다.

     

    input

    model = Sequential([모델 모양 정의...])
    model.summary()

    output

    assertion failed: [0] [Op:Assert] name: EagerVariableNameReuse

    찾아보니 tensorflow 2.3에서만 나오는 에러라는 말도 있고... 동시에 tensorflow을 여러 개 돌리면 뜬다는 말도 있고...(근데 나는 해당 안됨) 여튼 정확한 원인과 해결 방법을 말해주는 글이 없었다.

    그래서 일단 내가 tensorflow 2.3을 사용 중이기에, 버전을 업데이트하면 해결될까 싶어서 구글링을 했고, 거기서 시키는 대로 명령어를 입력했다.

     

    # 아나콘다 자체를 업데이트
    conda update -n root conda
    # 패키지 업데이트
    conda update --all

     

    아니 근데 이렇게 업데이트를 해도 tensorflow 버전은 그대로 2.3이더라.. 왜지...

    여튼 다시 구동해보니 정상적으로 model의 summary가 출력이 되길래 다 해결된 줄 알았다!

    그러나... 또 다른 에러가 기다리고 있었으니...

     

    2. ImportError: No module named 'tensorflow_core.estimator' 에러

    Input

    model.compile(...)
    history = model.fit(.....)

    Output

    ImportError: No module named 'tensorflow_core.estimator'

    찾아 보니 패키지 tensorflow와 tensorflow-estimator의 버전이 안 맞으면 발생할 수 있는 에러라는데..... 난 두 모듈 다 버전이 일치하구요..?ㅠㅠ 그래서 이 참에 그냥 tensorflow와 그 부속품(-estimator, -gpu 등등)들을 싹 다 업데이트 하기로 결정함...

     

    원하는 패키지를 최신 버전으로 업데이트 하려면 다음과 같이 입력하면 된다.

     

    pip install [패키지명] --upgrade

     

    쨌든 저 명령어로 tensorflow를 (현재 글 쓴 시점에서) 최신 버전인 2.7.0버전으로 새로 다운로드 받았다.

     

    그 러 나 ..... 여기서 한 가지 불길한 플래그가 세워지는데..

     

    tensorflow 홈페이지에 나와있는, CUDA와 CuDNN 버전에 따른, 권장 텐서플로 버전.

    내 노트북은... GT940을 달고 있는 2016년산이기에... (바꿔야지 바꿔야지 하는데 돈이 없어서 못 바꾸는중... 그래도 의외로 아직까지도 잘 돌아가고 멀쩡하심. 뭐 외장 그래픽 있는 게 어디야) CUDA 버전이 10.1이란 말씀.. 그 이상으론 설치를 못한다는 말씀.. 그 말은 tensorflow-gpu를 2.3 이상으로는 못 올린다는 말씀.

     

    그래서 tensorflow 패키지만 2.7로 올리고, tensorflow-gpu는 2.3 버전으로 두었더니.. 이번엔 코드 첫 부분 임포트 부분에서 에러가 발생한다.

     

    3. cannot import name 'LayerNormalization' from 'tensorflow.python.keras.layers.normalization' 에러

    Input

    from tensorflow.keras.models import Sequential
    from tensorflow.keras.datasets import mnist
    어쩌구...

    Output

    cannot import name 'LayerNormalization' from 'tensorflow.python.keras.layers.normalization'

     

    하......

    역시 이 에러도 구글링을 해봐도 명확한 해결법이 없다. 일부 사람들은 tensorflow와 tensorflow-gpu 버전이 안 맞아서 그런 것이라고 추측 중.

     

    결국, 요약하면

    텐서플로 2.3 버전 유지 ==> 1, 2 에러 만남

    텐서플로만 2.7로 바꿈 ==> 3 에러 만남

     

     

    ★결론★

    결국 최후의 수단으로 tensorflow를 2.2로 다운그레이드 시켰다.

    pip uninstall tensorflow tensorflow-estimator tensorflow-gpu tensorflow-gpu0estimator
    pip install tensorflow==2.2 tensorflow-gpu==2.2

     

    그랬더니 코드가 멀쩡하게 돌아가는 것을 확인할 수 있었다.

    진작 이렇게 할 걸...^^;;

    그런데 리눅스에 깔려 있는 tensorflow 버전도 2.3인데... 왜 그건 멀쩡하게 작동되는건지 모를 일이다...

    그리고 윈도우에 깔려 있는 것도 2020년 말까지는 멀쩡하게 작동됐단말야... 막 CNN 만들어서 돌리고 그랬는데.. 흠.

     

     

    그래서, 결론의 결론.

    1. gpu 성능이 좋은 컴퓨터를 쓰자.

    2. C드라이브 용량이 빵빵한 컴퓨터를 쓰자. (이건 내가 패키지 설치하다가 용량 부족으로 다섯 번 넘게 팅겨서..)

    3. 그냥 다 필요없고.. 로컬에서 돌리지 말고 Colab을 쓰자.^^ㅜ

    4. 아니.. 그냥 RTX 빵빵하게 깔려 있는 랩실에 학부 연구생으로 들어가서 컴퓨터를 마음껏 쓰자. (과연 그게 '마음껏' 일까..?)

    댓글

Life is hard, so am I