Closed sakamomo554101 closed 2 years ago
まず、エンドポイント を自動で作成するようにするか
https://zenn.dev/dhirooka/articles/5e53361fb08f9e お、カスタムエンドポイント 作れるから、現状のT5Summarizerの実装を継承して、API化してしまえば、いけるかも。
試しに現状のSummarizerをAPI化して、カスタムコンテナーで動かそうかな。
AIP_STORAGE_URI経由で、モデルデータを取得するのが良さそう
https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#server
各予測リクエストは 1.5 MB 以下にする必要があります。HTTP サーバーは、次の形式の Content-Type: application/json HTTP ヘッダーと JSON 本文を持つ予測リクエストを受け入れる必要があります。
地味に面倒な上限かも。 まぁ、よっぽどじゃない限りは1.5Mなんぞいかないが・・。
モデルについては、Cloud Storage経由で取得したい。 が、単純にAIP_STORAGE_URIを指定するのではないっぽいかも。
https://cloud.google.com/vertex-ai/docs/predictions/use-custom-container カスタムコンテナを利用して、エンドポイントを作成する手順。
torchserveにすると、デバッグがやや面倒そうな雰囲気もあるな・・。 Fast APIにしようかしら。
https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.endpoints/predict#response-body VertexAI Predictionでのレスポンスの形式は上記を守る必要があるが、エラーコードやエラー詳細をどうレスポンスに入れれば良いのか?
ローカルでテストするためにdocker-compose周りも修正しないとだなぁ
serving用のdocker imageはmakefile経由でビルド&プッシュするかな
マルチステージビルド で、テスト時はdocker-composeでファイル指定をし、productionの場合はdocker imageにソースコードを含める感じにしようかね。
docker-compose.ymlで明示的にビルドタグを指定して、マルチステージビルド の中間イメージを指定できそう targetを指定する
makefile中で、envのパラメーターを取得したいなぁ。 https://cpoint-lab.co.jp/article/202010/17523/
entrypointとかも同様かな。
https://docs.docker.jp/engine/reference/builder.html#expose あれ、EXPOSEだけだと、ポート公開されないのか。(公開するよ、という意味っぽい)
そうか・・。 docker runだとenv-file指定で.envをそのまま読み込めるが、docker buildだと読み込めない。 build-argオプションを使って、キーと値を指定する必要がある。
やはり、make経由でportとかは指定かなー
vertexai predictionを使うか、ローカルのAPIを使うか、どうやって指定する?
.env経由にするか。
https://cloud.google.com/vertex-ai/docs/predictions/online-predictions-automl#api vertexai エンドポイントに対するリクエストの送り方。
endpoint_idをどうやって、取得するか。 ※とりあえず、.envに直書きしちゃっても良いが・・。
多分、正しくやるなら、デプロイ処理したら、envにコピーする感じが良いだろうなぁ.
https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables
モデルバイナリをCloud Storageに置いた場合、AIP_STORAGE_URIから読み取れば良い。 デプロイ時に、artifactUriを設定する必要があるっぽいが、どうすればよいのか?
エンドポイント の作成もスクリプト化しておきたい。
以下をやれば良い?
学習済みのモデルバイナリのアップロードについて https://cloud.google.com/vertex-ai/docs/general/import-model
あ、下記のような感じやな。
model = aiplatform.Model.upload(
display_name='my-model',
artifact_uri="gs://python/to/my/model/dir",
serving_container_image_uri="gcr.io/cloud-aiplatform/prediction/tf2-cpu.2-2:latest",
)
あー、なるほど。 モデルのアップロードのタイミングでDockerイメージも指定するため、エンドポイント作成時にはDockerイメージ指定とかいらんのか。
https://cloud.google.com/vertex-ai/docs/predictions/deploy-model-api#deploy_the_model
エンドポイント作成までの流れをまとめるか。
つーか、学習パイプラインで、エンドポイント デプロイさせればええやん・・。なんで忘れてたんだ・・。
あわわ、model_pipelineフォルダにcomponent配置しないとだが、、、。 ルートのsrcフォルダにservingの実装入れちゃってるな・・。
いや、いいのか。
あ、これ、パイプラインからモデルパスを受け取る場合、どうするかなぁ。
GCSからロードする処理が必要になる気がする。
https://cloud.google.com/vertex-ai/docs/predictions/use-custom-container カスタムコンテナを使う場合は、上記のようにupdate スクリプトを書けばいけそう? あとは環境変数の設定も必要?
https://googleapis.dev/python/aiplatform/latest/aiplatform.html#google.cloud.aiplatform.Model.upload うーん、Model.uploadの処理みても、artifactUri以外はめぼしいパラメーター がないなぁ
パイプラインを作って、モデルアップロードとエンドポイントのdeployの手順はわかるが・・。 カスタムコンテナ内でモデルをロードした時のモデルパスがわからん・・
https://github.com/vaexio/vaex-examples/blob/master/medium-gcp-ai-platform/ai-platform-deploy/docker/app.py 環境変数のAIP_STORAGE_URIからモデルっぽいパスを読み取ってるようにみえる。
vaexライブラリは自作?
https://vaex.io/docs/index.html へぇ、vaexって、DataFrameのライブラリなんか。(pandasみたいな)
VertexAIのエンドポイントにデプロイした場合、普通のパス処理でgcsとかにアクセスできるのかも?
概要
24 より派生。
T5モデルを稼働させるためのコンテナを作成+Restで呼び出す実装に修正する。 (Summarizerを分割するイメージ)
詳細