오류 내용

RuntimeError: DataLoader worker (pid 3094) 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.

pytorch container에서 학습을 진행하는데

지금까지 한 번도 발생한 적이 없는 오류가 발생함!



해결책

대략 두 가지 방법이 나왔는데

  1. docker container 설정에 **--ipc=host** 추가

    • 컨테이너가 host와 같은 ipc namespace를 사용하도록 설정
  2. docker container 설정에 --shm-size 를 추가하여 넉넉한 메모리 공간 확보

    • Default : --shm-size = 4mb


--ipc=host 추가

  1. container 재생성

  2. container 이미지로 만들어서 다시 실행

    • container stop

      docker stop [container 이름]
      
    • container 이미지로 만들기

      docker commit [container 이름] [image 이름]
      
    • 컨테이너 run으로 실행

      docker run [설정 ... ]  [이미지 이름]
      
  • 추가로 알아보고 싶은 방법

    이미 진행 중인 컨테이너에 설정을 추가하는 방법이 가능할까?

    동일한 조건에서 --ipc=host 라는 설정이 있는 컨테이너와 없는 컨테이너를 만들고 docker inspect를 이용하여 설정을 확인했는데

    "HostConfig" 에서 "IpcMode": "host", "SecurityOpt": ["label=disable"] 이 두 가지 설정이 다르게 나타났는데

    이를 /var/lib/docker/containers/[container_id]/config.v2.json 에서 변경해보려고 했는데 "HostConfig" 가 존재하지 않음.. ㅠㅠ



참고
  1. https://github.com/ultralytics/yolov3/issues/283
  2. https://graycha.tistory.com/208

카테고리:

업데이트: