注意
まず前もってこの記事は、説明が端折らせている部分がありますが、やったことの備忘録なので、流れ沿って行けばほぼ大丈夫だと思います。
目次
1.事前環境
2.onnxruntimeのgithubからcloneしてきて、dockerをdockerfileからビルドする。
3.ビルドが終わったら、さっそく建てる。
4.最低限必要なもののインストール
5.サンプルのclone
6.sample.pyを動かしながら、足りないものを探していく。
7.x-windowを立てて実行
8.もしうまくいかない場合
9.まとめ
事前環境
dockerなどのinstallは省きます。
また、windows11+wsl2+cuda on wsl2がきちんと動くのは
は別のコンテナで確認できているものとします。
たとえばcudfなどのdockerを使うと確認がしやすいかと思います。
onnxruntimeのgithubからcloneしてきて、dockerをdockerfileからビルドする。
git clone https://github.com/microsoft/onnxruntime.git
cd ./onnxruntime/dockerfiles
git submodule update --init
docker build -t onnxruntime-cuda -f Dockerfile.cuda ..
なぜか一回目cloneしたときはダメだったが、次の日にコピペでDockerfile.cudaを作成したらうまくいった。よくわからん。
ビルドが終わったら、さっそく建てる。
docker run --gpus all -it onnxruntime-cuda
最低限必要なもののインストール
pythonとかcuda関係は必要なものが入っているが、sudoとかgitとかそこらへんとサンプルを動かすためのファイルがないが、まずはsudoとgitをインストール。
(pythonとかも複数入っていて、気持ち悪い環境)
apt update
apt install sudo
sudo apt install git
サンプルのclone
サンプルはこちらからお借りします。
https://github.com/Kazuhito00/yolox-bytetrack-mcmot-sample
git clone https://github.com/Kazuhito00/yolox-bytetrack-mcmot-sample.git
cd yolox-bytetrac-mcmot-sample
sample.pyを動かしながら、足りないものを探していく。
/yolox-bytetrack-mcmot-sample# python3 sample.py
Traceback (most recent call last):
File "sample.py", line 7, in <module>
import cv2
ModuleNotFoundError: No module named 'cv2'
pip install opencv-contrib-python
pip install opencv-python
/yolox-bytetrack-mcmot-sample# python3 sample.py
Traceback (most recent call last):
File "sample.py", line 7, in <module>
import cv2
File "/usr/local/lib/python3.8/dist-packages/cv2/__init__.py", line 8, in <module>
from .cv2 import *
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
https://cocoinit23.com/docker-opencv-importerror-libgl-so-1-cannot-open-shared-object-file/
こちらを参考に
sudo apt-get install libgl1-mesa-dev
:/yolox-bytetrack-mcmot-sample# python3 sample.py
Traceback (most recent call last):
File "sample.py", line 11, in <module>
from bytetrack.mc_bytetrack import MultiClassByteTrack
File "/yolox-bytetrack-mcmot-sample/bytetrack/mc_bytetrack.py", line 7, in <module>
from bytetrack.tracker.byte_tracker import BYTETracker
File "/yolox-bytetrack-mcmot-sample/bytetrack/tracker/byte_tracker.py", line 3, in <module>
from .kalman_filter import KalmanFilter
File "/yolox-bytetrack-mcmot-sample/bytetrack/tracker/kalman_filter.py", line 3, in <module>
import scipy.linalg
ModuleNotFoundError: No module named 'scipy'
pip install scipy
ここらへんで、sampleのgithubを見たら、使ってるものの一覧があったので今までinstallしたもの(onnxruntime,opencv,scipy)以外をインストールしたり、エラー対策でインストール
apt install g++
sudo apt install python3.8-dev
source ~/.bashrc
pip install cython
pip install lap
pip install cython-bbox
/yolox-bytetrack-mcmot-sample# python3 sample.py
[ WARN:0@0.119] global /io/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
仮想環境だからそりゃそう。
:/yolox-bytetrack-mcmot-sample# python3 sample.py --movie test.mp4
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/usr/local/lib/python3.8/dist-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.
Aborted
https://qiita.com/seigot/items/2df59ab8853e004fb3ed
ここまできたらゴール直前?
x-windowを立てて実行
https://wisteriahill.sakura.ne.jp/CMS/WordPress/2020/09/02/docker-desktop-for-windows-x-window-gui/
これを自分は参考にした(セキュリティは知らんぷり)。
別のコンソールを立ち上げて、
ipconfig
そのipアドレス(なんでもいいわけではないと思うので一番上のやつと思ったら、どうやらWSLのじゃないとだめ見たい。それであればうまくいった)
もしくは以下のコマンドで出した値をいれる。
powershell -Command "(Get-NetIPConfiguration | Select-Object IPv4Address, InterfaceAlias|Where-Object {$_.InterfaceAlias -eq 'vEthernet (WSL)'}).IPv4Address.IPAddress"
export DISPLAY=XXX.XXX.XX.XX:0.0
source ~/.bashrc
python sample.py --movie test.mp4
ちなみにsample.pyは最初はCPUオンリーの設定になっているので、yoloxの関数に渡しているCPUほにゃららをCUDAほにゃららに変えればCUDA環境にできます。
やったね。
もしうまくいかない場合:
それまで調査していく段階で
https://medicalfields.jp/blog/python/ubuntu%E3%81%A7python3%E3%81%A7pyqt5%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E3%81%A7%E3%82%8B/
の内容を実行している。
(pyqtのインストール)
これで自分は実行できました。
別のコンソールを立てて(今のコンソールでexitするとすべてパァになるので注意)
上書き保存しましょう。
docker commit magical_morse onnxruntime-cuda
眠いのでおわり。
まとめ
コンソール
ipconfig
でwslのipコードを取得
onnxruntime.cudaのdockerコンソール
apt update
apt install sudo
sudo apt install git
git clone https://github.com/Kazuhito00/yolox-bytetrack-mcmot-sample.git
cd yolox-bytetrac-mcmot-sample
pip install opencv-contrib-python
pip install opencv-python
sudo apt-get install libgl1-mesa-dev
apt install g++
sudo apt install python3.8-dev
source ~/.bashrc
pip install cython
pip install lap
export DISPLAY={WSLのipアドレス}:0.0
source ~/.bashrc
python sample.py --movie test.mp4
独り言
自然言語処理から興味が移ったというより、一度やって成功させて、exit()してパァにしたので、書いた。
もうこれで忘れない。
doc2vecとか自然言語処理で遊びたいが、時間がない....
でもyoloxとかも面白いから全然あり。
yolov5_xとかもonnx形式で転がってないかなぁ。