반응형

요약 및 해결 방법

YOLO에서 학습시킬 때 파라미터에 workers를 자신의 사양에 맞게 바꾸면 된다.

train(data = data, epochs = 100, workers=<사양에 맞게 ex) 0>)

yolo train data=data epochs=100 workers=0

 

본문

인공지능을 학습할려는데 보통 윈도우로 학습하는데.. 왜 사람들이 리눅스로 학습하는지 알고 싶어서 WSL를 설치해서 CUDA 연결하고 리눅스로 YOLO를 학습 시켜보았다. 다른 학생 프로젝트 때문에

 

그런데 학습 시키는 과정에서 아래와 같은 오류가 발생했다.

CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

이 오류를 보면 CUDA_LAUNCH_BLOCKING 이거를 1로 활성화 시켜서 디버깅을 해보라고 되어있는데.. 저걸 하면 자세히 오류가 뜨기는 뜬다.. 근데 자세히 뜨기는 떠도 그냥 메모리가 모잘르다는 것 같았다.

(CUDA_LAUNCH_BLOCKING이거.. CUDA끄고 실행하는 것 같은데.. 저것 때문에 학습 속도가 엄청 느려져서.. 오류 뜰때까지 기다리는게 으음..)

 

근데 전혀 모잘르지는 않았다. 램을 많이 쓰는 것 같지만 램이 최대까지 쓰는걸 보지는 못했고 70%정도 까지만 쓰는걸로 확인이 되어서 이 문제는 아닌 것 같아서.. 여러 해결 방법을 보긴 했다.

어디서는 리눅스에 뭔가 제한이 걸려 있어서 .wslconfig로 제한을 풀거나 하는 시도로 해결했다라는 글도 보고

그냥 WSL 포기하고 리눅스로 해서 해결했다는 글도 있고..

 

근데 나는 wslconfig도 안되고 리눅스로 바꾸는 것도 할 수가 없다.

그러다가 어디선가 workers를 0으로 해보라는 글이 있어서 해봤는데.. 정상적으로 돌아갔다.

 

대충 workers의 역할이 데이터를 로드 시키면서 여러 작업들의 속도를 병렬로 처리할 수 있게 하는 것 같은데 그 뒤에 숫자는 병렬 처리하는 갯수인 걸로 짐작하긴 했는데.. 

 

왜 오류가 나는지 공식 홈페이지를 확인해보니..

https://docs.ultralytics.com/modes/train/#arguments

 

Train

Step-by-step guide to train YOLOv8 models with Ultralytics YOLO including examples of single-GPU and multi-GPU training

docs.ultralytics.com

기본적으로 값이 8이다..

하하하 저것 때문에 윈도우로 돌려서.. 조금 빡치긴 했었는데.. 일단 그래도 해결은 했다.

 

저거 값을 수정하는 과정에서 알게된건 Windows나 Linux에서는 높게 잡아도 자동으로 잡아주는 것 같은데 WSL에서만 안되는 것 같다.

그래서 하나씩 값을 높여보면서 딱 적당한 값을 찾는게 좋을 것 같다.

나는 1로 설정했는데 0으로 했을 때 40초가 나왔었는데 33초로 줄었다..

 

암튼 해결 CUDA_LAUNCH_BLOCKING

반응형

'오류 | 문제 > Python' 카테고리의 다른 글

파이썬 실행 터미널 창 변경하기  (0) 2022.07.11

+ Recent posts