【DataRobot】Visual AIのモデルをデプロイ

#はじめに
こちら↓の記事で「しゃぶしゃぶ用のお肉の部位を分類」をしたので、ついでにDataRobotで作成した画像類別モデルをデプロイします。
https://qiita.com/zakuzakuzaki/items/c5f577fd6559ac6427ef

デプロイと言っても、モデルをダウンロードできるわけではなく、APIを使ってデータをアップロード、結果をダウンロードする形になります。

なぜか公式通りやってもできなかったので、結構時間かかりました。


#実行環境
OS：Ubuntu18.04LTS
Python：3.6.9

#検証用データ作成
画像ファイルをアップロードする際は、zipファイルで固めてからアップロードします。
複数枚固めれば、いっきにアップロードできますが、今回は１枚を使用します。
下記検証用画像、001b.pngを圧縮し、001b.zipを作成しました。
![b001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/66c79c2b-9d64-be31-0707-6e7a0fb65080.png)
ちなみにこれはロースです。


#デプロイ手順
デプロイしたいモデルを選択し、「予測＞デプロイ」からモデルをデプロイします。
![deploy.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/386acf24-45d7-aeab-421e-c6429645262b.png)

適当に名前をつけてデプロイします。
![deproy.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/4042c345-4489-31f6-e259-f63a083b11cb.png)

デプロイしたモデルを使用する方法がいくつかあるのですが、画像をアップロードできるのは「バッチ＞APIクライアント」だけでした。
他の方法はcsvファイルしか受け付けてくれませんでした。
下記画像の赤色塗りつぶし部分は、いわゆるトークンキーなので隠しました。
![deply2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/3adbdeea-a380-09ab-bc5a-645f37fa3ef3.png)

このプログラムをコピーして、「datarobot-predict.py」という名前で保存します。
プログラム中のusageに書いてある通り、インプットファイルと結果出力用のファイルを指定してpythonファイルを実行します。
するとこんなエラーが出ます。

```shell
$ 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 ドキュメント](https://datarobot-public-api-client.readthedocs-hosted.com/en/v2.22.1/setup/getting_started.html#use-a-configuration-file)のUse a Configuration Fileを参考にして、コンフィグファイルを作成します。

```shell:~/.config/datarobot/drconfig.yaml:
token: yourtoken（＝上記画像の赤色塗りつぶしした部分）
endpoint: https://app.datarobot.com/api/v2
```
API_KEYがtoken、
BATCH_PREDICTIONS_URLがendpoint
を意味します。

このコンフィグファイルを作成することでうまく設定でき、アップロードできるようになります。
ちなみに１枚類別するのに約１分かかっています。
バッチ処理だから遅いのですかね。

```shell

$ 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.
```
結果を確認してみましょう。

![out.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/60c321a9-7703-7059-aeb9-a19e7a8de332.png)

結果、無事にchuck（ロース）と類別されました。

#おわりに
Visual AIのモデルのデプロイを行いました。
途中でトラップがありましたが、無事解決できました。