가끔 모델 학습이나 테스트를 진행하다보면

난데없이 'killed'라는 문구만 뜨고 종료될 때가 있다.

 

상당히 당혹스러운데, 찾아보니

sudo dmesg

명령을 통해 로그를 확인할 수 있다.

 

그리고 이런 경우는 대부분 RAM(GPU RAM 아님) 문제라고한다. 

참고로 램 용량은

free 또는 free -m (MB단위) 로 확인할 수 있다.

오류 내용

---------------------------------------------------------------------

Collecting package metadata (current_repodata.json): failed

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.

If your current network has https://www.anaconda.com blocked, please file
a support request with your network engineering team.

SSLError(MaxRetryError('HTTPSConnectionPool(host=\'repo.anaconda.com\', port=443): Max retries exceeded with url: /pkgs/main/win-64/current_repodata.json (Caused by SSLError("Can\'t connect to HTTPS URL because the SSL module is not available."))'))

---------------------------------------------------------------------

 

해결 방법

1. "아나콘다경로/Library/bin/" 경로 열기

2. 다음 네 가지 파일들을 복사

libcrypto-1_1-x64.dll

libcrypto-1_1-x64.pdb

libssl-1_1-x64.dll

libssl-1_1-x64.pdb

3. "아나콘다경로/DLLs/" 경로에 붙여넣기

 

1. 시스템 환경변수 Path에 "아나콘다경로\Library\bin" 추가

 - 그래도 안되면 위에 적었던 해결방법 참조

 

-------

그 밖에

conda install openssl,

이전 버전의 아나콘다 설치,

 conda config --set ssl_verify false

등의 해결책들을 알게 되었지만 나에겐 아무것도 통하지 않았음.

결국 위에 써놓은 방법으로 해결함.

 

conda update conda

conda install nb_conda


몇몇 패키지들이 설치가 안되는 경우가 있다.

증상 : Solving environment: /  만 뜨다가 그냥 종료.


이는 Windows Defender 때문에 일어나는 문제이다.

Windows Defender에 들어가서

방화벽 및 네트워크 보호에 도메인/개인/공용 네트워크를 모두 비활성화 시키면 해결된다.

'실습 > 오류 해결' 카테고리의 다른 글

Ubuntu 'killed' 오류  (0) 2019.10.24
anaconda SSL 관련 오류 해결  (15) 2019.10.18
pyinstaller PyQt5 오류  (0) 2018.10.12
Pytorch out of memory 오류  (0) 2018.08.30
[mujoco] command 'gcc' failed with exit status 1` 오류 해결  (0) 2018.08.13

https://winterj.me/pyinstaller/

loss.backward() 시에 메모리 오류가났다

그래서 이에 관련하여 많은 정보들을 구글링함.

나한테 맞는 해결책은 1도 없었다..

결국 원인을 추적해서 해결함


구글링한 지식들이 아까워서 정리해보았다.

아래는 오류가 나는 상황들과 해결책이다.


1. for문 구조에 의한 data 중복

  python 기본 구조로 for문 사용 시, 이전 타임의 데이터를 가지고 있다고함

  그래서 어쩔수 없이 data = Data(input) 하면

  Data(input) 리턴 값에 해당하는 메모리가 순간적으로 2배가 사용된다는 의미임 (이전에 data 삽입된 값이 남아있어서)

  - 해결책 -

  del data

  코드를 넣어주면 이러한 현상을 막을 수 있음


2. output을 이용한 연산

  만약 loss += network.get_loss() 등과 같이, 이전에 텐서 연산 결과를 계속 이용하면

  loss 메모리가 계속 쌓이게됨

  - 해결책 -

  loss += network.get_loss().data[0] # or network.get_loss().data.cpu().numpy()[0]

  이러면 해결됨


3. test or validation 시 메모리 오류

  train 시에는 괜찮은데, test 시에 오류가 나는 경우

  test 시에는 기울기를 계산하지 않겠다는 선언을 해줘야함

  - 해결책 -

  Variable을 선언할 때 인자로 volatile=True를 넣어주면 됨

  ex) train code:      Variable(im_data.cuda())

       evaluate code: Variable(im_data.cuda(), volatile=True)


4. 나한테 발생했던 오류

 

class RoIPool(Module):
def __init__(self, pooled_height, pooled_width, spatial_scale):
super(RoIPool, self).__init__()

self.pooled_width = int(pooled_width)
self.pooled_height = int(pooled_height)
self.spatial_scale = float(spatial_scale)

def forward(self, features, rois):
return RoIPoolFunction(self.pooled_height, self.pooled_width, self.spatial_scale)(features, rois)

class RoIPool(Module):
def __init__(self, pooled_height, pooled_width, spatial_scale):
super(RoIPool, self).__init__()

self.pooled_width = int(pooled_width)
self.pooled_height = int(pooled_height)
self.spatial_scale = float(spatial_scale)
self.module = RoIPoolFunction(self.pooled_height, self.pooled_width, self.spatial_scale) ##

def forward(self, features, rois):
return self.module(features, rois)

로 수정함

내부적으로 forward하면서 class를 계속 생성하고 있었음.



그리고 이러한 증상을 발견할 수 있는 tip.

memory 오류 날때까지 기다리지 말고

명령창 하나 더 띄워서 nvidia-smi -l 1 입력

그러면 memory 오류 시, iter 마다 메모리 사용량이 증가하는 것을 볼 수 있음

어디서 메모리 증가가 일어나는지 보려면

중간에 return 넣어주면된다.

그럼 return 전까지 괜찮은지, 문제가 있는지 볼 수 있음

에러 메시지

osmesashim.c:1:23: fatal error: GL/osmesa.h: No such file or directory

command 'gcc' failed with exit status 1`


해결 방법

sudo apt install libosmesa6-dev

[Make로 레이어 만들고, 모델 돌렸을 때 나는 오류인 경우]


src/cuda/Makefile 파일들을 수정해서 해결 가능. (보통 roi_aling 등의 특별한 네트워크 추가 시에 makefile이 존재)

파일을 열어보면

-gencode arch=compute_61,code=sm_61

라는걸 볼 수 있을 텐데, 61 혹은 다른 숫자를 아래 사이트에 나온 자신의 그래픽카드 번호에 맞게 설정

https://developer.nvidia.com/cuda-gpus


그래픽카드 확인 명령어

lspci |grep -i VGA


만약 5.2라면 52라고 수정

ex) GeForce GTX TITAN X -> 52

-> -gencode arch=compute_52,code=sm_52


위와같은 Makefile은 여러개가 있는 경우가 많으니, 다 찾아서 바꿔줘야함


참고로 TITAN X는 Nvidia도 있고, GeForce GTX도 있으니 잘 구별해야함

/usr/bin/ld: warning: libpcre.so.1, needed by //home/ailab/anaconda2/lib/libpcrecpp.so.0, not found (try using -rpath or -rpath-link)

//home/ailab/anaconda2/lib/libpcrecpp.so.0: undefined reference to `pcre_exec'

//home/ailab/anaconda2/lib/libpcrecpp.so.0: undefined reference to `pcre_fullinfo'

//home/ailab/anaconda2/lib/libpcrecpp.so.0: undefined reference to `pcre_free'

//home/ailab/anaconda2/lib/libpcrecpp.so.0: undefined reference to `pcre_config'

//home/ailab/anaconda2/lib/libpcrecpp.so.0: undefined reference to `pcre_compile'

collect2: error: ld returned 1 exit status


make 시, 위와 같이 anaconda의 경로가 자꾸 참조되어 오류가 발생했다.

bashrc에 anaconda path를 지워도 다를 바 없었고, 구글링도 해봤지만 해답을 찾을 수 없었다.

결론적으로 해결한 방법은, anaconda2 폴더를 아예 없애는 것이다.

물론 지우는건 아니고, 이름을 anaconda21처럼 잠시 바꿔준 후 make를 시도한다.

정말 깔끔하게 잘되는 모습을 볼 수 있다.


이것때문에 너무 많은 시간을 허비했다...

참고로 일부 라이브러리만 저런 오류가 뜬다면, conda remove로 anaconda에서 해당 라이브러리를 지우면 해결할 수 있다.

하지만 저렇게 충돌나는게 한두개가 아니고, 지우면 후에 문제될 수 있으니

잠시 폴더명을 바꿔주는게 최선인것같다.

좀 찝찝하긴 하지만 이것 외에 해결책을 찾지 못했다.

window10에서 pip install 시 나는 에러.


에러가 나는 python lib 폴더를 찾은 뒤 내부 py 파일을 수정하면 해결된다.


우선 아래 경로 파일을 열어준다. (문제되는 python 경로로 들어가야함)

C:\Users\유저이름\Anaconda3\envs\패키지명\Lib\site-packages\pip\compat\__init__.py


75번째 줄에 s.decode('utf_8')를 s.decode('cp949')로 수정



참조 사이트 : https://github.com/pypa/pip/issues/4251

Fatal error in launcher: Unable to create process using '"'


pip install .. 을

python -m pip install .. 로 바꿔쓴다

undefined reference to `google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()'

.build_release/tools/get_image_size.bin

등의 에러.


anaconda를 이용했을 때 생기는 에러다


conda install protobuf 로 해결




undefined reference to `google::FlagRegisterer


 sudo apt-get remove libgflags2v5



cd /usr/lib/x86_64linux-gnu


sudo ln -sf libhdf5_serial.so.10.1.0 libhdf5.so

sudo ln -sf libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so


해당 파일이 없으면 so. 까지 쓴 후 tap을 눌러 현재 폴더에 있는 버전으로 수정



만약 openblas를 찾을 수 없다는 메시지도 같이 뜬다면

caffe Makefile.config에서 openblas를 atlas로 바꾸고

sudo apt-get install libatlas-base-dev

To get the build to pass on Debian Jessie, I had to (in addition to the above)

  1. modify INCLUDE_DIRS in Makefile.config

    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
    
  2. create symlinks as instructed here

    cd /usr/lib/x86_64-linux-gnu
    sudo ln -s libhdf5_serial.so.8.0.2 libhdf5.so
    sudo ln -s libhdf5_serial_hl.so.8.0.2 libhdf5_hl.so
    
  3. Work around #337 by installing g++-4.6 from the Wheezy repo and adding to Makefile.config:

    CUSTOM_CXX := g++-4.6




출처 : https://github.com/BVLC/caffe/issues/2347

(아나콘다에서)

conda install libpng


or 


(로컬에서)

sudo apt-get install libpng

(아나콘다 내에서)

conda install mkl


or


(로컬에서)

sudo apt-get install mkl

numpy 버전이 낮아서 발생하는 문제


pip install -U numpy 로 해결.


설치 시 이미 최신 버전이라는 문구가 나온다면

오류나는 numpy와 설치하려는 환경의 numpy가 다른 경우임


anaconda 가상환경 내부의 numpy인지, 외부의 numpy인지 잘 확인할 것.

pip install empy

/usr/bin/ld: cannot find -lopenblas


openBLAS를 설치하거나

Makefile.config에서


BLAS := open을 주석처리하고

그 위에 BLAS := altlas의 주석을 해지


gcc 버전 문제 (CUDA 8 - /usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264: error: ‘type name’ declared as function returning an array)

- https://github.com/weiliu89/caffe/issues/237



/usr/bin/ld: cannot find -lopenblas

openBLAS를 설치하거나

Makefile.config에서


BLAS := open을 주석처리하고

그 위에 BLAS := altlas의 주석을 해지



cd /usr/local/MATLAB/<version>/extern/engines/python

python setup.py build --build-base=$(mktemp -d) install



깔끔하게 해결된다

'실습 > 오류 해결' 카테고리의 다른 글

[caffe make error] /usr/bin/ld: cannot find -lopenblas  (0) 2017.07.20
caffe 설치 중 에러  (0) 2017.07.20
cannot find -lglut  (0) 2017.06.30
libGLU.so not found  (0) 2017.06.30
ImportError: No module named yaml 해결  (2) 2017.06.27

+ Recent posts