Skip to Content
Infra & DevOps격리된 TensorFlow GPU 런타임 설치 가이드 (Virtualenv / Conda)
☁️ Infra & DevOps2018년 10월 22일

격리된 TensorFlow GPU 런타임 설치 가이드 (Virtualenv / Conda)

#tensorflow#gpu#python#deep-learning#virtualenv#cuda

빅데이터 클러스터의 엣지 서버(Edge Server)나 마스터 노드에는 이미 Cloudera Manager, Ambari, 각종 커스텀 Python 에이전트 스크립트들이 거미줄처럼 얽혀서 돌아가고 있습니다. 여기에 sudo pip install tensorflow-gpu를 냅다 때려버리면 TensorFlow의 수많은 의존성(NumPy 버전 등)이 기존 패키지를 덮어씌우며 관리망 전체가 의존성 충돌로 다운될 수 있습니다.

반드시 독립적인 가상 환경(Virtual Environment) 안에 격리하여 설치해야 합니다.


CUDA / cuDNN / TensorFlow 버전 호환 매트릭스

설치 전 가장 먼저 CUDA Toolkit 버전과 TensorFlow 버전의 호환성을 확인해야 합니다. 버전이 맞지 않으면 런타임에 Illegal Instruction 오류가 납니다.

TensorFlow-GPUPythonCUDAcuDNN
2.13 ~ 2.153.8 ~ 3.1111.88.6
2.103.7 ~ 3.1011.28.1
2.4 ~ 2.63.6 ~ 3.911.08.0
1.153.6 ~ 3.710.07.4
1.113.69.07.1

전체 호환 매트릭스: TensorFlow 공식 문서 


방법 1: Virtualenv (경량, CentOS 호환 우수)

1단계: Python 3.x 설치

CentOS 7 기본 Python은 2.7이므로 IUS 저장소에서 3.6을 설치합니다.

shell
$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm $ yum install python36u python36u-devel python36u-pip

2단계: 가상환경 생성 및 활성화

shell
# 분석가 작업공간에 가상환경 생성 $ cd /data/workspace $ python3.6 -m venv tensorflow_env # 가상환경 활성화 (프롬프트에 (tensorflow_env) 마크가 붙음) $ source tensorflow_env/bin/activate

이제 이 터미널 세션에서는 pip을 아무리 써도 시스템 전역을 오염시키지 않습니다.

3단계: TensorFlow GPU 설치

shell
(tensorflow_env) $ pip install --upgrade pip # CUDA 9.0과 호환되는 버전 고정 설치 (tensorflow_env) $ pip install tensorflow-gpu==1.11.0

방법 2: Conda (패키지 의존성 자동 해결, 추천)

CUDA/cuDNN 설치를 생략하고 싶다면 Conda가 CUDA까지 함께 관리해 줍니다.

shell
# Miniconda 설치 $ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh $ bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 $ export PATH="/opt/miniconda3/bin:$PATH" # tensorflow-gpu를 위한 격리 환경 생성 (CUDA 10.1 포함) $ conda create -n tf_env python=3.7 $ conda activate tf_env # Conda가 CUDA / cuDNN / TensorFlow를 한번에 호환 버전으로 설치 $ conda install -c anaconda tensorflow-gpu=2.3

GPU 인식 확인 테스트

python
(tensorflow_env) $ python import tensorflow as tf # TF 버전 확인 print(tf.__version__) # GPU 인식 여부 확인 (GPU가 보이면 True) print("GPU Available:", tf.test.is_gpu_available()) # 상세 디바이스 목록 출력 print(tf.config.list_physical_devices('GPU')) # [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

TF 2.x 이상에서는 tf.Session 대신 위 방식을 사용합니다.


GPU 상태 실시간 모니터링

모델 학습이 돌아가는 동안 GPU VRAM과 전력 소비가 정상적으로 올라가는지 확인합니다.

shell
# 1초 간격으로 nvidia-smi 갱신 $ watch -n 1 nvidia-smi
plaintext
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.87 Driver Version: 418.87 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | 0 Tesla V100-SXM2 Off | 00000000:00:04.0 Off | 0 | | | 12% 45C | P0 123W / 300W | +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | PID Type Process name Usage | | 12345 C python 8192MiB | +-----------------------------------------------------------------------------+

GPU Memory UsagePower Draw가 함께 올라간다면 GPU가 정상적으로 학습에 사용되고 있는 것입니다.


자주 발생하는 오류

오류 메시지원인해결
Could not load dynamic library 'libcuda.so.1'NVIDIA 드라이버 미설치드라이버 설치 가이드 참고
Loaded runtime CuDNN library: X but source was compiled with: YcuDNN 버전 불일치호환 매트릭스 확인 후 버전 재설치
Illegal instruction (core dumped)CPU의 AVX 지원 여부 문제pip install tensorflow-gpu==X.X.X --no-binary tensorflow-gpu 로 직접 빌드
ImportError: libcudart.so.X.XCUDA Toolkit 경로 미설정export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

Jupyter 커널에 가상환경 등록

가상환경을 Jupyter Notebook에서도 사용하려면 커널로 등록해야 합니다.

shell
(tensorflow_env) $ pip install ipykernel (tensorflow_env) $ python -m ipykernel install --user --name=tf_env --display-name "Python (TF GPU)"

이후 Jupyter에서 커널을 Python (TF GPU) 로 선택하면 가상환경의 TensorFlow를 사용합니다.

Last updated on