cuDNN 아카이브 설치와 라이브러리 경로 확인
CUDA 환경을 준비한 뒤 cuDNN 아카이브를 받아 설치했던 메모입니다. 당시에는 압축을 푼 파일을 CUDA 디렉터리에 복사하는 방식을 사용했습니다.
이 방식이 cuDNN의 유일한 설치 방법은 아닙니다. 버전과 배포 형식에 따라 패키지 설치나 별도 라이브러리 디렉터리 구성을 사용할 수 있습니다. 여기서는 당시 아카이브 방식에서 확인할 부분을 정리합니다.
CUDA와 프레임워크 버전 확인
cuDNN을 고를 때는 CUDA 버전뿐 아니라 사용하는 프레임워크의 요구 사항도 함께 봐야 합니다. 같은 cuDNN 이름으로 배포돼도 대상 CUDA나 CPU 아키텍처가 다를 수 있습니다.
원래 메모의 복사 대상은 /usr/local/cuda-9.2/였습니다. 한편 앞 글의 TensorFlow 1.11 기준 구성은 CUDA 9.0이므로, 이 경로를 같은 조합의 설치 명령으로 그대로 이어 쓰면 안 됩니다. 실제로 사용할 CUDA 디렉터리와 받은 아카이브를 먼저 맞춰야 합니다.
헤더와 라이브러리 배치
다음은 압축을 푼 아카이브 안에 cuda/include와 cuda/lib64가 있고, 설치 대상이 이미 준비된 /usr/local/cuda-9.0인 경우의 예시입니다. 아카이브 버전에 따라 내부 경로는 달라질 수 있습니다.
sudo cp cuda/include/cudnn*.h /usr/local/cuda-9.0/include/
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/라이브러리를 복사할 때는 파일 이름뿐 아니라 심볼릭 링크 관계도 보존해야 합니다. 다른 버전의 파일이 이미 있다면 덮어쓰기 전에 어떤 프로그램이 그 경로를 사용하는지 확인해야 합니다.
현재 설치 방법은 NVIDIA cuDNN 설치 문서 에서 해당 버전의 패키지·아카이브 안내를 확인할 수 있습니다.
실행 프로세스의 라이브러리 경로
파일을 복사한 위치를 프레임워크 프로세스가 찾을 수 있어야 합니다. 환경 변수로 경로를 지정한다면 다음처럼 사용할 수 있습니다.
export CUDA_HOME=/usr/local/cuda-9.0
export LD_LIBRARY_PATH="$CUDA_HOME/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"라이브러리 경로를 시스템 설정으로 관리한다면 설정된 디렉터리와 캐시를 함께 확인합니다. ldconfig만 실행한다고 임의의 모든 CUDA 디렉터리가 자동으로 등록되는 것은 아닙니다.
헤더 버전과 실제 로딩 구분
예전 cuDNN은 헤더의 매크로로 버전을 확인할 수 있었습니다.
grep -E '^#define CUDNN_(MAJOR|MINOR|PATCHLEVEL)' /usr/local/cuda-9.0/include/cudnn.h버전에 따라 이 정보가 cudnn_version.h에 있을 수 있습니다. 헤더의 버전과 실제 프로세스가 로드하는 공유 라이브러리는 다를 수도 있으므로, 이 출력만으로 설치 전체를 확인했다고 판단하지는 않아야 합니다.
cuDNN 로딩 오류가 나면 필요한 라이브러리가 있는지, 의존 라이브러리가 있는지, 실행 프로세스의 검색 경로와 요구 버전이 맞는지를 나눠 봅니다. GPU 사용 확인은 TensorFlow 실행 단계에서 이어집니다.