TorchServe(v0.3.0)を使った感想
クイックスタート
READMEにある『Quick start with docker: Start a container with a TorchServe image』に書かれている内容に従えば、環境構築できていればサーバーを起動するところまでは出来ると思います。dockerを使う気がない場合もここを見れば使い方は分かります。
動作確認だけREDMEの"Get predictions from a model"に戻る必要があるのですが、内容としてはcurl
でサンプル画像をダウンロードして、curl
で画像をTorchServeに投げてレスポンスの確認になります。
はまったところ
"Worker died."が良く出る
設定ファイルでjavaのヒープサイズの最大値を上げたり、ジョブのキューサイズを上げると解決するかもしれません。設定ファイルは--ts-config
で指定出来ます。設定ファイルの例としては、こんな感じです。
inference_address=http://0.0.0.0:8080
management_address=http://0.0.0.0:8081
job_queue_size=100
load_models=ssd.mar
default_workers_per_model=1
model_store=/tmp/models
vmargs=-Xmx12g
モデルやハンドラのimportエラーが出る
torch-model-archiver
を実行して生成されるmarファイルですが、--model-file
や--handler
で指定したpythonスクリプトをtar.gz形式で圧縮しているだけなので、モデルのコードがパッケージ化されているか、PYTHONPATH
でパスを通さない限りはimportで失敗します。
torchserveにモデルを配置すれば、REST APIが動くというような状況を作ろうと考えるならば、torchscript形式に変換してからptファイルを作ることが考えられます。このときは--model-file
の指定は要らなくなります。
ハンドラはtorchserveで用意されているBaseHandler
が参考になると思います。継承して使っても良いです。from ts.torch_handler.base_handler import BaseHandler
でインポートできます。他にもハンドラクラスは用意されているので、参考にできると思います。「ts
ってなんだよ」と思われるかもしれませんが、torchserveのモジュール名です。
windows10に実行環境を作る
windowsサーバー2019でしか動作保証が無いと書かれていますが、windows10 HomeでもPython3.6.9で動きました。環境構築はgithub上のドキュメント、「TorchServe on Windows」のバイナリからインストールするコースに従えば使えるようになりました(リンク先はv0.3.0タグのものです)。手順通りにするとmaster
ブランチのコードを使ってしまうので
git checkout -b v0.3.0 refs/tags/v0.3.0
を挟んだほうが安全だと思います。Prerequisitesのリンクはjdk, nodeなどそれぞれバージョンも指定してあるので、リリースブランチに合わせると失敗しないと思います。
もしワーカーが死んだりする場合、pytorchをimportしたときにエラーが出ないか確認してみると良いかもしれません。
OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program.
That is dangerous, since it can degrade performance or cause incorrect results.
The best thing to do is to ensure that only a single OpenMP runtime is linked into the process,
e.g. by avoiding static linking of the OpenMP runtime in any library.
As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to
allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information,
please see http://www.intel.com/software/products/support/.
根本的な解決ではないようですが、Hintに書かれている通りに環境変数KMP_DUPLICATE_LIB_OK
をTrue
に設定すると動くようにはなります。
Discussion