tensorflow 버전 호환 문제(GPU 인식)

데이터 여행자·2021년 3월 18일
1

BERT에 대한 프로젝트를 하다가 모델 학습이 오래 걸리는 문제가 있었다.

nvidia-smi

위의 코드를 터미널에 쳐서 확인해 보았더니 GPU를 전혀 사용하지 못하고 있었다. 오후 오프닝에서 퍼실님들께서 도움을 주셔서 tensorflow를 지우고 다시 설치하고 나니 문제가 해결되었다.

문제의 원인

GPU를 사용하지 못하고 있었던 이유는 tensorflow 버전 호환 문제였다. 원래 깔려 있었던 tensorflow의 버전이 2.2.0였는데, 어제의 노드를 할 때는 2.4.0을 사용해야 했다. 그래서 tensorflow를 2.4.0으로 깔아주었다. 그리고 오늘 다시 GPU를 사용해서 학습을 하려고 하니 tensorflow 버전 충돌 현상이 일어난 것이다.

해결 방법

이 문제의 해결 방법은 모든 tensorflow를 다 지우고 다시 설치하는 것이다. 그 방법은 아래와 같다.

  1. 설치된 tensorflow 리스트를 본다. (아래의 리스트는 문제를 해결한 후 캡쳐한 것이기 때문에 버전이 동일하다. 그러나 문제가 발생했을 때는 버전이 서로 달랐다.)

conda list tensorflow

  1. 위의 그림에서 Build 아래 부분에서 pypi로 적힌 것은 pip uninstall (이름)으로, 나머지는 conda uninstall (이름)으로 삭제한다.
pip uninstall tensorflow
conda uninstall tensorflow-estimator
conda uninstall tensorflow
conda uninstall tensorflow-gpu
conda uninstall tensorflow-addons

(tensorflow와 tensorflow 외에 깔린 것의 버전이 다르면 충돌이 생기기 때문에 다 지워주어야 한다.)

  1. tensorflow를 다시 설치한다.

conda install tensorflow-gpu

  • 2.2.0을 깔고 싶다면 아래의 코드를 친다.

conda install tensorflow-gpu==2.2.0

  1. 아래를 쥬피터 노트북에 쳐서 gpu list가 나오는지 확인한다. (슬랙에서 가져왔음. 감사합니다.)
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices(device_type="GPU")
tf.config.experimental.set_visible_devices(devices=gpus[0], device_type="GPU")
tf.config.experimental.set_memory_growth(device=gpus[0], enable=True)

결론

tensorflow와 연관된 패키지들의 버전을 맞춰 주어야 GPU를 제대로 사용할 수 있다. 그러므로 tensorflow와 연관된 패키지와 tensorflow 버전이 동일한지, 그리고 tensorflow의 버전과 대응되는 버전인지 반드시 확인을 해야 한다. 아래의 그림에서 보면 각 버전이 서로 동일한 것을 확인할 수 있다. (tensorflow-addons 제외)

tensorflow-addons의 경우는 아래와 같이 tensorflow 버전에 따라 깔아야 하는 버전이 다르다. tensorflow와 tensorflow_addons의 버전 호환성을 통하여 현재 깔려있는 tensorflow의 버전과 대응되는 버전을 설치하면 된다.

tensorflow = 2.2.0 -> tensorflow-addons = 0.11.0
tensorflow = 2.4.1 -> tensorflow-addons = 0.12.1

그러나 가장 근본적인 해결 방법은 가상환경을 하나 더 만들어서 사용하는 것이다. 버전이 다른 tensorflow를 동시에 사용하기 위해서는 새로운 가상환경을 만들어서 버전 충돌이 일어나지 않도록 하는 것이 좋다.

1개의 댓글