0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Onnxruntimeのcudaのdockerファイルを使って、Windows11+wsl2+dockerのGUI環境を整える。

Last updated at Posted at 2022-05-17

注意

まず前もってこの記事は、説明が端折らせている部分がありますが、やったことの備忘録なので、流れ沿って行けばほぼ大丈夫だと思います。

目次

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形式で転がってないかなぁ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?