격리된 TensorFlow GPU 런타임 설치 가이드 (Virtualenv / Conda)
빅데이터 클러스터의 엣지 서버(Edge Server)나 마스터 노드에는 이미 Cloudera Manager, Ambari, 각종 커스텀 Python 에이전트 스크립트들이 거미줄처럼 얽혀서 돌아가고 있습니다. 여기에 sudo pip install tensorflow-gpu를 냅다 때려버리면 TensorFlow의 수많은 의존성(NumPy 버전 등)이 기존 패키지를 덮어씌우며 관리망 전체가 의존성 충돌로 다운될 수 있습니다.
반드시 독립적인 가상 환경(Virtual Environment) 안에 격리하여 설치해야 합니다.
CUDA / cuDNN / TensorFlow 버전 호환 매트릭스
설치 전 가장 먼저 CUDA Toolkit 버전과 TensorFlow 버전의 호환성을 확인해야 합니다. 버전이 맞지 않으면 런타임에 Illegal Instruction 오류가 납니다.
| TensorFlow-GPU | Python | CUDA | cuDNN |
|---|---|---|---|
| 2.13 ~ 2.15 | 3.8 ~ 3.11 | 11.8 | 8.6 |
| 2.10 | 3.7 ~ 3.10 | 11.2 | 8.1 |
| 2.4 ~ 2.6 | 3.6 ~ 3.9 | 11.0 | 8.0 |
| 1.15 | 3.6 ~ 3.7 | 10.0 | 7.4 |
| 1.11 | 3.6 | 9.0 | 7.1 |
전체 호환 매트릭스: TensorFlow 공식 문서
방법 1: Virtualenv (경량, CentOS 호환 우수)
1단계: Python 3.x 설치
CentOS 7 기본 Python은 2.7이므로 IUS 저장소에서 3.6을 설치합니다.
$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ yum install python36u python36u-devel python36u-pip2단계: 가상환경 생성 및 활성화
# 분석가 작업공간에 가상환경 생성
$ cd /data/workspace
$ python3.6 -m venv tensorflow_env
# 가상환경 활성화 (프롬프트에 (tensorflow_env) 마크가 붙음)
$ source tensorflow_env/bin/activate이제 이 터미널 세션에서는 pip을 아무리 써도 시스템 전역을 오염시키지 않습니다.
3단계: TensorFlow GPU 설치
(tensorflow_env) $ pip install --upgrade pip
# CUDA 9.0과 호환되는 버전 고정 설치
(tensorflow_env) $ pip install tensorflow-gpu==1.11.0방법 2: Conda (패키지 의존성 자동 해결, 추천)
CUDA/cuDNN 설치를 생략하고 싶다면 Conda가 CUDA까지 함께 관리해 줍니다.
# 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.3GPU 인식 확인 테스트
(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과 전력 소비가 정상적으로 올라가는지 확인합니다.
# 1초 간격으로 nvidia-smi 갱신
$ watch -n 1 nvidia-smi+-----------------------------------------------------------------------------+
| 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 Usage와 Power Draw가 함께 올라간다면 GPU가 정상적으로 학습에 사용되고 있는 것입니다.
자주 발생하는 오류
| 오류 메시지 | 원인 | 해결 |
|---|---|---|
Could not load dynamic library 'libcuda.so.1' | NVIDIA 드라이버 미설치 | 드라이버 설치 가이드 참고 |
Loaded runtime CuDNN library: X but source was compiled with: Y | cuDNN 버전 불일치 | 호환 매트릭스 확인 후 버전 재설치 |
Illegal instruction (core dumped) | CPU의 AVX 지원 여부 문제 | pip install tensorflow-gpu==X.X.X --no-binary tensorflow-gpu 로 직접 빌드 |
ImportError: libcudart.so.X.X | CUDA Toolkit 경로 미설정 | export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH |
Jupyter 커널에 가상환경 등록
가상환경을 Jupyter Notebook에서도 사용하려면 커널로 등록해야 합니다.
(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를 사용합니다.