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을 설치하고 실행하면서 생긴 문제들

  1. 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
    
  2. 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
    
  3. 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로 실행하는 방법은 두 가지가 있음

  1. VNC를 이용
  2. 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

태그:

카테고리:

업데이트: