#はじめに
こちら↓の記事で「しゃぶしゃぶ用のお肉の部位を分類」をしたので、ついでにDataRobotで作成した画像類別モデルをデプロイします。
https://qiita.com/zakuzakuzaki/items/c5f577fd6559ac6427ef
デプロイと言っても、モデルをダウンロードできるわけではなく、APIを使ってデータをアップロード、結果をダウンロードする形になります。
なぜか公式通りやってもできなかったので、結構時間かかりました。
#実行環境
OS:Ubuntu18.04LTS
Python:3.6.9
#検証用データ作成
画像ファイルをアップロードする際は、zipファイルで固めてからアップロードします。
複数枚固めれば、いっきにアップロードできますが、今回は1枚を使用します。
下記検証用画像、001b.pngを圧縮し、001b.zipを作成しました。
ちなみにこれはロースです。
#デプロイ手順
デプロイしたいモデルを選択し、「予測>デプロイ」からモデルをデプロイします。
デプロイしたモデルを使用する方法がいくつかあるのですが、画像をアップロードできるのは「バッチ>APIクライアント」だけでした。
他の方法はcsvファイルしか受け付けてくれませんでした。
下記画像の赤色塗りつぶし部分は、いわゆるトークンキーなので隠しました。
このプログラムをコピーして、「datarobot-predict.py」という名前で保存します。
プログラム中のusageに書いてある通り、インプットファイルと結果出力用のファイルを指定してpythonファイルを実行します。
するとこんなエラーが出ます。
$ python datarobot-predict.py 001b.zip output.csv
2020-12-11 23:28:51,769 datarobot-predict.py:64 INFO Uploading Zip file to DSS for deployment ID 5fd33e89a93c53e1c4235051
Traceback (most recent call last):
File "/home/ubuntu/.local/lib/python3.6/site-packages/datarobot/client.py", line 75, in Client
drconfig = _config_from_env()
File "/home/ubuntu/.local/lib/python3.6/site-packages/datarobot/client.py", line 286, in _config_from_env
raise ValueError(e_msg)
ValueError: Incomplete DataRobot configuration specified in environment variables; both DATAROBOT_ENDPOINT and DATAROBOT_API_TOKEN must be specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "datarobot-predict.py", line 112, in <module>
sys.exit(main())
File "datarobot-predict.py", line 68, in main
image_dataset = dr.Dataset.create_from_file(file_path=input_file)
File "/home/ubuntu/.local/lib/python3.6/site-packages/datarobot/models/dataset.py", line 166, in create_from_file
response = cls._client.build_request_with_file(
File "/home/ubuntu/.local/lib/python3.6/site-packages/datarobot/client.py", line 212, in __get__
return self.fget()
File "/home/ubuntu/.local/lib/python3.6/site-packages/datarobot/client.py", line 207, in get_client
return _global_client or Client()
File "/home/ubuntu/.local/lib/python3.6/site-packages/datarobot/client.py", line 81, in Client
raise ValueError("No valid configuration found")
ValueError: No valid configuration found
プログラムがバグっているのか、API_KEY(APIトークン)とBATCH_PREDICTIONS_URL(エンドポイント)をうまく設定できていないことが原因です。
そこで、DataRobot Python Client ドキュメントのUse a Configuration Fileを参考にして、コンフィグファイルを作成します。
token: yourtoken(=上記画像の赤色塗りつぶしした部分)
endpoint: https://app.datarobot.com/api/v2
API_KEYがtoken、
BATCH_PREDICTIONS_URLがendpoint
を意味します。
このコンフィグファイルを作成することでうまく設定でき、アップロードできるようになります。
ちなみに1枚類別するのに約1分かかっています。
バッチ処理だから遅いのですかね。
$ python datarobot-predict.py 001b.zip output.csv
2020-12-11 22:55:46,802 datarobot-predict.py:64 INFO Uploading Zip file to DSS for deployment ID 5fd33e89a93c53e1c4235051
2020-12-11 22:56:28,488 datarobot-predict.py:72 INFO Creating Batch Prediction job for deployment ID 5fd33e89a93c53e1c4235051
2020-12-11 22:56:51,334 datarobot-predict.py:105 INFO Finished Batch Prediction job ID 5fd37a8d6e4ff7adb9728fb0 for deployment ID 5fd33e89a93c53e1c4235051. Results downloaded to output.csv.
結果を確認してみましょう。
結果、無事にchuck(ロース)と類別されました。
#おわりに
Visual AIのモデルのデプロイを行いました。
途中でトラップがありましたが、無事解決できました。