• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

yolov3로 커스텀 데이터 학습시 이슈

20.06.04 11:38 작성 조회수 424

0

Subshape must have computed start >= end since stride is negative, but is 0 and 2 (computed from start 0 and end 9223372036854775807 over shape with rank 2 and stride-1)

와 같은 경고가 나오고 처음에는 학습이 진행되다가 시간이 자나면 더이상 학습이 진행되지 않는데 원인이 궁급힙니다.

학습 이미지는 1280 * 960 입니다.

 2.배치 사이즈를 4로 하면 OOM이 나와서 2로 변경하면 1번의 이슈가 있지만 학습이 진행되고 GPU  메모리 사용량이 10GB 정도 올라하는걸로 봐서는 GPU는 활성화 된거 같은데 
 
E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1430] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_NOT_INITIALIZED

와 같은 로그가 찍히는데 드라이버를 재설치 해야 할까요?

화사의 GPU 서버를 사용하고 있는데 혹시 몰라 구글 클라우드에서 T4 로 할당 받아 설명해주신 환경과 동일하게 진행해도 같은 오류 입니다.


 

답변 7

·

답변을 작성해보세요.

1

안녕하십니까,

1번 문제는 일단 qqwwee 패키지 문제 인것 같습니다.

아래를 참조 부탁드립니다.

https://github.com/qqwweee/keras-yolo3/issues/530

https://stackoverflow.com/questions/57558476/training-a-keras-model-yields-multiple-optimizer-errors

일단 지금 하고 계시는 방향대로 batch_size를 줄이고 학습이 되는지 확인 부탁드립니다.

2. CUDA 문서를 확인해 보니 CUPTI_ERROR_NOT_INITIALIZED는 아래와 같군요.

CUPTI_ERROR_NOT_INITIALIZED = 15
CUPTI is unable to initialize its connection to the CUDA driver.

하지만 정확한 원인을 찾기가 어렵군요.  학습하려는 이미지의 갯수가 몇개인가요?

기존 GPU 서버의 CUDA Driver 버전 확인 부탁드립니다.

그리고 학습을 수행후에 nvidia-smi 명령어를 수행하셔서 gpu가 계속 사용되고 있는지도(메모리 사용량 말고 GPU usage) 확인 부탁드립니다.

감사합니다.

0

loss에서 nan이 나올경우 그런 원인일 수 있군요. 소중한 정보 감사합니다.

CUPTI_ERROR_NOT_INITIALIZED가 나오는데도 GPU 학습이 되는 군요. 좋은 경험 공유 감사합니다.

0

신석균님의 프로필

신석균

질문자

2020.06.10

 1.이미지를 640 * 480으로 변환하고 2만장만 합습을 하니 val_loss 가 nan으로 나오는 문제는 2일 넘게 정도 학습이 진행중이였는데 발생하지 않았습니다.

아마도 이미지 사이즈를 줄이면서 회전된 직사각형으로 진행된 어노터이션 결과물을  바운딩 박스로 보정하는 로직이 잘못되어 번호판이 많이 틀어진 영상은 엉뚱한 위치에   바운딩 박스가 위치하는 문제를 발견하여 수정하였는데 데이터셋 문자였던거 같습니다.

다만,
할당받은T4 서버가 일요일 저녁에 가상 화페 사용이 의심되어 VM 사용이 중지되고 다시 신청한 T4 VM도 오늘 아침 home  폴더의 파일이 모두 사라져서 학급을 완료하지는 못했습니다.

2. CUPTI_ERROR_NOT_INITIALIZED는 여전히 발생하고 있는데 T4 VM에서  qqwweee 패키지로 학습하면 GPU를 사용하고 있는것으로 확인 됩니다.  

다만, keras-YOLOv3-model-set 로 학습하면 GPU와 관련하여 다른 오류가 나오면서 학습시 GPU를 사용하고 있지 않은데 이것은 TF 2.1 에서 요구하는 CUDA가 10.1 이상인데 T4 VM에 설치된것은 10.0인것이 원인인거 같습니다.


그리고  회사 Docker로 구성한 GPU 서버에서는 CUPTI_ERROR_NOT_INITIALIZED 하면서 GPU를 사용하지만 사용중인 프로세스 목록에는 나타나지 않고 있지만 GPU를 사용하여 학습은 진행되고 있는거 같습니다.


0

일반적으로 학습이 3~4시간 정도 진행되다가 문제가 발생하면 GPU 메모리 문제가 아닐 수도 있습니다만, 현재 가능한 오류 예측은 아래와 같습니다.

1. qqwweee 패키지 자체 문제.

- 일단 수정을 적용하셨다고 하니 결과를 먼저 지켜 보시는게 좋을 것 같습니다.

2. GPU 메모리 문제

- 이미지 크기가 크면 이미지 배열의 크기가 커지기 학습 시 당연히 메모리를 많이 잡아먹습니다.  본 문제는 메모리가 부족하다기 보다, 메모리가 어디에서 Leak이 되는건 아닌지 의심이 됩니다만, 대부분 메모리 문제면 OOM 오류를 내주기 때문에 살짝 의심의 강도는 적습니다.

기타 의견으로 loss가 NaN이 나왔다는게 좀 이상하군요. 아마도 오류가 발생하면서 나온건지 아니면 이미지 파일 자체에 어떤 문제가 있어서 그런건지는 좀더 확인해 볼 필요도 있을 거 같습니다.

이미지 사이즈와 이미지 갯수는 추론 속도 보다는 학습 속도에 영향이 큽니다. 이미지 사이즈가 크면 입력 이미지 배열의 크기가 크기 때문에 추론 속도가 약간 떨어질수도 있지만 큰 차이는 느끼실수 없을 것입니다.

지금 수행하시는 방향대로 계속 진행하시고 결과 모니터링 하시는 게 좋을 것 같습니다.

감사합니다.

0

신석균님의 프로필

신석균

질문자

2020.06.05

1.학습은 3-4시간정도 진행되고 이후   val_loss가 줄어들지 않다가 NaN로 찍었던것 같은데.  이미지 사이즈를 줄여 다시 학습하고 동일한 문제가 발생하면 정확한 로그를 공유 하겠습니다.

그리고 keras-YOLOv3-model-set 개발자가 패치한것이 PUSH되어 학습하면 1번의 경고는 나오지 않고 있습니다. 학습은 좀 더 지켜봐야 할거 같고... 
https://github.com/david8862/keras-YOLOv3-model-set/commit/10c222869824bae1c5ace9893a6c7eb6ddc9afa4

qqwweee도 140~143 라인을 수정후 해결되지 않았는데 말씀하신대로  .pycache 를 삭제하니 해결되었습니다/
https://github.com/qqwweee/keras-yolo3/blob/master/yolo3/model.py

2.CUPTI_ERROR_NOT_INITIALIZED는 나오고 있는데 GPU 은 78%(GPU Server), 70%(Google Cloud T4)  가 나오고 있으니 GPU 는 사용하고 있는거 같습니다.

3.말씀하신대로 이미지 사이즈와 개수를 줄여서 다시 학습하려고 합니다. 
이미지 사이즈를 줄이면 추론속도가 빨라질거 같은데 학습데이터셋의 수도 추론 속도에 영향을 줄까요?

0

stackoverflow로 얘기라면 batch_size 줄이고, grid_shape[::-1]grid_shape[..., ::-1](input_shape도 마찬가지)로 변경을 해서 문제가 해결되었다고 하는데 조금 더 내용을 쫒아가 보면, tensor rt 적용시 이런 문제를 발견했다고 하는 군요. https://github.com/tensorflow/tensorrt/issues/118

qqwwee가 tensor rt를 적용하지는 않았지만, 아뭏튼 이를 적용하려면 소스코드를 변경 한 뒤, pycache를 삭제하고 다시한번 적용해야 할 것 같습니다. 이보다는 먼저 이미지 사이지를 가로,세로 절반정도로 줄인 뒤에 이미지 갯수도 20,000 정도로 줄여서 테스트를 해보는게 좋을 것 같습니다.

학습이 아예 진행이 안되고 오류가 발생하는 건가요? 아님 학습이 진행중에 급격하게 느려지거나 오류를 발생하고 죽는건가요? 

학습 중에 문제가 생기는 거라면 어느정도 갯수의 이미지를 처리하다가 문제가 발생하나요?

0

신석균님의 프로필

신석균

질문자

2020.06.05

1)1.번 문제는 라쿤 데이터셋에서는 발생하지 않습니다. 
데이터셋의 이미지가 너무 큰거 같아 648 * 480 줄여서 학습 해보고 결과를 공유 하겠습니다.
GPU를 V100이나 P100으로 할당받아 테스트 헤보려고 했는데 리소스 부족으로 할당이 안되서 진행하지 못했습니다.

혹시 anchor 박스의 크기도 영향을 줄까요? 
 
참고로  전에 공유했던 TF2를 지원하는  YOLOv3-model-set  에서도 동일한 문제가 발생하여 같이 문의 하였는데 아침에 답변을 확인하여 보니 강사님이 공유해주신것과  동일한  링크를 공유하고 패치하였으니니 최신 버전을 받아서 다시 해보라고 하는데 아직 PUSH는 안돼서 PUSH 가 되면 학습 결과를 공유 하겠습니다.

 https://github.com/david8862/keras-YOLOv3-model-set/issues/55

아마도  qqwwee 패키지를 기반으로 개발되다 보니 qwwee 와 동일한 문제가 발생하는거 같습니다.


2)이미지 개수는 40만장인데 2만장만 학습해도 동일합니다. 


 3)구글클라우드 : 
    - GPU Driver Version : 410.104

    - CUDA L 10.0

GPU 서버(Docker로 설치)

    - GPU Driver Version : 440.82

    - CUDA L 10.2 :