sakamomo554101 / YouyakuAI

日本語用の要約を行うデモサービス
0 stars 0 forks source link

VertexAIのモデルモニタリングを試しに導入する #46

Closed sakamomo554101 closed 2 years ago

sakamomo554101 commented 2 years ago

概要

VertexAIのモデルモニタリングを試しに導入する。 手順などをドキュメントにまとめる + スクリプトを作成する。

sakamomo554101 commented 2 years ago

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_gbq.html

おー、すでにテーブルが存在している場合は、replaceも可能そう。 試してみよ。

sakamomo554101 commented 2 years ago

とりあえず、モデルモニタリングはデプロイされた。 ちょっと放置してみて、様子みよ。

sakamomo554101 commented 2 years ago

1時間たったが、特に特徴量のスコアとか出てこないな・・。 ちょっとモニタリングのドキュメント確認するか。

sakamomo554101 commented 2 years ago

ダッシュボード上で、下記が表示されているのが気になる。

Enabled: First run of a monitoring job is pending
sakamomo554101 commented 2 years ago

そもそも、input_textは原文である日本語の入力データが来るわけだから、特徴量への変換処理が必要。

それがModelMonitoring側で出来ない気がする。

sakamomo554101 commented 2 years ago

ただ、そうすると、input_textはPredictionAPIの入力になってしまってるから、BQ側のソースを前処理しただけでは、ダメな気がする。

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/model-monitoring/using-model-monitoring?hl=ja#automatic-schema-parsing

ふむ、自動スキーマでの解析になってるから、少なくとも1000個入れないと、解析されなさそう・・。 スキーマを指定して試してみるか。

sakamomo554101 commented 2 years ago

https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform_v1beta1.types.ModelDeploymentMonitoringJob

んー、predict_instance_schema_uriだと、スキーマの定義ファイル(yaml)をgcsなどに上げる必要がありそう。 (まぁ、やればいいんだけども・・)

あぁ、そうか、servingイメージ作成時に自動で作るようにすれば良いのか・・。 (理想的には)

一旦、yamlを直に入れたい。 sample_predict_instanceを使えば良い?

sakamomo554101 commented 2 years ago

sample_predict_instanceは下記のような入力フォーマットで入れれば良さそうに見える。(リクエストと同じフォーマットという意味)

{
  "instances": [
    {
      "input_text": "これはテストです"
    }
  ]
}

google.protobuf.struct_pb2.Valueという型になっているが、これはProtoBuf形式なのは分かるが、どう入れれば良い?

sakamomo554101 commented 2 years ago

https://programtalk.com/python-examples/google.protobuf.struct_pb2.Value/ 参考になりそう。

下記のように定義すれば良い?

message = Struct(fields={'foo': Value(bool_value=True)})
sakamomo554101 commented 2 years ago

https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#value structで定義すればいいのかなー

sakamomo554101 commented 2 years ago

うーむ、model monitoringに入ってきた入力文章だが、単純にカテゴリカルに分けられてるだけで、特徴量で統計量分布になってなさそう・・。

なんか前処理の設定とかできんのかなぁ・・。

sakamomo554101 commented 2 years ago

structでsampleを定義する形で、ちゃんとドリフトは動くようになった。 が、前述した問題がある。

sakamomo554101 commented 2 years ago

analysis_instance_schema_uriが何かを確認するか。

sakamomo554101 commented 2 years ago

TFDVがよくわからん。。

sakamomo554101 commented 2 years ago

https://zenn.dev/hellorusk/articles/7fd588cae5b173

tokernizer.batch_encode_plusでは、bertの入力データとするように前処理をしている。 わかち書き + IDへの変換をして、arrayにしている。

sakamomo554101 commented 2 years ago

うーん、vertex predictionの前段にpreprocessorを入れて、文字列 -> 配列にするしか無い気がする。

sakamomo554101 commented 2 years ago

面倒なのは、tokenizerのバイナリを学習後に取得する必要がある点。

sakamomo554101 commented 2 years ago

方針

sakamomo554101 commented 2 years ago

51 で対応済み。

分離対応は別issueで進める。