Closed sakamomo554101 closed 2 years ago
進める
確かVertexAI利用時は、アカウントに対して利用権限が必要+Enable対応があったような。確認する。
構成を変えるか。 VertexAI Predictionを使うことも加味すると、以下の流れとなる。
VertexAIのEnable対応は、GCPコンソールから実施
GCPでの処理のために、gcloudコマンドは必須。 ドキュメントにセットアップ手順を書いておく。
https://github.com/reproio/lab_sample_pipelines/blob/main/kfp/deploy_all_component.sh
あばば、Dockerfileにコードを含める対応や、エントリポイントの設定対応が必要そう? ※学習パイプラインのみなら大丈夫かも?
あ、model_pipeline配下でもう作ってたのか
pipelineの構築の多様性を考えるなら、ちょっとyamlの構成を考え直すか。 deploy.ymlのこと。
GCPのproject_idは削除しておくか(yamlから実の値を除外)
https://cloud.google.com/container-registry/docs/advanced-authentication GCRのpush時に権限が必要そう
https://cloud.google.com/container-registry/docs/access-control 以下の権限を付与すれば良さそう。
https://qiita.com/suzuyui/items/24e9ba8590deea17c456 artifact registryを試してみるかなー
そうか、サービスアカウントをスクリプトで全部作るようにしちゃうのはありだな。
https://cloud.google.com/container-registry/docs/advanced-authentication#gcloud サービスアカウントでログインして、dockerログインする必要があるのか。
https://genzouw.com/entry/2021/06/19/082626/2661/ yamlはエイリアス機能で、定数の使い回しが可能
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
下記が必要?
gcloud auth configure-docker
変わらず。
GCRのstorage bucketって、どうやって紐づいているん?
なるほど。
deploy.ymlはenvのパラメーター みるようにするとか対応したいな。 GCPのプロジェクトIDを重複して書くとかはやめたい。
VertexAI パイプラインを使う場合は、どのような権限が必要?
多分、下記のロール相当の権限があれば、良さそう。
とりあえず、AI Platform Developerを付与してみた
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,
)
実装がかなり汚いな・・。ちょっと整理したいところ。 まずは動かすようにするか。
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
GOOGLE_APPLICATION_CREDENTIALSをターミナルで入れたら、違うエラーになったが、、。 うーん、、makefileでGOOGLE_APPLICATION_CREDENTIALSを設定しても、環境変数情報が使えない?
今度パーミッションエラー。
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
試しにVertex AIユーザーのロールをサービスアカウントに付与。
サービスアカウントに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).">
https://cloud.google.com/vertex-ai/docs/pipelines/configure-project#service-account 上記を正しく対応すれば良いんだろうけど、サービスアカウントとユーザーを紐づける意味がよくわかってないな・・
cloud resource managerのAPIを有効化する必要がありそう
Cloud Resource Manager APIをGCPコンソールから有効化した
自分のオーナーアカウントでログインし直して、再度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"
オーナー権限のあるメールアドレスとサービスアカウントを紐づけたが、"You do not have permission to act as service_account.."のエラーは変わらず・・
サービスアカウントを作り直してみるかなぁ・・
https://zenn.dev/catnose99/scraps/87846cb2fdf8ad サービスアカウントユーザーを設定すれば良い?
サービスアカウントユーザーなんぞないんだが・・
下記コマンドでサービスアカウントユーザーの権限つきそうだが、、なんでだ・・。
gcloud iam service-accounts add-iam-policy-binding \
SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
--member="user:USER_EMAIL" \
--role="roles/iam.serviceAccountUser"
サービスアカウント作り直してもダメなんだが、、、なにこれ?
まじか、、下記のようにしたら、エラー変わった・・。たぶん権限が正常に設定されたくさい。 ※ようは実行するサービスアカウントに対して、同一サービスアカウントを実行ロールとして設定している。こんなこと必要なんかなぁ・・
gcloud projects add-iam-policy-binding ${GOOGLE_PROJECT_ID} --member="serviceAccount:${GOOGLE_SERVICE_ACCOUNT}" --role="roles/iam.serviceAccountUser"
パラメーターを設定したら、以下のエラー。 多分、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..
makefileやセットアップまわりは整理しないとだけど、とりあえずパイプラインが動き出したぜ・・
trainerdでこけた。 なんで下記エラーが・・?
AssertionError: data frame columns count is not 3. columns is Index(['body', 'genre_id'], dtype='object')
対応内容
16 から派生。