sakamomo554101 / YouyakuAI

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

Prediction APIをVertexエンドポイントを利用するように修正 #45

Closed sakamomo554101 closed 2 years ago

sakamomo554101 commented 2 years ago

概要

24 より派生。

T5モデルを稼働させるためのコンテナを作成+Restで呼び出す実装に修正する。 (Summarizerを分割するイメージ)

詳細

sakamomo554101 commented 2 years ago

まず、エンドポイント を自動で作成するようにするか

sakamomo554101 commented 2 years ago

https://zenn.dev/dhirooka/articles/5e53361fb08f9e お、カスタムエンドポイント 作れるから、現状のT5Summarizerの実装を継承して、API化してしまえば、いけるかも。

sakamomo554101 commented 2 years ago

試しに現状のSummarizerをAPI化して、カスタムコンテナーで動かそうかな。

sakamomo554101 commented 2 years ago

https://cloud.google.com/blog/ja/topics/developers-practitioners/pytorch-google-cloud-how-deploy-pytorch-models-vertex-ai

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#image

sakamomo554101 commented 2 years ago

AIP_STORAGE_URI経由で、モデルデータを取得するのが良さそう

sakamomo554101 commented 2 years ago

対応手順

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#server

各予測リクエストは 1.5 MB 以下にする必要があります。HTTP サーバーは、次の形式の Content-Type: application/json HTTP ヘッダーと JSON 本文を持つ予測リクエストを受け入れる必要があります。

地味に面倒な上限かも。 まぁ、よっぽどじゃない限りは1.5Mなんぞいかないが・・。

sakamomo554101 commented 2 years ago

モデルについては、Cloud Storage経由で取得したい。 が、単純にAIP_STORAGE_URIを指定するのではないっぽいかも。

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/predictions/use-custom-container カスタムコンテナを利用して、エンドポイントを作成する手順。

sakamomo554101 commented 2 years ago

https://cloud.google.com/blog/ja/topics/developers-practitioners/pytorch-google-cloud-how-deploy-pytorch-models-vertex-ai 上記手順で、試す。

sakamomo554101 commented 2 years ago

torchserveにすると、デバッグがやや面倒そうな雰囲気もあるな・・。 Fast APIにしようかしら。

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.endpoints/predict#response-body VertexAI Predictionでのレスポンスの形式は上記を守る必要があるが、エラーコードやエラー詳細をどうレスポンスに入れれば良いのか?

sakamomo554101 commented 2 years ago

ローカルでテストするためにdocker-compose周りも修正しないとだなぁ

sakamomo554101 commented 2 years ago

serving用のdocker imageはmakefile経由でビルド&プッシュするかな

sakamomo554101 commented 2 years ago

マルチステージビルド で、テスト時はdocker-composeでファイル指定をし、productionの場合はdocker imageにソースコードを含める感じにしようかね。

sakamomo554101 commented 2 years ago

docker-compose.ymlで明示的にビルドタグを指定して、マルチステージビルド の中間イメージを指定できそう targetを指定する

sakamomo554101 commented 2 years ago

makefile中で、envのパラメーターを取得したいなぁ。 https://cpoint-lab.co.jp/article/202010/17523/

sakamomo554101 commented 2 years ago

https://zenn.dev/canalun/articles/7d31ba0fb12be2

sakamomo554101 commented 2 years ago

entrypointとかも同様かな。

sakamomo554101 commented 2 years ago

https://docs.docker.jp/engine/reference/builder.html#expose あれ、EXPOSEだけだと、ポート公開されないのか。(公開するよ、という意味っぽい)

sakamomo554101 commented 2 years ago

そうか・・。 docker runだとenv-file指定で.envをそのまま読み込めるが、docker buildだと読み込めない。 build-argオプションを使って、キーと値を指定する必要がある。

やはり、make経由でportとかは指定かなー

sakamomo554101 commented 2 years ago

vertexai predictionを使うか、ローカルのAPIを使うか、どうやって指定する?

sakamomo554101 commented 2 years ago

.env経由にするか。

sakamomo554101 commented 2 years ago

47 でPR立てた。

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/predictions/online-predictions-automl#api vertexai エンドポイントに対するリクエストの送り方。

sakamomo554101 commented 2 years ago

https://github.com/googleapis/python-aiplatform/blob/HEAD/samples/model-builder/endpoint_predict_sample.py 一番シンプルなのは上記か。

sakamomo554101 commented 2 years ago

https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/master/community-content/pytorch_text_classification_using_vertex_sdk_and_gcloud/pytorch-text-classification-vertex-ai-train-tune-deploy.ipynb

sakamomo554101 commented 2 years ago

endpoint_idをどうやって、取得するか。 ※とりあえず、.envに直書きしちゃっても良いが・・。

sakamomo554101 commented 2 years ago

多分、正しくやるなら、デプロイ処理したら、envにコピーする感じが良いだろうなぁ.

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables

モデルバイナリをCloud Storageに置いた場合、AIP_STORAGE_URIから読み取れば良い。 デプロイ時に、artifactUriを設定する必要があるっぽいが、どうすればよいのか?

sakamomo554101 commented 2 years ago

エンドポイント の作成もスクリプト化しておきたい。

sakamomo554101 commented 2 years ago

以下をやれば良い?

sakamomo554101 commented 2 years ago

学習済みのモデルバイナリのアップロードについて https://cloud.google.com/vertex-ai/docs/general/import-model

sakamomo554101 commented 2 years ago

https://googleapis.dev/python/aiplatform/latest/index.html sdkのドキュメント読むか

sakamomo554101 commented 2 years ago

あ、下記のような感じやな。

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",
)
sakamomo554101 commented 2 years ago

あー、なるほど。 モデルのアップロードのタイミングでDockerイメージも指定するため、エンドポイント作成時にはDockerイメージ指定とかいらんのか。

https://cloud.google.com/vertex-ai/docs/predictions/deploy-model-api#deploy_the_model

sakamomo554101 commented 2 years ago

エンドポイント作成までの流れをまとめるか。

sakamomo554101 commented 2 years ago

つーか、学習パイプラインで、エンドポイント デプロイさせればええやん・・。なんで忘れてたんだ・・。

sakamomo554101 commented 2 years ago

https://github.com/daigo0927/blog/tree/master/vertex-pipelines-sample

sakamomo554101 commented 2 years ago

https://github.com/daigo0927/blog/blob/master/vertex-pipelines-sample/components/deploy/main.py おー、まさにこれっぽい。

sakamomo554101 commented 2 years ago

あわわ、model_pipelineフォルダにcomponent配置しないとだが、、、。 ルートのsrcフォルダにservingの実装入れちゃってるな・・。

sakamomo554101 commented 2 years ago

いや、いいのか。

sakamomo554101 commented 2 years ago

あ、これ、パイプラインからモデルパスを受け取る場合、どうするかなぁ。

GCSからロードする処理が必要になる気がする。

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/predictions/use-custom-container カスタムコンテナを使う場合は、上記のようにupdate スクリプトを書けばいけそう? あとは環境変数の設定も必要?

sakamomo554101 commented 2 years ago

https://googleapis.dev/python/aiplatform/latest/aiplatform.html#google.cloud.aiplatform.Model.upload うーん、Model.uploadの処理みても、artifactUri以外はめぼしいパラメーター がないなぁ

sakamomo554101 commented 2 years ago

https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/master/notebooks/official/pipelines/google_cloud_pipeline_components_model_train_upload_deploy.ipynb 参考になりそう。

モデルアップロードとデプロイがある

sakamomo554101 commented 2 years ago

パイプラインを作って、モデルアップロードとエンドポイントのdeployの手順はわかるが・・。 カスタムコンテナ内でモデルをロードした時のモデルパスがわからん・・

sakamomo554101 commented 2 years ago

https://github.com/vaexio/vaex-examples/blob/master/medium-gcp-ai-platform/ai-platform-deploy/docker/app.py 環境変数のAIP_STORAGE_URIからモデルっぽいパスを読み取ってるようにみえる。

vaexライブラリは自作?

sakamomo554101 commented 2 years ago

https://vaex.io/docs/index.html へぇ、vaexって、DataFrameのライブラリなんか。(pandasみたいな)

VertexAIのエンドポイントにデプロイした場合、普通のパス処理でgcsとかにアクセスできるのかも?