作成したモデルをABEJA Platformでデプロイする

## 概要
#### ABEJA Platformにモデルをデプロイをしてエンドポイントを利用できるようにします。

## デプロイについて
ABEJA Platformでは、Platform上でモデルを作成することも可能ですし、外部で作成したモデルを利用してサービス提供をするエンドポイントを用意することも可能です。
今回は、以前、紹介した[ローカル学習 (train-local) で作成したモデル](https://qiita.com/koba_taka/items/73f8faee85cd8226b7fb)を参考に、デプロイする手順をご紹介します。

![deploy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/25ef2bb3-7935-018d-8d5d-091ccff9496f.png)

## デプロイ前の準備
デプロイ前に作成したモデルをABEJA Platformで管理するために、「モデル」作成を行います。
[ローカル学習 (train-local) で作成したモデル](https://qiita.com/koba_taka/items/73f8faee85cd8226b7fb)では、ローカルにモデルファイル[model.h5]があるため、以下のコマンドを入力し、zipに圧縮します。 ※ モデルファイルがある階層でコマンド実施してください。

```
$ zip -r main.zip ./*
```
すると、`model.h5(モデルファイル)`や`predict.py`などのファイルを圧縮し、`main.zip(圧縮ファイル)`が生成されますので、こちらをダウンロードしておきます。

## Platform上でモデルの作成
- ABEJA Platform管理画面にログイン
- ログイン後、左メニュー一覧より**「モデル」**を選択します。
<img width="1666" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/68231172-6e44-c57e-f2f8-7e834e331038.png">

- 今回は、まずモデル作成をするため、 **「モデル作成」**を選択
- モデル作成に必要な情報を入力します。
    - `名前`：モデル名
    - `詳細`：モデルの詳細・説明など
    - `バージョン`：バージョン管理を行うため、バージョン情報
    - `作業後にデプロイ`：モデル作成時にデプロイも一緒に実施する場合はチェック
    - `デプロイ名`：デプロイを一緒にする場合、デプロイ名を指定
    - `アップロード`：ローカルで作成した学習モデルなどを利用する際、アップロードを選択
    - `ランタイム`：実行する際のフレームワークなどを選択 (all-cpuやall-gpuが一般的)
        - 詳細は[こちら](https://developers.abeja.io/organization/model/)の「イメージ」を参考ください
    - `モデルハンドラー`：モデルを呼び出すためのハンドラ。サンプルでは`predict.py`の`handler`を呼び出し。 
<img width="1383" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/a2a9fe6f-a160-5075-bf76-1455e0f50ff9.png">

- ソースコードのアップロード
    - ソースコードの箇所をクリックし、[main.zip]をアップロード
<img width="1379" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/14c8e843-0b0d-5d4e-80ef-a3519e04fc27.png">

- **「モデル作成」**を選択
    - ソースコードのアップロードが開始され、モデルが作成されます。
<img width="1317" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/21c98c5a-5efb-0b81-e52f-8af748535b0e.png">

- ABEJA Platform上作成されたモデルはバージョン管理され、ソースコードも管理されます。 (外部で作成したモデルでも、バージョン管理/ソースコード管理ができるのいいですね)
<img width="1387" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/792a27a0-0f37-48ff-11d9-f592e0a2e9b9.png">
<img width="1382" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/2d99393b-4b81-f7b7-a1e6-18179814948d.png">

## Platform上でのデプロイ
- モデル作成時に「作業後にデプロイ」を選択していた場合、すでにデプロイは完了しています。
    - 別途、「デプロイメント」画面より**「デプロイメント作成」**を実施することで作成は可能です。
- デプロイが完了したら、指定したデプロイ名の項目を開き、**「HTTPサービス」**を作成します。
<img width="1385" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/ae66bc84-740a-ec84-5197-694df34c91f1.png">

- HTTPサービスは提供するサービスインフラ(スペックなど)を選択します。
    - `バージョン`：モデルのバージョン
    - `インスタンスタイプ`：サービス提供するスペック `cpu-0.25, cpu-1, cpu-2, cpu-4`から選択
    - `インスタンス数`：1〜32まで選択可能。提供サービスのリクエスト数などに応じて選択
    - `環境変数`：提供時に環境変数を利用する場合は、入力可能
<img width="540" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/32a7a919-6d2c-dd11-d7a8-c042682a4e56.png">

- **「HTTPサービス作成」**を選択すると「HTTPサービス」が作成されます。
<img width="1214" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/3ac69a38-8eac-7ca1-3849-f1288841628a.png">

- 作成時はステータスが**「処理中」**ですが、**「使用可能」**になれば利用可能となります。
<img width="1205" alt="12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/4ea26f15-9dc9-8aa0-7cca-1f5a48442a41.png">

- 「デプロイメント詳細」画面の **「エンドポイント」**がHTTPサービスのサービスエンドポイントとなります。作成したモデルでのサービス提供を実施する場合は、こちらのエンドポイントをご利用ください。
<img width="675" alt="13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/cd30361c-0169-3ba5-2123-8c4524d564f4.png">


## HTTPサービスの内容
- HTTPサービスには「ログ」や「メトリクス(負荷状況などのモニタ)」、簡易的な「確認」を実施できます。

    - **ログ**
        - デプロイ後のHTTPサービス作成時のログや、リクエストにおける処理のログなどが確認できます。
        <img width="1197" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/def4dac5-9f42-7ba5-d072-51c07d41fb02.png">

    - **メトリクス**
        - HTTPサービスにおけるCPU負荷やリクエスト数、レイテンシなどを確認できます。
        <img width="1149" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/5bc194bd-133f-7590-472b-64d5629f5ea7.png">

    - **確認**
        - 作成したHTTPサービスの簡易的な確認を実施できます。
        - 予め用意されたプリセットの画像を利用し、HTTPリクエストを発生させたり、独自でオリジナルの画像をアップロードし、サービスの動作確認を実施可能です。
        <img width="676" alt="14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/48b92c19-8f88-f4c6-325b-048c5f7df506.png">
<img width="673" alt="15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/62befdd8-651c-082c-f1ba-9dedd05dbd4b.png">


## 最後に
今回のサンプルでは、犬(dog) or 猫(cat)というシンプルな画像分類でのモデルを利用して、HTTPサービスを作成するところまでを紹介しました。ABEJA Platform上で作成したモデルだけでなく、ローカル環境や外部で作成したモデルをABEJA Platformでバージョン管理、サービス提供をまるっと任せれるのは、便利ですね。
次回はもう少し、いろいろなモデルをユースケースを踏まえご紹介できればと思います。また、ABEJA Platformでは、トライアルも提供しています！気になられた方は、是非、お気軽に[お問い合わせ](https://abejainc.com/platform/ja/contact/)ください。

ABEJA Platformは、ユーザとコミュニティを形成しながら、速いスピードで開発を進めていきます。
以下、フォーラムもありますので、是非、ご活用ください！

[ABEJA Platform Forums](https://forums.abeja.io/)