Vertex AI で PredictSchemeta を指定する時に "Invalid YAML file for instance schema.” が発生したら
2024-07-27
発生したエラーと対策
まずは結果から。
Vertex Model Registry にモデルを登録する際、
instance_schema_uri
(インスタンスの予測スキマータ)に gs://hogehoge/instance_schema.yml
のような値を指定したら、以下のエラーが発生した。google.api_core.exceptions.InvalidArgument: 400 List of found errors: 1.Field: model.predict_schemata.instance_schema_uri; Message: Invalid YAML file for instance schema. [ field_violations { field: "model.predict_schemata.instance_schema_uri" description: "Invalid YAML file for instance schema." } ]
原因は拡張子の表記。
.yml
ではなく .yaml
に指定する必要があった模様。yaml
ファイルはどっちの拡張子も使われることが多いから、まさか拡張子が原因とは思わずデバッグに時間が掛かった。背景情報や補足など
GCS、または ArtifactRegistry に格納した推論モデルのコンテナを Vertex AI の Model Registry に登録(≒インポート、アップロード)する際、予測スキマータ(
PredictSchemeta
)を指定できる。
予測スキマータには、以下の 3 種類が存在する。- インスタンススキーマ
- 推論対象のサンプル 1 件の構造を定義する。
- パラメータスキーマ
- 推論モデルの挙動を推論時に動的に変えるパラメータの構造を定義する。
- 定義する必要がない場合も多い。
- 予測スキーマ
- サンプル 1 件に対する推論結果の構造を定義する。
予測スキマータを定義すると、
PredictRequest
, ExplainRequest
, BatchPredictionJob
でスキーマを参照できるようになる。
例えば、製品のジャンルをマルチラベルで予測するモデルの予測スキマータは以下のように指定できる。# instance type: object properties: product_id: type: string description: type: string user_reviews: type: array items: type: str review_score: type: number price: type: integer required: - product_id - description - price
# parameters type: object properties: probability_threshold: type: number
# prediction type: object properties: product_id: type: string predicted_genres: type: array items: type: object properties: genre_id: type: string genre_name: type: string probability: type: number required: - product_id - predicted_genres
前掲のエラー内容から記述したスキーマの内容が何かしら誤っているものと思ったが、GCS に保存する際に
.yaml
の拡張子で保存する必要があったというオチ。