ModelOps - 初めてのGITモデルのインポートとデプロイ

著者  Pablo Escobar de la Oliva
最終更新日 2022年10月5日

# 概要

このチュートリアルはVantage ModelOpsを初めてご利用になる方を対象としたクイックスタートチュートリアルです。このチュートリアルでは、ModelOpsで新しいプロジェクトを作成し、必要なデータをVantageにアップロードし、コードテンプレートを使用してModelOpsのGITモデルの方法論に従ってデモモデルのライフサイクルを完全に追跡することができるようになります。

# 前提条件

・Teradata VantageインスタンスとClearScape Analytics（ModelOpsを含む）へのアクセス。

・Jupyterノートブックを実行する機能

:::note info
Vantageの新しいインスタンスが必要な場合は、[Google Cloud](https://qiita.com/ykswi/items/10a382de5fa5a4a42c50)、[Azure](https://qiita.com/ykswi/items/2c30aa1f5413b16c838c)、[AWS](https://qiita.com/ykswi/items/fba559149ad568678d58)のクラウドにVantage Expressという無料版をインストールすることができます。また、[VMware](https://qiita.com/ykswi/items/ebe1d854c38db9bb0f51)、[VirtualBox](https://qiita.com/ykswi/items/ffadaa375add309f2075)、または[UTM](https://qiita.com/ykswi/items/94995954ae723185c2f7)を使用して、ローカルマシン上でVantage Expressを実行することもできます。
:::

# 必要なファイル

まず、このチュートリアルに必要なファイルをダウンロードすることから始めましょう。これら4つの添付ファイルをダウンロードし、Notebookのファイルシステムにアップロードしてください。

[ModelOpsトレーニングノートブックをダウンロードする](https://quickstarts.teradata.com/modelops/_attachments/ModelOps_Training.ipynb)

[GITモデル用ModelOps運用ノートブックダウンロード](https://quickstarts.teradata.com/modelops/_attachments/ModelOps_Operationalize.ipynb)

[デモユースケース用のデータファイルのダウンロード](https://quickstarts.teradata.com/modelops/_attachments/ModelOps_Data_files.zip)

または、以下のレポをgit cloneしてください。

```:git_clone
git clone https://github.com/willfleury/modelops-getting-started
git clone https://github.com/Teradata/modelops-demo-models/
```

# データベースとJupyter環境のセットアップ

ModelOps_Training Jupyter Notebookに従って、デモに必要なデータベース、テーブル、ライブラリのセットアップを行います。

### メソドロジーにおける当社の位置づけを理解する

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/d9a8a72e-8737-c722-2296-3f8f0246f46e.png)

### 新規プロジェクトの作成、または既存のプロジェクトの使用

##### 新規プロジェクトの追加

・クリエイト・プロジェクト
・詳細
・名前 デモ：自分の名前でよいです
・説明 ：ModelOpsのデモ
・グループ名：自分の名前でよいです
・パス: [https://github.com/Teradata/modelops-demo-models](https://github.com/Teradata/modelops-demo-models)
・クレデンシャル ：クレデンシャルなし
・ブランチ: マスター

ここで、gitの接続をテストします。緑色になっていれば、保存して続行します。サービス接続の設定はとりあえずスキップします。

新しいプロジェクトを作成するとき、ModelOpsは新しい接続を要求します。

### パーソナル・コネクションを創る

##### パーソナル・コネクション

・名前 ：Vantage Personal ＋ 自分の名前
・説明 ：Vantageデモ
・ホスト: tdprd.td.teradata.com (teradata transcend のみの内部)
・データベース: 準備したデータベース
・VALデータベース ：TRNG_XSP (内部は teradata transcend のみ)
・BYOMデータベース ：TRNG_BYOM (内部はTeradata Transcendのみ)
・ログイン方法 ：TDNEGO
・ユーザ名/パスワード

### SQLデータベースでVALとBYOMの権限を検証する

接続パネルの新しいヘルスチェックパネルで権限を確認することができます

![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/7e8b0b89-c667-133b-2cd7-51a4327d4ebc.png)

### BYOM 評価とスコアリングのための Vantage テーブルを特定するデータセットを追加

新しいデータセットテンプレートを作成し、トレーニング用のデータセットを1つ、評価用のデータセットを2つ作成して、2種類のデータセットでモデルの品質指標を監視することにしましょう。

##### データセットを追加する

・データセットテンプレートの作成
・カタログ
・名称 ：PIMA
・説明 ：PIMA糖尿病
・機能カタログ ：バンテージ
・データベース: 準備したデータベース
・テーブル: aoa_feature_metadata

特徴クエリ：
```SQL:Features_Query.sql
SELECT * FROM {your-db}.pima_patient_features
```

エンティティキー PatientId Features: NumTimesPrg, PlGlcConc, BloodP, SkinThick, TwoHourSerIns, BMI, DiPedFunc, Age。

エンティティ＆ターゲットクエリ：
```SQL:Entity_Target_Query.sql
SELECT * FROM {your-db}.pima_patient_diagnoses
```

エンティティキー PatientId 対象：HasDiabetes

##### 予測値

・Database: your-db
・Table: pima_patient_predictions


エンティティの選択クエリ：
```SQL:Select_Entity.sql
SELECT * FROM pima_patient_features WHERE patientid MOD 5 = 0
```
BYOM対象カラムです。CAST(CAST(json_report AS JSON).JSONExtractValue('$.predicted_HasDiabetes') AS INT)

### 学習用データセットの作成

ベーシック

・名前 ：電車
・説明 ：トレーニングデータセット
・スコープ ：トレーニング
・エンティティ＆ターゲット

クエリ：
```SQL:Select_Training_Dataset.sql
SELECT * FROM {your-db}.pima_patient_diagnoses WHERE patientid MOD 5 = 1
```

### 評価用データセット1の作成

ベーシック

・名称 ：評価する
・説明 ：評価用データセット
・スコープ ：評価
・主体・対象

クエリ：
```SQL:Select_Evaluation_Dataset1.sql
SELECT * FROM {your-db}.pima_patient_diagnoses WHERE patientid MOD 5 = 2
```

### 評価用データセット2の作成

ベーシック

・名称 ：評価する
・説明 ：評価用データセット
・スコープ ：評価
・主体・対象

クエリ：
```SQL:Select_Evaluation_Dataset2.sql
SELECT * FROM {your-db}.pima_patient_diagnoses WHERE patientid MOD 5 = 3
```

### コードテンプレートの準備

Gitモデルでは新しいモデルを追加するときに利用可能なコードテンプレートを埋める必要があります。

これらのコードスクリプトは git リポジトリの model_definitions/your-model/model_modules/ 以下に格納されます。

・init.py : Pythonモジュールに必要な空のファイルです。
・training.py: train関数が含まれます。

```Python:training.py
def train(context: ModelContext, **kwargs):
    aoa_create_context()

    # your training code

    # save your model
    joblib.dump(model, f"{context.artifact_output_path}/model.joblib")

    record_training_stats(...)
```

ModelOps UIの代わりにCLIやノートブックから実行する方法については、Operationalizeノートブックをご覧ください。

・evaluation.py: このスクリプトは evaluate 関数を含んでいます。

```Python:evaluation.py
def evaluate(context: ModelContext, **kwargs):
    aoa_create_context()

    # read your model
    model = joblib.load(f"{context.artifact_input_path}/model.joblib")

    # your evaluation logic

    record_evaluation_stats(...)
```

ModelOps UIの代わりにCLIやノートブックから実行する方法については、Operationalizeノートブックをご覧ください。

・scoring.py: このスクリプトにはスコア関数が含まれています。

```Python:scoring.py
def score(context: ModelContext, **kwargs):
    aoa_create_context()

    # read your model
    model = joblib.load(f"{context.artifact_input_path}/model.joblib")

    # your evaluation logic

    record_scoring_stats(...)
```

ModelOps UIの代わりにCLIやノートブックから実行する方法については、Operationalizeノートブックをご覧ください。

・requirements.txt：このファイルには、コードスクリプトに必要なライブラリ名とバージョンが含まれています。例：
```:requirements.txt
%%writefile ../model_modules/requirements.txt
xgboost==0.90
scikit-learn==0.24.2
shap==0.36.0
matplotlib==3.3.1
teradataml==17.0.0.4
nyoka==4.3.0
aoa==6.0.0
```

・config.json: 親フォルダ(your-modelフォルダ)にあるファイルで、デフォルトのハイパーパラメータが含まれています。

```Python:config.json
%%writefile ../config.json
{
   "hyperParameters": {
      "eta": 0.2,
      "max_depth": 6
   }
}
```

リポジトリにあるデモモデルのコードスクリプトを確認します。
[https://github.com/Teradata/modelops-demo-models/](https://github.com/Teradata/modelops-demo-models/)

model_definitions→python-diabetes→model_modules に移動してください。

### 新しいGITのモデルライフサイクル

・GITから利用可能なモデルを見るためにプロジェクトを開く
・新しいモデルのバージョンをトレーニングする
・コードリポジトリからのCommitIDがどのように追跡されるかを見る
・評価する
・データセット統計やモデルメトリクスを含む評価レポートを確認する
・他のモデルのバージョンと比較する
・承認
・Vantageでデプロイ - エンジン、パブリッシュ、スケジュール。スコアリングデータセットが必要 接続を使用し、データベースを選択する 例: "aoa_byom_models".
・Docker Batchでデプロイ - Engine、Publish、Schedule。スコアリングデータセットが必要 接続を使用して、データベースを選択します。
・Restful Batchでデプロイ - Engine、Publish、Schedule。スコアリングデータセットが必要 接続を使用し、データベースを選択します。
・デプロイ/実行
・データセット2で再度評価 - モデルメトリクスの挙動を監視する
・モデルのドリフトを監視する - データとメトリクス
・Vantageにデプロイした際に、BYOMノートブックを開き、SQLコードからPMML予測を実行する
・ModelOps UIまたはcurlコマンドからRestfulをテストする
・デプロイメントをリタイアする

# まとめ
このクイックスタートでは、GITモデルの完全なライフサイクルをModelOpsで実行する方法と、それをVantageやEdgeデプロイのためのDockerコンテナにデプロイする方法について学びました。そして、バッチスコアリング、レストフルまたはオンデマンドスコアリングのテスト、データドリフトとモデル品質メトリックのモニタリングの開始をスケジュールする方法について説明しました。

# さらに詳しく

・[Teradata Vantage™ - ModelOps ユーザーガイド](https://docs.teradata.com/r/Teradata-VantageTM-ModelOps-User-Guide)（現在、ユーザー登録が必要です）

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)