OpenPose를 Singularity에서 실행

소개


  • OpenPose에 관한 이야기(당돌한 것은 언제나)
  • OpenPose: htps : // 기주 b. 코 m / C 무 ぺ rp p tha l - m 푸친 g ぁ b / 오 펜 포세

  • Docker라면 GUI 표시가 귀찮아 (GPU 설정도)
  • 아마도 Singularity 쪽이 Docker의 설정보다 편하다고 생각한다
  • 아직도 검토할 수도 있지만 일대로 실행할 수 있었으므로 정리해 간다
  • 일단 코드를 그대로 copipe로 실행할 수 있도록 하고 있다
  • version1.1.0은 애교라고 하는 것으로

  • 실행 환경



    이번 시도한 환경은 다음과 같습니다.
    OS: Ubuntu 18.04 LTS
    CPU: i3-4130 3.40GHz
    메모리: 16GB
    GPU: GeForce GTX 1660 Ti (6GB)

    1. Singularity 및 Nvidia-Docker 설치



    Singularity 설치에 대해서는 이전 기사에서 언급했으므로 다음 기사를 참조하십시오.
    Singularity를 ​​설치하고 실행해 보았습니다.

    또 nvidia-docker에 대해서는 이쪽의 기사를 알기 쉬웠습니다.
    nvidia-docker 2를 Docker CE (안정 버전)와 함께 Ubuntu 18.04에 설치

    설치까지 할 수 있으면 k입니다.

    2. OpenPose 도입



    이번에는 Singularity 샌드 박스의 방법을 설명합니다.
    다음 코드로 DockerHub에서 OpenPose를 다운로드하여 샌드 박스화합니다.
    다운로드에 시간이 걸린다고 생각합니다만, 기장에 기다리고 있으면 문제 없습니다.
    $ sudo singularity build --sandbox openpose_box docker://garyfeng/docker-openpose:latest
    

    여기서 nvidia-docker를 시작하는 작업을합니다.
    ※이유는 나중에 에러집에서 접해 갑니다.
    시작하면 exit해 주셔서 문제 없습니다.
    $ sudo nvidia-docker run -it --rm garyfeng/docker-openpose:latest
    $ exit
    

    그런 다음 샌드 박스화 된 OpenPose를 Singularity에서 실행하고 다음 디렉토리로 이동합니다.
    $ singularity shell --nv openpose_box
    $ cd openpose_box/openpose-master
    

    여기서 OpenPose를 실행하면 다음과 같은 오류가 발생하지만 Window가 상승한다고 생각합니다.
    $ ./build/examples/openpose/openpose.bin --video examples/media/video.avi
    Starting pose estimation demo.
    Auto-detecting GPUs... Detected 1 GPU(s), using them all.
    Starting thread(s)
    Gtk-Message: Failed to load module "gail"
    Gtk-Message: Failed to load module "atk-bridge"
    Gtk-Message: Failed to load module "canberra-gtk-module"
    

    ※실행 결과의 일부(OpenPose의 샘플 동영상)


    런타임에 오류가 있으므로 다음 코드로 대응합니다.
    $ exit # Singularityから抜け出す
    $ sudo singularity shell --writable  openpose_box/ # sudoで書き込み
    $ apt-get update
    $ apt-get install libatk-adaptor libgail-common
    $ apt install libcanberra-gtk-module libcanberra-gtk3-module
    $ exit # Singularityから抜け出す
    
    # 以下前の操作と同様
    $ singularity shell --nv openpose_box
    $ cd openpose_box/openpose-master
    $ ./build/examples/openpose/openpose.bin --video examples/media/video.avi
    

    2.1 OpenPose의 도입에 해당하는 에러집



    솔직한지 아니면 모르겠지만, 자신이 만난 에러에 대해 정리해 갑니다.

    오류 1
    # エラー
    $ ./build/examples/openpose/openpose.bin --video examples/media/video.avi
    Starting pose estimation demo.
    Auto-detecting GPUs... Detected 1 GPU(s), using them all.
    Starting thread(s)
    No protocol specified
    
    (OpenPose 1.1.0:4279): Gtk-WARNING **: cannot open display: :0.0
    

    디스플레이가 열리지 않는다고 알려져 있으므로 호스트 측의 DISPLAY 값을 확인하고 Singularity의 DISPLAY 값을 변경합시다.

    호스트측
    $ echo $DISPLAY
    :1
    

    컨테이너측(Singularity)
    $ echo $DISPLAY
    :0.0
    $ export DISPLAY=:1
    

    ================================================== =======

    오류 2
    # エラー
    $ ./build/examples/openpose/openpose.bin --video examples/media/video.avi
    Starting pose estimation demo.
    
    Error:
    Cuda check failed (30 vs. 0): unknown error
    
    Coming from:
    - src/openpose/utilities/cuda.cpp:getGpuNumber():47
    - src/openpose/utilities/cuda.cpp:cudaCheck():36
    - src/openpose/utilities/cuda.cpp:getGpuNumber():57
    - ./include/openpose/wrapper/wrapper.hpp:configure():947
    terminate called after throwing an instance of 'std::runtime_error'
      what():  
    Error:
    Cuda check failed (30 vs. 0): unknown error
    
    Coming from:
    - src/openpose/utilities/cuda.cpp:getGpuNumber():47
    - src/openpose/utilities/cuda.cpp:cudaCheck():36
    - src/openpose/utilities/cuda.cpp:getGpuNumber():57
    - ./include/openpose/wrapper/wrapper.hpp:configure():947
    
    Aborted
    

    이 부분이 nvidia-docker를 시작하는 이유입니다.
    아마도 nvidia-docker를 한 번 시작하지 않으면 Cuda를 확인할 수 없습니까? 그렇게 되어, 그것을 회피하기 위한 처리가 됩니다.
    이것에 관해서는 나도 잘 모르기 때문에 교수해 주시면 다행입니다.

    요약


  • Singularity에서 OpenPose를 실행했습니다.
  • 나는 Docker보다 다루기 쉽다고 느꼈다. (원래 Singularity를 ​​만졌던 경위도 있지만)
  • 아직 알려지지 않은 문제가 있다고 생각하기 때문에, 사쿠로 구현하고 싶은 사람은 Docker 쪽을 추천한다.

  • 참고문헌



    OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation
    OpenPose - Quick Start
    garyfeng/docker-openpose
    OpenPose1.3.0을 Docker에서 이동
    ubuntu에서 root시에 cannot open display가 되는 건
    Failed to load module “canberra-gtk-module” … but already installed
    How to install gail and atk-bridge?
    우분투에서 쉽게 데스크톱 녹화를하고 gif로 변환하여 Qiita에 게시하는 방법

    좋은 웹페이지 즐겨찾기