TL;DR
# (事前にカレントディレクトリを変換したいモデルのあるディレクトリへ移動すること)
docker run --rm -v "$(pwd):/src" -it lilacs2039/debian_webasm_webdnn
python /webdnn/bin/convert_keras.py resnet50.h5 --input_shape '(1,224,224,3)' --out output --backend webassembly
※コンパイルするモデルに応じて resnet50.h5 --input_shape '(1,224,224,3)' を適宜修正のこと
はじめに
WEBDNNのWindows版の環境構築が大変だったので、WebAssemblyをコンパイルできる環境をDockerイメージで用意しました。
※ Windows版 環境構築の大変だったところ
- python2/3の使い分けのためにpython3.batを作る
- PATHを通すと環境が汚れる
- PATHを通さない場合、DNNモデルコンパイルのたびにbatファイルを移動するのが大変
- Emscripten・Eigenのインストールが必要
- 時間かかる(Linuxでも同じか…)
環境
- Windows 10 Pro
- Docker for Windows
実行手順
ホスト側ドライブの共有を許可(Docker for Windowsの場合)
タスクトレイのDocker for Windwosアイコン - settings - Shared Drives - マウントしたいドライブにチェックを入れてApply
共有が許可できてるか確認
docker run --rm -v c:/Users:/data alpine ls /data
# 成功例
Administrator
All Users
...
変換したいモデルのあるディレクトリへ移動
(Windowsの場合、以降の処理はPowerShellから実行のこと。
のちに実行する$(pwd)は、コマンドプロンプトだとうまく動かないため)
cd /path/to/model
DockerHubからモデル読み込み・コンテナの実行
- 初回run実行時はDockerイメージがローカルにないので、自動でDockerhubからイメージをダウンロードしてくれる
- --rmオプションは実行終了時に、イメージから生成したコンテナを破棄
- コンパイル後のモデルはホスト側のボリュームに残るのでコンテナは不要(というか、いらないコンテナは逐一消さないとコンテナのリストがすぐいっぱいになる)
- -vオプションでマウントするディレクトリを指定
- ホスト側のカレントディレクトリ($(pwd))を、コンテナ側の/srcにマウントしている
- コンテナの中でlsコマンドを実行することで、ホスト側のファイルが確認できるはず
- -itオプションは、擬似端末(pseudo-tty(text-terminal))を通して(-t)、コンテナを対話的に実行(-i)
- このオプションでコンテナの中に入らないと、後続のモデル変換処理ができない
docker run --rm -v "$(pwd):/src" -it lilacs2039/debian_webasm_webdnn
Dockerコンテナ上でモデルをコンパイル
- コンテナの中(root@4315cf995e5f:/src# などと表示されているはず)から実行すること
- コンパイルするモデルに応じて** resnet50.h5 --input_shape '(1,224,224,3)' ** を適宜修正のこと
- webassembly, webgpu, webglのモデルを生成
- outputフォルダの中にコンパイル後のモデルが保存される
python /webdnn/bin/convert_keras.py resnet50.h5 --input_shape '(1,224,224,3)' --out output
実行例:公式チュートリアルのResnet50コンパイル
次記事をご覧ください。
Dockerイメージの構成
/
├ webdnn : githubからcloneしたwebdnn
├ src : 作業用ディレクトリ