sakamomo554101 / YouyakuAI

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

VertexAIのパイプラインに学習パイプラインを構築する #24

Closed sakamomo554101 closed 2 years ago

sakamomo554101 commented 2 years ago

対応内容

16 から派生。

sakamomo554101 commented 2 years ago

進める

sakamomo554101 commented 2 years ago

確かVertexAI利用時は、アカウントに対して利用権限が必要+Enable対応があったような。確認する。

sakamomo554101 commented 2 years ago

構成を変えるか。 VertexAI Predictionを使うことも加味すると、以下の流れとなる。

sakamomo554101 commented 2 years ago

VertexAIのEnable対応は、GCPコンソールから実施

sakamomo554101 commented 2 years ago

GCPでの処理のために、gcloudコマンドは必須。 ドキュメントにセットアップ手順を書いておく。

下記 https://cloud.google.com/sdk/docs/install?hl=JA

sakamomo554101 commented 2 years ago

https://github.com/reproio/lab_sample_pipelines/blob/main/kfp/deploy_all_component.sh

あばば、Dockerfileにコードを含める対応や、エントリポイントの設定対応が必要そう? ※学習パイプラインのみなら大丈夫かも?

sakamomo554101 commented 2 years ago

あ、model_pipeline配下でもう作ってたのか

sakamomo554101 commented 2 years ago

pipelineの構築の多様性を考えるなら、ちょっとyamlの構成を考え直すか。 deploy.ymlのこと。

sakamomo554101 commented 2 years ago

GCPのproject_idは削除しておくか(yamlから実の値を除外)

sakamomo554101 commented 2 years ago

https://cloud.google.com/container-registry/docs/advanced-authentication GCRのpush時に権限が必要そう

sakamomo554101 commented 2 years ago

https://cloud.google.com/container-registry/docs/access-control 以下の権限を付与すれば良さそう。

sakamomo554101 commented 2 years ago

https://qiita.com/sabure500/items/ff8512988008de4734ae

sakamomo554101 commented 2 years ago

https://qiita.com/suzuyui/items/24e9ba8590deea17c456 artifact registryを試してみるかなー

sakamomo554101 commented 2 years ago

そうか、サービスアカウントをスクリプトで全部作るようにしちゃうのはありだな。

sakamomo554101 commented 2 years ago

https://cloud.google.com/container-registry/docs/advanced-authentication#gcloud サービスアカウントでログインして、dockerログインする必要があるのか。

sakamomo554101 commented 2 years ago

https://genzouw.com/entry/2021/06/19/082626/2661/ yamlはエイリアス機能で、定数の使い回しが可能

sakamomo554101 commented 2 years ago

docker push時に以下のエラー。 権限付与しないと。

denied: Token exchange failed for project 'youyaku-ai'. Caller does not have permission 'storage.buckets.create'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control
sakamomo554101 commented 2 years ago

下記が必要?

gcloud auth configure-docker
sakamomo554101 commented 2 years ago

変わらず。

sakamomo554101 commented 2 years ago

GCRのstorage bucketって、どうやって紐づいているん?

sakamomo554101 commented 2 years ago

なるほど。

sakamomo554101 commented 2 years ago
sakamomo554101 commented 2 years ago

deploy.ymlはenvのパラメーター みるようにするとか対応したいな。 GCPのプロジェクトIDを重複して書くとかはやめたい。

sakamomo554101 commented 2 years ago

VertexAI パイプラインを使う場合は、どのような権限が必要?

sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/pipelines/configure-project 上記読む

sakamomo554101 commented 2 years ago

多分、下記のロール相当の権限があれば、良さそう。

sakamomo554101 commented 2 years ago

とりあえず、AI Platform Developerを付与してみた

sakamomo554101 commented 2 years ago

https://cam-inc.co.jp/p/techblog/582520922968163131

下記のようにパイプライン実行が可能。

from kfp.v2.google.client import AIPlatformClient

GCP_PROJECT_ID="gcp_project_id"
REGION="asia-east1"

api_client = AIPlatformClient(project_id=GCP_PROJECT_ID, region=REGION)

COMPILED_PIPELINE_PATH= './lgbm-train-pipeline.json'
ENABLE_CACHING=False
PIPELINE_PARAMETERS={"is_deployed":"True",
                    "target_date":"20210901",
                   }

pipeline_run_name = api_client.create_run_from_job_spec(
   job_spec_path=COMPILED_PIPELINE_PATH,
   parameter_values=PIPELINE_PARAMETERS,
   enable_caching=ENABLE_CACHING,
)
sakamomo554101 commented 2 years ago

実装がかなり汚いな・・。ちょっと整理したいところ。 まずは動かすようにするか。

sakamomo554101 commented 2 years ago

AIPlatformClientの取得に失敗する。 下記エラー。GOOGLE_APPLICATION_CREDENTIALSは設定しているんだが、、

google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started
sakamomo554101 commented 2 years ago

GOOGLE_APPLICATION_CREDENTIALSをターミナルで入れたら、違うエラーになったが、、。 うーん、、makefileでGOOGLE_APPLICATION_CREDENTIALSを設定しても、環境変数情報が使えない?

sakamomo554101 commented 2 years ago

今度パーミッションエラー。

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://us-central1-aiplatform.googleapis.com/v1beta1/projects/youyaku-ai/locations/us-central1/pipelineJobs?pipelineJobId=youyaku-ai-pipeline-20211103111020&alt=json returned "Permission 'aiplatform.pipelineJobs.create' denied on resource '//aiplatform.googleapis.com/projects/youyaku-ai/locations/us-central1' (or it may not exist).". Details: "[{'@type': 'type.googleapis.com/google.rpc.ErrorInfo', 'reason': 'IAM_PERMISSION_DENIED', 'domain': 'aiplatform.googleapis.com', 'metadata': {'permission': 'aiplatform.pipelineJobs.create', 'resource': 'projects/youyaku-ai/locations/us-central1'}}]">
make: *** [run-pipeline] Error 1
sakamomo554101 commented 2 years ago

試しにVertex AIユーザーのロールをサービスアカウントに付与。

sakamomo554101 commented 2 years ago

サービスアカウントにVertex AI管理者ロールを付与したら、以下のエラーになった。 サービスアカウントの実行権限がない?

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://us-central1-aiplatform.googleapis.com/v1beta1/projects/youyaku-ai/locations/us-central1/pipelineJobs?pipelineJobId=youyaku-ai-pipeline-20211103111851&alt=json returned "You do not have permission to act as service_account: youyaku-ai-account@youyaku-ai.iam.gserviceaccount.com. (or it may not exist).". Details: "You do not have permission to act as service_account: youyaku-ai-account@youyaku-ai.iam.gserviceaccount.com. (or it may not exist).">
sakamomo554101 commented 2 years ago

https://cloud.google.com/vertex-ai/docs/pipelines/configure-project#service-account 上記を正しく対応すれば良いんだろうけど、サービスアカウントとユーザーを紐づける意味がよくわかってないな・・

sakamomo554101 commented 2 years ago

cloud resource managerのAPIを有効化する必要がありそう

sakamomo554101 commented 2 years ago

Cloud Resource Manager APIをGCPコンソールから有効化した

sakamomo554101 commented 2 years ago

自分のオーナーアカウントでログインし直して、再度IAM設定をしたら、うまくいった(IAM設定が)

$ gcloud config set account <mail address>
$ gcloud auth login -> 認証画面へ遷移して、認証OKさせる
$ gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/aiplatform.user"
sakamomo554101 commented 2 years ago

https://qiita.com/kobori_akira/items/9620fa137419f7fb700b

sakamomo554101 commented 2 years ago

オーナー権限のあるメールアドレスとサービスアカウントを紐づけたが、"You do not have permission to act as service_account.."のエラーは変わらず・・

sakamomo554101 commented 2 years ago

サービスアカウントを作り直してみるかなぁ・・

sakamomo554101 commented 2 years ago

https://zenn.dev/catnose99/scraps/87846cb2fdf8ad サービスアカウントユーザーを設定すれば良い?

sakamomo554101 commented 2 years ago

サービスアカウントユーザーなんぞないんだが・・

sakamomo554101 commented 2 years ago

下記コマンドでサービスアカウントユーザーの権限つきそうだが、、なんでだ・・。

gcloud iam service-accounts add-iam-policy-binding \
    SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
    --member="user:USER_EMAIL" \
    --role="roles/iam.serviceAccountUser"
sakamomo554101 commented 2 years ago

サービスアカウント作り直してもダメなんだが、、、なにこれ?

sakamomo554101 commented 2 years ago

https://stackoverflow.com/questions/64236468/cloud-build-fails-to-deploy-to-google-app-engine-you-do-not-have-permission-to

sakamomo554101 commented 2 years ago

まじか、、下記のようにしたら、エラー変わった・・。たぶん権限が正常に設定されたくさい。 ※ようは実行するサービスアカウントに対して、同一サービスアカウントを実行ロールとして設定している。こんなこと必要なんかなぁ・・

gcloud projects add-iam-policy-binding ${GOOGLE_PROJECT_ID} --member="serviceAccount:${GOOGLE_SERVICE_ACCOUNT}" --role="roles/iam.serviceAccountUser"
sakamomo554101 commented 2 years ago

パラメーターを設定したら、以下のエラー。 多分、GCSのバケット名が違いそうか、作る必要がある。

Failed to create pipeline job. Error: The GCS bucket "youyaku_ai_pipeline_vertex_ai" does not exist. Please check the path and try again..
sakamomo554101 commented 2 years ago

makefileやセットアップまわりは整理しないとだけど、とりあえずパイプラインが動き出したぜ・・

sakamomo554101 commented 2 years ago

trainerdでこけた。 なんで下記エラーが・・?

AssertionError: data frame columns count is not 3. columns is Index(['body', 'genre_id'], dtype='object')