텐서플로우를 임포트하거나, GPU 메모리가 정상적으로 할당되지만 Conv2D 같은 레이어를 사용하는 경우

이런 에러를 있는데, 뜨는 이유는 크게 다음과 같다.


1. CUDA PATH 등록되어 있는지 확인

2. CUDA 있는 파일에 cuDNN 제대로 복붙되었는지 확인
--> 두가지가 아니라고 확신이 들더라도, 2번과 같은 경우에서 전체를 드래그하여 복붙하지말고 폴더에 해당하는 cudnn.h 같은 파일을 일일히 하나씩 드래그 해보세요. 전체 복붙이 문제가 수도 있습니다.

3. CUDA 버전이 NVIDIA 그래픽 카드나 텐서플로우 버전과 호환이 되는지 확인
--> 물론 이게 문제라면 그전에 문제가 뜰 것.

2019-03-04 02:41:31.338657: E tensorflow/stream_executor/cuda/cuda_dnn.cc:378] Loaded runtime CuDNN library: 7201 (compatibility version 7200) but source was compiled with 7004 (compatibility version 7000).  If using a binary install, upgrade your CuDNN library to match.  If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
2019-03-04 02:41:31.339958: F tensorflow/core/kernels/conv_ops.cc:717] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo<T>(), &algorithms) 


실제로 tensorflow-gpu실행 도중 얻은 에러이다. 

결론적으로 주황색 글에만 집중하면 된다. 

but source was compiled with 7004(compatibility version 7000)

이말은 즉, cuDNN버전을 위와 같은 버전으로 바꾸라는 말이다. 7004는 7.04, 7000은 7.00 을 뜻하는것 같고, 현재 내가 7.2의 cuDNN의 버전을 깔았고 무언가와 안맞다는 말이다. 

(tensorflow version, CUDA version, CPU performance 등등)


다시 결론에 들어가면 cuDNN버전을 명시해 준 버전으로 깔면 해결된다.

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

 

해결방법

sudo ldconfig /usr/local/cuda/lib64

하니까 바로 됨!

+ 서버를 원격으로 사용하면서, 외부 ip를 통해 jupyter notebook으로 사용하고 있는 경우는 아래와 같은 방법으로 사용한다.

import getpass
import os

password = getpass.getpass()
command = "sudo -S ldconfig /usr/local/cuda/lib64"
os.system('echo %s | %s' % (password, command))

nvidia 관련 작업을 할때, 예를 들어, nvidia-smi와 같은.. 

VNML: Driver/library version mismatch라는 에러를 볼 수 있다.

 

이를 해결하는 방법은 다음과 같다.


1. lsmod | grep nvidia

2. nvidia kernel을 언로딩 해주면 된다

- sudo rmmod nvidia_drm, nvidia_modeset, nvidia_uvm, nvidia ( 각 개인 상황에 따라 로딩되어있는게 다를 수 있음.)

3. 위와 같은 작업을 할 시 다음과 같은 에러도 많이 만날 수 있다.

- rmmod:ERROR: Module nvidia is in use

4. (3)번의 에러가 뜬다면 sudo lsof /dev/nvidia* 를 사용하여 현재 nvidia관련 프로세스를 확인한뒤에

sudo kill -9 process_id 를 사용하여 프로세스를 강제 종료시켜주면 된다.

5. 마지막으로 nvidia-smi를 사용하면 정상적인 결과를 볼 수 있다!

 

ValueError: the truth value of Series is ambiguous. Use a.empty, a.any(), a.all() ..... 

 

시리즈나 데이터프레임에서 비교연산을 할 때 위와 같은 에러가 뜨는 경우가 있다. 

대표적으로 위의 상황에서 파이썬 논리연산자인 and나 or 등을 사용하면 위의 에러가 뜨게 된다.

ex) [(df.col < 10) and (df.col > 5)] 와 같은 경우

< 해결방법 >

np.logical_and(or) 을 쓰거나 간단하게 &(|)을 사용하면 된다.

추가로 & 을 쓸 때 실수하는 부분이, 위의 예시에서 (df.col < 10)이 아닌 df.col < 10으로 소괄호가 없이 썻다면

&의 연산자의 우선순위가 높으므로

typeerror cannot compare a dtyped float array with a scalar of type bool

다음과 같은 에러가 뜰것이니 주의하기 바란다.