ABEJA Platformでトリガー機能を試してみる

##はじめに
ABEJA Platformは機械学習を実施する際のデータレイク・アノテーション・学習・インフラ運用などをパイプラインで管理・実施いただけるSaaS型のサービスです。
柔軟度が高く、学習によく利用できるフレームワークを利用できるため、MLエンジニアやデータサイエンティストの方が不要な作業をせずにより開発のスピードアップと集中を実施いただけることがメリットです。

## 今回ご紹介するもの
#### 「 ABEJA Platformトリガー機能 」


![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/2ea47390-4d56-59f2-5743-2946e35159fe.png)



## 「 ABEJA Platformトリガー機能 」って？
ABEJA Platformで学習、デプロイしたモデルを活用し、特定のアクション時にそのモデルを利用し、推論を実施できる強力な機能となります。比較として、AWSのSageMakerではLambdaやAPI Gatewayと連携して利用して実現も可能ですが、ABEJA Platformでは、機能としてコンソール上、CLI/SDKから利用可能で容易にです。現在は、アクショントリガー種類として以下の2種類が対応しています。

- **データレイクへのファイルアップロード**
    - アップロード先のデータレイクチャンネルを選択
- **スケジュール**
    - スケジュールの場合以下の値を設定します。
        - 実行スケジュール：[スケジュールの書式](https://developers.abeja.io/function/model/scheduler/)
        - タイムゾーン (UTCやJSTなど)

今回は、データレイクチャンネルにアップロードした画像の判定をトリガーを実施してみてみます。サンプル画像はこちら。
![download.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/fd0e956c-fbc4-a6fb-c6a9-cfd8611bd947.jpeg)

それでは、早速実施していきましょう。

## 早速、設定
- まずは、データレイクのチャンネルを作成します。今回はトリガーをデータレイクにファイルをアップロードした場合に推論を実施するため、INとOUT用の2つのチャンネルを作成します。
 <img width="1439" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/e1cabd33-dfd5-c55b-e91f-1628e3cb2d28.png">

- 「モデル」の「デプロイメント」に**「トリガー」**というタブがありますので、こちらを選択
 <img width="1454" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/9e9a3a17-f499-c8b8-687c-0e2cb7f12423.png">
- 右側の**「トリガーの作成」**ボタンを選択
- 各トリガーに利用する値を入力
    - `バージョン`：デプロイを実施するモデルのバージョンを選択
    - `入力サービスタイプ`：「datalake」もしくは「Schedule」を選択
    - `入力に用いるチャンネル`：入力に利用するチャンネルを選択　例：「demo-channel-in」
    - `出力サービスタイプ`：「datalake」のみ
    - `出力に用いるチャンネル`：出力に用いるチャンネル　例：「demo-channel-out」
    - `リトライ回数`：「0 - 9」の回数を指定可能
<img width="718" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/ae4c720c-4088-b024-4e94-cbaa11eb7ef4.png">

- これでトリガーの設定は完了です！早速データレイクのチャンネルにファイルをアップロードしてみましょう。**「アップロード」**からファイルをアップロードしていきます。
<img width="1430" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/01987cfd-24f4-f64e-38d4-84549ec1d08c.png">
- アップロードを実施するファイルの選択。
<img width="897" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/9258b374-b50c-561d-59f7-272ba89c9068.png">
- メタデータの追加を実施。( ※ 任意です。
<img width="891" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/3ceb9536-f718-04a8-19cb-9065ab7aa655.png">
- **「アップロード」**を実施
<img width="891" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/cd60c7b6-c41a-0d39-5824-bc9eafe0654c.png">


- 無事にデータレイクチャンネルにアップロードが完了しました！問題なければ、しばらくすると出力用のデータレイクチャンネルにアップロードした画像の分類判定結果がjsonで出力され格納されるはずです。




<img width="1443" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14014/0d77416e-90b4-0bc9-04c4-24ab5807101f.png">


- 少し待つと、出力データレイクチャンネルにjsonが出力され格納されています！



- jsonの中身を見てみましょう。

```json:run-XXXXXXXXXX_0.json
[
	{
		"label": "beagle",
		"probability": 0.8021920323371887,
		"id": "n02088364"
	},
	{
		"label": "English_foxhound",
		"probability": 0.1348923146724701,
		"id": "n02089973"
	},
	{
		"label": "Walker_hound",
		"probability": 0.041955601423978806,
		"id": "n02089867"
	},
	{
		"label": "Labrador_retriever",
		"probability": 0.007846538908779621,
		"id": "n02099712"
	},
	{
		"label": "redbone",
		"probability": 0.005370880011469126,
		"id": "n02090379"
	}
]
```
キチンと `beagle`として`0.8021920323371887`の確率で推論できています。 (他に `English_foxhound`なども判定されています)


## まとめ
今回はjsonを出力する挙動をサンプルとして実施しましたが、活用方法として**画像の前処理など**がデータレイクチャネルに画像ファイルをアップロードするだけで実施できたりとかなり有用な使い方が可能です！
次回は画像の前処理周りをこのトリガー機能を使ってご紹介します。


## 最後に
ABEJA Platformは、トライアルも提供しています。気になられた方は、是非、お気軽にお問い合わせください！また、フォーラムもありますので、是非、ご活用ください。

**ABEJA Platformに関するお問い合わせ**
https://abejainc.com/platform/ja/contact/

**ABEJA Platform Forum**
https://forums.abeja.io/