OpenPoseをSingularity上で実行する
はじめに
- OpenPoseについての話(唐突なのはいつものこと)
- DockerだとGUI表示がめんどくさい(GPU設定も)
- 多分SingularityのほうがDockerの設定よりも楽だと思う
- まだ要検討することもあるが一通り実行できたのでまとめていく
- 一応コードをそのままコピペで実行できるようにしている
- 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"
実行時にエラーがあるので以下のコードで対応していきます.
$ 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の導入に当たるエラー集
正直いるかいらないかはわかりませんが,自分が出会ったエラーについてまとめていきます.
# エラー
$ ./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
$ echo $DISPLAY
:0.0
$ export DISPLAY=:1
=========================================================
# エラー
$ ./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?
Ubuntuで簡単にデスクトップ録画をし、gifに変換してQiitaに投稿する方法
Author And Source
この問題について(OpenPoseをSingularity上で実行する), 我々は、より多くの情報をここで見つけました https://qiita.com/Nahuel/items/5a7e1105a3fdfd71bd19著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .