즐겁게!! 자신있게!! 살아보세!!

재밌는 인생을 위하여! 영촤!

AI/Deep Learning

[DL] 딥러닝 서버 구축 2편: TensorFlow와 CUDA 버전 충돌 해결하기

Godwony 2020. 4. 6. 18:11
반응형

딥러닝 서버 구축 2편: TensorFlow와 CUDA 버전 충돌 해결하기

🚨 문제 해결: TensorFlow GPU 2.0에서 CUDA 10.2와 10.0 버전 충돌 문제를 완벽하게 해결하는 방법을 알아보세요. 실제 오류 메시지와 단계별 해결 과정을 공유합니다.

 

안녕하세요!

 

이전 포스팅에서 게임용 PC를 딥러닝 서버로 전환하는 방법에 대해 알려드렸는데요. 오늘은 그 과정에서 발생한 몇 가지 문제점과 해결 방법에 대해 더 자세히 공유하려고 합니다.

발생했던 주요 문제: TensorFlow와 CUDA 버전 불일치

딥러닝 서버를 구현하면서 가장 골치 아팠던 문제는 TensorFlow와 CUDA의 버전 불일치 였습니다. TensorFlow 공식 홈페이지 확인 결과, TensorFlow-GPU 2.0을 사용하려면 반드시 CUDA 10.0 버전이 필요합니다.

 

문제의 원인: 자동으로 설치된 CUDA 10.2

최신 NVIDIA 드라이버를 설치했더니 의도치 않게 CUDA 10.2 버전이 함께 설치되었습니다. 이로 인해 Jupyter Notebook 서버를 실행할 때 다음과 같은 오류 메시지가 발생했습니다:

2020-04-06 12:01:23.253018: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcudart.so.10.0'; dlerror: libcudart.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64
2020-04-06 12:01:23.253149: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcublas.so.10.0'; dlerror: libcublas.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64
2020-04-06 12:01:23.253261: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcufft.so.10.0'; dlerror: libcufft.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64
2020-04-06 12:01:23.253373: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcurand.so.10.0'; dlerror: libcurand.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64
2020-04-06 12:01:23.253481: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcusolver.so.10.0'; dlerror: libcusolver.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64
2020-04-06 12:01:23.253587: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcusparse.so.10.0'; dlerror: libcusparse.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64
2020-04-06 12:01:23.259616: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-04-06 12:01:23.259663: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1641] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices…
2020-04-06 12:01:23.259702: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-04-06 12:01:23.259721: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165]      0
2020-04-06 12:01:23.259737: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0:   N

 

문제 분석: 누락된 라이브러리 파일들

오류 메시지를 분석해보니 다음 6개의 CUDA 10.0 라이브러리 파일이 없어서 발생한 문제였습니다:

  1. libcudart.so.10.0
  2. libcublas.so.10.0
  3. libcufft.so.10.0
  4. libcurand.so.10.0
  5. libcusolver.so.10.0
  6. libcusparse.so.10.0

해결 방법: CUDA 10.2에서 10.0으로 다운그레이드

문제를 해결하기 위해 기존에 설치된 CUDA 관련 파일들을 모두 삭제하고, CUDA 10.0 버전으로 다시 설치했습니다. 아래는 전체 해결 과정입니다.

STEP 1: 기존 CUDA 제거하기

# CUDA와 관련 패키지 제거

$ sudo apt-get --purge remove "cublas*" "cuda*"
$ sudo apt-get --purge remove "nvidia*"

 

# CUDA 관련 디렉토리 삭제

$ sudo rm -rf /usr/local/cuda*
$ sudo rm -rf /usr/lib/x86_64-linux-gnu/libcuda*
$ sudo rm -rf /usr/lib/x86_64-linux-gnu/libnvidia*

 

STEP 2: 시스템 업데이트 및 필요 패키지 설치

$ sudo apt-get update
$ sudo apt-get install build-essential dkms
$ sudo apt-get install freeglut3 freeglut3-dev libxi-dev libxmu-dev

 

STEP 3: CUDA 10.0 설치

# CUDA 10.0 다운로드 및 설치

$ wget https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux
$ sudo sh cuda_10.0.130_410.48_linux

 

# 설치 중 다음 옵션 선택:

# - 드라이버 설치: No (이미 설치된 상태)

# - CUDA Toolkit 설치: Yes

# - CUDA Samples 설치: Yes

 

STEP 4: cuDNN 7.6.2 설치

NVIDIA 개발자 사이트에서 cuDNN 7.6.2를 다운로드하여 설치합니다.

# cuDNN 압축 해제 후 라이브러리 복사

$ tar -xzvf cudnn-10.0-linux-x64-v7.6.2.24.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

 

STEP 5: 환경 변수 설정

$ echo 'export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
$ echo 'export CUDA_HOME=/usr/local/cuda-10.0' >> ~/.bashrc
$ source ~/.bashrc

 

결과: 성공적인 문제 해결

CUDA 10.2를 10.0 버전으로 다운그레이드한 후에는 이전에 발생했던 라이브러리 로드 오류가 더 이상 발생하지 않았습니다!



배운 점: 버전 호환성의 중요성

이번 경험을 통해 딥러닝 프레임워크와 관련 라이브러리 간의 버전 호환성이 얼마나 중요한지 다시 한번 깨달았습니다. 특히 TensorFlow, CUDA, cuDNN과 같은 복잡한 소프트웨어 스택을 다룰 때는 공식 문서에서 권장하는 버전 조합을 정확히 따르는 것이 중요합니다.

주의사항 및 팁

  1. 항상 호환성 확인하기: 새로운 라이브러리나 프레임워크를 설치하기 전에 항상 공식 문서에서 버전 호환성을 확인하세요.

  2. 최신 버전이 항상 최선은 아닙니다: 딥러닝 환경에서는 최신 버전보다 안정적이고 호환성이 검증된 버전을 선택하는 것이 더 중요할 수 있습니다.

  3. 설치 스크립트 백업해두기: 복잡한 설치 과정을 기록해두면 나중에 문제가 발생했을 때 빠르게 재설치할 수 있습니다.

  4. 가상 환경 활용하기: Anaconda와 같은 가상 환경을 활용하면 서로 다른 버전의 라이브러리를 충돌 없이 관리할 수 있습니다.

자주 묻는 질문 (FAQ)

Q: TensorFlow 2.1 이상 버전을 사용하고 싶다면 어떤 CUDA 버전이 필요한가요?

A: TensorFlow 2.1~2.4는 CUDA 10.1, TensorFlow 2.5~2.10은 CUDA 11.2, TensorFlow 2.11 이상은 CUDA 11.8을 권장합니다.

Q: 노트북에서 개발하고 서버에서 학습시키는 워크플로우를 설정하려면 어떻게 해야 하나요?

A: 노트북과 서버 모두 동일한 버전의 TensorFlow, CUDA, cuDNN을 설치하고, SSH와 SCP를 활용하여 파일을 주고받는 것이 좋습니다. 자세한 내용은 다음 포스팅에서 다루겠습니다.

Q: AMD GPU에서도 TensorFlow를 사용할 수 있나요?

A: 공식적으로 TensorFlow는 NVIDIA GPU를 우선 지원합니다. AMD GPU에서는 ROCm 플랫폼을 통해 제한적으로 사용 가능하지만, 안정성과 호환성 면에서 NVIDIA GPU를 권장합니다.


 

 

 

반응형