TensorFlow를 위한 CUDA Toolkit 오프라인 설치 및 버전 호환표
과거 당사의 빅데이터 관리 포털인 빅데이터 모니터링 플랫폼의 파이프라인과 연계하여 딥러닝(Deep Learning) 모델을 서빙해야 했던 프로젝트가 있었습니다. NVIDIA 그래픽 드라이버를 땀 흘리며 설치하고 나서 한숨 돌리나 싶더니, 진짜 고통스러운 산은 CUDA Toolkit의 궁합 맞추기 안에 숨어 있었습니다.
데이터 사이언티스트들은 “저희 이번 모델 텐서플로우(TensorFlow) 1.11.0으로 짰으니 이 환경에 맞게 돌려주세요” 라고 코드를 던집니다. 하지만 OS 인프라 담당자가 yum install cuda를 쳐서 냅다 최신 버전을 깔아버리면, TensorFlow는 libcudart.so.9.0: cannot open shared object file: No such file or directory 에러를 사정없이 뿜어대며 GPU를 완벽하게 무시해버립니다.
TensorFlow와 PyTorch 같은 엔진들은 코어 엔진이 C/C++ 레벨에서 특정 CUDA 라이브러리 심볼에 록인(Lock-in)되어 컴파일되어 있기 때문에, NVIDIA 드라이버 - CUDA Toolkit - TensorFlow 3단 콤보의 버전 매트릭스를 완벽하게 일치시키는 것이 인프라 엔지니어의 핵심 덕목이었습니다.
1. 지옥의 트라이앵글: CUDA & 드라이버 호환성 테이블표
하위 버전의 CUDA 툴킷은 상위 버전의 NVIDIA 커널 드라이버에서 실행될 수 있지만 (Backward Compatibility 호환보장), 그 반대의 경우나 TensorFlow가 원하지 않는 CUDA 버전은 절대로 돌릴 수 없습니다.
| 구축 목표 (TF 버전) | 필요한 CUDA Toolkit | 최소 구동 요구 Linux 드라이버 |
|---|---|---|
| TF 1.13.0 이상 | CUDA 10.0 | >= 410.48 |
| TF 1.11.0 ~ 1.12.0 | CUDA 9.0 (9.2 아님에 매우 주의) | >= 384.81 |
| TF 1.4.0 미만 (Legacy) | CUDA 8.0 | >= 375.26 |
참고 기출문제: “드라이버 최신이네 개꿀~” 하면서 홈페이지에서 무심코 최신 CUDA 9.2나 10.1을 받아서 까는 순간, TF 1.11 기반의 파이썬 프로세스는 에러를 뱉으며 장렬히 전사합니다. 버전을 핀셋으로 집어 넣어야 합니다.
2. 폐쇄망 CUDA 설치 (Runfile Extract 방식)
온라인 환경이라면 yum 모듈로 잡히겠지만, 빅데이터 시스템의 엣지 노드는 철저한 폐쇄망입니다. 엔비디아 아카이브 포털에서 무려 수 GB에 달하는 거대한 .run 파일을 USB로 복사해 와서 로컬 커널 소스로 빌드해야 합니다.
$ yum install epel-release
$ yum install --enablerepo=epel dkms
# 2. 현재 내 커널 버전 명시적 확인
$ uname -r
# 3. 받아온 Runfile을 텍스트 쉘로 구동하며, 커널 소스 경로를 수동으로 매핑 강제 주입
$ chmod +x ./cuda_9.0.176_384.81_linux.run
$ ./cuda_9.0.176_384.81_linux.run --kernel-source-path=/usr/src/kernels/$(uname -r)명령어를 치면 광장히 긴 약관이 나오는데, 스페이스바를 꾹 눌러 넘기고 드라이버 설치는 No(이미 깔았으니까), CUDA Toolkit 및 Symlink 설치는 Yes를 입력하면 /usr/local/cuda-9.0 위치에 폴더가 예쁘게 생겨납니다.
3. 환경 변수 노출 (.bash_profile)
마지막으로 로그인한 분석가나 플랫폼 서비스 데몬이, GPU 공유 라이브러리를 OS의 기본 lib 폴더보다 먼저 찾을 수 있게 패스를 잡아 줍니다.
# ~/.bash_profile 이나 전역 /etc/profile 끝에 추가
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/extras/CUPTI/lib64:$CUDA_HOME/lib64
export PATH=$PATH:$CUDA_HOME/bin적용 후 터미널 창에 nvcc --version을 쳤을 때 Cuda Compilation Tools 버전이 딱 떨어져서 나오면, 고되고 외로웠던 AI 인프라 베이스캠프 작업이 퍼펙트하게 끝난 것입니다.