Closed sakamomo554101 closed 2 years ago
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_gbq.html
おー、すでにテーブルが存在している場合は、replaceも可能そう。 試してみよ。
とりあえず、モデルモニタリングはデプロイされた。 ちょっと放置してみて、様子みよ。
1時間たったが、特に特徴量のスコアとか出てこないな・・。 ちょっとモニタリングのドキュメント確認するか。
ダッシュボード上で、下記が表示されているのが気になる。
Enabled: First run of a monitoring job is pending
そもそも、input_textは原文である日本語の入力データが来るわけだから、特徴量への変換処理が必要。
それがModelMonitoring側で出来ない気がする。
ただ、そうすると、input_textはPredictionAPIの入力になってしまってるから、BQ側のソースを前処理しただけでは、ダメな気がする。
ふむ、自動スキーマでの解析になってるから、少なくとも1000個入れないと、解析されなさそう・・。 スキーマを指定して試してみるか。
んー、predict_instance_schema_uriだと、スキーマの定義ファイル(yaml)をgcsなどに上げる必要がありそう。 (まぁ、やればいいんだけども・・)
あぁ、そうか、servingイメージ作成時に自動で作るようにすれば良いのか・・。 (理想的には)
一旦、yamlを直に入れたい。 sample_predict_instanceを使えば良い?
sample_predict_instanceは下記のような入力フォーマットで入れれば良さそうに見える。(リクエストと同じフォーマットという意味)
{
"instances": [
{
"input_text": "これはテストです"
}
]
}
google.protobuf.struct_pb2.Valueという型になっているが、これはProtoBuf形式なのは分かるが、どう入れれば良い?
https://programtalk.com/python-examples/google.protobuf.struct_pb2.Value/ 参考になりそう。
下記のように定義すれば良い?
message = Struct(fields={'foo': Value(bool_value=True)})
うーむ、model monitoringに入ってきた入力文章だが、単純にカテゴリカルに分けられてるだけで、特徴量で統計量分布になってなさそう・・。
なんか前処理の設定とかできんのかなぁ・・。
structでsampleを定義する形で、ちゃんとドリフトは動くようになった。 が、前述した問題がある。
analysis_instance_schema_uriが何かを確認するか。
TFDVがよくわからん。。
https://zenn.dev/hellorusk/articles/7fd588cae5b173
tokernizer.batch_encode_plusでは、bertの入力データとするように前処理をしている。 わかち書き + IDへの変換をして、arrayにしている。
うーん、vertex predictionの前段にpreprocessorを入れて、文字列 -> 配列にするしか無い気がする。
面倒なのは、tokenizerのバイナリを学習後に取得する必要がある点。
分離対応は別issueで進める。
概要
VertexAIのモデルモニタリングを試しに導入する。 手順などをドキュメントにまとめる + スクリプトを作成する。