Compare commits

...
25 Commits
Author SHA1 Message Date
Andrew Ferlitsch 5c49bc6fe7 fix: rename UJ10 2023-04-19 23:51:55 +00:00
Connor McCarthyandGitHub 098ad42f70 pin kfp in google_cloud_pipeline_components_automl_text (#1748) 2023-04-19 23:01:21 +00:00
Connor McCarthyandGitHub 1f141d0059 pin kfp in google_cloud_pipeline_components_automl_images (#1746) 2023-04-19 19:29:50 +00:00
Andrew FerlitschandGitHub e0a1608783 fix: pin kfp and gcpc < 2.0 (#1738) 2023-04-19 18:37:16 +00:00
Connor McCarthyandGitHub 1a469a09df pin kfp in google_cloud_pipeline_components_automl_tabular (#1747) 2023-04-19 18:14:04 +00:00
Connor McCarthyandGitHub bc3f6d3819 pin kfp in custom_model_training_and_batch_prediction (#1741) 2023-04-19 16:53:23 +00:00
Andrew FerlitschandGitHub f088a3ce69 update (#1736) 2023-04-19 16:52:34 +00:00
Connor McCarthyandGitHub 863660042b pin kfp in custom_tabular_train_batch_pred_bq_pipeline (#1742) 2023-04-19 16:51:11 +00:00
Connor McCarthyandGitHub 7162248267 pin kfp in google_cloud_pipeline_components_model_train_upload_deploy (#1749) 2023-04-19 16:50:43 +00:00
Connor McCarthyandGitHub 2e908a8efa pin kfp in get_started_with_hpt_pipeline_components (#1743) 2023-04-19 16:50:13 +00:00
Connor McCarthyandGitHub 588d2c880e pin kfp in get_started_with_machine_management (#1745) 2023-04-19 16:49:12 +00:00
Connor McCarthyandGitHub 54f10c7411 pin kfp in google_cloud_pipeline_components_model_upload_predict_evaluate (#1750) 2023-04-19 16:48:46 +00:00
Connor McCarthyandGitHub 0c2b9e9f45 pin kfp in multicontender_vs_champion_deployment_method (#1753) 2023-04-19 16:48:21 +00:00
Connor McCarthyandGitHub fe07d416e5 pin kfp in challenger_vs_blessed_deployment_method (#1739) 2023-04-19 16:04:05 +00:00
Connor McCarthyandGitHub 9c69cbfd54 pin kfp in control_flow_kfp (#1740) 2023-04-19 16:03:33 +00:00
Connor McCarthyandGitHub 2a25be6af2 pin kfp in lightweight_functions_component_io_kfp (#1751) 2023-04-19 16:02:52 +00:00
Connor McCarthyandGitHub 9680a7e772 pin kfp in metrics_viz_run_compare_kfp (#1752) 2023-04-19 16:02:03 +00:00
Connor McCarthyandGitHub 30527875ed pin kfp in pipelines_intro_kfp (#1754) 2023-04-19 16:01:36 +00:00
8c11e19d86 Update service accounts and permissions info in the Wide and Deep notebook (#1737)
Co-authored-by: Yishan Pu <yishanpu@google.com>
2023-04-19 15:24:34 +00:00
f44f51c06d Update the service accounts and permissions info in the TabNet notebook (#1734)
Co-authored-by: Yishan Pu <yishanpu@google.com>
2023-04-18 16:06:42 +00:00
840b537ea6 Update the E2E AutoML Notebook regarding the service accounts and permissions info (#1731)
Co-authored-by: Yishan Pu <yishanpu@google.com>
2023-04-17 23:16:28 +00:00
Xiang XuandGitHub d2602b944f Add blip2 notebook (#1730)
* add blip2

* resolve comments
2023-04-17 23:14:34 +00:00
Xiang XuandGitHub bb39135946 fix owlvit (#1729) 2023-04-17 15:19:36 +00:00
gericdongandGitHub cb72a56e55 feat: PyTorch train and deploy E2E with pre-built containers (#1728)
* feat: PyTorch train and deploy E2E with pre-built containers

* address review comments

* address review comment 2

* suppress gsutil warning messags

* Use unique names

* Corrected the project id template
2023-04-17 14:56:43 +00:00
Andrew FerlitschandGitHub eee97362d0 fix: migrate tabnet (#1727)
* fix: migrate tabnet

* fix: describe

* updates from review
2023-04-13 21:09:23 +00:00
26 changed files with 2902 additions and 308 deletions
+1
View File
@@ -55,3 +55,4 @@
/notebooks/community/model_garden/model_garden_pytorch_clip.ipynb @xiangxu-google
/notebooks/community/model_garden/model_garden_pytorch_owlvit.ipynb @xiangxu-google
/notebooks/community/model_garden/model_garden_pytorch_layoutml_document_qa.ipynb @xiangxu-google
/notebooks/community/model_garden/model_garden_pytorch_blip2.ipynb @xiangxu-google
@@ -29,22 +29,22 @@
"id": "title:generic,gcp"
},
"source": [
"# E2E ML on GCP: MLOps stage 4 : formalization: get started with Vertex ML Metadata\n",
"# Get started with Vertex ML Metadata\n",
"\n",
"<table align=\"left\">\n",
" <td>\n",
" <a href=\"https://colab.research.google.com/github/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage4/get_started_with_vertex_ml_metadata.ipynb\">\n",
" <a href=\"https://colab.research.google.com/github/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/ml_metadata/get_started_with_vertex_ml_metadata.ipynb\">\n",
" <img src=\"https://cloud.google.com/ml-engine/images/colab-logo-32px.png\" alt=\"Colab logo\"> Run in Colab\n",
" </a>\n",
" </td>\n",
" <td>\n",
" <a href=\"https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage4/get_started_with_vertex_ml_metadata.ipynb\">\n",
" <a href=\"https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/ml_metadata/get_started_with_vertex_ml_metadata.ipynb\">\n",
" <img src=\"https://cloud.google.com/ml-engine/images/github-logo-32px.png\" alt=\"GitHub logo\">\n",
" View on GitHub\n",
" </a>\n",
" </td>\n",
" <td>\n",
" <a href=\"https://console.cloud.google.com/vertex-ai/workbench/deploy-notebook?download_url=https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/notebooks/community/ml_ops/stage4/get_started_with_vertex_ml_metadata.ipynb\">\n",
" <a href=\"https://console.cloud.google.com/vertex-ai/workbench/deploy-notebook?download_url=https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/notebooks/official/ml_metadata/get_started_with_vertex_ml_metadata.ipynb\">\n",
" <img src=\"https://lh3.googleusercontent.com/UiNooY4LUgW_oTvpsNhPpQzsstV5W8F7rYgxgGBD85cWJoLmrOzhVs_ksK_vgx40SHs7jCqkTkCk=e14-rj-sc0xffffff-h130-w32\" alt=\"Vertex AI logo\">\n",
" Open in Vertex AI Workbench\n",
" </a>\n",
@@ -62,7 +62,9 @@
"## Overview\n",
"\n",
"\n",
"This tutorial demonstrates how to use Vertex AI for E2E MLOps on Google Cloud in production. This tutorial covers stage 4 : formalization: get started with Vertex ML Metadata."
"This tutorial demonstrates how to use Vertex ML Metadata.\n",
"\n",
"Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata)."
]
},
{
@@ -144,19 +146,32 @@
"source": [
"import os\n",
"\n",
"# The Vertex AI Workbench Notebook product has specific requirements\n",
"IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\")\n",
"IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n",
" \"/opt/deeplearning/metadata/env_version\"\n",
")\n",
"! pip3 install --upgrade google-cloud-aiplatform[tensorboard] \\\n",
" google-cloud-pipeline-components --quiet"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "restart"
},
"source": [
"### Colab only: Uncomment the following cell to restart the kernel"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "D-ZBOjErv5mM"
},
"outputs": [],
"source": [
"# Automatically restart kernel after installs so that your environment can access the new packages\n",
"# import IPython\n",
"\n",
"# Vertex AI Notebook requires dependencies to be installed with '--user'\n",
"USER_FLAG = \"\"\n",
"if IS_WORKBENCH_NOTEBOOK:\n",
" USER_FLAG = \"--user\"\n",
"\n",
"! pip3 install --upgrade google-cloud-aiplatform[tensorboard] $USER_FLAG -q\n",
"! pip3 install --upgrade google-cloud-pipeline-components $USER_FLAG -q"
"# app = IPython.Application.instance()\n",
"# app.kernel.do_shutdown(True)"
]
},
{
@@ -170,63 +185,27 @@
"Once you've installed the additional packages, you need to restart the notebook kernel so it can find the packages."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "restart"
},
"outputs": [],
"source": [
"import os\n",
"\n",
"if not os.getenv(\"IS_TESTING\"):\n",
" # Automatically restart kernel after installs\n",
" import IPython\n",
"\n",
" app = IPython.Application.instance()\n",
" app.kernel.do_shutdown(True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "before_you_begin"
},
"source": [
"## Before you begin\n",
"\n",
"### GPU runtime\n",
"\n",
"*Make sure you're running this notebook in a GPU runtime if you have that option. In Colab, select* **Runtime > Change Runtime Type > GPU**\n",
"\n",
"### Set up your Google Cloud project\n",
"\n",
"**The following steps are required, regardless of your notebook environment.**\n",
"\n",
"1. [Select or create a Google Cloud project](https://console.cloud.google.com/cloud-resource-manager). When you first create an account, you get a $300 free credit towards your compute/storage costs.\n",
"\n",
"2. [Make sure that billing is enabled for your project.](https://cloud.google.com/billing/docs/how-to/modify-project)\n",
"\n",
"3. [Enable the following APIs: Vertex AI APIs, Compute Engine APIs, and Cloud Storage.](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,storage-component.googleapis.com)\n",
"\n",
"4. If you are running this notebook locally, you need to install the [Cloud SDK]((https://cloud.google.com/sdk)).\n",
"\n",
"5. Enter your project ID in the cell below. Then run the cell to make sure the\n",
"Cloud SDK uses the right project for all the commands in this notebook.\n",
"\n",
"**Note**: Jupyter runs lines prefixed with `!` as shell commands, and it interpolates Python variables prefixed with `$`."
"## Before you begin"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "project_id"
"id": "before_you_begin:nogpu"
},
"source": [
"#### Set your project ID\n",
"### Set your project ID\n",
"\n",
"**If you don't know your project ID**, you may be able to get your project ID using `gcloud`."
"**If you don't know your project ID**, try the following:\n",
"* Run `gcloud config list`.\n",
"* Run `gcloud projects list`.\n",
"* See the support page: [Locate the project ID](https://support.google.com/googleapi/answer/7014113)"
]
},
{
@@ -237,33 +216,10 @@
},
"outputs": [],
"source": [
"PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "autoset_project_id"
},
"outputs": [],
"source": [
"if PROJECT_ID == \"\" or PROJECT_ID is None or PROJECT_ID == \"[your-project-id]\":\n",
" # Get your GCP project id from gcloud\n",
" shell_output = ! gcloud config list --format 'value(core.project)' 2>/dev/null\n",
" PROJECT_ID = shell_output[0]\n",
" print(\"Project ID:\", PROJECT_ID)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "set_gcloud_project_id"
},
"outputs": [],
"source": [
"! gcloud config set project $PROJECT_ID"
"PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n",
"\n",
"# Set the project id\n",
"! gcloud config set project {PROJECT_ID}"
]
},
{
@@ -274,16 +230,7 @@
"source": [
"#### Region\n",
"\n",
"You can also change the `REGION` variable, which is used for operations\n",
"throughout the rest of this notebook. Below are regions supported for Vertex AI. We recommend that you choose the region closest to you.\n",
"\n",
"- Americas: `us-central1`\n",
"- Europe: `europe-west4`\n",
"- Asia Pacific: `asia-east1`\n",
"\n",
"You may not use a multi-regional bucket for training with Vertex AI. Not all regions provide support for all Vertex AI services.\n",
"\n",
"Learn more about [Vertex AI regions](https://cloud.google.com/vertex-ai/docs/general/locations)."
"You can also change the `REGION` variable used by Vertex AI. Learn more about [Vertex AI regions](https://cloud.google.com/vertex-ai/docs/general/locations)."
]
},
{
@@ -294,34 +241,7 @@
},
"outputs": [],
"source": [
"REGION = \"[your-region]\" # @param {type: \"string\"}\n",
"\n",
"if REGION == \"[your-region]\":\n",
" REGION = \"us-central1\""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "timestamp"
},
"source": [
"#### Timestamp\n",
"\n",
"If you are in a live tutorial session, you might be using a shared test account or project. To avoid name collisions between users on resources created, you create a timestamp for each instance session, and append the timestamp onto the name of resources you create in this tutorial."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "timestamp"
},
"outputs": [],
"source": [
"from datetime import datetime\n",
"\n",
"TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")"
"REGION = \"us-central1\" # @param {type: \"string\"}"
]
},
{
@@ -332,57 +252,70 @@
"source": [
"### Authenticate your Google Cloud account\n",
"\n",
"**If you are using Vertex AI Workbench Notebooks**, your environment is already authenticated. Skip this step.\n",
"\n",
"**If you are using Colab**, run the cell below and follow the instructions when prompted to authenticate your account via oAuth.\n",
"\n",
"**Otherwise**, follow these steps:\n",
"\n",
"In the Cloud Console, go to the [Create service account key](https://console.cloud.google.com/apis/credentials/serviceaccountkey) page.\n",
"\n",
"**Click Create service account**.\n",
"\n",
"In the **Service account name** field, enter a name, and click **Create**.\n",
"\n",
"In the **Grant this service account access to project** section, click the Role drop-down list. Type \"Vertex\" into the filter box, and select **Vertex Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n",
"\n",
"Click Create. A JSON file that contains your key downloads to your local environment.\n",
"\n",
"Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell."
"Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FvQeFm3Gv5mR"
},
"source": [
"**1. Vertex AI Workbench**\n",
"* Do nothing as you are already authenticated."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ad1138a125ea"
},
"source": [
"**2. Local JupyterLab instance, uncomment and run:**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "gcp_authenticate"
"id": "ce6043da7b33"
},
"outputs": [],
"source": [
"# ! gcloud auth login"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0367eac06a10"
},
"source": [
"**3. Colab, uncomment and run:**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "21ad4dbb4a61"
},
"outputs": [],
"source": [
"# If you are running this notebook in Colab, run this cell and follow the\n",
"# instructions to authenticate your GCP account. This provides access to your\n",
"# Cloud Storage bucket and lets you submit training jobs and prediction\n",
"# requests.\n",
"\n",
"import os\n",
"import sys\n",
"\n",
"# If on Vertex AI Workbench, then don't execute this code\n",
"IS_COLAB = False\n",
"if not os.path.exists(\"/opt/deeplearning/metadata/env_version\") and not os.getenv(\n",
" \"DL_ANACONDA_HOME\"\n",
"):\n",
" if \"google.colab\" in sys.modules:\n",
" IS_COLAB = True\n",
" from google.colab import auth as google_auth\n",
"\n",
" google_auth.authenticate_user()\n",
"\n",
" # If you are running this notebook locally, replace the string below with the\n",
" # path to your service account key and run this cell to authenticate your GCP\n",
" # account.\n",
" elif not os.getenv(\"IS_TESTING\"):\n",
" %env GOOGLE_APPLICATION_CREDENTIALS ''"
"# from google.colab import auth\n",
"# auth.authenticate_user()\n",
"# IS_COLAB = True"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c13224697bfb"
},
"source": [
"**4. Service account or other**\n",
"* See how to grant Cloud Storage permissions to your service account at https://cloud.google.com/storage/docs/gsutil/commands/iam#ch-examples."
]
},
{
@@ -393,11 +326,7 @@
"source": [
"### Create a Cloud Storage bucket\n",
"\n",
"**The following steps are required, regardless of your notebook environment.**\n",
"\n",
"When you initialize the Vertex SDK for Python, you specify a Cloud Storage staging bucket. The staging bucket is where all the data associated with your dataset and model resources are retained across sessions.\n",
"\n",
"Set the name of your Cloud Storage bucket below. Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization."
"Create a storage bucket to store intermediate artifacts such as datasets."
]
},
{
@@ -408,21 +337,7 @@
},
"outputs": [],
"source": [
"BUCKET_NAME = \"[your-bucket-name]\" # @param {type:\"string\"}\n",
"BUCKET_URI = f\"gs://{BUCKET_NAME}\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "autoset_bucket"
},
"outputs": [],
"source": [
"if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"[your-bucket-name]\":\n",
" BUCKET_NAME = PROJECT_ID + \"aip-\" + TIMESTAMP\n",
" BUCKET_URI = \"gs://\" + BUCKET_NAME"
"BUCKET_URI = f\"gs://your-bucket-name-{PROJECT_ID}-unique\" # @param {type:\"string\"}"
]
},
{
@@ -445,26 +360,6 @@
"! gsutil mb -l $REGION $BUCKET_URI"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "validate_bucket"
},
"source": [
"Finally, validate access to your Cloud Storage bucket by examining its contents:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "validate_bucket"
},
"outputs": [],
"source": [
"! gsutil ls -al $BUCKET_URI"
]
},
{
"cell_type": "markdown",
"metadata": {
@@ -545,19 +440,7 @@
"source": [
"### Set up variables\n",
"\n",
"Next, set up some variables used throughout the tutorial.\n",
"### Import libraries and define constants"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "import_aip:mbsdk"
},
"outputs": [],
"source": [
"import google.cloud.aiplatform as aip"
"Next, set up some variables used throughout the tutorial."
]
},
{
@@ -579,7 +462,10 @@
},
"outputs": [],
"source": [
"import google.cloud.aiplatform_v1beta1 as aip_beta"
"from datetime import datetime\n",
"\n",
"import google.cloud.aiplatform_v1beta1 as aip_beta\n",
"from google.cloud import aiplatform"
]
},
{
@@ -707,7 +593,7 @@
"outputs": [],
"source": [
"metadata_store = clients[\"metadata\"].create_metadata_store(\n",
" parent=PARENT, metadata_store_id=\"my-metadata-store\"\n",
" parent=PARENT, metadata_store_id=\"my-metadata-store-unique\"\n",
")\n",
"\n",
"metadata_store_id = str(metadata_store.result())[7:-2]\n",
@@ -1144,7 +1030,7 @@
"source": [
"from kfp.v2 import compiler, dsl\n",
"from kfp.v2.dsl import (Artifact, Dataset, Input, Metrics, Model, Output,\n",
" OutputPath, component, pipeline)"
" OutputPath, component)"
]
},
{
@@ -1196,7 +1082,7 @@
"outputs": [],
"source": [
"@component(\n",
" packages_to_install=[\"google-cloud-bigquery\", \"pandas\", \"pyarrow\"],\n",
" packages_to_install=[\"google-cloud-bigquery\", \"pandas\", \"pyarrow\", \"db-dtypes\"],\n",
" base_image=\"python:3.9\",\n",
" output_component_file=\"create_dataset.yaml\",\n",
")\n",
@@ -1214,7 +1100,7 @@
"\n",
"\n",
"@component(\n",
" packages_to_install=[\"sklearn\", \"pandas\", \"joblib\"],\n",
" packages_to_install=[\"scikit-learn\", \"pandas\", \"joblib\"],\n",
" base_image=\"python:3.9\",\n",
" output_component_file=\"beans_model_component.yaml\",\n",
")\n",
@@ -1298,7 +1184,7 @@
" # A name for the pipeline.\n",
" name=\"mlmd-pipeline\",\n",
")\n",
"def pipeline(\n",
"def my_pipeline(\n",
" bq_table: str = \"\",\n",
" output_data_path: str = \"data.csv\",\n",
" project: str = PROJECT_ID,\n",
@@ -1332,20 +1218,22 @@
"source": [
"NOW = datetime.now().isoformat().replace(\".\", \":\")[:-7]\n",
"\n",
"compiler.Compiler().compile(pipeline_func=pipeline, package_path=\"mlmd_pipeline.json\")\n",
"compiler.Compiler().compile(\n",
" pipeline_func=my_pipeline, package_path=\"mlmd_pipeline.json\"\n",
")\n",
"\n",
"run1 = aip.PipelineJob(\n",
"run1 = aiplatform.PipelineJob(\n",
" display_name=\"mlmd-pipeline\",\n",
" template_path=\"mlmd_pipeline.json\",\n",
" job_id=\"mlmd-pipeline-small-{}\".format(TIMESTAMP),\n",
" job_id=\"mlmd-pipeline-small-unique\",\n",
" parameter_values={\"bq_table\": \"sara-vertex-demos.beans_demo.small_dataset\"},\n",
" enable_caching=True,\n",
")\n",
"\n",
"run2 = aip.PipelineJob(\n",
"run2 = aiplatform.PipelineJob(\n",
" display_name=\"mlmd-pipeline\",\n",
" template_path=\"mlmd_pipeline.json\",\n",
" job_id=\"mlmd-pipeline-large-{}\".format(TIMESTAMP),\n",
" job_id=\"mlmd-pipeline-large-unique\",\n",
" parameter_values={\"bq_table\": \"sara-vertex-demos.beans_demo.large_dataset\"},\n",
" enable_caching=True,\n",
")\n",
@@ -1382,7 +1270,7 @@
},
"outputs": [],
"source": [
"df = aip.get_pipeline_df(pipeline=\"mlmd-pipeline\")\n",
"df = aiplatform.get_pipeline_df(pipeline=\"mlmd-pipeline\")\n",
"print(df)"
]
},
@@ -1466,6 +1354,10 @@
},
"outputs": [],
"source": [
"metadata_store_id = (\n",
" f\"projects/{PROJECT_ID}/locations/{REGION}/metadataStores/my-metadata-store-unique\"\n",
")\n",
"\n",
"clients[\"metadata\"].delete_metadata_store(name=metadata_store_id)"
]
},
@@ -0,0 +1,468 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "7d9bbf86da5e"
},
"outputs": [],
"source": [
"# Copyright 2023 Google LLC\n",
"#\n",
"# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
"# you may not use this file except in compliance with the License.\n",
"# You may obtain a copy of the License at\n",
"#\n",
"# https://www.apache.org/licenses/LICENSE-2.0\n",
"#\n",
"# Unless required by applicable law or agreed to in writing, software\n",
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
"# See the License for the specific language governing permissions and\n",
"# limitations under the License."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2bd716bf3e39"
},
"source": [
"# Vertex AI Model Garden - BLIP2\n",
"\n",
"<table align=\"left\">\n",
" <td>\n",
" <a href=\"https://colab.research.google.com/github/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/model_garden/model_garden_pytorch_blip2.ipynb\">\n",
" <img src=\"https://cloud.google.com/ml-engine/images/colab-logo-32px.png\" alt=\"Colab logo\"> Run in Colab\n",
" </a>\n",
" </td>\n",
" <td>\n",
" <a href=\"https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/model_garden/model_garden_pytorch_blip2.ipynb\">\n",
" <img src=\"https://cloud.google.com/ml-engine/images/github-logo-32px.png\" alt=\"GitHub logo\">\n",
" View on GitHub\n",
" </a>\n",
" </td>\n",
" <td>\n",
" <a href=\"https://console.cloud.google.com/vertex-ai/notebooks/deploy-notebook?download_url=https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/notebooks/community/model_garden/model_garden_pytorch_blip2.ipynb\">\n",
" <img src=\"https://lh3.googleusercontent.com/UiNooY4LUgW_oTvpsNhPpQzsstV5W8F7rYgxgGBD85cWJoLmrOzhVs_ksK_vgx40SHs7jCqkTkCk=e14-rj-sc0xffffff-h130-w32\" alt=\"Vertex AI logo\">\n",
"Open in Vertex AI Workbench\n",
" </a>\n",
" (a Python-3 CPU notebook is recommended)\n",
" </td>\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d8cd12648da4"
},
"source": [
"## Overview\n",
"\n",
"This notebook demonstrates deploying the pre-trained [BLIP2](https://huggingface.co/Salesforce/blip2-opt-2.7b) model on Vertex AI for online prediction.\n",
"\n",
"### Objective\n",
"\n",
"- Upload the model to [Model Registry](https://cloud.google.com/vertex-ai/docs/model-registry/introduction).\n",
"- Deploy the model on [Endpoint](https://cloud.google.com/vertex-ai/docs/predictions/using-private-endpoints).\n",
"- Run online predictions for image captioning.\n",
"\n",
"### Costs\n",
"\n",
"This tutorial uses billable components of Google Cloud:\n",
"\n",
"* Vertex AI\n",
"* Cloud Storage\n",
"\n",
"Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage pricing](https://cloud.google.com/storage/pricing), and use the [Pricing Calculator](https://cloud.google.com/products/calculator/) to generate a cost estimate based on your projected usage."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "264c07757582"
},
"source": [
"## Setup environment\n",
"\n",
"**NOTE**: Jupyter runs lines prefixed with `!` as shell commands, and it interpolates Python variables prefixed with `$` into these commands."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d73ffa0c0b83"
},
"source": [
"### Colab only"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "2707b02ef5df"
},
"outputs": [],
"source": [
"!pip3 install --upgrade google-cloud-aiplatform"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "b60a4d7100bf"
},
"outputs": [],
"source": [
"from google.colab import auth as google_auth\n",
"\n",
"google_auth.authenticate_user()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0f826ff482a2"
},
"source": [
"### Setup Google Cloud project\n",
"\n",
"1. [Select or create a Google Cloud project](https://console.cloud.google.com/cloud-resource-manager). When you first create an account, you get a $300 free credit towards your compute/storage costs.\n",
"\n",
"1. [Make sure that billing is enabled for your project](https://cloud.google.com/billing/docs/how-to/modify-project).\n",
"\n",
"1. [Enable the Vertex AI API and Compute Engine API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component).\n",
"\n",
"1. [Create a Cloud Storage bucket](https://cloud.google.com/storage/docs/creating-buckets) for storing experiment outputs."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8958ebc71868"
},
"source": [
"Fill following variables for experiments environment:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "9db30f827a65"
},
"outputs": [],
"source": [
"# Cloud project id.\n",
"PROJECT_ID = \"\" # @param {type:\"string\"}\n",
"\n",
"# The region you want to launch jobs in.\n",
"REGION = \"us-central1\" # @param {type:\"string\"}\n",
"\n",
"# The Cloud Storage bucket for storing experiments output. Fill it without the 'gs://' prefix.\n",
"GCS_BUCKET = \"\" # @param {type:\"string\"}"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "92f16e22c20b"
},
"source": [
"Initialize Vertex AI API:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "1680c257acfb"
},
"outputs": [],
"source": [
"from google.cloud import aiplatform\n",
"\n",
"aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=GCS_BUCKET)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6ca48b699d17"
},
"source": [
"### Define constants"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "de9882ea89ea"
},
"outputs": [],
"source": [
"# The pre-built serving docker image.\n",
"# The model artifacts are embedded within the container, except for model weights which will be downloaded during deployment.\n",
"SERVE_DOCKER_URI = \"us-docker.pkg.dev/vertex-ai-restricted/vertex-vision-model-garden-dockers/pytorch-transformers-serve\""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "10188266a5cd"
},
"source": [
"### Define common functions"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "cac4478ae098"
},
"outputs": [],
"source": [
"import base64\n",
"import os\n",
"from datetime import datetime\n",
"from io import BytesIO\n",
"\n",
"import requests\n",
"from google.cloud import aiplatform\n",
"from PIL import Image\n",
"\n",
"\n",
"def create_job_name(prefix):\n",
" user = os.environ.get(\"USER\")\n",
" now = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n",
" job_name = f\"{prefix}-{user}-{now}\"\n",
" return job_name\n",
"\n",
"\n",
"def download_image(url):\n",
" response = requests.get(url)\n",
" return Image.open(BytesIO(response.content))\n",
"\n",
"\n",
"def image_to_base64(image, format=\"JPEG\"):\n",
" buffer = BytesIO()\n",
" image.save(buffer, format=format)\n",
" image_str = base64.b64encode(buffer.getvalue()).decode(\"utf-8\")\n",
" return image_str\n",
"\n",
"\n",
"def base64_to_image(image_str):\n",
" image = Image.open(BytesIO(base64.b64decode(image_str)))\n",
" return image\n",
"\n",
"\n",
"def image_grid(imgs, rows=2, cols=2):\n",
" w, h = imgs[0].size\n",
" grid = Image.new(\"RGB\", size=(cols * w, rows * h))\n",
" for i, img in enumerate(imgs):\n",
" grid.paste(img, box=(i % cols * w, i // cols * h))\n",
" return grid\n",
"\n",
"\n",
"def deploy_model(model_id, task):\n",
" model_name = \"blip-image-captioning\"\n",
" endpoint = aiplatform.Endpoint.create(display_name=f\"{model_name}-endpoint\")\n",
" serving_env = {\n",
" \"MODEL_ID\": model_id,\n",
" \"TASK\": task,\n",
" }\n",
" # If the model_id is a GCS path, use artifact_uri to pass it to serving docker.\n",
" artifact_uri = model_id if model_id.startswith(\"gs://\") else None\n",
" model = aiplatform.Model.upload(\n",
" display_name=model_name,\n",
" serving_container_image_uri=SERVE_DOCKER_URI,\n",
" serving_container_ports=[7080],\n",
" serving_container_predict_route=\"/predictions/transformers_serving\",\n",
" serving_container_health_route=\"/ping\",\n",
" serving_container_environment_variables=serving_env,\n",
" artifact_uri=artifact_uri,\n",
" )\n",
" model.deploy(\n",
" endpoint=endpoint,\n",
" machine_type=\"n1-standard-8\",\n",
" accelerator_type=\"NVIDIA_TESLA_T4\",\n",
" accelerator_count=1,\n",
" deploy_request_timeout=1800,\n",
" )\n",
" return model, endpoint"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d2d72ecdb8c9"
},
"source": [
"## Upload and deploy models"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9448c5f545fa"
},
"source": [
"This section uploads the pre-trained model to Model Registry and deploys it on the Endpoint with 1 T4 GPU.\n",
"\n",
"The model deployment step will take ~15 minutes to complete.\n",
"\n",
"Once deployed, you can send images to get descriptions."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "19e8aeec969c"
},
"source": [
"### Image captioning"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "b4b46c28d8b1"
},
"outputs": [],
"source": [
"model, endpoint = deploy_model(\n",
" model_id=\"Salesforce/blip2-opt-2.7b\", task=\"image-to-text\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "12893aa2c5af"
},
"source": [
"NOTE: The model weights will be downloaded after the deployment succeeds. When the model is very large it could add 5~15mins additional time before the endpoint is ready for prediction."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "6be655247cb1"
},
"outputs": [],
"source": [
"image = download_image(\"http://images.cocodataset.org/val2017/000000039769.jpg\")\n",
"display(image)\n",
"\n",
"instances = [\n",
" {\"image\": image_to_base64(image)},\n",
"]\n",
"preds = endpoint.predict(instances=instances).predictions\n",
"print(preds)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "2ccf3714dbe9"
},
"outputs": [],
"source": [
"# Undeploy model and delete endpoint.\n",
"endpoint.delete(force=True)\n",
"\n",
"# Delete models.\n",
"model.delete()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "01e11d85d504"
},
"source": [
"### VQA (Visual-Question-Answering)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "26018d961cf9"
},
"outputs": [],
"source": [
"model, endpoint = deploy_model(\n",
" model_id=\"Salesforce/blip2-opt-2.7b\", task=\"visual-question-answering\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0ac7f8d945e3"
},
"source": [
"NOTE: The model weights will be downloaded after the deployment succeeds. When the model is very large it could add 5~15mins additional time before the endpoint is ready for prediction."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "f19c342829fd"
},
"outputs": [],
"source": [
"image = download_image(\n",
" \"https://media.newyorker.com/cartoons/63dc6847be24a6a76d90eb99/master/w_1160,c_limit/230213_a26611_838.jpg\"\n",
")\n",
"display(image)\n",
"\n",
"question = \"Question: What are they doing? Answer:\"\n",
"instances = [\n",
" {\"image\": image_to_base64(image), \"text\": question},\n",
"]\n",
"preds = endpoint.predict(instances=instances).predictions\n",
"print(question)\n",
"print(preds)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "712eb9d0b336"
},
"outputs": [],
"source": [
"# Undeploy model and delete endpoint.\n",
"endpoint.delete(force=True)\n",
"\n",
"# Delete models.\n",
"model.delete()"
]
}
],
"metadata": {
"colab": {
"name": "model_garden_pytorch_blip2.ipynb",
"toc_visible": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
@@ -273,7 +273,11 @@
"\n",
"def draw_image_with_boxes(image, boxes):\n",
" fig, ax = plt.subplots()\n",
" plt.axis(\"off\")\n",
" ax.imshow(image)\n",
" if len(boxes) == 0:\n",
" return\n",
" boxes = boxes[\"boxes\"]\n",
" for box in boxes:\n",
" x, y = box[\"xmin\"], box[\"ymin\"]\n",
" width, height = box[\"xmax\"] - x, box[\"ymax\"] - y\n",
@@ -281,7 +285,6 @@
" (x, y), width, height, linewidth=2, edgecolor=\"yellow\", facecolor=\"none\"\n",
" )\n",
" ax.add_patch(rect)\n",
" plt.axis(\"off\")\n",
" plt.show()\n",
"\n",
"\n",
@@ -362,7 +365,7 @@
" {\"image\": image_to_base64(image), \"text\": \"cat\"},\n",
"]\n",
"preds = endpoint.predict(instances=instances).predictions\n",
"draw_image_with_boxes(image, preds[0][\"boxes\"])\n",
"draw_image_with_boxes(image, preds[0])\n",
"print(preds)"
]
},
@@ -242,22 +242,7 @@
"source": [
"## Notes about service account and permission\n",
"\n",
"**By default no configuration is required**, if you run into any permission related issue, please make sure the service accounts above have the required roles:\n",
"\n",
"|Service account email|Description|Roles|\n",
"|---|---|---|\n",
"|PROJECT_NUMBER-compute@developer.gserviceaccount.com|Compute Engine default service account|Dataflow Developer, Dataflow Worker, Storage Admin, BigQuery Data Editor, Vertex AI User, Service Account User|\n",
"|service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com|AI Platform Service Agent|Vertex AI Service Agent|\n",
"\n",
"\n",
"1. Goto https://console.cloud.google.com/iam-admin/iam.\n",
"2. Check the \"Include Google-provided role grants\" checkbox.\n",
"3. Find the above emails.\n",
"4. Grant the corresponding roles.\n",
"\n",
"### Using data source from a different project\n",
"- For the BQ data source, grant both service accounts the \"BigQuery Data Viewer\" role.\n",
"- For the CSV data source, grant both service accounts the \"Storage Object Viewer\" role.\n"
"**By default no configuration is required**, if you run into any permission related issue, please make sure the service accounts have the required roles listed in the [Service accounts for Tabular Workflow for End-to-End AutoML documentation](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/service-accounts#e2e-automl)."
]
},
{
@@ -1577,7 +1577,7 @@
],
"metadata": {
"colab": {
"name": "UJ10 Vertex SDK Custom Scikit-Learn with pre-built training container.ipynb",
"name": "sdk-custom-scikit-learn-prebuilt-container.ipynb",
"toc_visible": true
},
"kernelspec": {
@@ -201,8 +201,8 @@
"\n",
"! pip3 install --upgrade {USER_FLAG} google-cloud-aiplatform \\\n",
" google-cloud-storage \\\n",
" kfp \\\n",
" google-cloud-pipeline-components -q"
" 'kfp<2' \\\n",
" 'google-cloud-pipeline-components<2' -q"
]
},
{
@@ -165,11 +165,11 @@
"# Install the packages\n",
"USER=''\n",
"! pip3 install {USER} --upgrade google-cloud-aiplatform \\\n",
" google-cloud-pipeline-components\n",
" 'google-cloud-pipeline-components<2'\n",
"! pip3 install {USER} tensorflow==2.5 \\\n",
" tensorflow_hub\n",
" \n",
"! pip3 install {USER} --upgrade kfp"
"! pip3 install {USER} --upgrade 'kfp<2'"
]
},
{
@@ -175,7 +175,7 @@
"\n",
"! pip3 install --upgrade google-cloud-aiplatform {USER_FLAG} -q\n",
"! pip3 install -U google-cloud-storage {USER_FLAG} -q\n",
"! pip3 install {USER_FLAG} kfp google-cloud-pipeline-components --upgrade -q"
"! pip3 install {USER_FLAG} 'kfp<2' 'google-cloud-pipeline-components<2' --upgrade -q"
]
},
{
@@ -197,10 +197,10 @@
"\n",
"! pip3 install --upgrade google-cloud-aiplatform {USER_FLAG} -q\n",
"! pip3 install -U google-cloud-storage {USER_FLAG} -q\n",
"! pip3 install {USER_FLAG} kfp google-cloud-pipeline-components --upgrade -q\n",
"! pip3 install {USER_FLAG} 'kfp<2' 'google-cloud-pipeline-components<2' --upgrade -q\n",
"\n",
"\n",
"! pip3 install --upgrade --force-reinstall $USER_FLAG tensorflow kfp google-cloud-aiplatform google-cloud-storage google-cloud-pipeline-components -q"
"! pip3 install --upgrade --force-reinstall $USER_FLAG tensorflow 'kfp<2' google-cloud-aiplatform google-cloud-storage 'google-cloud-pipeline-components<2' -q"
]
},
{
@@ -224,8 +224,8 @@
" google-cloud-bigquery \\\n",
" pandas \\\n",
" pyarrow \\\n",
" kfp \\\n",
" google-cloud-pipeline-components {USER_FLAG} -q \n",
" 'kfp<2' \\\n",
" 'google-cloud-pipeline-components<2' {USER_FLAG} -q \n",
"! pip3 install db-dtypes {USER_FLAG} -q"
]
},
@@ -149,8 +149,8 @@
"! pip3 install -U tensorflow-transform==1.2 -q\n",
"! pip3 install -U tensorflow-io==0.18 -q\n",
"! pip3 install --upgrade google-cloud-aiplatform[tensorboard] -q\n",
"! pip3 install --upgrade google-cloud-pipeline-components -q\n",
"! pip3 install --upgrade kfp -q"
"! pip3 install --upgrade 'google-cloud-pipeline-components<2' -q\n",
"! pip3 install --upgrade 'kfp<2' -q"
]
},
{
@@ -138,8 +138,8 @@
"import os\n",
"\n",
"! pip3 install --upgrade google-cloud-aiplatform \\\n",
" google-cloud-pipeline-components --quiet\n",
"! pip3 install --upgrade kfp --quiet\n",
" 'google-cloud-pipeline-components<2' --quiet\n",
"! pip3 install --upgrade 'kfp<2' --quiet\n",
"! pip3 install --upgrade tensorflow==2.7 --quiet"
]
},
@@ -193,7 +193,7 @@
"if IS_WORKBENCH_NOTEBOOK:\n",
" USER_FLAG = \"--user\"\n",
"\n",
"! pip3 install --upgrade --quiet {USER_FLAG} google-cloud-aiplatform kfp google-cloud-pipeline-components google-cloud-storage"
"! pip3 install --upgrade --quiet {USER_FLAG} google-cloud-aiplatform 'kfp<2' 'google-cloud-pipeline-components<2' google-cloud-storage"
]
},
{
@@ -198,7 +198,7 @@
"\n",
"! pip3 install --upgrade google-cloud-aiplatform \\\n",
" google-cloud-storage \\\n",
" $USER kfp google-cloud-pipeline-components -q "
" $USER 'kfp<2' 'google-cloud-pipeline-components<2' -q "
]
},
{
@@ -196,7 +196,7 @@
"\n",
"! pip3 install --upgrade google-cloud-aiplatform {USER_FLAG} -q\n",
"! pip3 install -U google-cloud-storage $USER_FLAG -q\n",
"! pip3 install $USER kfp google-cloud-pipeline-components --upgrade -q"
"! pip3 install $USER 'kfp<2' 'google-cloud-pipeline-components<2' --upgrade -q"
]
},
{
@@ -198,8 +198,8 @@
"\n",
"! pip3 install --upgrade {USER_FLAG} -q google-cloud-aiplatform \\\n",
" google-cloud-storage {USER_FLAG} \\\n",
" kfp \\\n",
" google-cloud-pipeline-components"
" 'kfp<2' \\\n",
" 'google-cloud-pipeline-components<2'"
]
},
{
@@ -199,8 +199,8 @@
"\n",
"\n",
"! pip3 install --upgrade google-cloud-aiplatform \\\n",
" google-cloud-pipeline-components \\\n",
" kfp $USER_FLAG -q"
" 'google-cloud-pipeline-components<2' \\\n",
" 'kfp<2' $USER_FLAG -q"
]
},
{
@@ -203,7 +203,7 @@
"\n",
"! pip3 install --upgrade google-cloud-aiplatform {USER_FLAG} -q\n",
"! pip3 install -U google-cloud-storage {USER_FLAG} -q\n",
"! pip3 install {USER_FLAG} kfp google-cloud-pipeline-components --upgrade -q"
"! pip3 install {USER_FLAG} 'kfp<2' 'google-cloud-pipeline-components<2' --upgrade -q"
]
},
{
@@ -201,7 +201,7 @@
"\n",
"! pip3 install --upgrade google-cloud-aiplatform {USER_FLAG} -q\n",
"! pip3 install -U google-cloud-storage {USER_FLAG} -q\n",
"! pip3 install {USER_FLAG} kfp google-cloud-pipeline-components --upgrade -q\n",
"! pip3 install {USER_FLAG} 'kfp<2' 'google-cloud-pipeline-components<2' --upgrade -q\n",
"\n",
"if os.getenv(\"IS_TESTING\"):\n",
" ! pip3 install --upgrade matplotlib $USER_FLAG -q"
@@ -168,11 +168,11 @@
"# Install the packages\n",
"USER=''\n",
"! pip3 install {USER} --upgrade google-cloud-aiplatform \\\n",
" google-cloud-pipeline-components\n",
" 'google-cloud-pipeline-components<2'\n",
"! pip3 install {USER} tensorflow==2.5 \\\n",
" tensorflow_hub\n",
"\n",
"! pip3 install {USER} --upgrade kfp"
"! pip3 install {USER} --upgrade 'kfp<2'"
]
},
{
@@ -128,8 +128,8 @@
"# Install the packages\n",
"! pip3 install --upgrade google-cloud-aiplatform \\\n",
" google-cloud-storage \\\n",
" kfp \\\n",
" google-cloud-pipeline-components"
" 'kfp<2' \\\n",
" 'google-cloud-pipeline-components<2'"
]
},
{
File diff suppressed because it is too large Load Diff
@@ -268,22 +268,7 @@
"source": [
"## Notes about service account and permission\n",
"\n",
"**By default no configuration is required**, if you run into any permission related issue, please make sure the service accounts above have the required roles:\n",
"\n",
"|Service account email|Description|Roles|\n",
"|---|---|---|\n",
"|PROJECT_NUMBER-compute@developer.gserviceaccount.com|Compute Engine default service account|Dataflow Admin, Dataflow Worker, Storage Admin, BigQuery Admin, Vertex AI User|\n",
"|service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com|AI Platform Service Agent|Vertex AI Service Agent|\n",
"\n",
"\n",
"1. Goto https://console.cloud.google.com/iam-admin/iam.\n",
"2. Check the \"Include Google-provided role grants\" checkbox.\n",
"3. Find the above emails.\n",
"4. Grant the corresponding roles.\n",
"\n",
"### Using data source from a different project\n",
"- For the BQ data source, grant both service accounts the \"BigQuery Data Viewer\" role.\n",
"- For the CSV data source, grant both service accounts the \"Storage Object Viewer\" role.\n"
"**By default no configuration is required**, if you run into any permission related issue, please make sure the service accounts have the required roles listed in the [Service accounts for Tabular Workflow for TabNet, and Tabular Workflow for Wide & Deep, and Prophet documentation](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/service-accounts#fte-workflow)."
]
},
{
@@ -268,22 +268,7 @@
"source": [
"## Notes about service account and permission\n",
"\n",
"**By default no configuration is required**, if you run into any permission related issue, please make sure the service accounts above have the required roles:\n",
"\n",
"|Service account email|Description|Roles|\n",
"|---|---|---|\n",
"|PROJECT_NUMBER-compute@developer.gserviceaccount.com|Compute Engine default service account|Dataflow Admin, Dataflow Worker, Storage Admin, BigQuery Admin, Vertex AI User|\n",
"|service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com|AI Platform Service Agent|Vertex AI Service Agent|\n",
"\n",
"\n",
"1. Goto https://console.cloud.google.com/iam-admin/iam.\n",
"2. Check the \"Include Google-provided role grants\" checkbox.\n",
"3. Find the above emails.\n",
"4. Grant the corresponding roles.\n",
"\n",
"### Using data source from a different project\n",
"- For the BQ data source, grant both service accounts the \"BigQuery Data Viewer\" role.\n",
"- For the CSV data source, grant both service accounts the \"Storage Object Viewer\" role."
"**By default no configuration is required**, if you run into any permission related issue, please make sure the service accounts have the required roles listed in the [Service accounts for Tabular Workflow for TabNet, and Tabular Workflow for Wide & Deep, and Prophet documentation](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/service-accounts#fte-workflow)."
]
},
{