Error 1
Pytorch 코드를 돌리는 도중에 자꾸 다음과 같은 에러가 발생한다.
ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).
해결법을 찾아보니깐 Docker Container를 사용할 때, 컨테이너 안에서 코드를 돌리니 메모리 관련 크기가 작다며, 다음 option("--ipc=host")을 주어서, 컨테이너를 다시 실행시키면 해결된다고 한다.
docker run --gpus all -it -p 8888:8888 -p 6006:6006 --ipc=host
하지만, 나같은 경우엔 서버가 회사 Docker기도 하고, 함부로 옵션을 건드려서 현재 컨테이너를 다시 실행시키기엔 너무 복잡하다. 또한, 아래 코드로 확인해봐도 내 컨테이너에 제한된 Memory는 이미 충분히 크기 때문에 이게 문제가 아닌거 같다.
sysctl kernel.shmmax
#kernel.shmmax = 18446744073692774399
서칭 중, 아래 링크에서 말하길 DataParallel이 문제인 것 같다는 이야기가 있어서, DataLoader의 num_workers를 1 또는 0으로 변경하고 실행했더니, 로딩하는데 시간은 좀 걸리지만 정상적으로 돌아가는 것 같다.
Error 2
+) 다음 에러가 발생하는 경우가 있다. 내 경우에 앞에서 말했던 것 처럼 Dataloader 과정 중 발생한 오류였는데, 다음 링크를 통해 해결방법을 찾을 수 있었다.
결론부터 말하면 이 에러는 host와 Docker Container 간의 공유메모리(shm)가 꽉 찼을 때 발생하는 에러이다.
RuntimeError: DataLoader worker (pid 1446913) is killed by signal: Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit.
아래 명령어로 현재 컨테이너 내부의 메모리를 확인할 수 있는데, 이때 shm(shared memory) 파트를 보면, 현재 얼마나 차있는지, 사용가능한지 나와있다. 기본적으로 container를 생성하면 128MB가 할당된다고 하는데, 내 경우에는 Docker 기반의 사내 개발 서버를 활용하고 있기 때문에 64M로 할당된 것 같다. 나같은 경우가 아니라 로컬 서버에서 Docker를 실행하여 개발하는 경우, 컨테이너 생성과정에서 "--shm-size"옵션을 주어서 원하는 크기만큼 공유메모리를 늘려줄수도 있다.
df -h
'사소한 Tip . 오류 해결법' 카테고리의 다른 글
Got error" 'lengths' argument should be a 1D CPU int64 tensor, but got 1D cuda:0 Long tensor " (0) | 2022.06.08 |
---|---|
AssertionError: Torch not compiled with CUDA enabled (0) | 2022.06.08 |
× key board(multiply shortcut) (0) | 2022.05.16 |
[HuggingFace] 허깅페이스 Git lfs (모델 파일 다운로드) (0) | 2022.05.04 |
Ubuntu 메모리 사용량 명령어 (0) | 2022.04.22 |