Docker 딥러닝 실행
Dockerdhk Nvidia Driver가 설치된 후 진행
NVIDIA Container Toolkit 설치
Nvidia docker2와 Nvidia Container Toolkit 차이
- 패키지 저장소 추가
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
- 패키지 최신버전 설치하고 nvidia-container-toolkit 패키지 설치
sudo apt-get update && sudo apt-get install -y nvidia-docker2
-
도커 재시작
sudo systemctl restart docker
-
설치 확인 테스트
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi
OPENCV 관련 설정
Docker에서 opencv-python을 사용하기 위한 설정
docker container 내에서 opencv-python을 설치하고 실행하면서 생긴 문제들
-
libGL.so.1
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
이 문제를 해결하기 위해서 Dockerfile에 아래 내용 추가
RUN apt-get update RUN apt-get -y install libgl1-mesa-glx
-
libgthread-2.0.so.0
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
이 문제를 해결하기 위해서 Dockerfile에 아래 내용 추가
RUN apt-get update && [DEBIAN_FRONTEND=noninteractive] apt-get install -y libglib2.0-0
-
Available platform plugins are: xcb.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/opt/conda/lib/python3.10/site-packages/cv2/qt/plugins" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Available platform plugins are: xcb.
이를 해결 하기 위해서 아래 구문 추가
apt-get update apt-get install -y qt5-default libxcb-xinerama0-dev
GUI로 Docker 실행
우분투는 Xorg
라는 그래픽 프로그램 사용하고 Docker에서 그래픽을 띄어주기 위해서는 호스트의 자원 공유해야 함!
- 즉, 호스트의 Xorg를 컨테이너가 이용
실행옵션을 추가해주면 컨테이너에서도 그래픽을 볼 수 있음
도커를 gui로 실행하는 방법은 두 가지가 있음
- VNC를 이용
- XServer를 공유
Xserver를 공유하는 방법이 훨씬 간단하므로 이를 이용
호스트에서 도커가 xserver와 통신할 수 있도록 설정 docker run 명령어 사용 전에 추가할 수도 있고 다른 터미널을 열고 작업도 가능
xhost + # 모든 클라이언트에 대해서 Host의 xhost 접근 허용
docker run ...
호스트에서 도커가 xserver와 통신할 수 있도록 설정 (다른 터미널을 열고 작업)
Docker 실행 명령어
docker run
--gpus all \ # GPU 사용할 수 있도록
--net=host \ # 로커 PC의 IP와 동일하게
--ipc=host \ # 컨테이너간 소켓통신
-v //.X11-unix:ro \ # Host의 X-window 컨테이너의 X-window 연결
--add-host host.docker.internal:host-gateway \ # Local host 와의 연결
-e DISPLAY=$DISPLAY \ # Host의 DISPLAY ID 전달
--device=/dev/video0:/dev/video0 \ # Host의 카메라 장비를 컨테이너에 전달, 웹캠 사용시 이용
--env QT_X11_NO_MITSHM=1 \ # OpenCV에서 DISPLAY 사용시 필요
-it <도커 이미지> \
/bin/bash
docker run --gpus all -v /tmp/.X11-unix:/tmp/.X11-unix:ro --device=/dev/video0:/dev/video0 -e DISPLAY=$DISPLAY --env QT_X11_NO_MITSHM=1 --name py2 -it pytorch/pytorch