diff --git a/.cloud-build/cleanup/cleanup.py b/.cloud-build/cleanup/cleanup.py index 31d828ccf..9599dbef5 100644 --- a/.cloud-build/cleanup/cleanup.py +++ b/.cloud-build/cleanup/cleanup.py @@ -5,6 +5,8 @@ from resource_cleanup_manager import ( ModelResourceCleanupManager, EndpointResourceCleanupManager, ResourceCleanupManager, + MatchingEngineIndexEndpointResourceCleanupManager, + MatchingEngineIndexResourceCleanupManager, ) rate_limit = RateLimit(max_count=25, per=60, greedy=False) @@ -40,10 +42,12 @@ if is_dry_run: print("Starting cleanup in dry run mode...") # List of all cleanup managers -managers = [ +managers: List[ResourceCleanupManager] = [ DatasetResourceCleanupManager(), EndpointResourceCleanupManager(), ModelResourceCleanupManager(), # ModelResourceCleanupManager must follow EndpointResourceCleanupManager due to deployed models blocking model deletion. + MatchingEngineIndexEndpointResourceCleanupManager(), + MatchingEngineIndexResourceCleanupManager(), ] run_cleanup_managers(managers=managers, is_dry_run=is_dry_run) diff --git a/.cloud-build/cleanup/resource_cleanup_manager.py b/.cloud-build/cleanup/resource_cleanup_manager.py index 5992e5e96..38daf7a3b 100644 --- a/.cloud-build/cleanup/resource_cleanup_manager.py +++ b/.cloud-build/cleanup/resource_cleanup_manager.py @@ -103,9 +103,20 @@ class EndpointResourceCleanupManager(VertexAIResourceCleanupManager): models.id for models in resource._gca_resource.deployed_models ]: resource._undeploy(deployed_model_id=deployed_model_id) - resource.delete(force=True) class ModelResourceCleanupManager(VertexAIResourceCleanupManager): vertex_ai_resource = aiplatform.Model + + +class MatchingEngineIndexResourceCleanupManager(VertexAIResourceCleanupManager): + vertex_ai_resource = aiplatform.MatchingEngineIndex + + +class MatchingEngineIndexEndpointResourceCleanupManager(VertexAIResourceCleanupManager): + vertex_ai_resource = aiplatform.MatchingEngineIndexEndpoint + + def delete(self, resource): + resource.undeploy_all() + resource.delete(force=True) \ No newline at end of file diff --git a/.cloud-build/execute_changed_notebooks_helper.py b/.cloud-build/execute_changed_notebooks_helper.py index ba174c34a..4d7505816 100755 --- a/.cloud-build/execute_changed_notebooks_helper.py +++ b/.cloud-build/execute_changed_notebooks_helper.py @@ -245,7 +245,7 @@ def process_and_execute_notebook( result.logs_bucket = operation_metadata.build.logs_bucket # Block and wait for the result - operation_result = operation.result() + operation_result = operation.result(timeout=timeout_in_seconds) result.duration = datetime.datetime.now() - time_start result.is_pass = True diff --git a/.cloud-build/requirements.txt b/.cloud-build/requirements.txt index 432cbda23..8ce44e358 100644 --- a/.cloud-build/requirements.txt +++ b/.cloud-build/requirements.txt @@ -10,4 +10,4 @@ google-cloud-aiplatform google-cloud-storage google-cloud-build ratemate -GitPython \ No newline at end of file +GitPython diff --git a/.github/workflows/linter/requirements.txt b/.github/workflows/linter/requirements.txt index 27960fd5c..0b1897b6c 100644 --- a/.github/workflows/linter/requirements.txt +++ b/.github/workflows/linter/requirements.txt @@ -5,6 +5,6 @@ nbconvert black==22.10.0 pyupgrade==2.38.4 isort==5.10.1 -flake8==4.0.1 +flake8==6.0.0 nbqa==1.5.3 diff --git a/community-content/CODEOWNERS b/community-content/CODEOWNERS index a5c105805..de9e6b070 100644 --- a/community-content/CODEOWNERS +++ b/community-content/CODEOWNERS @@ -7,3 +7,5 @@ /pluto_on_workbench @wkharold /cpr-examples @samthrasher /Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines @Ark-kun +/pipeline_components @Ark-kun +/pipeline_components/image_ml_model_training @lakeyk diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_logistic_regression_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_logistic_regression_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py index 1f2e08896..4740255ad 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_logistic_regression_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_logistic_regression_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py @@ -2,13 +2,13 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1e2558325f4c708aca75827c8acc13d230ee7e9f/components/pandas/Binarize_column/in_CSV_format/component.yaml") -train_logistic_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/cb44b75c9c062fcc40c2b905b2024b4493dbc62b/components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml") -upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml") +train_logistic_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/1f5cf6e06409b704064b2086c0a705e4e6b4fcde/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml") +upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_classification_logistic_regression_model_using_Scikit_learn_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py index 6254c82f0..4030180ad 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py @@ -2,15 +2,15 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1e2558325f4c708aca75827c8acc13d230ee7e9f/components/pandas/Binarize_column/in_CSV_format/component.yaml") -create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1a2ef3eeb77bc278f33cad0dd29008ea2431e191/components/PyTorch/Create_fully_connected_network/component.yaml") -train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/d8c4cf5e6403bc65bcf8d606e6baf87e2528a3dc/components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") -create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/46d51383e6554b7f3ab4fd8cf614d8c2b422fb22/components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") -upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml") +create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_fully_connected_network/component.yaml") +train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") +create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") +upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_classification_model_using_PyTorch_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py index ce43c2d96..9a71c48e8 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py @@ -2,16 +2,16 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1e2558325f4c708aca75827c8acc13d230ee7e9f/components/pandas/Binarize_column/in_CSV_format/component.yaml") -split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/daae5a4abaa35e44501818b1534ed7827d7da073/components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") -create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/9ca0f9eecf5f896f65b8538bbd809747052617d1/components/tensorflow/Create_fully_connected_network/component.yaml") -train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c504a4010348c50eaaf6d4337586ccc008f4dcef/components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") -predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/59c759ce6f543184e30db6817d2a703879bc0f39/components/tensorflow/Predict/on_CSV/component.yaml") -upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml") +split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") +create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Create_fully_connected_network/component.yaml") +train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") +predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Predict/on_CSV/component.yaml") +upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_classification_model_using_TensorFlow_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py index d3b116f63..b8b392595 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py @@ -2,15 +2,15 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1e2558325f4c708aca75827c8acc13d230ee7e9f/components/pandas/Binarize_column/in_CSV_format/component.yaml") -split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/daae5a4abaa35e44501818b1534ed7827d7da073/components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") -train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/58d3a47f904f32a64af8403330ba7e2134cae46d/components/XGBoost/Train/component.yaml") -xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/4694ec97baccf59284c2a1db4aa2250c22291eab/components/XGBoost/Predict/component.yaml") -upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml") +split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") +train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Train/component.yaml") +xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Predict/component.yaml") +upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_classification_model_using_XGBoost_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py index 67af67970..032f8dc76 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_classification_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py @@ -2,36 +2,36 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1e2558325f4c708aca75827c8acc13d230ee7e9f/components/pandas/Binarize_column/in_CSV_format/component.yaml") -split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/daae5a4abaa35e44501818b1534ed7827d7da073/components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +binarize_column_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml") +split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") # TensorFlow -create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/9ca0f9eecf5f896f65b8538bbd809747052617d1/components/tensorflow/Create_fully_connected_network/component.yaml") -train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c504a4010348c50eaaf6d4337586ccc008f4dcef/components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") -predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/59c759ce6f543184e30db6817d2a703879bc0f39/components/tensorflow/Predict/on_CSV/component.yaml") -upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/workaround_for_buggy_KFPv2_compiler/component.yaml") +create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Create_fully_connected_network/component.yaml") +train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") +predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Predict/on_CSV/component.yaml") +upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml") # PyTorch -create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1a2ef3eeb77bc278f33cad0dd29008ea2431e191/components/PyTorch/Create_fully_connected_network/component.yaml") -train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/d8c4cf5e6403bc65bcf8d606e6baf87e2528a3dc/components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") -create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/46d51383e6554b7f3ab4fd8cf614d8c2b422fb22/components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") -upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/workaround_for_buggy_KFPv2_compiler/component.yaml") +create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_fully_connected_network/component.yaml") +train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") +create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") +upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/component.yaml") # XGBoost -train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/58d3a47f904f32a64af8403330ba7e2134cae46d/components/XGBoost/Train/component.yaml") -xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/4694ec97baccf59284c2a1db4aa2250c22291eab/components/XGBoost/Predict/component.yaml") -upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/workaround_for_buggy_KFPv2_compiler/component.yaml") +train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Train/component.yaml") +xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Predict/component.yaml") +upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/component.yaml") # Scikit-learn -#train_linear_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/f807e02b54d4886c65a05f40848fd51c72407f40/components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml") -train_logistic_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/cb44b75c9c062fcc40c2b905b2024b4493dbc62b/components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml") -upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/workaround_for_buggy_KFPv2_compiler/component.yaml") +#train_linear_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/1f5cf6e06409b704064b2086c0a705e4e6b4fcde/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml") +train_logistic_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/1f5cf6e06409b704064b2086c0a705e4e6b4fcde/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml") +upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/component.yaml") # Vertex AI -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_classification_model_using_all_frameworks_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_linear_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_linear_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py index a96a4c07f..4fa8c4aed 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_linear_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_linear_model_using_Scikit_learn_and_import_to_Vertex_AI/pipeline.py @@ -2,12 +2,12 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -train_linear_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/f807e02b54d4886c65a05f40848fd51c72407f40/components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml") -upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +train_linear_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/1f5cf6e06409b704064b2086c0a705e4e6b4fcde/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml") +upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_regression_linear_model_using_Scikit_learn_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py index b9f001db9..673b69418 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_PyTorch_and_import_to_Vertex_AI/pipeline.py @@ -2,14 +2,14 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1a2ef3eeb77bc278f33cad0dd29008ea2431e191/components/PyTorch/Create_fully_connected_network/component.yaml") -train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/d8c4cf5e6403bc65bcf8d606e6baf87e2528a3dc/components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") -create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/46d51383e6554b7f3ab4fd8cf614d8c2b422fb22/components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") -upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_fully_connected_network/component.yaml") +train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") +create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") +upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_regression_model_using_PyTorch_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py index 74822c09c..04801852f 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_TensorFlow_and_import_to_Vertex_AI/pipeline.py @@ -2,15 +2,15 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/daae5a4abaa35e44501818b1534ed7827d7da073/components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") -create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/9ca0f9eecf5f896f65b8538bbd809747052617d1/components/tensorflow/Create_fully_connected_network/component.yaml") -train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c504a4010348c50eaaf6d4337586ccc008f4dcef/components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") -predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/59c759ce6f543184e30db6817d2a703879bc0f39/components/tensorflow/Predict/on_CSV/component.yaml") -upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") +create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Create_fully_connected_network/component.yaml") +train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") +predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Predict/on_CSV/component.yaml") +upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_regression_model_using_Tensorflow_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py index 2981b2630..919398263 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_XGBoost_and_import_to_Vertex_AI/pipeline.py @@ -2,14 +2,14 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/daae5a4abaa35e44501818b1534ed7827d7da073/components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") -train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/58d3a47f904f32a64af8403330ba7e2134cae46d/components/XGBoost/Train/component.yaml") -xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/4694ec97baccf59284c2a1db4aa2250c22291eab/components/XGBoost/Predict/component.yaml") -upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/workaround_for_buggy_KFPv2_compiler/component.yaml") -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") +train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Train/component.yaml") +xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Predict/component.yaml") +upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_regression_model_using_XGBoost_pipeline(): diff --git a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py index 43007f3c7..bfc7b929b 100644 --- a/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py +++ b/community-content/Train_tabular_models_with_many_frameworks_and_import_to_Vertex_AI_using_Pipelines/Train_tabular_regression_model_using_all_frameworks_and_import_to_Vertex_AI/pipeline.py @@ -2,34 +2,34 @@ from kfp import components # %% Loading components -download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml") -select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/8c78aae096806cff3bc331a40566f42f5c3e9d4b/components/pandas/Select_columns/in_CSV_format/component.yaml") -fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/23405971f5f16a41b16c343129b893c52e4d1d48/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") -split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/daae5a4abaa35e44501818b1534ed7827d7da073/components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") +download_from_gcs_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/storage/download/component.yaml") +select_columns_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml") +fill_all_missing_values_using_Pandas_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml") +split_rows_into_subsets_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml") # TensorFlow -create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/9ca0f9eecf5f896f65b8538bbd809747052617d1/components/tensorflow/Create_fully_connected_network/component.yaml") -train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c504a4010348c50eaaf6d4337586ccc008f4dcef/components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") -predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/59c759ce6f543184e30db6817d2a703879bc0f39/components/tensorflow/Predict/on_CSV/component.yaml") -upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/workaround_for_buggy_KFPv2_compiler/component.yaml") +create_fully_connected_tensorflow_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Create_fully_connected_network/component.yaml") +train_model_using_Keras_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml") +predict_with_TensorFlow_model_on_CSV_data_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/tensorflow/Predict/on_CSV/component.yaml") +upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml") # PyTorch -create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/1a2ef3eeb77bc278f33cad0dd29008ea2431e191/components/PyTorch/Create_fully_connected_network/component.yaml") -train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/d8c4cf5e6403bc65bcf8d606e6baf87e2528a3dc/components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") -create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/46d51383e6554b7f3ab4fd8cf614d8c2b422fb22/components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") -upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/workaround_for_buggy_KFPv2_compiler/component.yaml") +create_fully_connected_pytorch_network_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_fully_connected_network/component.yaml") +train_pytorch_model_from_csv_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml") +create_pytorch_model_archive_with_base_handler_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml") +upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/component.yaml") # XGBoost -train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/58d3a47f904f32a64af8403330ba7e2134cae46d/components/XGBoost/Train/component.yaml") -xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/4694ec97baccf59284c2a1db4aa2250c22291eab/components/XGBoost/Predict/component.yaml") -upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/workaround_for_buggy_KFPv2_compiler/component.yaml") +train_XGBoost_model_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Train/component.yaml") +xgboost_predict_on_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/XGBoost/Predict/component.yaml") +upload_XGBoost_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/component.yaml") # Scikit-learn -train_linear_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/f807e02b54d4886c65a05f40848fd51c72407f40/components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml") -upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/workaround_for_buggy_KFPv2_compiler/component.yaml") +train_linear_regression_model_using_scikit_learn_from_CSV_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/1f5cf6e06409b704064b2086c0a705e4e6b4fcde/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml") +upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/component.yaml") # Vertex AI -deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml") +deploy_model_to_endpoint_op = components.load_component_from_url("https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml") # %% Pipeline definition def train_tabular_regression_model_using_all_frameworks_pipeline(): diff --git a/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml b/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml new file mode 100644 index 000000000..bc2700a17 --- /dev/null +++ b/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml @@ -0,0 +1,64 @@ +name: Train linear regression model using scikit learn from CSV +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/ML_frameworks/Scikit_learn/Train_linear_regression_model/from_CSV/component.yaml'} +inputs: +- {name: dataset, type: CSV} +- {name: label_column_name, type: String} +outputs: +- {name: model, type: ScikitLearnPickleModel} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'scikit-learn==1.0.2' 'pandas==1.4.3' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'scikit-learn==1.0.2' 'pandas==1.4.3' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def train_linear_regression_model_using_scikit_learn_from_CSV( + dataset_path, + model_path, + label_column_name, + ): + import pandas + import pickle + from sklearn import linear_model + + df = pandas.read_csv(dataset_path) + model = linear_model.LinearRegression() + model.fit( + X=df.drop(columns=label_column_name), + y=df[label_column_name], + ) + + with open(model_path, "wb") as f: + pickle.dump(model, f) + + import argparse + _parser = argparse.ArgumentParser(prog='Train linear regression model using scikit learn from CSV', description='') + _parser.add_argument("--dataset", dest="dataset_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--label-column-name", dest="label_column_name", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = train_linear_regression_model_using_scikit_learn_from_CSV(**_parsed_args) + args: + - --dataset + - {inputPath: dataset} + - --label-column-name + - {inputValue: label_column_name} + - --model + - {outputPath: model} diff --git a/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml b/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml new file mode 100644 index 000000000..da4f7a626 --- /dev/null +++ b/community-content/pipeline_components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml @@ -0,0 +1,163 @@ +name: Train logistic regression model using scikit learn from CSV +description: Train logistic regression model using Scikit-learn +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/ML_frameworks/Scikit_learn/Train_logistic_regression_model/from_CSV/component.yaml'} +inputs: +- {name: dataset, type: CSV} +- {name: label_column_name, type: String} +- {name: penalty, type: String, default: l2, optional: true} +- {name: solver, type: String, default: lbfgs, optional: true} +- {name: max_iterations, type: Integer, default: '100', optional: true} +- {name: multi_class_mode, type: String, default: auto, optional: true} +- {name: random_seed, type: Integer, default: '0', optional: true} +outputs: +- {name: model, type: ScikitLearnPickleModel} +- {name: model_parameters, type: JsonObject} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'scikit-learn==1.0.2' 'pandas==1.4.3' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'scikit-learn==1.0.2' 'pandas==1.4.3' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def train_logistic_regression_model_using_scikit_learn_from_CSV( + dataset_path, + model_path, + label_column_name, + penalty = "l2", # l1, l2, elasticnet, none + solver = "lbfgs", # newton-cg, lbfgs, liblinear, sag, saga + max_iterations = 100, + multi_class_mode = "auto", # auto, ovr, multinomial + random_seed = 0, + ): + """Train logistic regression model using Scikit-learn + + See https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html + """ + import json + import pandas + import pickle + from sklearn import linear_model + + df = pandas.read_csv(dataset_path) + model = linear_model.LogisticRegression( + penalty=penalty, + #dual=False, + #tol=1e-4, + #C=1.0, + #fit_intercept=True, + #intercept_scaling=1, + #class_weight=None, + random_state=random_seed, + solver=solver, + max_iter=max_iterations, + multi_class=multi_class_mode, + #l1_ratio=None, + verbose=1, + ) + + model_parameters = model.get_params() + model_parameters_json = json.dumps(model_parameters, indent=2) + print("Model parameters:") + print(model_parameters_json) + print() + + model.fit( + X=df.drop(columns=label_column_name), + y=df[label_column_name], + ) + + with open(model_path, "wb") as f: + pickle.dump(model, f) + + return (model_parameters_json,) + + def _serialize_json(obj) -> str: + if isinstance(obj, str): + return obj + import json + def default_serializer(obj): + if hasattr(obj, 'to_struct'): + return obj.to_struct() + else: + raise TypeError("Object of type '%s' is not JSON serializable and does not have .to_struct() method." % obj.__class__.__name__) + return json.dumps(obj, default=default_serializer, sort_keys=True) + + import argparse + _parser = argparse.ArgumentParser(prog='Train logistic regression model using scikit learn from CSV', description='Train logistic regression model using Scikit-learn') + _parser.add_argument("--dataset", dest="dataset_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--label-column-name", dest="label_column_name", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--penalty", dest="penalty", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--solver", dest="solver", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--max-iterations", dest="max_iterations", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--multi-class-mode", dest="multi_class_mode", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--random-seed", dest="random_seed", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1) + _parsed_args = vars(_parser.parse_args()) + _output_files = _parsed_args.pop("_output_paths", []) + + _outputs = train_logistic_regression_model_using_scikit_learn_from_CSV(**_parsed_args) + + _output_serializers = [ + _serialize_json, + + ] + + import os + for idx, output_file in enumerate(_output_files): + try: + os.makedirs(os.path.dirname(output_file)) + except OSError: + pass + with open(output_file, 'w') as f: + f.write(_output_serializers[idx](_outputs[idx])) + args: + - --dataset + - {inputPath: dataset} + - --label-column-name + - {inputValue: label_column_name} + - if: + cond: {isPresent: penalty} + then: + - --penalty + - {inputValue: penalty} + - if: + cond: {isPresent: solver} + then: + - --solver + - {inputValue: solver} + - if: + cond: {isPresent: max_iterations} + then: + - --max-iterations + - {inputValue: max_iterations} + - if: + cond: {isPresent: multi_class_mode} + then: + - --multi-class-mode + - {inputValue: multi_class_mode} + - if: + cond: {isPresent: random_seed} + then: + - --random-seed + - {inputValue: random_seed} + - --model + - {outputPath: model} + - '----output-paths' + - {outputPath: model_parameters} diff --git a/community-content/pipeline_components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml b/community-content/pipeline_components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml new file mode 100644 index 000000000..92072d294 --- /dev/null +++ b/community-content/pipeline_components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml @@ -0,0 +1,41 @@ +name: Create PyTorch Model Archive with base handler +inputs: +- {name: Model, type: PyTorchScriptModule} +- {name: Model name, type: String, default: model} +- {name: Model version, type: String, default: "1.0"} +outputs: +- {name: Model archive, type: PyTorchModelArchive} +metadata: + annotations: + author: Alexey Volkov + canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/PyTorch/Create_PyTorch_Model_Archive/with_base_handler/component.yaml' +implementation: + container: + image: pytorch/torchserve:0.6.0-cpu + command: + - bash + - -exc + - | + model_path=$0 + model_name=$1 + model_version=$2 + output_model_archive_path=$3 + + mkdir -p "$(dirname "$output_model_archive_path")" + + # TODO: Use the built-in base_handler once my fix is merged: https://github.com/pytorch/serve/pull/1682 + echo ' + from ts.torch_handler import base_handler + class BaseHandler(base_handler.BaseHandler): + pass + ' > base_handler.py # torch-model-archiver needs the handler to have .py extension + torch-model-archiver --model-name "$model_name" --version "$model_version" --serialized-file "$model_path" --handler base_handler.py + + # torch-model-archiver does not allow specifying the output path, but always writes to "${model_name}." + expected_model_archive_path="${model_name}.mar" + mv "$expected_model_archive_path" "$output_model_archive_path" + + - {inputPath: Model} + - {inputValue: Model name} + - {inputValue: Model version} + - {outputPath: Model archive} diff --git a/community-content/pipeline_components/PyTorch/Create_fully_connected_network/component.yaml b/community-content/pipeline_components/PyTorch/Create_fully_connected_network/component.yaml new file mode 100644 index 000000000..e731a7372 --- /dev/null +++ b/community-content/pipeline_components/PyTorch/Create_fully_connected_network/component.yaml @@ -0,0 +1,117 @@ +name: Create fully connected pytorch network +description: Creates fully-connected network in PyTorch ScriptModule format +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/PyTorch/Create_fully_connected_network/component.yaml'} +inputs: +- {name: input_size, type: Integer} +- {name: hidden_layer_sizes, type: JsonArray, default: '[]', optional: true} +- {name: output_size, type: Integer, default: '1', optional: true} +- {name: activation_name, type: String, default: relu, optional: true} +- {name: output_activation_name, type: String, optional: true} +- {name: random_seed, type: Integer, default: '0', optional: true} +outputs: +- {name: model, type: PyTorchScriptModule} +implementation: + container: + image: pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime + command: + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def create_fully_connected_pytorch_network( + input_size, + model_path, + hidden_layer_sizes = [], + output_size = 1, + activation_name = 'relu', + output_activation_name = None, + random_seed = 0, + ): + '''Creates fully-connected network in PyTorch ScriptModule format''' + import torch + torch.manual_seed(random_seed) + + activation = getattr(torch, activation_name, None) or getattr(torch.nn.functional, activation_name, None) + if not activation: + raise ValueError(f'Activation "{activation_name}" was not found.') + + class ActivationLayer(torch.nn.Module): + def forward(self, input): + return activation(input) + + layers = [] + prev_layer_size = input_size + for layer_size in hidden_layer_sizes: + layer = torch.nn.Linear(prev_layer_size, layer_size) + prev_layer_size = layer_size + layers.append(layer) + layers.append(ActivationLayer()) + + # Adding the output layer + layers.append(torch.nn.Linear(prev_layer_size, output_size)) + + # Adding the optional activation after the output layer + if output_activation_name: + output_activation = getattr(torch, output_activation_name, None) or getattr(torch.nn.functional, output_activation_name, None) + class OutputActivationLayer(torch.nn.Module): + def forward(self, input): + return output_activation(input) + layers.append(OutputActivationLayer()) + + network = torch.nn.Sequential(*layers) + script_module = torch.jit.script(network) + print(script_module) + script_module.save(model_path) + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Create fully connected pytorch network', description='Creates fully-connected network in PyTorch ScriptModule format') + _parser.add_argument("--input-size", dest="input_size", type=int, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--hidden-layer-sizes", dest="hidden_layer_sizes", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--output-size", dest="output_size", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--activation-name", dest="activation_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--output-activation-name", dest="output_activation_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--random-seed", dest="random_seed", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = create_fully_connected_pytorch_network(**_parsed_args) + args: + - --input-size + - {inputValue: input_size} + - if: + cond: {isPresent: hidden_layer_sizes} + then: + - --hidden-layer-sizes + - {inputValue: hidden_layer_sizes} + - if: + cond: {isPresent: output_size} + then: + - --output-size + - {inputValue: output_size} + - if: + cond: {isPresent: activation_name} + then: + - --activation-name + - {inputValue: activation_name} + - if: + cond: {isPresent: output_activation_name} + then: + - --output-activation-name + - {inputValue: output_activation_name} + - if: + cond: {isPresent: random_seed} + then: + - --random-seed + - {inputValue: random_seed} + - --model + - {outputPath: model} diff --git a/community-content/pipeline_components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml b/community-content/pipeline_components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml new file mode 100644 index 000000000..a38108a7b --- /dev/null +++ b/community-content/pipeline_components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml @@ -0,0 +1,209 @@ +name: Train pytorch model from csv +description: Trains PyTorch model +metadata: + annotations: + author: Alexey Volkov + canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/PyTorch/Train_PyTorch_model/from_CSV/component.yaml' +inputs: +- {name: model, type: PyTorchScriptModule} +- {name: training_data, type: CSV} +- {name: label_column_name, type: String} +- {name: loss_function_name, type: String, default: mse_loss, optional: true} +- {name: number_of_epochs, type: Integer, default: '1', optional: true} +- {name: learning_rate, type: Float, default: '0.1', optional: true} +- {name: optimizer_name, type: String, default: Adadelta, optional: true} +- {name: optimizer_parameters, type: JsonObject, optional: true} +- {name: batch_size, type: Integer, default: '32', optional: true} +- {name: batch_log_interval, type: Integer, default: '100', optional: true} +- {name: random_seed, type: Integer, default: '0', optional: true} +outputs: +- {name: trained_model, type: PyTorchScriptModule} +implementation: + container: + image: pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'pandas==1.4.3' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet + --no-warn-script-location 'pandas==1.4.3' --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def train_pytorch_model_from_csv( + model_path, + training_data_path, + trained_model_path, + label_column_name, + loss_function_name = 'mse_loss', + number_of_epochs = 1, + learning_rate = 0.1, + optimizer_name = 'Adadelta', + optimizer_parameters = None, + batch_size = 32, + batch_log_interval = 100, + random_seed = 0, + ): + '''Trains PyTorch model''' + import pandas + import torch + + torch.manual_seed(random_seed) + + use_cuda = torch.cuda.is_available() + device = torch.device("cuda" if use_cuda else "cpu") + + model = torch.jit.load(model_path) + model.to(device) + model.train() + + optimizer_class = getattr(torch.optim, optimizer_name, None) + if not optimizer_class: + raise ValueError(f'Optimizer "{optimizer_name}" was not found.') + + optimizer_parameters = optimizer_parameters or {} + optimizer_parameters['lr'] = learning_rate + optimizer = optimizer_class(model.parameters(), **optimizer_parameters) + + loss_function = getattr(torch, loss_function_name, None) or getattr(torch.nn, loss_function_name, None) or getattr(torch.nn.functional, loss_function_name, None) + if not loss_function: + raise ValueError(f'Loss function "{loss_function_name}" was not found.') + + class CsvDataset(torch.utils.data.Dataset): + + def __init__(self, file_path, label_column_name, drop_nan_columns_or_rows = 'columns'): + dataframe = pandas.read_csv(file_path).convert_dtypes() + # Preventing error: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found object + if drop_nan_columns_or_rows == 'columns': + non_nan_data = dataframe.dropna(axis='columns') + removed_columns = set(dataframe.columns) - set(non_nan_data.columns) + if removed_columns: + print('Skipping columns with NaNs: ' + str(removed_columns)) + dataframe = non_nan_data + if drop_nan_columns_or_rows == 'rows': + non_nan_data = dataframe.dropna(axis='index') + number_of_removed_rows = len(dataframe) - len(non_nan_data) + if number_of_removed_rows: + print(f'Skipped {number_of_removed_rows} rows with NaNs.') + dataframe = non_nan_data + numerical_data = dataframe.select_dtypes(include='number') + non_numerical_data = dataframe.select_dtypes(exclude='number') + if not non_numerical_data.empty: + print('Skipping non-number columns:') + print(non_numerical_data.dtypes) + self._dataframe = dataframe + self.labels = numerical_data[[label_column_name]] + self.features = numerical_data.drop(columns=[label_column_name]) + + def __len__(self): + return len(self._dataframe) + + def __getitem__(self, index): + return [self.features.loc[index].to_numpy(dtype='float32'), self.labels.loc[index].to_numpy(dtype='float32')] + + dataset = CsvDataset( + file_path=training_data_path, + label_column_name=label_column_name, + ) + train_loader = torch.utils.data.DataLoader( + dataset=dataset, + batch_size=batch_size, + shuffle=True, + ) + + last_full_batch_loss = None + for epoch in range(1, number_of_epochs + 1): + for batch_idx, (data, target) in enumerate(train_loader): + data, target = data.to(device), target.to(device) + optimizer.zero_grad() + output = model(data) + loss = loss_function(output, target) + loss.backward() + optimizer.step() + if len(data) == batch_size: + last_full_batch_loss = loss.item() + if batch_idx % batch_log_interval == 0: + print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( + epoch, batch_idx * len(data), len(train_loader.dataset), + 100. * batch_idx / len(train_loader), loss.item())) + print(f'Training epoch {epoch} completed. Last full batch loss: {last_full_batch_loss:.6f}') + + # print(optimizer.state_dict()) + model.save(trained_model_path) + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Train pytorch model from csv', description='Trains PyTorch model') + _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--training-data", dest="training_data_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--label-column-name", dest="label_column_name", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--loss-function-name", dest="loss_function_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--number-of-epochs", dest="number_of_epochs", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--learning-rate", dest="learning_rate", type=float, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--optimizer-name", dest="optimizer_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--optimizer-parameters", dest="optimizer_parameters", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--batch-size", dest="batch_size", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--batch-log-interval", dest="batch_log_interval", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--random-seed", dest="random_seed", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--trained-model", dest="trained_model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = train_pytorch_model_from_csv(**_parsed_args) + args: + - --model + - {inputPath: model} + - --training-data + - {inputPath: training_data} + - --label-column-name + - {inputValue: label_column_name} + - if: + cond: {isPresent: loss_function_name} + then: + - --loss-function-name + - {inputValue: loss_function_name} + - if: + cond: {isPresent: number_of_epochs} + then: + - --number-of-epochs + - {inputValue: number_of_epochs} + - if: + cond: {isPresent: learning_rate} + then: + - --learning-rate + - {inputValue: learning_rate} + - if: + cond: {isPresent: optimizer_name} + then: + - --optimizer-name + - {inputValue: optimizer_name} + - if: + cond: {isPresent: optimizer_parameters} + then: + - --optimizer-parameters + - {inputValue: optimizer_parameters} + - if: + cond: {isPresent: batch_size} + then: + - --batch-size + - {inputValue: batch_size} + - if: + cond: {isPresent: batch_log_interval} + then: + - --batch-log-interval + - {inputValue: batch_log_interval} + - if: + cond: {isPresent: random_seed} + then: + - --random-seed + - {inputValue: random_seed} + - --trained-model + - {outputPath: trained_model} diff --git a/community-content/pipeline_components/XGBoost/Predict/component.yaml b/community-content/pipeline_components/XGBoost/Predict/component.yaml new file mode 100644 index 000000000..3476e0237 --- /dev/null +++ b/community-content/pipeline_components/XGBoost/Predict/component.yaml @@ -0,0 +1,110 @@ +name: Xgboost predict on CSV +description: Makes predictions using a trained XGBoost model. +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/XGBoost/Predict/component.yaml'} +inputs: +- {name: data, type: CSV, description: Feature data in Apache Parquet format.} +- {name: model, type: XGBoostModel, description: Trained model in binary XGBoost format.} +- {name: label_column_name, type: String, description: Optional. Name of the column + containing the label data that is excluded during the prediction., optional: true} +outputs: +- {name: predictions, description: Model predictions.} +implementation: + container: + image: python:3.10 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'xgboost==1.6.1' 'pandas==1.4.3' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'xgboost==1.6.1' 'pandas==1.4.3' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def xgboost_predict_on_CSV( + data_path, + model_path, + predictions_path, + label_column_name = None, + ): + """Makes predictions using a trained XGBoost model. + + Args: + data_path: Feature data in Apache Parquet format. + model_path: Trained model in binary XGBoost format. + predictions_path: Model predictions. + label_column_name: Optional. Name of the column containing the label data that is excluded during the prediction. + + Annotations: + author: Alexey Volkov + """ + from pathlib import Path + + import numpy + import pandas + import xgboost + + df = pandas.read_csv( + data_path, + ).convert_dtypes() + print("Evaluation data information:") + df.info(verbose=True) + # Converting column types that XGBoost does not support + for column_name, dtype in df.dtypes.items(): + if dtype in ["string", "object"]: + print(f"Treating the {dtype.name} column '{column_name}' as categorical.") + df[column_name] = df[column_name].astype("category") + print(f"Inferred {len(df[column_name].cat.categories)} categories for the '{column_name}' column.") + # Working around the XGBoost issue with nullable floats: https://github.com/dmlc/xgboost/issues/8213 + if pandas.api.types.is_float_dtype(dtype): + # Converting from "Float64" to "float64" + df[column_name] = df[column_name].astype(dtype.name.lower()) + print("Final evaluation data information:") + df.info(verbose=True) + + if label_column_name is not None: + df = df.drop(columns=[label_column_name]) + + testing_data = xgboost.DMatrix( + data=df, + enable_categorical=True, + ) + + model = xgboost.Booster(model_file=model_path) + + predictions = model.predict(testing_data) + + Path(predictions_path).parent.mkdir(parents=True, exist_ok=True) + numpy.savetxt(predictions_path, predictions) + + import argparse + _parser = argparse.ArgumentParser(prog='Xgboost predict on CSV', description='Makes predictions using a trained XGBoost model.') + _parser.add_argument("--data", dest="data_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--label-column-name", dest="label_column_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--predictions", dest="predictions_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = xgboost_predict_on_CSV(**_parsed_args) + args: + - --data + - {inputPath: data} + - --model + - {inputPath: model} + - if: + cond: {isPresent: label_column_name} + then: + - --label-column-name + - {inputValue: label_column_name} + - --predictions + - {outputPath: predictions} diff --git a/community-content/pipeline_components/XGBoost/Train/component.yaml b/community-content/pipeline_components/XGBoost/Train/component.yaml new file mode 100644 index 000000000..86949395b --- /dev/null +++ b/community-content/pipeline_components/XGBoost/Train/component.yaml @@ -0,0 +1,241 @@ +name: Train XGBoost model on CSV +description: Trains an XGBoost model. +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/XGBoost/Train/component.yaml'} +inputs: +- {name: training_data, type: CSV, description: Training data in CSV format.} +- {name: label_column_name, type: String, description: Name of the column containing + the label data.} +- {name: starting_model, type: XGBoostModel, description: Existing trained model to + start from (in the binary XGBoost format)., optional: true} +- {name: num_iterations, type: Integer, description: Number of boosting iterations., + default: '10', optional: true} +- name: objective + type: String + description: |- + The learning task and the corresponding learning objective. + See https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters + The most common values are: + "reg:squarederror" - Regression with squared loss (default). + "reg:logistic" - Logistic regression. + "binary:logistic" - Logistic regression for binary classification, output probability. + "binary:logitraw" - Logistic regression for binary classification, output score before logistic transformation + "rank:pairwise" - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized + "rank:ndcg" - Use LambdaMART to perform list-wise ranking where Normalized Discounted Cumulative Gain (NDCG) is maximized + default: reg:squarederror + optional: true +- {name: booster, type: String, description: 'The booster to use. Can be `gbtree`, + `gblinear` or `dart`; `gbtree` and `dart` use tree based models while `gblinear` + uses linear functions.', default: gbtree, optional: true} +- {name: learning_rate, type: Float, description: 'Step size shrinkage used in update + to prevents overfitting. Range: [0,1].', default: '0.3', optional: true} +- name: min_split_loss + type: Float + description: |- + Minimum loss reduction required to make a further partition on a leaf node of the tree. + The larger `min_split_loss` is, the more conservative the algorithm will be. Range: [0,Inf]. + default: '0' + optional: true +- name: max_depth + type: Integer + description: |- + Maximum depth of a tree. Increasing this value will make the model more complex and more likely to overfit. + 0 indicates no limit on depth. Range: [0,Inf]. + default: '6' + optional: true +- {name: booster_params, type: JsonObject, description: 'Parameters for the booster. + See https://xgboost.readthedocs.io/en/latest/parameter.html', optional: true} +outputs: +- {name: model, type: XGBoostModel, description: Trained model in the binary XGBoost + format.} +- {name: model_config, type: XGBoostModelConfig, description: The internal parameter + configuration of Booster as a JSON string.} +implementation: + container: + image: python:3.10 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'xgboost==1.6.1' 'pandas==1.4.3' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'xgboost==1.6.1' 'pandas==1.4.3' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def train_XGBoost_model_on_CSV( + training_data_path, + model_path, + model_config_path, + label_column_name, + starting_model_path = None, + num_iterations = 10, + # Booster parameters + objective = "reg:squarederror", + booster = "gbtree", + learning_rate = 0.3, + min_split_loss = 0, + max_depth = 6, + booster_params = None, + ): + """Trains an XGBoost model. + + Args: + training_data_path: Training data in CSV format. + model_path: Trained model in the binary XGBoost format. + model_config_path: The internal parameter configuration of Booster as a JSON string. + starting_model_path: Existing trained model to start from (in the binary XGBoost format). + label_column_name: Name of the column containing the label data. + num_iterations: Number of boosting iterations. + booster_params: Parameters for the booster. See https://xgboost.readthedocs.io/en/latest/parameter.html + objective: The learning task and the corresponding learning objective. + See https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters + The most common values are: + "reg:squarederror" - Regression with squared loss (default). + "reg:logistic" - Logistic regression. + "binary:logistic" - Logistic regression for binary classification, output probability. + "binary:logitraw" - Logistic regression for binary classification, output score before logistic transformation + "rank:pairwise" - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized + "rank:ndcg" - Use LambdaMART to perform list-wise ranking where Normalized Discounted Cumulative Gain (NDCG) is maximized + booster: The booster to use. Can be `gbtree`, `gblinear` or `dart`; `gbtree` and `dart` use tree based models while `gblinear` uses linear functions. + learning_rate: Step size shrinkage used in update to prevents overfitting. Range: [0,1]. + min_split_loss: Minimum loss reduction required to make a further partition on a leaf node of the tree. + The larger `min_split_loss` is, the more conservative the algorithm will be. Range: [0,Inf]. + max_depth: Maximum depth of a tree. Increasing this value will make the model more complex and more likely to overfit. + 0 indicates no limit on depth. Range: [0,Inf]. + + Annotations: + author: Alexey Volkov + """ + import pandas + import xgboost + + df = pandas.read_csv( + training_data_path, + ).convert_dtypes() + print("Training data information:") + df.info(verbose=True) + # Converting column types that XGBoost does not support + for column_name, dtype in df.dtypes.items(): + if dtype in ["string", "object"]: + print(f"Treating the {dtype.name} column '{column_name}' as categorical.") + df[column_name] = df[column_name].astype("category") + print(f"Inferred {len(df[column_name].cat.categories)} categories for the '{column_name}' column.") + # Working around the XGBoost issue with nullable floats: https://github.com/dmlc/xgboost/issues/8213 + if pandas.api.types.is_float_dtype(dtype): + # Converting from "Float64" to "float64" + df[column_name] = df[column_name].astype(dtype.name.lower()) + print() + print("Final training data information:") + df.info(verbose=True) + + training_data = xgboost.DMatrix( + data=df.drop(columns=[label_column_name]), + label=df[[label_column_name]], + enable_categorical=True, + ) + + booster_params = booster_params or {} + booster_params.setdefault("objective", objective) + booster_params.setdefault("booster", booster) + booster_params.setdefault("learning_rate", learning_rate) + booster_params.setdefault("min_split_loss", min_split_loss) + booster_params.setdefault("max_depth", max_depth) + + starting_model = None + if starting_model_path: + starting_model = xgboost.Booster(model_file=starting_model_path) + + print() + print("Training the model:") + model = xgboost.train( + params=booster_params, + dtrain=training_data, + num_boost_round=num_iterations, + xgb_model=starting_model, + evals=[(training_data, "training_data")], + ) + + # Saving the model in binary format + model.save_model(model_path) + + model_config_str = model.save_config() + with open(model_config_path, "w") as model_config_file: + model_config_file.write(model_config_str) + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Train XGBoost model on CSV', description='Trains an XGBoost model.') + _parser.add_argument("--training-data", dest="training_data_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--label-column-name", dest="label_column_name", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--starting-model", dest="starting_model_path", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--num-iterations", dest="num_iterations", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--objective", dest="objective", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--booster", dest="booster", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--learning-rate", dest="learning_rate", type=float, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--min-split-loss", dest="min_split_loss", type=float, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--max-depth", dest="max_depth", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--booster-params", dest="booster_params", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--model-config", dest="model_config_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = train_XGBoost_model_on_CSV(**_parsed_args) + args: + - --training-data + - {inputPath: training_data} + - --label-column-name + - {inputValue: label_column_name} + - if: + cond: {isPresent: starting_model} + then: + - --starting-model + - {inputPath: starting_model} + - if: + cond: {isPresent: num_iterations} + then: + - --num-iterations + - {inputValue: num_iterations} + - if: + cond: {isPresent: objective} + then: + - --objective + - {inputValue: objective} + - if: + cond: {isPresent: booster} + then: + - --booster + - {inputValue: booster} + - if: + cond: {isPresent: learning_rate} + then: + - --learning-rate + - {inputValue: learning_rate} + - if: + cond: {isPresent: min_split_loss} + then: + - --min-split-loss + - {inputValue: min_split_loss} + - if: + cond: {isPresent: max_depth} + then: + - --max-depth + - {inputValue: max_depth} + - if: + cond: {isPresent: booster_params} + then: + - --booster-params + - {inputValue: booster_params} + - --model + - {outputPath: model} + - --model-config + - {outputPath: model_config} diff --git a/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml b/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml new file mode 100644 index 000000000..9947a9483 --- /dev/null +++ b/community-content/pipeline_components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml @@ -0,0 +1,204 @@ +name: Split rows into subsets +description: Splits the data table according to the split fractions. +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/dataset_manipulation/Split_rows_into_subsets/in_CSV/component.yaml'} +inputs: +- {name: table, type: CSV} +- {name: fraction_1, type: Float, description: 'The proportion of the lines to put + into the 1st split. Range: [0, 1]'} +- name: fraction_2 + type: Float + description: |- + The proportion of the lines to put into the 2nd split. Range: [0, 1] + If fraction_2 is not specified, then fraction_2 = 1 - fraction_1. + The remaining lines go to the 3rd split (if any). + optional: true +- {name: random_seed, type: Integer, default: '0', optional: true} +outputs: +- {name: split_1, type: CSV} +- {name: split_2, type: CSV} +- {name: split_3, type: CSV} +- {name: split_1_count, type: Integer} +- {name: split_2_count, type: Integer} +- {name: split_3_count, type: Integer} +implementation: + container: + image: python:3.9 + command: + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def split_rows_into_subsets( + table_path, + split_1_path, + split_2_path, + split_3_path, + fraction_1, + fraction_2 = None, + random_seed = 0, + ): + """Splits the data table according to the split fractions. + + Args: + fraction_1: The proportion of the lines to put into the 1st split. Range: [0, 1] + fraction_2: The proportion of the lines to put into the 2nd split. Range: [0, 1] + If fraction_2 is not specified, then fraction_2 = 1 - fraction_1. + The remaining lines go to the 3rd split (if any). + """ + import random + + random.seed(random_seed) + + SHUFFLE_BUFFER_SIZE = 10000 + + num_splits = 3 + + if fraction_1 < 0 or fraction_1 > 1: + raise ValueError("fraction_1 must be in between 0 and 1.") + + if fraction_2 is None: + fraction_2 = 1 - fraction_1 + if fraction_2 < 0 or fraction_2 > 1: + raise ValueError("fraction_2 must be in between 0 and 1.") + + fraction_3 = 1 - fraction_1 - fraction_2 + + fractions = [ + fraction_1, + fraction_2, + fraction_3, + ] + + assert sum(fractions) == 1 + + written_line_counts = [0] * num_splits + + output_files = [ + open(split_1_path, "wb"), + open(split_2_path, "wb"), + open(split_3_path, "wb"), + ] + + with open(table_path, "rb") as input_file: + # Writing the headers + header_line = input_file.readline() + for output_file in output_files: + output_file.write(header_line) + + while True: + line_buffer = [] + for i in range(SHUFFLE_BUFFER_SIZE): + line = input_file.readline() + if not line: + break + line_buffer.append(line) + + # We need to exactly partition the lines between the output files + # To overcome possible systematic bias, we could calculate the total numbers + # of lines written to each file and take that into account. + num_read_lines = len(line_buffer) + number_of_lines_for_files = [0] * num_splits + # List that will have the index of the destination file for each line + file_index_for_line = [] + remaining_lines = num_read_lines + remaining_fraction = 1 + for i in range(num_splits): + number_of_lines_for_file = ( + round(remaining_lines * (fractions[i] / remaining_fraction)) + if remaining_fraction > 0 + else 0 + ) + number_of_lines_for_files[i] = number_of_lines_for_file + remaining_lines -= number_of_lines_for_file + remaining_fraction -= fractions[i] + file_index_for_line.extend([i] * number_of_lines_for_file) + + assert remaining_lines == 0, f"{remaining_lines}" + assert len(file_index_for_line) == num_read_lines + + random.shuffle(file_index_for_line) + + for i in range(num_read_lines): + output_files[file_index_for_line[i]].write(line_buffer[i]) + written_line_counts[file_index_for_line[i]] += 1 + + # Exit if the file ended before we were able to fully fill the buffer + if len(line_buffer) != SHUFFLE_BUFFER_SIZE: + break + + for output_file in output_files: + output_file.close() + + return written_line_counts + + def _serialize_int(int_value: int) -> str: + if isinstance(int_value, str): + return int_value + if not isinstance(int_value, int): + raise TypeError('Value "{}" has type "{}" instead of int.'.format(str(int_value), str(type(int_value)))) + return str(int_value) + + import argparse + _parser = argparse.ArgumentParser(prog='Split rows into subsets', description='Splits the data table according to the split fractions.') + _parser.add_argument("--table", dest="table_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--fraction-1", dest="fraction_1", type=float, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--fraction-2", dest="fraction_2", type=float, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--random-seed", dest="random_seed", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--split-1", dest="split_1_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--split-2", dest="split_2_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--split-3", dest="split_3_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=3) + _parsed_args = vars(_parser.parse_args()) + _output_files = _parsed_args.pop("_output_paths", []) + + _outputs = split_rows_into_subsets(**_parsed_args) + + _output_serializers = [ + _serialize_int, + _serialize_int, + _serialize_int, + + ] + + import os + for idx, output_file in enumerate(_output_files): + try: + os.makedirs(os.path.dirname(output_file)) + except OSError: + pass + with open(output_file, 'w') as f: + f.write(_output_serializers[idx](_outputs[idx])) + args: + - --table + - {inputPath: table} + - --fraction-1 + - {inputValue: fraction_1} + - if: + cond: {isPresent: fraction_2} + then: + - --fraction-2 + - {inputValue: fraction_2} + - if: + cond: {isPresent: random_seed} + then: + - --random-seed + - {inputValue: random_seed} + - --split-1 + - {outputPath: split_1} + - --split-2 + - {outputPath: split_2} + - --split-3 + - {outputPath: split_3} + - '----output-paths' + - {outputPath: split_1_count} + - {outputPath: split_2_count} + - {outputPath: split_3_count} diff --git a/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml new file mode 100644 index 000000000..5df96872f --- /dev/null +++ b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml @@ -0,0 +1,241 @@ +name: Deploy model to endpoint for Google Cloud Vertex AI Model +description: Deploys Google Cloud Vertex AI Model to a Google Cloud Vertex AI Endpoint. +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/KFPv2_hell/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml'} +inputs: +- {name: model_name, type: String, description: Full resource name of a Google Cloud + Vertex AI Model} +- name: endpoint_name + type: String + description: |- + Optional. Full name of Google Cloud Vertex Endpoint. A new + endpoint is created if the name is not passed. + optional: true +- name: machine_type + type: String + description: |- + The type of the machine. See the [list of machine types + supported for prediction + ](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types). + Defaults to "n1-standard-2" + default: n1-standard-2 + optional: true +- name: min_replica_count + type: Integer + description: |- + Optional. The minimum number of machine replicas this deployed + model will be always deployed on. If traffic against it increases, + it may dynamically be deployed onto more replicas, and as traffic + decreases, some of these extra replicas may be freed. + default: '1' + optional: true +- name: max_replica_count + type: Integer + description: |- + Optional. The maximum number of replicas this deployed model may + be deployed on when the traffic against it increases. If requested + value is too large, the deployment will error, but if deployment + succeeds then the ability to scale the model to that many replicas + is guaranteed (barring service outages). If traffic against the + deployed model increases beyond what its replicas at maximum may + handle, a portion of the traffic will be dropped. If this value + is not provided, the smaller value of min_replica_count or 1 will + be used. + default: '1' + optional: true +- name: accelerator_type + type: String + description: |- + Optional. Hardware accelerator type. Must also set accelerator_count if used. + One of ACCELERATOR_TYPE_UNSPECIFIED, NVIDIA_TESLA_K80, NVIDIA_TESLA_P100, + NVIDIA_TESLA_V100, NVIDIA_TESLA_P4, NVIDIA_TESLA_T4 + optional: true +- {name: accelerator_count, type: Integer, description: Optional. The number of accelerators + to attach to a worker replica., optional: true} +outputs: +- {name: endpoint_name, type: String} +- {name: endpoint_dict, type: JsonObject} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'google-cloud-aiplatform==1.7.0' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'google-cloud-aiplatform==1.7.0' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def deploy_model_to_endpoint_for_Google_Cloud_Vertex_AI_Model( + model_name, + endpoint_name = None, + machine_type = "n1-standard-2", + min_replica_count = 1, + max_replica_count = 1, + accelerator_type = None, + accelerator_count = None, + # + # Uncomment when anyone requests these: + # deployed_model_display_name: str = None, + # traffic_percentage: int = 0, + # traffic_split: dict = None, + # service_account: str = None, + # explanation_metadata: "google.cloud.aiplatform_v1.types.explanation_metadata.ExplanationMetadata" = None, + # explanation_parameters: "google.cloud.aiplatform_v1.types.explanation.ExplanationParameters" = None, + # + # encryption_spec_key_name: str = None, + ): + """Deploys Google Cloud Vertex AI Model to a Google Cloud Vertex AI Endpoint. + + Args: + model_name: Full resource name of a Google Cloud Vertex AI Model + endpoint_name: Optional. Full name of Google Cloud Vertex Endpoint. A new + endpoint is created if the name is not passed. + machine_type: The type of the machine. See the [list of machine types + supported for prediction + ](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types). + Defaults to "n1-standard-2" + min_replica_count (int): + Optional. The minimum number of machine replicas this deployed + model will be always deployed on. If traffic against it increases, + it may dynamically be deployed onto more replicas, and as traffic + decreases, some of these extra replicas may be freed. + max_replica_count (int): + Optional. The maximum number of replicas this deployed model may + be deployed on when the traffic against it increases. If requested + value is too large, the deployment will error, but if deployment + succeeds then the ability to scale the model to that many replicas + is guaranteed (barring service outages). If traffic against the + deployed model increases beyond what its replicas at maximum may + handle, a portion of the traffic will be dropped. If this value + is not provided, the smaller value of min_replica_count or 1 will + be used. + accelerator_type (str): + Optional. Hardware accelerator type. Must also set accelerator_count if used. + One of ACCELERATOR_TYPE_UNSPECIFIED, NVIDIA_TESLA_K80, NVIDIA_TESLA_P100, + NVIDIA_TESLA_V100, NVIDIA_TESLA_P4, NVIDIA_TESLA_T4 + accelerator_count (int): + Optional. The number of accelerators to attach to a worker replica. + """ + import json + from google.cloud import aiplatform + + model = aiplatform.Model(model_name=model_name) + + if endpoint_name: + endpoint = aiplatform.Endpoint(endpoint_name=endpoint_name) + else: + endpoint_display_name = model.display_name[:118] + "_endpoint" + endpoint = aiplatform.Endpoint.create( + display_name=endpoint_display_name, + project=model.project, + location=model.location, + # encryption_spec_key_name=encryption_spec_key_name, + labels={"component-source": "github-com-ark-kun-pipeline-components"}, + ) + + endpoint = model.deploy( + endpoint=endpoint, + # deployed_model_display_name=deployed_model_display_name, + machine_type=machine_type, + min_replica_count=min_replica_count, + max_replica_count=max_replica_count, + accelerator_type=accelerator_type, + accelerator_count=accelerator_count, + # service_account=service_account, + # explanation_metadata=explanation_metadata, + # explanation_parameters=explanation_parameters, + # encryption_spec_key_name=encryption_spec_key_name, + ) + + endpoint_json = json.dumps(endpoint.to_dict(), indent=2) + print(endpoint_json) + return (endpoint.resource_name, endpoint_json) + + def _serialize_json(obj) -> str: + if isinstance(obj, str): + return obj + import json + def default_serializer(obj): + if hasattr(obj, 'to_struct'): + return obj.to_struct() + else: + raise TypeError("Object of type '%s' is not JSON serializable and does not have .to_struct() method." % obj.__class__.__name__) + return json.dumps(obj, default=default_serializer, sort_keys=True) + + def _serialize_str(str_value: str) -> str: + if not isinstance(str_value, str): + raise TypeError('Value "{}" has type "{}" instead of str.'.format(str(str_value), str(type(str_value)))) + return str_value + + import argparse + _parser = argparse.ArgumentParser(prog='Deploy model to endpoint for Google Cloud Vertex AI Model', description='Deploys Google Cloud Vertex AI Model to a Google Cloud Vertex AI Endpoint.') + _parser.add_argument("--model-name", dest="model_name", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--endpoint-name", dest="endpoint_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--machine-type", dest="machine_type", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--min-replica-count", dest="min_replica_count", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--max-replica-count", dest="max_replica_count", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--accelerator-type", dest="accelerator_type", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--accelerator-count", dest="accelerator_count", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=2) + _parsed_args = vars(_parser.parse_args()) + _output_files = _parsed_args.pop("_output_paths", []) + + _outputs = deploy_model_to_endpoint_for_Google_Cloud_Vertex_AI_Model(**_parsed_args) + + _output_serializers = [ + _serialize_str, + _serialize_json, + + ] + + import os + for idx, output_file in enumerate(_output_files): + try: + os.makedirs(os.path.dirname(output_file)) + except OSError: + pass + with open(output_file, 'w') as f: + f.write(_output_serializers[idx](_outputs[idx])) + args: + - --model-name + - {inputValue: model_name} + - if: + cond: {isPresent: endpoint_name} + then: + - --endpoint-name + - {inputValue: endpoint_name} + - if: + cond: {isPresent: machine_type} + then: + - --machine-type + - {inputValue: machine_type} + - if: + cond: {isPresent: min_replica_count} + then: + - --min-replica-count + - {inputValue: min_replica_count} + - if: + cond: {isPresent: max_replica_count} + then: + - --max-replica-count + - {inputValue: max_replica_count} + - if: + cond: {isPresent: accelerator_type} + then: + - --accelerator-type + - {inputValue: accelerator_type} + - if: + cond: {isPresent: accelerator_count} + then: + - --accelerator-count + - {inputValue: accelerator_count} + - '----output-paths' + - {outputPath: endpoint_name} + - {outputPath: endpoint_dict} diff --git a/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/component.yaml b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/component.yaml new file mode 100644 index 000000000..7044b6aec --- /dev/null +++ b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/component.yaml @@ -0,0 +1,297 @@ +name: Upload PyTorch model archive to Google Cloud Vertex AI +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/KFPv2_hell/components/google-cloud/Vertex_AI/Models/Upload_PyTorch_model_archive/workaround_for_buggy_KFPv2_compiler/component.yaml'} +inputs: +- {name: model_archive, type: PyTorchModelArchive} +- {name: torchserve_version, type: String, default: 0.6.0, optional: true} +- name: use_gpu + type: Boolean + default: "False" + optional: true +- {name: display_name, type: String, optional: true} +- {name: description, type: String, optional: true} +- {name: project, type: String, optional: true} +- {name: location, type: String, optional: true} +- {name: labels, type: JsonObject, optional: true} +- {name: staging_bucket, type: String, optional: true} +outputs: +- {name: model_name, type: String} +- {name: model_dict, type: JsonObject} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'google-cloud-aiplatform==1.13.1' 'google-cloud-build==3.8.3' || PIP_DISABLE_PIP_VERSION_CHECK=1 + python3 -m pip install --quiet --no-warn-script-location 'google-cloud-aiplatform==1.13.1' + 'google-cloud-build==3.8.3' --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI( + model_archive_path, + torchserve_version = "0.6.0", + use_gpu = False, + + display_name = None, + description = None, + + # Uncomment when anyone requests these: + # instance_schema_uri: str = None, + # parameters_schema_uri: str = None, + # prediction_schema_uri: str = None, + # explanation_metadata: "google.cloud.aiplatform_v1.types.explanation_metadata.ExplanationMetadata" = None, + # explanation_parameters: "google.cloud.aiplatform_v1.types.explanation.ExplanationParameters" = None, + + project = None, + location = None, + labels = None, + # encryption_spec_key_name: str = None, + staging_bucket = None, + ): + import json + import os + from google.cloud import aiplatform + + if not location: + location = os.environ.get("CLOUD_ML_REGION") + + if not labels: + labels = {} + labels["component-source"] = "github-com-ark-kun-pipeline-components" + + container_image_tag = torchserve_version + "-" + ("gpu" if use_gpu else "cpu") + container_image_uri = f"pytorch/torchserve:{container_image_tag}" + + # Vertex Endpoints refuse to support non-Google container registries. + # We have to work around this to reduce user frustration + # TODO: Remove this code when Vertex Endpoints service starts supporting other container registries. + def copy_container_image( + src_container_image_uri, + dst_container_image_uri, + project_id, + ): + from google.cloud.devtools import cloudbuild + from google import protobuf + build_client = cloudbuild.CloudBuildClient() + build_config = cloudbuild.Build( + images=[dst_container_image_uri], + steps=[ + cloudbuild.BuildStep( + name="gcr.io/cloud-builders/docker", + entrypoint="bash", + args=[ + "-exc", + 'docker pull --quiet "$0" && docker tag "$0" "$1"', + src_container_image_uri, + dst_container_image_uri, + ], + ), + ], + timeout=protobuf.duration_pb2.Duration( + seconds=1800, + ), + ) + build_operation = build_client.create_build( + project_id=project_id, + build=build_config, + ) + try: + result = build_operation.result() + except: + print(f"Logs are available at [{build_operation.metadata.build.log_url}].") + raise + return result + + project_id = aiplatform.initializer.global_config.project + mirrored_container_uri = f"gcr.io/{project_id}/container_mirror/{container_image_uri}" + # FIX: Only mirror when image does not exist + # docker does is unable to get the registry data from inside container (it cannot connecto to docker socket): + # docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) + # import docker + # try: + # docker_client = docker.from_env() + # docker_client.images.get_registry_data(mirrored_container_uri) + # except docker.errors.NotFound: + if True: + print(f"Mirroring {container_image_uri} to {mirrored_container_uri}") + copy_container_image( + src_container_image_uri=container_image_uri, + dst_container_image_uri=mirrored_container_uri, + project_id=project_id, + ) + container_image_uri = mirrored_container_uri + # End of container image mirroring code + + model_archive_file_name = os.path.basename(model_archive_path) + model_archive_dir = os.path.dirname(model_archive_path) + + model = aiplatform.Model.upload( + # FIX: Use public image or mirror the official image + #serving_container_image_uri="gcr.io/avolkov-31337/mirror/pytorch/torchserve", + serving_container_image_uri=container_image_uri, + artifact_uri=model_archive_dir, + serving_container_command=[ + "bash", + "-exc", + ''' + model_archive_uri="$0" + #model_archive_local_path=$(mktemp --suffix ".mar") + # For some reason the model must already be inside the model-store directory. + model_archive_local_path=./model-store/model.mar + + # Downloading the model archive from GCS + # TODO: Fix gsutil bugs (requires project ID, has auth issues) and use gsutil instead. + # gsutil cp "$model_archive_uri" "$model_archive_local_path" + pip install google-cloud-storage + python -c ' + import sys + from google.cloud import storage + + model_archive_uri = sys.argv[1] + model_archive_local_path = sys.argv[2] + + storage_client = storage.Client() + blob = storage.Blob.from_string(uri=model_archive_uri, client=storage_client) + blob.download_to_filename(filename=model_archive_local_path) + ' "$model_archive_uri" "$model_archive_local_path" + + #Note: config.properties is owned by root. Our user is not root. + echo " + service_envelope=json + # Needed for external access + inference_address=http://0.0.0.0:8080 + management_address=http://0.0.0.0:8081 + " > config2.properties + torchserve --start --foreground --no-config-snapshots --models main-model="$model_archive_local_path" --model-store ./model-store/ --ts-config config2.properties + ''', + "$(AIP_STORAGE_URI)/" + model_archive_file_name, + ], + serving_container_predict_route="/predictions/main-model", + #serving_container_predict_route="/v1/models/main-model:predict", + serving_container_health_route="/ping", + serving_container_ports=[8080], + + display_name=display_name, + description=description, + + # instance_schema_uri=instance_schema_uri, + # parameters_schema_uri=parameters_schema_uri, + # prediction_schema_uri=prediction_schema_uri, + # explanation_metadata=explanation_metadata, + # explanation_parameters=explanation_parameters, + + project=project, + location=location, + labels=labels, + # encryption_spec_key_name=encryption_spec_key_name, + staging_bucket=staging_bucket, + ) + model_json = json.dumps(model.to_dict(), indent=2) + print(model_json) + return (model.resource_name, model_json) + + def _deserialize_bool(s) -> bool: + from distutils.util import strtobool + return strtobool(s) == 1 + + def _serialize_json(obj) -> str: + if isinstance(obj, str): + return obj + import json + def default_serializer(obj): + if hasattr(obj, 'to_struct'): + return obj.to_struct() + else: + raise TypeError("Object of type '%s' is not JSON serializable and does not have .to_struct() method." % obj.__class__.__name__) + return json.dumps(obj, default=default_serializer, sort_keys=True) + + def _serialize_str(str_value: str) -> str: + if not isinstance(str_value, str): + raise TypeError('Value "{}" has type "{}" instead of str.'.format(str(str_value), str(type(str_value)))) + return str_value + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Upload PyTorch model archive to Google Cloud Vertex AI', description='') + _parser.add_argument("--model-archive", dest="model_archive_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--torchserve-version", dest="torchserve_version", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--use-gpu", dest="use_gpu", type=_deserialize_bool, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--display-name", dest="display_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--description", dest="description", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--project", dest="project", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--location", dest="location", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--labels", dest="labels", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--staging-bucket", dest="staging_bucket", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=2) + _parsed_args = vars(_parser.parse_args()) + _output_files = _parsed_args.pop("_output_paths", []) + + _outputs = upload_PyTorch_model_archive_to_Google_Cloud_Vertex_AI(**_parsed_args) + + _output_serializers = [ + _serialize_str, + _serialize_json, + + ] + + import os + for idx, output_file in enumerate(_output_files): + try: + os.makedirs(os.path.dirname(output_file)) + except OSError: + pass + with open(output_file, 'w') as f: + f.write(_output_serializers[idx](_outputs[idx])) + args: + - --model-archive + - {inputPath: model_archive} + - if: + cond: {isPresent: torchserve_version} + then: + - --torchserve-version + - {inputValue: torchserve_version} + - if: + cond: {isPresent: use_gpu} + then: + - --use-gpu + - {inputValue: use_gpu} + - if: + cond: {isPresent: display_name} + then: + - --display-name + - {inputValue: display_name} + - if: + cond: {isPresent: description} + then: + - --description + - {inputValue: description} + - if: + cond: {isPresent: project} + then: + - --project + - {inputValue: project} + - if: + cond: {isPresent: location} + then: + - --location + - {inputValue: location} + - if: + cond: {isPresent: labels} + then: + - --labels + - {inputValue: labels} + - if: + cond: {isPresent: staging_bucket} + then: + - --staging-bucket + - {inputValue: staging_bucket} + - '----output-paths' + - {outputPath: model_name} + - {outputPath: model_dict} diff --git a/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/component.yaml b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/component.yaml new file mode 100644 index 000000000..aaa3ea8e9 --- /dev/null +++ b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/component.yaml @@ -0,0 +1,181 @@ +name: Upload Scikit learn pickle model to Google Cloud Vertex AI +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/KFPv2_hell/components/google-cloud/Vertex_AI/Models/Upload_Scikit-learn_pickle_model/workaround_for_buggy_KFPv2_compiler/component.yaml'} +inputs: +- {name: model, type: ScikitLearnPickleModel} +- {name: sklearn_version, type: String, optional: true} +- {name: display_name, type: String, optional: true} +- {name: description, type: String, optional: true} +- {name: project, type: String, optional: true} +- {name: location, type: String, optional: true} +- {name: labels, type: JsonObject, optional: true} +- {name: staging_bucket, type: String, optional: true} +outputs: +- {name: model_name, type: String} +- {name: model_dict, type: JsonObject} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'google-cloud-aiplatform==1.16.0' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'google-cloud-aiplatform==1.16.0' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI( + model_path, + sklearn_version = None, + + display_name = None, + description = None, + + # Uncomment when anyone requests these: + # instance_schema_uri: str = None, + # parameters_schema_uri: str = None, + # prediction_schema_uri: str = None, + # explanation_metadata: "google.cloud.aiplatform_v1.types.explanation_metadata.ExplanationMetadata" = None, + # explanation_parameters: "google.cloud.aiplatform_v1.types.explanation.ExplanationParameters" = None, + + project = None, + location = None, + labels = None, + # encryption_spec_key_name: str = None, + staging_bucket = None, + ): + import json + import os + import shutil + import tempfile + from google.cloud import aiplatform + + if not location: + location = os.environ.get("CLOUD_ML_REGION") + + if not labels: + labels = {} + labels["component-source"] = "github-com-ark-kun-pipeline-components" + + # The serving container decides the model type based on the model file extension. + # So we need to rename the mode file (e.g. /tmp/inputs/model/data) to *.pkl + _, renamed_model_path = tempfile.mkstemp(suffix=".pkl") + shutil.copyfile(src=model_path, dst=renamed_model_path) + + model = aiplatform.Model.upload_scikit_learn_model_file( + model_file_path=renamed_model_path, + sklearn_version=sklearn_version, + + display_name=display_name, + description=description, + + # instance_schema_uri=instance_schema_uri, + # parameters_schema_uri=parameters_schema_uri, + # prediction_schema_uri=prediction_schema_uri, + # explanation_metadata=explanation_metadata, + # explanation_parameters=explanation_parameters, + + project=project, + location=location, + labels=labels, + # encryption_spec_key_name=encryption_spec_key_name, + staging_bucket=staging_bucket, + ) + model_json = json.dumps(model.to_dict(), indent=2) + print(model_json) + return (model.resource_name, model_json) + + def _serialize_json(obj) -> str: + if isinstance(obj, str): + return obj + import json + def default_serializer(obj): + if hasattr(obj, 'to_struct'): + return obj.to_struct() + else: + raise TypeError("Object of type '%s' is not JSON serializable and does not have .to_struct() method." % obj.__class__.__name__) + return json.dumps(obj, default=default_serializer, sort_keys=True) + + def _serialize_str(str_value: str) -> str: + if not isinstance(str_value, str): + raise TypeError('Value "{}" has type "{}" instead of str.'.format(str(str_value), str(type(str_value)))) + return str_value + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Upload Scikit learn pickle model to Google Cloud Vertex AI', description='') + _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--sklearn-version", dest="sklearn_version", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--display-name", dest="display_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--description", dest="description", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--project", dest="project", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--location", dest="location", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--labels", dest="labels", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--staging-bucket", dest="staging_bucket", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=2) + _parsed_args = vars(_parser.parse_args()) + _output_files = _parsed_args.pop("_output_paths", []) + + _outputs = upload_Scikit_learn_pickle_model_to_Google_Cloud_Vertex_AI(**_parsed_args) + + _output_serializers = [ + _serialize_str, + _serialize_json, + + ] + + import os + for idx, output_file in enumerate(_output_files): + try: + os.makedirs(os.path.dirname(output_file)) + except OSError: + pass + with open(output_file, 'w') as f: + f.write(_output_serializers[idx](_outputs[idx])) + args: + - --model + - {inputPath: model} + - if: + cond: {isPresent: sklearn_version} + then: + - --sklearn-version + - {inputValue: sklearn_version} + - if: + cond: {isPresent: display_name} + then: + - --display-name + - {inputValue: display_name} + - if: + cond: {isPresent: description} + then: + - --description + - {inputValue: description} + - if: + cond: {isPresent: project} + then: + - --project + - {inputValue: project} + - if: + cond: {isPresent: location} + then: + - --location + - {inputValue: location} + - if: + cond: {isPresent: labels} + then: + - --labels + - {inputValue: labels} + - if: + cond: {isPresent: staging_bucket} + then: + - --staging-bucket + - {inputValue: staging_bucket} + - '----output-paths' + - {outputPath: model_name} + - {outputPath: model_dict} diff --git a/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml new file mode 100644 index 000000000..3e14e2a28 --- /dev/null +++ b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml @@ -0,0 +1,190 @@ +name: Upload Tensorflow model to Google Cloud Vertex AI +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/KFPv2_hell/components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/workaround_for_buggy_KFPv2_compiler/component.yaml'} +inputs: +- {name: model, type: TensorflowSavedModel} +- {name: tensorflow_version, type: String, optional: true} +- name: use_gpu + type: Boolean + default: "False" + optional: true +- {name: display_name, type: String, optional: true} +- {name: description, type: String, optional: true} +- {name: project, type: String, optional: true} +- {name: location, type: String, optional: true} +- {name: labels, type: JsonObject, optional: true} +- {name: staging_bucket, type: String, optional: true} +outputs: +- {name: model_name, type: String} +- {name: model_dict, type: JsonObject} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'google-cloud-aiplatform==1.16.0' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'google-cloud-aiplatform==1.16.0' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def upload_Tensorflow_model_to_Google_Cloud_Vertex_AI( + model_path, + tensorflow_version = None, + use_gpu = False, + + display_name = None, + description = None, + + # Uncomment when anyone requests these: + # instance_schema_uri: str = None, + # parameters_schema_uri: str = None, + # prediction_schema_uri: str = None, + # explanation_metadata: "google.cloud.aiplatform_v1.types.explanation_metadata.ExplanationMetadata" = None, + # explanation_parameters: "google.cloud.aiplatform_v1.types.explanation.ExplanationParameters" = None, + + project = None, + location = None, + labels = None, + # encryption_spec_key_name: str = None, + staging_bucket = None, + ): + import json + import os + from google.cloud import aiplatform + + if not location: + location = os.environ.get("CLOUD_ML_REGION") + + if not labels: + labels = {} + labels["component-source"] = "github-com-ark-kun-pipeline-components" + + model = aiplatform.Model.upload_tensorflow_saved_model( + saved_model_dir=model_path, + tensorflow_version=tensorflow_version, + use_gpu=use_gpu, + + display_name=display_name, + description=description, + + # instance_schema_uri=instance_schema_uri, + # parameters_schema_uri=parameters_schema_uri, + # prediction_schema_uri=prediction_schema_uri, + # explanation_metadata=explanation_metadata, + # explanation_parameters=explanation_parameters, + + project=project, + location=location, + labels=labels, + # encryption_spec_key_name=encryption_spec_key_name, + staging_bucket=staging_bucket, + ) + model_json = json.dumps(model.to_dict(), indent=2) + print(model_json) + return (model.resource_name, model_json) + + def _deserialize_bool(s) -> bool: + from distutils.util import strtobool + return strtobool(s) == 1 + + def _serialize_json(obj) -> str: + if isinstance(obj, str): + return obj + import json + def default_serializer(obj): + if hasattr(obj, 'to_struct'): + return obj.to_struct() + else: + raise TypeError("Object of type '%s' is not JSON serializable and does not have .to_struct() method." % obj.__class__.__name__) + return json.dumps(obj, default=default_serializer, sort_keys=True) + + def _serialize_str(str_value: str) -> str: + if not isinstance(str_value, str): + raise TypeError('Value "{}" has type "{}" instead of str.'.format(str(str_value), str(type(str_value)))) + return str_value + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Upload Tensorflow model to Google Cloud Vertex AI', description='') + _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--tensorflow-version", dest="tensorflow_version", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--use-gpu", dest="use_gpu", type=_deserialize_bool, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--display-name", dest="display_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--description", dest="description", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--project", dest="project", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--location", dest="location", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--labels", dest="labels", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--staging-bucket", dest="staging_bucket", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=2) + _parsed_args = vars(_parser.parse_args()) + _output_files = _parsed_args.pop("_output_paths", []) + + _outputs = upload_Tensorflow_model_to_Google_Cloud_Vertex_AI(**_parsed_args) + + _output_serializers = [ + _serialize_str, + _serialize_json, + + ] + + import os + for idx, output_file in enumerate(_output_files): + try: + os.makedirs(os.path.dirname(output_file)) + except OSError: + pass + with open(output_file, 'w') as f: + f.write(_output_serializers[idx](_outputs[idx])) + args: + - --model + - {inputPath: model} + - if: + cond: {isPresent: tensorflow_version} + then: + - --tensorflow-version + - {inputValue: tensorflow_version} + - if: + cond: {isPresent: use_gpu} + then: + - --use-gpu + - {inputValue: use_gpu} + - if: + cond: {isPresent: display_name} + then: + - --display-name + - {inputValue: display_name} + - if: + cond: {isPresent: description} + then: + - --description + - {inputValue: description} + - if: + cond: {isPresent: project} + then: + - --project + - {inputValue: project} + - if: + cond: {isPresent: location} + then: + - --location + - {inputValue: location} + - if: + cond: {isPresent: labels} + then: + - --labels + - {inputValue: labels} + - if: + cond: {isPresent: staging_bucket} + then: + - --staging-bucket + - {inputValue: staging_bucket} + - '----output-paths' + - {outputPath: model_name} + - {outputPath: model_dict} diff --git a/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/component.yaml b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/component.yaml new file mode 100644 index 000000000..fede35fd3 --- /dev/null +++ b/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/component.yaml @@ -0,0 +1,181 @@ +name: Upload XGBoost model to Google Cloud Vertex AI +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/google-cloud/Vertex_AI/Models/Upload_XGBoost_model/workaround_for_buggy_KFPv2_compiler/component.yaml'} +inputs: +- {name: model, type: XGBoostModel} +- {name: xgboost_version, type: String, optional: true} +- {name: display_name, type: String, optional: true} +- {name: description, type: String, optional: true} +- {name: project, type: String, optional: true} +- {name: location, type: String, optional: true} +- {name: labels, type: JsonObject, optional: true} +- {name: staging_bucket, type: String, optional: true} +outputs: +- {name: model_name, type: String} +- {name: model_dict, type: JsonObject} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'google-cloud-aiplatform==1.16.0' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 + -m pip install --quiet --no-warn-script-location 'google-cloud-aiplatform==1.16.0' + --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def upload_XGBoost_model_to_Google_Cloud_Vertex_AI( + model_path, + xgboost_version = None, + + display_name = None, + description = None, + + # Uncomment when anyone requests these: + # instance_schema_uri: str = None, + # parameters_schema_uri: str = None, + # prediction_schema_uri: str = None, + # explanation_metadata: "google.cloud.aiplatform_v1.types.explanation_metadata.ExplanationMetadata" = None, + # explanation_parameters: "google.cloud.aiplatform_v1.types.explanation.ExplanationParameters" = None, + + project = None, + location = None, + labels = None, + # encryption_spec_key_name: str = None, + staging_bucket = None, + ): + import json + import os + import shutil + import tempfile + from google.cloud import aiplatform + + if not location: + location = os.environ.get("CLOUD_ML_REGION") + + if not labels: + labels = {} + labels["component-source"] = "github-com-ark-kun-pipeline-components" + + # The serving container decides the model type based on the model file extension. + # So we need to rename the mode file (e.g. /tmp/inputs/model/data) to *.pkl + _, renamed_model_path = tempfile.mkstemp(suffix=".pkl") + shutil.copyfile(src=model_path, dst=renamed_model_path) + + model = aiplatform.Model.upload_xgboost_model_file( + model_file_path=renamed_model_path, + xgboost_version=xgboost_version, + + display_name=display_name, + description=description, + + # instance_schema_uri=instance_schema_uri, + # parameters_schema_uri=parameters_schema_uri, + # prediction_schema_uri=prediction_schema_uri, + # explanation_metadata=explanation_metadata, + # explanation_parameters=explanation_parameters, + + project=project, + location=location, + labels=labels, + # encryption_spec_key_name=encryption_spec_key_name, + staging_bucket=staging_bucket, + ) + model_json = json.dumps(model.to_dict(), indent=2) + print(model_json) + return (model.resource_name, model_json) + + def _serialize_json(obj) -> str: + if isinstance(obj, str): + return obj + import json + def default_serializer(obj): + if hasattr(obj, 'to_struct'): + return obj.to_struct() + else: + raise TypeError("Object of type '%s' is not JSON serializable and does not have .to_struct() method." % obj.__class__.__name__) + return json.dumps(obj, default=default_serializer, sort_keys=True) + + def _serialize_str(str_value: str) -> str: + if not isinstance(str_value, str): + raise TypeError('Value "{}" has type "{}" instead of str.'.format(str(str_value), str(type(str_value)))) + return str_value + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Upload XGBoost model to Google Cloud Vertex AI', description='') + _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--xgboost-version", dest="xgboost_version", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--display-name", dest="display_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--description", dest="description", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--project", dest="project", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--location", dest="location", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--labels", dest="labels", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--staging-bucket", dest="staging_bucket", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=2) + _parsed_args = vars(_parser.parse_args()) + _output_files = _parsed_args.pop("_output_paths", []) + + _outputs = upload_XGBoost_model_to_Google_Cloud_Vertex_AI(**_parsed_args) + + _output_serializers = [ + _serialize_str, + _serialize_json, + + ] + + import os + for idx, output_file in enumerate(_output_files): + try: + os.makedirs(os.path.dirname(output_file)) + except OSError: + pass + with open(output_file, 'w') as f: + f.write(_output_serializers[idx](_outputs[idx])) + args: + - --model + - {inputPath: model} + - if: + cond: {isPresent: xgboost_version} + then: + - --xgboost-version + - {inputValue: xgboost_version} + - if: + cond: {isPresent: display_name} + then: + - --display-name + - {inputValue: display_name} + - if: + cond: {isPresent: description} + then: + - --description + - {inputValue: description} + - if: + cond: {isPresent: project} + then: + - --project + - {inputValue: project} + - if: + cond: {isPresent: location} + then: + - --location + - {inputValue: location} + - if: + cond: {isPresent: labels} + then: + - --labels + - {inputValue: labels} + - if: + cond: {isPresent: staging_bucket} + then: + - --staging-bucket + - {inputValue: staging_bucket} + - '----output-paths' + - {outputPath: model_name} + - {outputPath: model_dict} diff --git a/community-content/pipeline_components/google-cloud/storage/download/component.yaml b/community-content/pipeline_components/google-cloud/storage/download/component.yaml new file mode 100644 index 000000000..f1be5576b --- /dev/null +++ b/community-content/pipeline_components/google-cloud/storage/download/component.yaml @@ -0,0 +1,35 @@ +name: Download from GCS +inputs: +- {name: GCS path, type: String} +outputs: +- {name: Data} +metadata: + annotations: + author: Alexey Volkov + canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/google-cloud/storage/download/workaround_for_buggy_KFPv2_compiler/component.yaml' +implementation: + container: + image: google/cloud-sdk + command: + - bash # Pattern comparison only works in Bash + - -ex + - -c + - | + if [ -n "${GOOGLE_APPLICATION_CREDENTIALS}" ]; then + gcloud auth activate-service-account --key-file="${GOOGLE_APPLICATION_CREDENTIALS}" + fi + + uri="$0" + output_path="$1" + + # Checking whether the URI points to a single blob, a directory or a URI pattern + # URI points to a blob when that URI does not end with slash and listing that URI only yields the same URI + if [[ "$uri" != */ ]] && (gsutil ls "$uri" | grep --fixed-strings --line-regexp "$uri"); then + mkdir -p "$(dirname "$output_path")" + gsutil -m cp -r "$uri" "$output_path" + else + mkdir -p "$output_path" # When source path is a directory, gsutil requires the destination to also be a directory + gsutil -m rsync -r "$uri" "$output_path" # gsutil cp has different path handling than Linux cp. It always puts the source directory (name) inside the destination directory. gsutil rsync does not have that problem. + fi + - inputValue: GCS path + - outputPath: Data diff --git a/community-content/pipeline_components/image_ml_model_training/load_image_classification_model/component.yaml b/community-content/pipeline_components/image_ml_model_training/load_image_classification_model/component.yaml new file mode 100644 index 000000000..40d84a724 --- /dev/null +++ b/community-content/pipeline_components/image_ml_model_training/load_image_classification_model/component.yaml @@ -0,0 +1,112 @@ +name: Load image classification model from tfhub +description: | + Loads specified model from TFHub, creates layer to receive additional (3 channel) imagery data. + Args: + class_names (Sequence[str]): + Sequence of strings of categories for classification corresponding to input data. + loaded_model_path (str): + Output path for the loaded model. + image_size_path (str): + Output path for the model expected image size. + model_name (Optional[str]): + Name of the pre-trained image classification model to load from TFHub. + Eligible model_name: + - efficientnetv2-s + - efficientnetv2-m + - efficientnetv2-l + - efficientnetv2-s-21k + - efficientnetv2-m-21k + - efficientnetv2-l-21k + - efficientnetv2-xl-21k + - efficientnetv2-b0-21k + - efficientnetv2-b1-21k + - efficientnetv2-b2-21k + - efficientnetv2-b3-21k + - efficientnetv2-s-21k-ft1k + - efficientnetv2-m-21k-ft1k + - efficientnetv2-l-21k-ft1k + - efficientnetv2-xl-21k-ft1k + - efficientnetv2-b0-21k-ft1k + - efficientnetv2-b1-21k-ft1k + - efficientnetv2-b2-21k-ft1k + - efficientnetv2-b3-21k-ft1k + - efficientnetv2-b0 + - efficientnetv2-b1 + - efficientnetv2-b2 + - efficientnetv2-b3 + - efficientnet_b0 + - efficientnet_b1 + - efficientnet_b2 + - efficientnet_b3 + - efficientnet_b4 + - efficientnet_b5 + - efficientnet_b6 + - efficientnet_b7 + - bit_s-r50x1 + - inception_v3 + - inception_resnet_v2 + - resnet_v1_50 + - resnet_v1_101 + - resnet_v1_152 + - resnet_v2_50 + - resnet_v2_101 + - resnet_v2_152 + - nasnet_large + - nasnet_mobile + - pnasnet_large + - mobilenet_v2_100_224 + - mobilenet_v2_130_224 + - mobilenet_v2_140_224 + - mobilenet_v3_small_100_224 + - mobilenet_v3_small_075_224 + - mobilenet_v3_large_100_224 + - mobilenet_v3_large_075_224 + dropout_rate (Optional[float]): + Fraction of input units to drop in the last layer. Value should be between 0.0 and 1.0. + trainable (Optional[bool]): + If true fine tuning will be performed on entire Hub model. If false only additional + layers will be trained. + l2_regularization_penalty (Optional[float]): + l2 regularization penalty. +inputs: +- {name: class_names, type: 'typing.List[str]', description: List of class names corresponding + to the input image data} +- {name: model_name, type: String, description: Name of the TFHub model to load, default: efficientnetv2-xl-21k, + optional: true} +- {name: dropout_rate, type: Float, description: Dropout rate, default: '0.2', optional: true} +- name: trainable + type: Boolean + description: True if fine tuning should be performed + default: "True" + optional: true +- {name: l2_regularization_penalty, type: Float, description: Regularization penalty, + default: '0.0001', optional: true} +outputs: +- {name: loaded_model_path, type: TensorflowSavedModel, description: Output path for + the loaded model} +- {name: image_size_path, type: HeightWidth} +implementation: + container: + image: us-docker.pkg.dev/vertex-ai/ready-to-go-image-classification/image-components:v0.1 + # command is a list of strings (command-line arguments). + # The YAML language has two syntaxes for lists and you can use either of them. + # Here we use the "flow syntax" - comma-separated strings inside square brackets. + command: [ + python3, + # Path of the program inside the container + /pipelines/component/src/loading_component.py, + --loaded-model-path, + {outputPath: loaded_model_path}, + --class-names, + {inputValue: class_names}, + --model-name, + {inputValue: model_name}, + --dropout-rate, + {inputValue: dropout_rate}, + --trainable, + {inputValue: trainable}, + --l2-regularization-penalty, + {inputValue: l2_regularization_penalty}, + --image-size-path, + {outputPath: image_size_path}, + ] \ No newline at end of file diff --git a/community-content/pipeline_components/image_ml_model_training/pipeline.py b/community-content/pipeline_components/image_ml_model_training/pipeline.py new file mode 100644 index 000000000..01b4f11b8 --- /dev/null +++ b/community-content/pipeline_components/image_ml_model_training/pipeline.py @@ -0,0 +1,62 @@ +# python3 -m pip install "kfp<2.0.0" "google-cloud-aiplatform>=1.16.0" --upgrade --quiet +from kfp import components +from kfp.v2 import dsl + +# %% Loading components +upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml') +deploy_model_to_endpoint_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml') +transcode_imagedataset_tfrecord_from_csv_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_csv/component.yaml') +load_image_classification_model_from_tfhub_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/b5b65198a6c2ffe8c0fa2aa70127e3325752df68/community-content/pipeline_components/image_ml_model_training/load_image_classification_model/component.yaml') +preprocess_image_data_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/preprocess_image_data/component.yaml') +train_tensorflow_image_classification_model_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/train_image_classification_model/component.yaml') + + +# %% Pipeline definition +def image_classification_pipeline(): + class_names = ['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips'] + csv_image_data_path = 'gs://cloud-samples-data/ai-platform/flowers/flowers.csv' + deploy_model = False + + image_data = dsl.importer( + artifact_uri=csv_image_data_path, artifact_class=dsl.Dataset).output + + image_tfrecord_data = transcode_imagedataset_tfrecord_from_csv_op( + csv_image_data_path=image_data, + class_names=class_names + ).outputs['tfrecord_image_data_path'] + + loaded_model_outputs = load_image_classification_model_from_tfhub_op( + class_names=class_names, + ).outputs + + preprocessed_data = preprocess_image_data_op( + image_tfrecord_data, + height_width_path=loaded_model_outputs['image_size_path'], + ).outputs + + trained_model = (train_tensorflow_image_classification_model_op( + preprocessed_training_data_path = preprocessed_data['preprocessed_training_data_path'], + preprocessed_validation_data_path = preprocessed_data['preprocessed_validation_data_path'], + model_path=loaded_model_outputs['loaded_model_path']). + set_cpu_limit('96'). + set_memory_limit('128G'). + add_node_selector_constraint('cloud.google.com/gke-accelerator', 'NVIDIA_TESLA_A100'). + set_gpu_limit('8'). + outputs['trained_model_path']) + + vertex_model_name = upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op( + model=trained_model, + ).outputs['model_name'] + + # Deploying the model might incur additional costs over time + if deploy_model: + vertex_endpoint_name = deploy_model_to_endpoint_op( + model_name=vertex_model_name, + ).outputs['endpoint_name'] + +pipeline_func = image_classification_pipeline + +# %% Pipeline submission +if __name__ == '__main__': + from google.cloud import aiplatform + aiplatform.PipelineJob.from_pipeline_func(pipeline_func=pipeline_func).submit() diff --git a/community-content/pipeline_components/image_ml_model_training/preprocess_image_data/component.yaml b/community-content/pipeline_components/image_ml_model_training/preprocess_image_data/component.yaml new file mode 100644 index 000000000..080b00f9e --- /dev/null +++ b/community-content/pipeline_components/image_ml_model_training/preprocess_image_data/component.yaml @@ -0,0 +1,57 @@ +name: Preprocess image data +description: | + Preprocess the image data and split between train and validation. + Args: + input_data_path (str): + Input path for the TFRecord image data. Data will be formatted as 'label' (encoded image + label), and 'image_raw' (the binary string of the image data). + height_width_path (str): + Path to square height and width to resize images to. File should contain single float value. + Value is dependent on training model. + preprocessed_training_data_path (str): + Output path for the TFRecord training data. Data will be formatted as 'label' (encoded image + label), and 'image_raw' (the binary string of the image data). + preprocessed_validation_data_path (str): + Output path for the TFRecord validation data. Data will be formatted as 'label' (encoded + image label), and 'image_raw' (the binary string of the image data). + validation_split (Optional[float]): + Fraction of data that will make up validation dataset. Value should be between 0.0 and 1.0. + seed (Optional[int]): + The global random seed to ensure the system gets a unique random sequence + that is deterministic (https://www.tensorflow.org/api_docs/python/tf/random/set_seed). +inputs: +- {name: input_data_path, type: ImageDatasetTFRecord, description: 'Input path for + the TFRecord image data,'} +- {name: height_width_path, type: HeightWidth, description: 'Path to square height and width to + resize images to,'} +- {name: validation_split, type: Float, description: 'Fraction of data that will make + up validation dataset,', default: '0.2', optional: true} +- {name: seed, type: Integer, description: Random seed, default: '0', optional: true} +outputs: +- {name: preprocessed_training_data_path, type: ImageDatasetTFRecord, description: 'Output + path for the training data,'} +- {name: preprocessed_validation_data_path, type: ImageDatasetTFRecord, description: 'Output + path for the validation data,'} +implementation: + container: + image: us-docker.pkg.dev/vertex-ai/ready-to-go-image-classification/image-components:v0.1 + # command is a list of strings (command-line arguments). + # The YAML language has two syntaxes for lists and you can use either of them. + # Here we use the "flow syntax" - comma-separated strings inside square brackets. + command: [ + python3, + # Path of the program inside the container + /pipelines/component/src/preprocessing_component.py, + --input-data-path, + {inputPath: input_data_path}, + --height-width-path, + {inputPath: height_width_path}, + --validation-split, + {inputValue: validation_split}, + --seed, + {inputValue: seed}, + --preprocessed-training-data-path, + {outputPath: preprocessed_training_data_path}, + --preprocessed-validation-data-path, + {outputPath: preprocessed_validation_data_path}, + ] diff --git a/community-content/pipeline_components/image_ml_model_training/train_image_classification_model/component.yaml b/community-content/pipeline_components/image_ml_model_training/train_image_classification_model/component.yaml new file mode 100644 index 000000000..0e611b1d4 --- /dev/null +++ b/community-content/pipeline_components/image_ml_model_training/train_image_classification_model/component.yaml @@ -0,0 +1,90 @@ +name: Train tensorflow image classification model +description: | + Creates a trained image classification TensorFlow model. + Args: + preprocessed_training_data_path (str): + Input path to the TFRecord training data. Data will be formatted as 'label' (encoded image + label), and 'image_raw' (the binary string of the image data). + preprocessed_validation_data_path (str): + Input path to the TFRecord validation data. Data will be formatted as 'label' (encoded + image label), and 'image_raw' (the binary string of the image data). + model_path (str): + Input path to the loaded pre-trained model. + trained_model_path (str): + Output path to save the trained model to. + optimizer_name (Optional[str]): + Name of the tf.keras optimizer. Available optimizers are listed at + https://keras.io/api/optimizers/ + optimizer_parameters (Optional[Dict[str, str]]): + Optimizer parameters. + loss_function_name (Optional[str]): + Name of the loss function. + loss_function_parameters (Optional[Dict[str, str]]): + Loss function parameters. + number_of_epochs (Optional[int]): + Number of training iterations over data. + metric_names (Optional[Sequence[str]]): + List of tf.keras.metrics to be evaluated by the model during training and testing. Available + metrics are listed at https://keras.io/api/metrics/. + seed Optional(int): + The global random seed to ensure the system gets a unique random sequence + that is deterministic (https://www.tensorflow.org/api_docs/python/tf/random/set_seed). +inputs: +- {name: preprocessed_training_data_path, type: ImageDatasetTFRecord, description: 'Input + path for the training data,'} +- {name: preprocessed_validation_data_path, type: ImageDatasetTFRecord, description: 'Input + path for the validation data,'} +- {name: model_path, type: TensorflowSavedModel, description: 'Input path for the + model,'} +- {name: optimizer_name, type: String, description: 'Name of the optimizer,', default: SGD, + optional: true} +- {name: optimizer_parameters, type: 'typing.Dict[str, str]', description: 'Optimizer + parameters,', default: '{}', optional: true} +- {name: loss_function_name, type: String, description: 'Name of the loss function,', + default: CategoricalCrossentropy, optional: true} +- {name: loss_function_parameters, type: 'typing.Dict[str, str]', description: 'Loss + function parameters,', default: '{}', optional: true} +- {name: number_of_epochs, type: Integer, description: 'Number of epochs,', default: '10', + optional: true} +- {name: metric_names, type: 'typing.List[str]', description: 'List of metrics to + use,', default: '["accuracy"]', optional: true} +- {name: seed, type: Integer, description: 'Random seed,', default: '0', optional: true} +- {name: batch_size, type: Integer, description: Batch size, default: '16', optional: true} +outputs: +- {name: trained_model_path, type: TensorflowSavedModel, description: 'Output path + for the saved model,'} +implementation: + container: + image: us-docker.pkg.dev/vertex-ai/ready-to-go-image-classification/image-components:v0.1 + # command is a list of strings (command-line arguments). + # The YAML language has two syntaxes for lists and you can use either of them. + # Here we use the "flow syntax" - comma-separated strings inside square brackets. + command: [ + python3, + # Path of the program inside the container + /pipelines/component/src/training_component.py, + --preprocessed-training-data-path, + {inputPath: preprocessed_training_data_path}, + --preprocessed-validation-data-path, + {inputPath: preprocessed_validation_data_path}, + --model-path, + {inputPath: model_path}, + --trained-model-path, + {outputPath: trained_model_path}, + --optimizer-name, + {inputValue: optimizer_name}, + --loss-function-name, + {inputValue: loss_function_name}, + --number-of-epochs, + {inputValue: number_of_epochs}, + --seed, + {inputValue: seed}, + --batch-size, + {inputValue: batch_size}, + --metric-names, + {inputValue: metric_names}, + --optimizer-parameters, + {inputValue: optimizer_parameters}, + --loss-function-parameters, + {inputValue: loss_function_parameters}, + ] diff --git a/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_csv/component.yaml b/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_csv/component.yaml new file mode 100644 index 000000000..7f1ceefe5 --- /dev/null +++ b/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_csv/component.yaml @@ -0,0 +1,37 @@ +name: Transcode imagedataset tfrecord from csv +description: | + Transcodes CSV Data into TFRecord file of TFExamples. + Args: + csv_image_data_path (str): + Path to the CSV image data. Data must include 'image_filepath' (Path to image file) and + 'image_label' (output for a prediction) fields. + class_names (Sequence[str]): + Sequence of strings of categories for classification corresponding to input data. + tfrecord_image_data_path (str): + Output path for the TFRecord image data. Data will be formatted as 'label' (encoded image + label), and 'image_raw' (the binary string of the image data). +inputs: +- {name: csv_image_data_path, type: ImageDatasetCSV, description: Input path for the + CSV image data} +- {name: class_names, type: 'typing.List[str]', description: List of class names corresponding + to the input image data} +outputs: +- {name: tfrecord_image_data_path, type: ImageDatasetTFRecord, description: Output + path for the TFRecord image data} +implementation: + container: + image: us-docker.pkg.dev/vertex-ai/ready-to-go-image-classification/image-components:v0.1 + # command is a list of strings (command-line arguments). + # The YAML language has two syntaxes for lists and you can use either of them. + # Here we use the "flow syntax" - comma-separated strings inside square brackets. + command: [ + python3, + # Path of the program inside the container + /pipelines/component/src/transcoding_csv_component.py, + --csv-image-data-path, + {inputPath: csv_image_data_path}, + --tfrecord-image-data-path, + {outputPath: tfrecord_image_data_path}, + --class-names, + {inputValue: class_names}, + ] diff --git a/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_jsonl/component.yaml b/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_jsonl/component.yaml new file mode 100644 index 000000000..82755666a --- /dev/null +++ b/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_jsonl/component.yaml @@ -0,0 +1,39 @@ +name: Transcode imagedataset tfrecord from jsonlines +description: | + Transcodes JSONL Data into TFRecord file of TFExamples. + Args: + jsonl_image_data_path (str): + Input path for the JSONL image data + Path to the JSONL image data. Each line corresponds to a JSON input describing an image. + Schema follows AutoML image classification JSONL format + https://cloud.google.com/vertex-ai/docs/image-data/classification/prepare-data#json-lines. + class_names (Sequence[str]): + Sequence of strings of categories for classification corresponding to input data. + tfrecord_image_data_path (str): + Output path for the TFRecord image data. Data will be formatted as 'label' (encoded image + label), and 'image_raw' (the binary string of the image data). +inputs: +- {name: jsonl_image_data_path, type: ImageDatasetJsonLines, description: Input path + for the JSONL image data} +- {name: class_names, type: 'typing.List[str]', description: List of class names corresponding + to the input image data} +outputs: +- {name: tfrecord_image_data_path, type: ImageDatasetTFRecord, description: Output + path for the TFRecord image data} +implementation: + container: + image: us-docker.pkg.dev/vertex-ai/ready-to-go-image-classification/image-components:v0.1 + # command is a list of strings (command-line arguments). + # The YAML language has two syntaxes for lists and you can use either of them. + # Here we use the "flow syntax" - comma-separated strings inside square brackets. + command: [ + python3, + # Path of the program inside the container + /pipelines/component/src/transcoding_jsonl_component.py, + --jsonl-image-data-path, + {inputPath: jsonl_image_data_path}, + --tfrecord-image-data-path, + {outputPath: tfrecord_image_data_path}, + --class-names, + {inputValue: class_names}, + ] diff --git a/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml b/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml new file mode 100644 index 000000000..e74d2989f --- /dev/null +++ b/community-content/pipeline_components/pandas/Binarize_column/in_CSV_format/component.yaml @@ -0,0 +1,113 @@ +name: Binarize column using Pandas on CSV data +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/pandas/Binarize_column/in_CSV_format/component.yaml'} +inputs: +- {name: table, type: CSV} +- {name: column_name, type: String} +- {name: predicate, type: String, default: '> 0', optional: true} +- {name: new_column_name, type: String, optional: true} +- name: keep_original_column + type: Boolean + default: "False" + optional: true +outputs: +- {name: transformed_table, type: CSV} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'pandas==1.4.3' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet + --no-warn-script-location 'pandas==1.4.3' --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def binarize_column_using_Pandas_on_CSV_data( + table_path, + transformed_table_path, + column_name, + predicate = "> 0", + new_column_name = None, + keep_original_column = False, + ): + import pandas + + df = pandas.read_csv(table_path).convert_dtypes() + original_series = df[column_name] + + # Dynamically executing the predicate code + # Variable namespace for code execution + namespace = dict(x=original_series) + # I though that there should be no space before `predicate` so that "dot" predicate methods like ".between(min, max)" work. + # However Python allows spaces before dot: `df .isna()`. + # So having a space is not a problem + transform_code = f"""new_series_boolean = x {predicate}""" + # Note: exec() takes no keyword arguments + # exec(__source=transform_code, __globals=namespace) + exec(transform_code, namespace) + new_series_boolean = namespace["new_series_boolean"] + + # There are multiple ways to convert boolean column to integer. + # .apply(int) might be faster. https://stackoverflow.com/a/49804868/1497385 + # TODO: Do a proper benchmark. + new_series = new_series_boolean.apply(int) + # new_series = new_series_boolean.astype(int) + # new_series = new_series_boolean.replace({False: 0, True: 1}) + + if new_column_name: + df.insert(loc=0, column=new_column_name, value=new_series) + if not keep_original_column: + df = df.drop(columns=[column_name]) + else: + df[column_name] = new_series + + df.to_csv(transformed_table_path, index=False) + + def _deserialize_bool(s) -> bool: + from distutils.util import strtobool + return strtobool(s) == 1 + + import argparse + _parser = argparse.ArgumentParser(prog='Binarize column using Pandas on CSV data', description='') + _parser.add_argument("--table", dest="table_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--column-name", dest="column_name", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--predicate", dest="predicate", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--new-column-name", dest="new_column_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--keep-original-column", dest="keep_original_column", type=_deserialize_bool, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--transformed-table", dest="transformed_table_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = binarize_column_using_Pandas_on_CSV_data(**_parsed_args) + args: + - --table + - {inputPath: table} + - --column-name + - {inputValue: column_name} + - if: + cond: {isPresent: predicate} + then: + - --predicate + - {inputValue: predicate} + - if: + cond: {isPresent: new_column_name} + then: + - --new-column-name + - {inputValue: new_column_name} + - if: + cond: {isPresent: keep_original_column} + then: + - --keep-original-column + - {inputValue: keep_original_column} + - --transformed-table + - {outputPath: transformed_table} diff --git a/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml b/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml new file mode 100644 index 000000000..d15e8f2d8 --- /dev/null +++ b/community-content/pipeline_components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml @@ -0,0 +1,75 @@ +name: Fill all missing values using Pandas on CSV data +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/pandas/Fill_all_missing_values/in_CSV_format/component.yaml'} +inputs: +- {name: table, type: CSV} +- {name: replacement_value, type: String, default: '0', optional: true} +- {name: column_names, type: JsonArray, optional: true} +outputs: +- {name: transformed_table, type: CSV} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'pandas==1.4.1' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet + --no-warn-script-location 'pandas==1.4.1' --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def fill_all_missing_values_using_Pandas_on_CSV_data( + table_path, + transformed_table_path, + replacement_value = "0", + column_names = None, + ): + import pandas + + df = pandas.read_csv( + table_path, + dtype="string", + ) + + for column_name in column_names or df.columns: + df[column_name] = df[column_name].fillna(value=replacement_value) + + df.to_csv( + transformed_table_path, index=False, + ) + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Fill all missing values using Pandas on CSV data', description='') + _parser.add_argument("--table", dest="table_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--replacement-value", dest="replacement_value", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--column-names", dest="column_names", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--transformed-table", dest="transformed_table_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = fill_all_missing_values_using_Pandas_on_CSV_data(**_parsed_args) + args: + - --table + - {inputPath: table} + - if: + cond: {isPresent: replacement_value} + then: + - --replacement-value + - {inputValue: replacement_value} + - if: + cond: {isPresent: column_names} + then: + - --column-names + - {inputValue: column_names} + - --transformed-table + - {outputPath: transformed_table} diff --git a/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml b/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml new file mode 100644 index 000000000..9a892b3ac --- /dev/null +++ b/community-content/pipeline_components/pandas/Select_columns/in_CSV_format/component.yaml @@ -0,0 +1,59 @@ +name: Select columns using Pandas on CSV data +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/pandas/Select_columns/in_CSV_format/component.yaml'} +inputs: +- {name: table, type: CSV} +- {name: column_names, type: JsonArray} +outputs: +- {name: transformed_table, type: CSV} +implementation: + container: + image: python:3.9 + command: + - sh + - -c + - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location + 'pandas==1.4.2' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet + --no-warn-script-location 'pandas==1.4.2' --user) && "$0" "$@" + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def select_columns_using_Pandas_on_CSV_data( + table_path, + transformed_table_path, + column_names, + ): + import pandas + + df = pandas.read_csv( + table_path, + dtype="string", + ) + df = df[column_names] + df.to_csv(transformed_table_path, index=False) + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Select columns using Pandas on CSV data', description='') + _parser.add_argument("--table", dest="table_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--column-names", dest="column_names", type=json.loads, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--transformed-table", dest="transformed_table_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = select_columns_using_Pandas_on_CSV_data(**_parsed_args) + args: + - --table + - {inputPath: table} + - --column-names + - {inputValue: column_names} + - --transformed-table + - {outputPath: transformed_table} diff --git a/community-content/pipeline_components/tensorflow/Create_fully_connected_network/component.yaml b/community-content/pipeline_components/tensorflow/Create_fully_connected_network/component.yaml new file mode 100644 index 000000000..c36f449c7 --- /dev/null +++ b/community-content/pipeline_components/tensorflow/Create_fully_connected_network/component.yaml @@ -0,0 +1,102 @@ +name: Create fully connected tensorflow network +description: Creates fully-connected network in Tensorflow SavedModel format +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/tensorflow/Create_fully_connected_network/component.yaml'} +inputs: +- {name: input_size, type: Integer} +- {name: hidden_layer_sizes, type: JsonArray, default: '[]', optional: true} +- {name: output_size, type: Integer, default: '1', optional: true} +- {name: activation_name, type: String, default: relu, optional: true} +- {name: output_activation_name, type: String, optional: true} +- {name: random_seed, type: Integer, default: '0', optional: true} +outputs: +- {name: model, type: TensorflowSavedModel} +implementation: + container: + image: tensorflow/tensorflow:2.7.0 + command: + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def create_fully_connected_tensorflow_network( + input_size, + model_path, + hidden_layer_sizes = [], + output_size = 1, + activation_name = "relu", + output_activation_name = None, + random_seed = 0, + ): + """Creates fully-connected network in Tensorflow SavedModel format""" + import tensorflow as tf + tf.random.set_seed(seed=random_seed) + + model = tf.keras.models.Sequential() + model.add(tf.keras.Input(shape=(input_size,))) + for layer_size in hidden_layer_sizes: + model.add(tf.keras.layers.Dense(units=layer_size, activation=activation_name)) + # The last layer is left without activation + model.add(tf.keras.layers.Dense(units=output_size, activation=output_activation_name)) + + print(model.summary()) + + # Using tf.keras.models.save_model instead of tf.saved_model.save to prevent downstream error: + #tf.saved_model.save(model, model_path) + # ValueError: Unable to create a Keras model from this SavedModel. + # This SavedModel was created with `tf.saved_model.save`, and lacks the Keras metadata. + # Please save your Keras model by calling `model.save`or `tf.keras.models.save_model`. + # See https://github.com/keras-team/keras/issues/16451 + tf.keras.models.save_model(model, model_path) + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Create fully connected tensorflow network', description='Creates fully-connected network in Tensorflow SavedModel format') + _parser.add_argument("--input-size", dest="input_size", type=int, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--hidden-layer-sizes", dest="hidden_layer_sizes", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--output-size", dest="output_size", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--activation-name", dest="activation_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--output-activation-name", dest="output_activation_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--random-seed", dest="random_seed", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = create_fully_connected_tensorflow_network(**_parsed_args) + args: + - --input-size + - {inputValue: input_size} + - if: + cond: {isPresent: hidden_layer_sizes} + then: + - --hidden-layer-sizes + - {inputValue: hidden_layer_sizes} + - if: + cond: {isPresent: output_size} + then: + - --output-size + - {inputValue: output_size} + - if: + cond: {isPresent: activation_name} + then: + - --activation-name + - {inputValue: activation_name} + - if: + cond: {isPresent: output_activation_name} + then: + - --output-activation-name + - {inputValue: output_activation_name} + - if: + cond: {isPresent: random_seed} + then: + - --random-seed + - {inputValue: random_seed} + - --model + - {outputPath: model} diff --git a/community-content/pipeline_components/tensorflow/Predict/on_CSV/component.yaml b/community-content/pipeline_components/tensorflow/Predict/on_CSV/component.yaml new file mode 100644 index 000000000..99c017a70 --- /dev/null +++ b/community-content/pipeline_components/tensorflow/Predict/on_CSV/component.yaml @@ -0,0 +1,100 @@ +name: Predict with TensorFlow model on CSV data +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/tensorflow/Predict/on_CSV/component.yaml'} +inputs: +- {name: dataset, type: CSV} +- {name: model, type: TensorflowSavedModel} +- {name: label_column_name, type: String, optional: true} +- {name: batch_size, type: Integer, default: '1000', optional: true} +outputs: +- {name: predictions} +implementation: + container: + image: tensorflow/tensorflow:2.9.1 + command: + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def predict_with_TensorFlow_model_on_CSV_data( + dataset_path, + model_path, + predictions_path, + label_column_name = None, + batch_size = 1000, + ): + import numpy + import tensorflow as tf + + model = tf.saved_model.load(export_dir=model_path) + + dataset = tf.data.experimental.make_csv_dataset( + file_pattern=dataset_path, + batch_size=batch_size, + label_name=label_column_name, + header=True, + num_epochs=1, + shuffle=False, + ignore_errors=False, + ) + + def stack_feature_batches(features_batch): + # Need to stack individual feature columns to create a single feature tensor + # Need to cast all column tensor types to float to prevent errors. + list_of_feature_batches = list( + tf.cast(x=feature_batch, dtype=tf.float32) + for feature_batch in features_batch.values() + ) + return tf.stack(list_of_feature_batches, axis=-1) + + def transform_features_and_drop_labels(features_batch, labels_batch): + return stack_feature_batches(features_batch) + + dataset_map_fn = ( + transform_features_and_drop_labels + if label_column_name + else stack_feature_batches + ) + + dataset = dataset.map(dataset_map_fn) + + with open(predictions_path, "w") as predictions_file: + for features_batch in dataset: + predictions_tensor = model(features_batch) + numpy.savetxt(predictions_file, predictions_tensor.numpy()) + + import argparse + _parser = argparse.ArgumentParser(prog='Predict with TensorFlow model on CSV data', description='') + _parser.add_argument("--dataset", dest="dataset_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--label-column-name", dest="label_column_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--batch-size", dest="batch_size", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--predictions", dest="predictions_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = predict_with_TensorFlow_model_on_CSV_data(**_parsed_args) + args: + - --dataset + - {inputPath: dataset} + - --model + - {inputPath: model} + - if: + cond: {isPresent: label_column_name} + then: + - --label-column-name + - {inputValue: label_column_name} + - if: + cond: {isPresent: batch_size} + then: + - --batch-size + - {inputValue: batch_size} + - --predictions + - {outputPath: predictions} diff --git a/community-content/pipeline_components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml b/community-content/pipeline_components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml new file mode 100644 index 000000000..9eea7a4f9 --- /dev/null +++ b/community-content/pipeline_components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml @@ -0,0 +1,170 @@ +name: Train model using Keras on CSV +metadata: + annotations: {author: Alexey Volkov , canonical_location: 'https://raw.githubusercontent.com/Ark-kun/pipeline_components/master/components/tensorflow/Train_model_using_Keras/on_CSV/component.yaml'} +inputs: +- {name: training_data, type: CSV} +- {name: model, type: TensorflowSavedModel} +- {name: label_column_name, type: String} +- {name: loss_function_name, type: String, default: mean_squared_error, optional: true} +- {name: number_of_epochs, type: Integer, default: '1', optional: true} +- {name: learning_rate, type: Float, default: '0.1', optional: true} +- {name: optimizer_name, type: String, default: Adadelta, optional: true} +- {name: optimizer_parameters, type: JsonObject, optional: true} +- {name: batch_size, type: Integer, default: '32', optional: true} +- {name: metric_names, type: JsonArray, optional: true} +- {name: random_seed, type: Integer, default: '0', optional: true} +outputs: +- {name: trained_model, type: TensorflowSavedModel} +implementation: + container: + image: tensorflow/tensorflow:2.8.0 + command: + - sh + - -ec + - | + program_path=$(mktemp) + printf "%s" "$0" > "$program_path" + python3 -u "$program_path" "$@" + - | + def _make_parent_dirs_and_return_path(file_path: str): + import os + os.makedirs(os.path.dirname(file_path), exist_ok=True) + return file_path + + def train_model_using_Keras_on_CSV( + training_data_path, + model_path, + trained_model_path, + label_column_name, + loss_function_name = "mean_squared_error", + number_of_epochs = 1, + learning_rate = 0.1, + optimizer_name = "Adadelta", + optimizer_parameters = None, + batch_size = 32, + metric_names = None, + random_seed = 0, + ): + import tensorflow as tf + tf.random.set_seed(seed=random_seed) + + # Loading model using Keras. Model loaded using TensorFlow does not have .fit. + #model = tf.saved_model.load(export_dir=model_path) + keras_model = tf.keras.models.load_model(filepath=model_path) + + optimizer_parameters = optimizer_parameters or {} + optimizer_parameters["learning_rate"] = learning_rate + optimizer_config = { + "class_name": optimizer_name, + "config": optimizer_parameters, + } + optimizer = tf.keras.optimizers.get(optimizer_config) + loss = tf.keras.losses.get(loss_function_name) + + training_dataset = tf.data.experimental.make_csv_dataset( + file_pattern=training_data_path, + batch_size=batch_size, + label_name=label_column_name, + header=True, + # Need to specify num_epochs=1 otherwise the training becomes infinite + num_epochs=1, + shuffle=True, + shuffle_seed=random_seed, + ignore_errors=True, + ) + def stack_feature_batches(features_batch, labels_batch): + # Need to stack individual feature columns to create a single feature tensor + # Need to cast all column tensor types to float to prevent error: + # TypeError: Tensors in list passed to 'values' of 'Pack' Op have types [int32, float32, float32, int32, int32] that don't all match. + list_of_feature_batches = list(tf.cast(x=feature_batch, dtype=tf.float32) for feature_batch in features_batch.values()) + return tf.stack(list_of_feature_batches, axis=-1), labels_batch + + training_dataset = training_dataset.map(stack_feature_batches) + + # Need to compile the model to prevent error: + # ValueError: No gradients provided for any variable: [..., ...]. + keras_model.compile( + optimizer=optimizer, + loss=loss, + metrics=metric_names, + ) + keras_model.fit( + training_dataset, + epochs=number_of_epochs, + ) + + # Using tf.keras.models.save_model instead of tf.saved_model.save to prevent downstream error: + #tf.saved_model.save(keras_model, trained_model_path) + # ValueError: Unable to create a Keras model from this SavedModel. + # This SavedModel was created with `tf.saved_model.save`, and lacks the Keras metadata. + # Please save your Keras model by calling `model.save`or `tf.keras.models.save_model`. + # See https://github.com/keras-team/keras/issues/16451 + tf.keras.models.save_model(keras_model, trained_model_path) + + import json + import argparse + _parser = argparse.ArgumentParser(prog='Train model using Keras on CSV', description='') + _parser.add_argument("--training-data", dest="training_data_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--label-column-name", dest="label_column_name", type=str, required=True, default=argparse.SUPPRESS) + _parser.add_argument("--loss-function-name", dest="loss_function_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--number-of-epochs", dest="number_of_epochs", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--learning-rate", dest="learning_rate", type=float, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--optimizer-name", dest="optimizer_name", type=str, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--optimizer-parameters", dest="optimizer_parameters", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--batch-size", dest="batch_size", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--metric-names", dest="metric_names", type=json.loads, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--random-seed", dest="random_seed", type=int, required=False, default=argparse.SUPPRESS) + _parser.add_argument("--trained-model", dest="trained_model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) + _parsed_args = vars(_parser.parse_args()) + + _outputs = train_model_using_Keras_on_CSV(**_parsed_args) + args: + - --training-data + - {inputPath: training_data} + - --model + - {inputPath: model} + - --label-column-name + - {inputValue: label_column_name} + - if: + cond: {isPresent: loss_function_name} + then: + - --loss-function-name + - {inputValue: loss_function_name} + - if: + cond: {isPresent: number_of_epochs} + then: + - --number-of-epochs + - {inputValue: number_of_epochs} + - if: + cond: {isPresent: learning_rate} + then: + - --learning-rate + - {inputValue: learning_rate} + - if: + cond: {isPresent: optimizer_name} + then: + - --optimizer-name + - {inputValue: optimizer_name} + - if: + cond: {isPresent: optimizer_parameters} + then: + - --optimizer-parameters + - {inputValue: optimizer_parameters} + - if: + cond: {isPresent: batch_size} + then: + - --batch-size + - {inputValue: batch_size} + - if: + cond: {isPresent: metric_names} + then: + - --metric-names + - {inputValue: metric_names} + - if: + cond: {isPresent: random_seed} + then: + - --random-seed + - {inputValue: random_seed} + - --trained-model + - {outputPath: trained_model} diff --git a/community-content/pytorch_efficient_training/README.md b/community-content/pytorch_efficient_training/README.md index bee45b872..dcee53f9e 100644 --- a/community-content/pytorch_efficient_training/README.md +++ b/community-content/pytorch_efficient_training/README.md @@ -15,15 +15,19 @@ pip install -r requirements.txt * resnet_dp.py - Train ResNet-50 on single node multiple GPUs with `DataParallel` strategy. * resnet_ddp.py - Train ResNet-50 on single node multiple GPUs with `DistributedDataParallel` strategy. * resnet_ddp_wds.py - Train ResNet-50 on single node multiple GPUs with `DistributedDataParallel` strategy and `Webdataset`. +* resnet_fsdp.py - Train ResNet-50 on single node multiple GPUs with `FullyShardedDataParallel` strategy. +* resnet_fsdp_wds.py - Train ResNet-50 on single node multiple GPUs with `FullyShardedDataParallel` strategy and `Webdataset`. * shard_imagenet.py - Shard ImagNet individual files into `tar` files. ## Benchmark When run the benchmark on Nvidia T4 GPUs using ImageNet validation dataset, you can get the result like: -Strategy | Seconds/Epoch - Local Data | Seconds/Epoch - Cloud Data ---------------------- | -------------------------- | -------------------------- -On 1 GPU | 489 | 804 (2x slower) -On 4 GPUs (DP) | 157 | 738 (5x slower) -On 4 GPUs (DDP) | 134 | 432 (3x slower) -On 4 GPUs (DDP + WDS) | 131 | 133 (same performance) +Strategy | Seconds/Epoch - Local Data | Seconds/Epoch - Cloud Data +---------------------- | -------------------------- | -------------------------- +On 1 GPU | 489 | 804 (2x slower) +On 4 GPUs (DP) | 157 | 738 (5x slower) +On 4 GPUs (DDP) | 134 | 432 (3x slower) +On 4 GPUs (DDP + WDS) | 131 | 133 (same performance) +On 4 GPUs (FSDP) | 139 | 353 (3x slower) +On 4 GPUs (FSDP + WDS) | 138 | 135 (same performance) diff --git a/community-content/pytorch_efficient_training/resnet_fsdp.py b/community-content/pytorch_efficient_training/resnet_fsdp.py new file mode 100644 index 000000000..5d468b879 --- /dev/null +++ b/community-content/pytorch_efficient_training/resnet_fsdp.py @@ -0,0 +1,242 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the \"License\"); +# you may not use this file except in compliance with the License.\n", +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an \"AS IS\" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Train resnet on multiple GPUs with FSDP.""" + +import argparse +import functools +import os +import time + +from PIL import Image +import torch +from torch import nn +import torch.distributed as dist +from torch.distributed.fsdp import FullyShardedDataParallel as FSDP +from torch.distributed.fsdp.wrap import size_based_auto_wrap_policy +import torch.multiprocessing as mp +import torchmetrics +import torchvision +from torchvision.models import resnet50 + + +class ImageFolder(torchvision.datasets.ImageFolder): + """Class for loading imagenet.""" + + def __init__(self, image_list_file, transform=None, target_transform=None): + self.samples = self._make_dataset(image_list_file) + self.loader = self._loader + + self.imgs = self.samples + self.targets = [s[1] for s in self.samples] + + self.transform = transform + self.target_transform = target_transform + + def _make_dataset(self, image_list_file): + items = [] + with open(image_list_file, 'r') as f: + for line in f: + item = line.strip().split(' ') + items.append((item[0], int(item[1]))) + return items + + def _loader(self, image_path): + with open(image_path, 'rb') as f: + img = Image.open(f) + img = img.convert('RGB') + return img + + +def train(model, device, dataloader, optimizer): + model.train() + for image, target in dataloader: + image = image.to(device, non_blocking=True) + target = target.to(device, non_blocking=True) + pred = model(image) + # pred.shape (N, C), target.shape (N) + loss = nn.functional.cross_entropy(pred, target) + optimizer.zero_grad() + loss.backward() + optimizer.step() + return loss + + +def evaluate(model, device, dataloader, metric): + model.eval() + with torch.no_grad(): + for image, target in dataloader: + image = image.to(device, non_blocking=True) + target = target.to(device, non_blocking=True) + pred = model(image) + metric.update(pred, target) + accuracy = metric.compute() + metric.reset() + return accuracy + + +def worker(gpu, args): + """Run training and evaluation.""" + # Init process group. + print(f'Initiating process {gpu}') + dist.init_process_group( + backend='nccl', + init_method='env://', + world_size=args.gpus, + rank=gpu) + + # Create train dataloader. + train_dataset = ImageFolder( + image_list_file=args.train_data_path, + transform=torchvision.transforms.Compose([ + torchvision.transforms.RandomResizedCrop(224), + torchvision.transforms.RandomHorizontalFlip(), + torchvision.transforms.ToTensor(), + torchvision.transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + train_sampler = torch.utils.data.distributed.DistributedSampler( + train_dataset, num_replicas=args.gpus, rank=gpu) + train_dataloader = torch.utils.data.DataLoader( + dataset=train_dataset, + batch_size=args.train_batch_size, + shuffle=False, + num_workers=args.dataloader_num_workers, + pin_memory=True, + sampler=train_sampler) + if gpu == 0: + print(f'Train dataloader | samples: {len(train_dataloader.dataset)}, ' + f'num workers: {train_dataloader.num_workers}, ' + f'global batch size: {args.train_batch_size * args.gpus}, ' + f'batches/epoch: {len(train_dataloader)}') + + # Create eval dataloader. + eval_dataset = ImageFolder( + image_list_file=args.eval_data_path, + transform=torchvision.transforms.Compose([ + torchvision.transforms.Resize(256), + torchvision.transforms.CenterCrop(224), + torchvision.transforms.ToTensor(), + torchvision.transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ])) + eval_sampler = torch.utils.data.distributed.DistributedSampler( + eval_dataset, num_replicas=args.gpus, rank=gpu) + eval_dataloader = torch.utils.data.DataLoader( + dataset=eval_dataset, + batch_size=args.eval_batch_size, + shuffle=False, + num_workers=args.dataloader_num_workers, + pin_memory=True, + drop_last=True, + sampler=eval_sampler) + if gpu == 0: + print(f'Eval dataloader | samples: {len(eval_dataloader.dataset)}, ' + f'num workers: {eval_dataloader.num_workers}, ' + f'batch size: {args.eval_batch_size}, ' + f'batches/epoch: {len(eval_dataloader)}') + + # Wrap policy. + my_auto_wrap_policy = functools.partial( + size_based_auto_wrap_policy, min_num_params=100) + torch.cuda.set_device(gpu) + + # Create model. + model = resnet50(weights=None) + model.to(args.device) + model = FSDP(model, auto_wrap_policy=my_auto_wrap_policy) + + # Optimizer. + optimizer = torch.optim.SGD(model.parameters(), 0.1) + + # Main loop. + metric = torchmetrics.classification.Accuracy(top_k=1).to(args.device) + for epoch in range(1, args.epochs + 1): + if gpu == 0: + print(f'Running epoch {epoch}') + train_sampler.set_epoch(epoch) + + start = time.time() + train(model, args.device, train_dataloader, optimizer) + end = time.time() + if gpu == 0: + print(f'Training finished in {(end - start):>0.3f} seconds') + + start = time.time() + evaluate(model, args.device, eval_dataloader, metric) + end = time.time() + if gpu == 0: + print(f'Evaluation finished in {(end - start):>0.3f} seconds') + + if gpu == 0: + print('Done') + dist.destroy_process_group() + + +def create_args(): + """Create main args.""" + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument( + '--gpus', + default=4, + type=int, + help='number of gpus to use') + parser.add_argument( + '--epochs', + default=2, + type=int, + help='number of total epochs to run') + parser.add_argument( + '--dataloader_num_workers', + default=2, + type=int, + help='number of workders for dataloader') + parser.add_argument( + '--train_data_path', + default='', + type=str, + help='path to training data') + parser.add_argument( + '--train_batch_size', + default=32, + type=int, + help='batch size for training per gpu') + parser.add_argument( + '--eval_data_path', + default='', + type=str, + help='path to evaluation data') + parser.add_argument( + '--eval_batch_size', + default=32, + type=int, + help='batch size for evaluation per gpu') + args = parser.parse_args() + return args + + +def main(): + args = create_args() + + os.environ['MASTER_ADDR'] = 'localhost' + os.environ['MASTER_PORT'] = '8888' + + args.device = 'cuda' if torch.cuda.is_available() else 'cpu' + print(f'Launch job on {args.gpus} GPUs with FSDP') + mp.spawn(worker, nprocs=args.gpus, args=(args,)) + + +if __name__ == '__main__': + main() diff --git a/community-content/pytorch_efficient_training/resnet_fsdp_wds.py b/community-content/pytorch_efficient_training/resnet_fsdp_wds.py new file mode 100644 index 000000000..9018f0651 --- /dev/null +++ b/community-content/pytorch_efficient_training/resnet_fsdp_wds.py @@ -0,0 +1,240 @@ +"""Train resnet on multiple GPUs with DDP.""" + +import argparse +import functools +import itertools +import math +import os +import time + +import torch +from torch import nn +import torch.distributed as dist +from torch.distributed.fsdp import FullyShardedDataParallel as FSDP +from torch.distributed.fsdp.wrap import size_based_auto_wrap_policy +import torch.multiprocessing as mp +import torchmetrics +from torchvision.models import resnet50 +from torchvision.transforms import transforms +import webdataset as wds + + +def wds_split(src, rank, world_size): + """Shards split function for webdataset.""" + # The context of caller of this function is within multiple processes + # (by DDP world_size) and multiple workers (by dataloader_num_workers). + # So we totally have (world_size * num_workers) workers for processing data. + # NOTE: Raw data should be sharded to enough shards to make sure one process + # can handle at least one shard, otherwise the process may hang. + worker_id = 0 + num_workers = 1 + worker_info = torch.utils.data.get_worker_info() + if worker_info: + worker_id = worker_info.id + num_workers = worker_info.num_workers + for s in itertools.islice(src, rank * num_workers + worker_id, None, + world_size * num_workers): + yield s + + +def identity(x): + return x + + +def create_wds_dataloader(rank, args, mode): + """Create webdataset dataset and dataloader.""" + if mode == 'train': + transform = transforms.Compose([ + transforms.RandomResizedCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ]) + data_path = args.train_data_path + data_size = args.train_data_size + batch_size_local = args.train_batch_size + batch_size_global = args.train_batch_size * args.gpus + # Since webdataset disallows partial batch, we pad the last batch for train. + batches = int(math.ceil(data_size / batch_size_global)) + else: + transform = transforms.Compose([ + transforms.Resize(256), + transforms.CenterCrop(224), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), + ]) + data_path = args.eval_data_path + data_size = args.eval_data_size + batch_size_local = args.eval_batch_size + batch_size_global = args.eval_batch_size * args.gpus + # Since webdataset disallows partial batch, we drop the last batch for eval. + batches = int(data_size / batch_size_global) + + dataset = wds.DataPipeline( + wds.SimpleShardList(data_path), + functools.partial(wds_split, rank=rank, world_size=args.gpus), + wds.tarfile_to_samples(), + wds.decode('pil'), + wds.to_tuple('jpg;png;jpeg cls'), + wds.map_tuple(transform, identity), + wds.batched(batch_size_local, partial=False), + ) + num_workers = args.dataloader_num_workers + dataloader = wds.WebLoader( + dataset=dataset, + batch_size=None, + shuffle=False, + num_workers=num_workers, + persistent_workers=True if num_workers > 0 else False, + pin_memory=True).repeat(nbatches=batches) + print(f'{mode} dataloader | samples: {data_size}, ' + f'num_workers: {num_workers}, ' + f'local batch size: {batch_size_local}, ' + f'global batch size: {batch_size_global}, ' + f'batches: {batches}') + return dataloader + + +def train(model, device, dataloader, optimizer): + model.train() + for image, target in dataloader: + image = image.to(device, non_blocking=True) + target = target.to(device, non_blocking=True) + pred = model(image) + # pred.shape (N, C), target.shape (N) + loss = nn.functional.cross_entropy(pred, target) + optimizer.zero_grad() + loss.backward() + optimizer.step() + return loss + + +def evaluate(model, device, dataloader, metric): + model.eval() + with torch.no_grad(): + for image, target in dataloader: + image = image.to(device, non_blocking=True) + target = target.to(device, non_blocking=True) + pred = model(image) + metric.update(pred, target) + accuracy = metric.compute() + metric.reset() + return accuracy + + +def worker(gpu, args): + """Run training and evaluation.""" + # Init process group. + print(f'Initiating process {gpu}') + dist.init_process_group( + backend='nccl', + init_method='env://', + world_size=args.gpus, + rank=gpu) + + # Create dataloader. + train_dataloader = create_wds_dataloader(gpu, args, 'train') + eval_dataloader = create_wds_dataloader(gpu, args, 'eval') + + # Wrap policy. + my_auto_wrap_policy = functools.partial( + size_based_auto_wrap_policy, min_num_params=100) + torch.cuda.set_device(gpu) + + # Create model. + model = resnet50(weights=None) + model.to(args.device) + model = FSDP(model, auto_wrap_policy=my_auto_wrap_policy) + + # Optimizer. + optimizer = torch.optim.SGD(model.parameters(), 0.1) + + # Main loop. + metric = torchmetrics.classification.Accuracy(top_k=1).to(args.device) + for epoch in range(1, args.epochs + 1): + if gpu == 0: + print(f'Running epoch {epoch}') + + start = time.time() + train(model, args.device, train_dataloader, optimizer) + end = time.time() + if gpu == 0: + print(f'Training finished in {(end - start):>0.3f} seconds') + + start = time.time() + evaluate(model, args.device, eval_dataloader, metric) + end = time.time() + if gpu == 0: + print(f'Evaluation finished in {(end - start):>0.3f} seconds') + + if gpu == 0: + print('Done') + + +def create_args(): + """Create main args.""" + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument( + '--gpus', + default=4, + type=int, + help='number of gpus to use') + parser.add_argument( + '--epochs', + default=2, + type=int, + help='number of total epochs to run') + parser.add_argument( + '--dataloader_num_workers', + default=2, + type=int, + help='number of workders for dataloader') + parser.add_argument( + '--train_data_path', + default='', + type=str, + help='path to training data') + parser.add_argument( + '--train_batch_size', + default=32, + type=int, + help='batch size for training per gpu') + parser.add_argument( + '--train_data_size', + default=50000, + type=int, + help='data size for training') + parser.add_argument( + '--eval_data_path', + default='', + type=str, + help='path to evaluation data') + parser.add_argument( + '--eval_batch_size', + default=32, + type=int, + help='batch size for evaluation per gpu') + parser.add_argument( + '--eval_data_size', + default=50000, + type=int, + help='data size for evaluation') + args = parser.parse_args() + return args + + +def main(): + args = create_args() + os.environ['MASTER_ADDR'] = 'localhost' + os.environ['MASTER_PORT'] = '8888' + + args.device = 'cuda' if torch.cuda.is_available() else 'cpu' + print(f'Launch job on {args.gpus} GPUs with FSDP') + mp.spawn(worker, nprocs=args.gpus, args=(args,)) + + +if __name__ == '__main__': + main() diff --git a/notebooks/ci_notebook_ingestion.md b/notebooks/ci_notebook_ingestion.md new file mode 100644 index 000000000..1bcab59fd --- /dev/null +++ b/notebooks/ci_notebook_ingestion.md @@ -0,0 +1,102 @@ +# Administrative Howto notes on CI Notebook Ingestion + + +This readme covers administrative actions that are performed on an as-needed basis. + +## Team: vertex-ai-owners + +Members of the vertex-ai-owners (git team) have administrative privileges. + + +### Viewing members + +1. Goto the repo +2. From top-level menu, select: (Settings -> Collaborators and Teams)[https://github.com/GoogleCloudPlatform/vertex-ai-samples/settings/access] + + +### Adding a new member + +If another member needs to be added: + - Have the new member make a request to join the team. + - vertex-ai-owners with the `Maintainer` tag may add the new member. + + +## Executing CI notebook ingestion checks on a PR + +### Killing a stuck PR + +If the CI notebook ingestion test is stuck (not terminating), you can kill the process by: + +1. Goto the PR +2. Under checks, find the entry: vertex-ai-notebook-execution-test (python-docs-samples-tests) In progress —> Summary +3. Select Details +4. At bottom of details page, select: View more details on Google Cloud Build +5. In Cloud Build history page, select Cancel on the top menu bar. + +### Restart a PR test + +There are two ways to restart the CI notebook ingestion tests on an open PR. + +1. In Cloud Build history page, select Rebuild on the top menu bar. +2. or, in a comment in the PR enter: /gcbrun + +## Bypassing CI notebook ingestion checks on a PR + +We strongly discourage this, unless there is a compelling reason that would impact the integrity of the quality process. + +There are two ways of doing this. In both cases, you do: + +1. Goto the repo +2. From top-level menu, select: (Settings -> Branches)[https://github.com/GoogleCloudPlatform/vertex-ai-samples/settings/branches] +3. Under Branch Protection Rules, select the `main` branch. + +### Allowing a member to disable requirements for merging + +Specific member(s) can be assigned the ability to override requirements and merge a PR, by: + +1. Select Edit for the `main` branch in Branch Protection Rules. +2. Find the entry "Allow specified actors to bypass required pull requests". +3. Under this entry, add the member's git LDAP. +4. Select SAVE. +5. The "Squash and Merge" button will now be enabled on all PRs viewed by that member. + +### Temporarily disable checks. + +You can disable requirement checks temporarily on all PRs. + +1. Select Edit for the `main` branch in Branch Protection Rules. +2. Uncheck: + - Require approvals + - Require review from Code Owners + - Require status checks to pass before merging +3. Select SAVE +4. Now all members will see a green "Squash and Merge" on all PRs viewed by that member. + +To reverse, recheck the settings you unchecked above. + +## Linting + +To execute the identical lint image locally, from the CI notebook ingestion checks, do: + +1. Goto the corresponding local folder in the repo. +2. Run: `docker run -v ${PWD}:/setup/app gcr.io/python-docs-samples-tests/notebook_linter:latest ` + +## Install dependency issues + +Some packages (and combinations) have dependencies that fail on the virgin VM image used for the CI notebook ingestion test. + +### TFDV + +If the notebook installs and uses tensorflow_data_validation, install as follows: + +! pip3 install -q {USER_FLAG} google-cloud-aiplatform \ + tensorflow-data-validation \ + protobuf==3.20.3 + +! pip3 install -q {USER_FLAG} cachetools==5.2.0 + + + + + + diff --git a/notebooks/community/CODEOWNERS b/notebooks/community/CODEOWNERS index 0f8cbf6e4..0ae613deb 100644 --- a/notebooks/community/CODEOWNERS +++ b/notebooks/community/CODEOWNERS @@ -18,6 +18,7 @@ /matching_engine/matching_engine_for_indexing.ipynb @yinghsienwu /matching_engine/stream_update_for_matching_engine.ipynb @peterping666 /sdk/pytorch_lightning_custom_container_training.ipynb @brianchunkang +/sdk/sdk_pytorch_torchrun_custom_container_training_imagenet.ipynb @brianchunkang /tensorboard @yfang1 /feature_store @nayaknishant @morgandu /prediction @googleapis/vertex-prediction-team @@ -29,9 +30,14 @@ /notebooks/community/neo4j/graph_paysim.ipynb @benofben @laeg /notebooks/community/ml_ops/stage1/get_started_with_visionapi_and_vertex_datasets.ipynb @mansari /notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_demand_forecasting.ipynb @inardini +/notebooks/community/cohere/cohere_embedding_with_matching_engine.ipynb @stewart-co /notebooks/community/ml_ops/stage2/get_started_vertex_hpt_r_kernel.ipynb @fhirschmann /notebooks/community/ml_ops/stage2/get_started_vertex_training_r_using_r_kernel.ipynb @fhirschmann /notebooks/community/vertex-ai-samples/notebooks/community/model_registry/vertex_ai_model_registry_bqml_custom_model_versioning.ipynb @inardini /notebooks/community/vertex-ai-samples/notebooks/community/model_registry/vertex_ai_model_registry_automl_model_versioning.ipynb @inardini /notebooks/community/vizier/conversions_vertex_vizier_and_open_source_vizier.ipynb @halio-g -/notebooks/community/experiments/vertex_ai_model_experimentation.ipynb @inardini @asobran \ No newline at end of file +/notebooks/community/experiments/vertex_ai_model_experimentation.ipynb @inardini @asobran +/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_anomaly_detection.ipynb @inardini +/notebooks/community/pipelines/google_cloud_pipeline_components_cloud_natural_language_pipeline.ipynb @Narwhalprime +/notebooks/community/pipelines/google_cloud_pipeline_components_ready_to_go_text_classification_pipeline.ipynb @Narwhalprime +/notebooks/community/feature_store/get_started_vertex_feature_store.ipynb @junkourata diff --git a/notebooks/community/cohere/README.md b/notebooks/community/cohere/README.md new file mode 100644 index 000000000..43774d8b6 --- /dev/null +++ b/notebooks/community/cohere/README.md @@ -0,0 +1,3 @@ +# README + +These are notebooks [Cohere](https://cohere.ai/) built in collaboration with Google. They demonstrate how to use Cohere's modeling API along with Vertex AI. \ No newline at end of file diff --git a/notebooks/community/cohere/cohere_embedding_with_matching_engine.ipynb b/notebooks/community/cohere/cohere_embedding_with_matching_engine.ipynb new file mode 100644 index 000000000..6e0af8159 --- /dev/null +++ b/notebooks/community/cohere/cohere_embedding_with_matching_engine.ipynb @@ -0,0 +1,1434 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2021 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": "JAPoU8Sm5E6e" + }, + "source": [ + "\n", + "\n", + " \n", + " \n", + "
\n", + " \n", + " Run in Google Cloud Notebooks\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "In this notebook, you will learn how to use co.embed to quickly capture semantic information about some input data. You'll then use those new features with Vertex AI Matching Engine's Approximate Nearest Neighbor (ANN) service to find similar texts.\n", + "\n", + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the [ag_news_subset](https://www.tensorflow.org/datasets/catalog/ag_news_subset) from [TensorFlow Datasets](https://www.tensorflow.org/datasets). The final solution will be able to find articles that are similar to a user-provided topic.\n", + "\n", + "### Objective\n", + "\n", + "In this notebook, you will learn how to create embeddings with Cohere's API and then leverage Vertex AI Matching Engine to create an Index and query against indexes to find similar texts.\n", + "\n", + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud and Cohere:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "* Cohere co.embed endpoint usage\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage.\n", + "\n", + "Learn about [Cohere Pricing](https://cohere.ai/pricing)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "495d173c49e2" + }, + "source": [ + "## Before you begin\n", + "Lets set the variables that will be used throughout this demo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2c98c4e548b7" + }, + "outputs": [], + "source": [ + "COHERE_API_KEY = \"{API KEY}\"\n", + "GOOGLE_PROJECT_ID = \"{Project ID}\"\n", + "NETWORK_NAME = \"{Network Name}\"\n", + "PEERING_RANGE_NAME = \"{Range Name}\"\n", + "BUCKET_NAME = \"gs://{Bucket Name}\"\n", + "REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "S5zc4kbEiYCm" + }, + "source": [ + "## Creating a VPC Network\n", + "\n", + "* **Prepare a VPC network**. To reduce any network overhead that might lead to unnecessary increase in overhead latency, it is best to call the ANN endpoints from your VPC via a direct [VPC Peering](https://cloud.google.com/vertex-ai/docs/general/vpc-peering) connection. The following section describes how to setup a VPC Peering connection if you don't have one. This is a one-time initial setup task. You can also reuse existing VPC network and skip this section.\n", + "* **WARNING:** The match service gRPC API (to create online queries against your deployed index) has to be executed in a Google Cloud Notebook instance that is created with the following requirements:\n", + " * **In the same region as where your ANN service is deployed** (for example, if you set `REGION = \"us-central1\"` as same as the tutorial, the notebook instance has to be in `us-central1`).\n", + " * **Make sure you select the VPC network you created for ANN service** (instead of using the \"default\" one). That is, you will have to create the VPC network below and then create a new notebook instance that uses that VPC. \n", + " * If you run it in the colab or a Google Cloud Notebook instance in a different VPC network or region, the gRPC API will fail to peer the network (InactiveRPCError)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lW2LneA5mmmP" + }, + "outputs": [], + "source": [ + "PROJECT_ID = GOOGLE_PROJECT_ID # @param {type:\"string\"}\n", + "\n", + "# Create a VPC network\n", + "! gcloud compute networks create {NETWORK_NAME} --bgp-routing-mode=regional --subnet-mode=auto --project={PROJECT_ID}\n", + "\n", + "# Add necessary firewall rules\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-icmp --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow icmp\n", + "\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-internal --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow all --source-ranges 10.128.0.0/9\n", + "\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-rdp --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow tcp:3389\n", + "\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-ssh --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow tcp:22\n", + "\n", + "# Reserve IP range\n", + "! gcloud compute addresses create {PEERING_RANGE_NAME} --global --prefix-length=16 --network={NETWORK_NAME} --purpose=VPC_PEERING --project={PROJECT_ID} --description=\"peering range for uCAIP Haystack.\"\n", + "\n", + "# Set up peering with service networking\n", + "! gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --network={NETWORK_NAME} --ranges={PEERING_RANGE_NAME} --project={PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d3uj8x73nDX_" + }, + "source": [ + "* Authentication: `$ gcloud auth login` rerun this in Google Cloud Notebook terminal when you are logged out and need the credential again." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "## Installation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "irSMQn6gZ19l" + }, + "source": [ + "Install the `tensorflow_datasets` to prepare sample dataset, and the `grpcio-tools` for querying against the index. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-h5sqwOEZ5Yq" + }, + "outputs": [], + "source": [ + "! pip install -U grpcio-tools --user\n", + "! pip install -U tensorflow==2.9.1 --user\n", + "! pip install -U tensorflow-datasets --user" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eb2996cae3c1" + }, + "source": [ + "### Download and install the latest (preview) version of the Vertex SDK for Python." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wyy5Lbnzg5fi" + }, + "outputs": [], + "source": [ + "! pip install -U git+https://github.com/googleapis/python-aiplatform.git@main-test --user" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pGsX5GJ_ZZtc" + }, + "source": [ + "Install `Cohere`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nisWA0xvZZtc" + }, + "outputs": [], + "source": [ + "! pip install -U cohere --user" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel (Colab)\n", + "\n", + "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "EagvaM0vfPv1" + }, + "source": [ + "## Creating Embeddings with Cohere" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NtTGOUsOfTWQ" + }, + "outputs": [], + "source": [ + "# Lets start by loading the dataset with tensorflow-datasets\n", + "import tensorflow_datasets as tfds\n", + "\n", + "dataset = tfds.load(\"ag_news_subset\", split=\"train\", shuffle_files=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "38X7wItlf3Bk" + }, + "outputs": [], + "source": [ + "# For speed and cost considerations, lets limit the dataset to 1000 examples\n", + "df = tfds.as_dataframe(dataset.take(1000), tfds.builder(\"ag_news_subset\").info)\n", + "df[\"text\"] = df[\"description\"].apply(lambda x: x.decode())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9202cbf2864a" + }, + "outputs": [], + "source": [ + "# Finally, lets import cohere and use co.embed to create representations for these 1000 articles\n", + "import cohere\n", + "\n", + "co = cohere.Client(COHERE_API_KEY)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-HGBql32gjir" + }, + "outputs": [], + "source": [ + "# running each of the examples through the embedding endpoint\n", + "response = co.embed(model=\"small\", texts=list(df[\"text\"].values))\n", + "\n", + "cohere_embeddings = response.embeddings" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "### 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).\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, and Service Networking API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,servicenetworking.googleapis.com).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "PROJECT_ID = GOOGLE_PROJECT_ID\n", + "\n", + "# Get your Google Cloud project ID from gcloud\n", + "if not os.getenv(\"IS_TESTING\"):\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": "markdown", + "metadata": { + "id": "qJYoRfYng0XZ" + }, + "source": [ + "Otherwise, set your project ID here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", + " PROJECT_ID = GOOGLE_PROJECT_ID # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zgPO1eR3CYjk" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "Set the name of your Cloud Storage bucket below. It must be unique across all\n", + "Cloud Storage buckets.\n", + "\n", + "You may also change the `REGION` variable, which is used for operations\n", + "throughout the rest of this notebook. Make sure to [choose a region where Vertex AI services are\n", + "available](https://cloud.google.com/vertex-ai/docs/general/locations#available_regions). You may\n", + "not use a Multi-Regional Storage bucket for training with Vertex AI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cf221059d072" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", + "\n", + "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"gs://[your-bucket-name]\":\n", + " BUCKET_NAME = \"gs://\" + PROJECT_ID + \"aip-\" + TIMESTAMP" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-EcIXiGsCePi" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NIq7R4HZCfIc" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION $BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ucvCsknMCims" + }, + "source": [ + "Finally, validate access to your Cloud Storage bucket by examining its contents:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vhOb7YnwClBb" + }, + "outputs": [], + "source": [ + "# this will not return anything if the bucket is empty\n", + "! gsutil ls -al $BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Import libraries and define constants" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y9Uo3tifg1kx" + }, + "source": [ + "Import the Vertex AI (unified) client library into your Python environment. \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f2d05ab4126a" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "import grpc\n", + "from google.cloud import aiplatform_v1beta1\n", + "from google.protobuf import struct_pb2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pRUOFELefqf1" + }, + "outputs": [], + "source": [ + "ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", + "\n", + "\n", + "AUTH_TOKEN = !gcloud auth print-access-token\n", + "PROJECT_NUMBER = !gcloud projects list --filter=\"PROJECT_ID:'{PROJECT_ID}'\" --format='value(PROJECT_NUMBER)'\n", + "PROJECT_NUMBER = PROJECT_NUMBER[0]\n", + "\n", + "PARENT = \"projects/{}/locations/{}\".format(PROJECT_ID, REGION)\n", + "\n", + "print(\"ENDPOINT: {}\".format(ENDPOINT))\n", + "print(\"PROJECT_ID: {}\".format(PROJECT_ID))\n", + "print(\"REGION: {}\".format(REGION))\n", + "\n", + "!gcloud config set project {PROJECT_ID}\n", + "!gcloud config set ai_platform/region {REGION}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lR6Wwv-hCCN-" + }, + "source": [ + "## Prepare the Embeddings\n", + "\n", + "This will take the embeddings generated with Cohere and format them to work with Matching Engine\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aQIQSyF9GtSv" + }, + "source": [ + "Save the data in JSONL format.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "18wCiTwfG40P" + }, + "outputs": [], + "source": [ + "# This converts the list of embeddings to the json format expected by Matching Engine\n", + "\n", + "with open(\"cohere_embeddings.json\", \"w\") as f:\n", + " for i, e in enumerate(cohere_embeddings):\n", + " f.write('{\"id\":\"' + str(i) + '\",')\n", + " f.write('\"embedding\":' + str(e) + \"}\")\n", + " f.write(\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QuVl8DrWG8NS" + }, + "source": [ + "Upload the data to GCS." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Gk6YmPMoG8aX" + }, + "outputs": [], + "source": [ + "# NOTE: Everything in this GCS DIR will be DELETED before uploading the data.\n", + "# A CommandException is expected if no data is present\n", + "\n", + "! gsutil rm -rf {BUCKET_NAME}/*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3PgsA_vbI8Vg" + }, + "outputs": [], + "source": [ + "! gsutil cp cohere_embeddings.json {BUCKET_NAME}/cohere_embeddings.json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3RX6g7FaJFes" + }, + "outputs": [], + "source": [ + "! gsutil ls {BUCKET_NAME}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mglUPwHpJH98" + }, + "source": [ + "## Create Indexes\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qhIBCQ7dDSbW" + }, + "source": [ + "### Create ANN Index (for Production Usage)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "DDAvm_mj_BVs" + }, + "outputs": [], + "source": [ + "index_client = aiplatform_v1beta1.IndexServiceClient(\n", + " client_options=dict(api_endpoint=ENDPOINT)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qiIg9b5zJLi1" + }, + "outputs": [], + "source": [ + "# Cohere small model is 1024 dimensions, update the dimension size if another model is being used\n", + "DIMENSIONS = 1024\n", + "DISPLAY_NAME = \"cohere_embeddings\"\n", + "DISPLAY_NAME_BRUTE_FORCE = DISPLAY_NAME + \"_brute_force\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "svLYiDf0OD2G" + }, + "source": [ + "Create the ANN index configuration:\n", + "\n", + "Please read the documentation to understand the various configuration parameters that can be used to tune the index\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Tfa8IoNrOCJh" + }, + "outputs": [], + "source": [ + "treeAhConfig = struct_pb2.Struct(\n", + " fields={\n", + " \"leafNodeEmbeddingCount\": struct_pb2.Value(number_value=500),\n", + " \"leafNodesToSearchPercent\": struct_pb2.Value(number_value=7),\n", + " }\n", + ")\n", + "\n", + "algorithmConfig = struct_pb2.Struct(\n", + " fields={\"treeAhConfig\": struct_pb2.Value(struct_value=treeAhConfig)}\n", + ")\n", + "\n", + "config = struct_pb2.Struct(\n", + " fields={\n", + " \"dimensions\": struct_pb2.Value(number_value=DIMENSIONS),\n", + " \"approximateNeighborsCount\": struct_pb2.Value(number_value=150),\n", + " \"distanceMeasureType\": struct_pb2.Value(string_value=\"DOT_PRODUCT_DISTANCE\"),\n", + " \"algorithmConfig\": struct_pb2.Value(struct_value=algorithmConfig),\n", + " }\n", + ")\n", + "\n", + "metadata = struct_pb2.Struct(\n", + " fields={\n", + " \"config\": struct_pb2.Value(struct_value=config),\n", + " \"contentsDeltaUri\": struct_pb2.Value(string_value=BUCKET_NAME),\n", + " }\n", + ")\n", + "\n", + "ann_index = {\n", + " \"display_name\": DISPLAY_NAME,\n", + " \"description\": \"Glove 100 ANN index\",\n", + " \"metadata\": struct_pb2.Value(struct_value=metadata),\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xzY7TpUSJcTV" + }, + "outputs": [], + "source": [ + "ann_index = index_client.create_index(parent=PARENT, index=ann_index)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oLBD2xXG_tv7" + }, + "outputs": [], + "source": [ + "# Poll the operation until it's done successfullly.\n", + "# This will take some time (~30 minutes)\n", + "\n", + "while True:\n", + " if ann_index.done():\n", + " break\n", + " print(\"Poll the operation to create index...\")\n", + " time.sleep(60)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "17jrQi501QyX" + }, + "outputs": [], + "source": [ + "INDEX_RESOURCE_NAME = ann_index.result().name\n", + "INDEX_RESOURCE_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kSsqZuyoA1SG" + }, + "source": [ + "### Create Brute Force Index (for Ground Truth)\n", + "\n", + "The brute force index uses a naive brute force method to find the nearest neighbors. This method is not fast or efficient. Hence brute force indices are not recommended for production usage. They are to be used to find the \"ground truth\" set of neighbors, so that the \"ground truth\" set can be used to measure recall of the indices being tuned for production usage. To ensure an apples to apples comparison, the `distanceMeasureType` and `featureNormType`, `dimensions` of the brute force index should match those of the production indices being tuned.\n", + "\n", + "Create the brute force index configuration:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5ExrilcZA87V" + }, + "outputs": [], + "source": [ + "algorithmConfig = struct_pb2.Struct(\n", + " fields={\"bruteForceConfig\": struct_pb2.Value(struct_value=struct_pb2.Struct())}\n", + ")\n", + "\n", + "config = struct_pb2.Struct(\n", + " fields={\n", + " \"dimensions\": struct_pb2.Value(number_value=DIMENSIONS),\n", + " \"approximateNeighborsCount\": struct_pb2.Value(number_value=150),\n", + " \"distanceMeasureType\": struct_pb2.Value(string_value=\"DOT_PRODUCT_DISTANCE\"),\n", + " \"algorithmConfig\": struct_pb2.Value(struct_value=algorithmConfig),\n", + " }\n", + ")\n", + "\n", + "metadata = struct_pb2.Struct(\n", + " fields={\n", + " \"config\": struct_pb2.Value(struct_value=config),\n", + " \"contentsDeltaUri\": struct_pb2.Value(string_value=BUCKET_NAME),\n", + " }\n", + ")\n", + "\n", + "brute_force_index = {\n", + " \"display_name\": DISPLAY_NAME_BRUTE_FORCE,\n", + " \"description\": \"Glove 100 index (brute force)\",\n", + " \"metadata\": struct_pb2.Value(struct_value=metadata),\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "DXnBLqjXBsv8" + }, + "outputs": [], + "source": [ + "brute_force_index = index_client.create_index(parent=PARENT, index=brute_force_index)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AtwELX4Peq2n" + }, + "outputs": [], + "source": [ + "# Poll the operation until it's done successfullly.\n", + "# This will take ~45 min.\n", + "\n", + "while True:\n", + " if brute_force_index.done():\n", + " break\n", + " print(\"Poll the operation to create index...\")\n", + " time.sleep(60)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_oD5SieYJbbW" + }, + "outputs": [], + "source": [ + "INDEX_BRUTE_FORCE_RESOURCE_NAME = brute_force_index.result().name\n", + "INDEX_BRUTE_FORCE_RESOURCE_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qV2xjAnDDObD" + }, + "source": [ + "## Create an IndexEndpoint with VPC Network" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2AWeQ6e04m36" + }, + "outputs": [], + "source": [ + "index_endpoint_client = aiplatform_v1beta1.IndexEndpointServiceClient(\n", + " client_options=dict(api_endpoint=ENDPOINT)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "BpZQoJyxDlbO" + }, + "outputs": [], + "source": [ + "VPC_NETWORK_NAME = \"projects/{}/global/networks/{}\".format(PROJECT_NUMBER, NETWORK_NAME)\n", + "VPC_NETWORK_NAME" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mColTdkIDoVZ" + }, + "outputs": [], + "source": [ + "index_endpoint = {\n", + " \"display_name\": \"index_endpoint_for_demo\",\n", + " \"network\": VPC_NETWORK_NAME,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "QuARXzJVGyQX" + }, + "outputs": [], + "source": [ + "r = index_endpoint_client.create_index_endpoint(\n", + " parent=PARENT, index_endpoint=index_endpoint\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YRL1AYF_HpZR" + }, + "outputs": [], + "source": [ + "r.result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PJ3bcZqi-cfM" + }, + "outputs": [], + "source": [ + "INDEX_ENDPOINT_NAME = r.result().name\n", + "INDEX_ENDPOINT_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "np2cgVuuIe9k" + }, + "source": [ + "## Deploy Indexes" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8Ew1UgcIIiJG" + }, + "source": [ + "### Deploy ANN Index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nLOYTGygIlMK" + }, + "outputs": [], + "source": [ + "DEPLOYED_INDEX_ID = \"cohere_embedding_deployed\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "M-W5LYQrKTzi" + }, + "outputs": [], + "source": [ + "deploy_ann_index = {\n", + " \"id\": DEPLOYED_INDEX_ID,\n", + " \"display_name\": DEPLOYED_INDEX_ID,\n", + " \"index\": INDEX_RESOURCE_NAME,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_uK4WOgqN1NG" + }, + "outputs": [], + "source": [ + "r = index_endpoint_client.deploy_index(\n", + " index_endpoint=INDEX_ENDPOINT_NAME, deployed_index=deploy_ann_index\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2Lt0jvsSeekz" + }, + "outputs": [], + "source": [ + "# Poll the operation until it's done successfullly.\n", + "while True:\n", + " if r.done():\n", + " break\n", + " print(\"Poll the operation to deploy index...\")\n", + " time.sleep(60)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8ajRpqe2J9aS" + }, + "outputs": [], + "source": [ + "r.result()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RNZnXmO5AhDO" + }, + "source": [ + "### Deploy Brute Force Index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3p9e4828AkSv" + }, + "outputs": [], + "source": [ + "DEPLOYED_BRUTE_FORCE_INDEX_ID = \"cohere_brute_force_deployed\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6PgQKgHQAq3p" + }, + "outputs": [], + "source": [ + "deploy_brute_force_index = {\n", + " \"id\": DEPLOYED_BRUTE_FORCE_INDEX_ID,\n", + " \"display_name\": DEPLOYED_BRUTE_FORCE_INDEX_ID,\n", + " \"index\": INDEX_BRUTE_FORCE_RESOURCE_NAME,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-2kgd01SA4rk" + }, + "outputs": [], + "source": [ + "r = index_endpoint_client.deploy_index(\n", + " index_endpoint=INDEX_ENDPOINT_NAME, deployed_index=deploy_brute_force_index\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "R6nZiQP-c2nu" + }, + "outputs": [], + "source": [ + "# Poll the operation until it's done successfullly.\n", + "\n", + "while True:\n", + " if r.done():\n", + " break\n", + " print(\"Poll the operation to deploy index...\")\n", + " time.sleep(60)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2v7J36ShA9Sw" + }, + "outputs": [], + "source": [ + "r.result()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6LCGvBNvBd8D" + }, + "source": [ + "## Create Online Queries\n", + "\n", + "After you built your indexes, you may query against the deployed index through the online querying gRPC API (Match service) within the virtual machine instances from the same region (for example 'us-central1' in this tutorial). \n", + "\n", + "The way a client uses this gRPC API is by folowing steps:\n", + "\n", + "* Write `match_service.proto` locally\n", + "\n", + "* Compile the protocal buffer (see below)\n", + "* Obtain the index endpoint\n", + "* Use a code-generated stub to make the call, passing the parameter values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d737d0f8fa80" + }, + "outputs": [], + "source": [ + "!git clone https://github.com/googleapis/googleapis.git" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "code", + "id": "rUUW3ViQE88D" + }, + "outputs": [], + "source": [ + "%%writefile match_service.proto\n", + "\n", + "syntax = \"proto3\";\n", + "\n", + "package google.cloud.aiplatform.container.v1beta1;\n", + "\n", + "import \"google/rpc/status.proto\";\n", + "\n", + "// MatchService is a Google managed service for efficient vector similarity\n", + "// search at scale.\n", + "service MatchService {\n", + " // Returns the nearest neighbors for the query. If it is a sharded\n", + " // deployment, calls the other shards and aggregates the responses.\n", + " rpc Match(MatchRequest) returns (MatchResponse) {}\n", + "\n", + " // Returns the nearest neighbors for batch queries. If it is a sharded\n", + " // deployment, calls the other shards and aggregates the responses.\n", + " rpc BatchMatch(BatchMatchRequest) returns (BatchMatchResponse) {}\n", + "}\n", + "\n", + "// Parameters for a match query.\n", + "message MatchRequest {\n", + " // The ID of the DeploydIndex that will serve the request.\n", + " // This MatchRequest is sent to a specific IndexEndpoint of the Control API,\n", + " // as per the IndexEndpoint.network. That IndexEndpoint also has\n", + " // IndexEndpoint.deployed_indexes, and each such index has an\n", + " // DeployedIndex.id field.\n", + " // The value of the field below must equal one of the DeployedIndex.id\n", + " // fields of the IndexEndpoint that is being called for this request.\n", + " string deployed_index_id = 1;\n", + "\n", + " // The embedding values.\n", + " repeated float float_val = 2;\n", + "\n", + " // The number of nearest neighbors to be retrieved from database for\n", + " // each query. If not set, will use the default from\n", + " // the service configuration.\n", + " int32 num_neighbors = 3;\n", + "\n", + " // The list of restricts.\n", + " repeated Namespace restricts = 4;\n", + "\n", + " // Crowding is a constraint on a neighbor list produced by nearest neighbor\n", + " // search requiring that no more than some value k' of the k neighbors\n", + " // returned have the same value of crowding_attribute.\n", + " // It's used for improving result diversity.\n", + " // This field is the maximum number of matches with the same crowding tag.\n", + " int32 per_crowding_attribute_num_neighbors = 5;\n", + "\n", + " // The number of neighbors to find via approximate search before\n", + " // exact reordering is performed. If not set, the default value from scam\n", + " // config is used; if set, this value must be > 0.\n", + " int32 approx_num_neighbors = 6;\n", + "\n", + " // The fraction of the number of leaves to search, set at query time allows\n", + " // user to tune search performance. This value increase result in both search\n", + " // accuracy and latency increase. The value should be between 0.0 and 1.0. If\n", + " // not set or set to 0.0, query uses the default value specified in\n", + " // NearestNeighborSearchConfig.TreeAHConfig.leaf_nodes_to_search_percent.\n", + " int32 leaf_nodes_to_search_percent_override = 7;\n", + "}\n", + "\n", + "// Response of a match query.\n", + "message MatchResponse {\n", + " message Neighbor {\n", + " // The ids of the matches.\n", + " string id = 1;\n", + "\n", + " // The distances of the matches.\n", + " double distance = 2;\n", + " }\n", + " // All its neighbors.\n", + " repeated Neighbor neighbor = 1;\n", + "}\n", + "\n", + "// Parameters for a batch match query.\n", + "message BatchMatchRequest {\n", + " // Batched requests against one index.\n", + " message BatchMatchRequestPerIndex {\n", + " // The ID of the DeploydIndex that will serve the request.\n", + " string deployed_index_id = 1;\n", + "\n", + " // The requests against the index identified by the above deployed_index_id.\n", + " repeated MatchRequest requests = 2;\n", + "\n", + " // Selects the optimal batch size to use for low-level batching. Queries\n", + " // within each low level batch are executed sequentially while low level\n", + " // batches are executed in parallel.\n", + " // This field is optional, defaults to 0 if not set. A non-positive number\n", + " // disables low level batching, i.e. all queries are executed sequentially.\n", + " int32 low_level_batch_size = 3;\n", + " }\n", + "\n", + " // The batch requests grouped by indexes.\n", + " repeated BatchMatchRequestPerIndex requests = 1;\n", + "}\n", + "\n", + "// Response of a batch match query.\n", + "message BatchMatchResponse {\n", + " // Batched responses for one index.\n", + " message BatchMatchResponsePerIndex {\n", + " // The ID of the DeployedIndex that produced the responses.\n", + " string deployed_index_id = 1;\n", + "\n", + " // The match responses produced by the index identified by the above\n", + " // deployed_index_id. This field is set only when the query against that\n", + " // index succeed.\n", + " repeated MatchResponse responses = 2;\n", + "\n", + " // The status of response for the batch query identified by the above\n", + " // deployed_index_id.\n", + " google.rpc.Status status = 3;\n", + " }\n", + "\n", + " // The batched responses grouped by indexes.\n", + " repeated BatchMatchResponsePerIndex responses = 1;\n", + "}\n", + "\n", + "// Namespace specifies the rules for determining the datapoints that are\n", + "// eligible for each matching query, overall query is an AND across namespaces.\n", + "message Namespace {\n", + " // The string name of the namespace that this proto is specifying,\n", + " // such as \"color\", \"shape\", \"geo\", or \"tags\".\n", + " string name = 1;\n", + "\n", + " // The allowed tokens in the namespace.\n", + " repeated string allow_tokens = 2;\n", + "\n", + " // The denied tokens in the namespace.\n", + " // The denied tokens have exactly the same format as the token fields, but\n", + " // represents a negation. When a token is denied, then matches will be\n", + " // excluded whenever the other datapoint has that token.\n", + " //\n", + " // For example, if a query specifies {color: red, blue, !purple}, then that\n", + " // query will match datapoints that are red or blue, but if those points are\n", + " // also purple, then they will be excluded even if they are red/blue.\n", + " repeated string deny_tokens = 3;\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dfh48KLTJkaF" + }, + "source": [ + "Compile the protocol buffer, and then `match_service_pb2.py` and `match_service_pb2_grpc.py` are generated." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EehHF_AeGmQT" + }, + "outputs": [], + "source": [ + "! python -m grpc_tools.protoc -I=. --proto_path=googleapis --python_out=. --grpc_python_out=. match_service.proto" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8wXTSgz1Bl0x" + }, + "source": [ + "Obtain the Private Endpoint: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zwA042IZJv1h" + }, + "outputs": [], + "source": [ + "DEPLOYED_INDEX_SERVER_IP = (\n", + " list(index_endpoint_client.list_index_endpoints(parent=PARENT))[0]\n", + " .deployed_indexes[0]\n", + " .private_endpoints.match_grpc_address\n", + ")\n", + "DEPLOYED_INDEX_SERVER_IP" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IcXa9lSuB9AT" + }, + "source": [ + "Test your query:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zhgTqsI1spsH" + }, + "outputs": [], + "source": [ + "import match_service_pb2\n", + "import match_service_pb2_grpc\n", + "\n", + "channel = grpc.insecure_channel(\"{}:10000\".format(DEPLOYED_INDEX_SERVER_IP))\n", + "stub = match_service_pb2_grpc.MatchServiceStub(channel)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e90efb1d0033" + }, + "source": [ + "### Test the search with a query embedded with Cohere" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d668c496ee48" + }, + "outputs": [], + "source": [ + "raw_query = \"Articles about the climate\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a08e85727060" + }, + "outputs": [], + "source": [ + "query = co.embed(model=\"small\", texts=[raw_query]).embeddings[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "A3KYVw5HB-4v" + }, + "outputs": [], + "source": [ + "# Test query\n", + "request = match_service_pb2.MatchRequest()\n", + "request.deployed_index_id = DEPLOYED_INDEX_ID\n", + "for val in query:\n", + " request.float_val.append(val)\n", + "\n", + "response = stub.Match(request)\n", + "response" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "You can also manually delete resources that you created by running the following code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "index_client.delete_index(name=INDEX_RESOURCE_NAME)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "omj7N9iWv-Tq" + }, + "outputs": [], + "source": [ + "index_endpoint_client.delete_index_endpoint(name=INDEX_ENDPOINT_NAME)" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "cohere_embedding_with_matching_engine.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/community/feature_store/get_started_vertex_feature_store.ipynb b/notebooks/community/feature_store/get_started_vertex_feature_store.ipynb new file mode 100644 index 000000000..26a99c2c1 --- /dev/null +++ b/notebooks/community/feature_store/get_started_vertex_feature_store.ipynb @@ -0,0 +1,1930 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "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": "title:generic,gcp" + }, + "source": [ + "# E2E ML on GCP: Get started with serving from Vertex AI Feature Store\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use Vertex AI for E2E MLOps on Google Cloud in production. This tutorial covers stage 3 : serving: get started with serving from Feature Store." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage2,get_started_vertex_feature_store" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `Vertex AI Feature Store` to train a model and subsequently to serve features when doing online and batch prediction.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Feature Store`\n", + "- `Vertex AI Training`\n", + "- `Vertex AI Prediction`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Creating a Vertex AI `Featurestore` resource.\n", + " - Creating `EntityType` resources for the `Featurestore` resource.\n", + " - Creating `Feature` resources for each `EntityType` resource.\n", + "- Import feature values (entity data items) into `Featurestore` resource.\n", + " - From a Cloud Storage location.\n", + " - From a pandas DataFrame.\n", + "- Perform online prediction from a `Featurestore` resource.\n", + "- Perform batch prediction from a `Featurestore` resource." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:movies,lbn,avro" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used in this notebook consists of order items data since 2018 for an online ecommerce\n", + "store. This dataset is publicly available at `bigquery-public-data.thelook_ecommerce.order_items`\n", + "BigQuery table which can be accessed by pinning the bigquery-public-data project in BigQuery.\n", + "\n", + "The table consists of various fields related to each of the order items like the order_id, product_id,\n", + "user_id, status, and price when it is created when it has been shipped, etc. Among these fields, the\n", + "current notebook makes use of the following fields assuming their purpose is as described below :\n", + "\n", + "* user_id: The Id of the user.\n", + "* product_id: The Id of the product.\n", + "* created_at: When the user has placed the order.\n", + "* status: The status of the order (Shipped, Processing, Cancelled, Returned, and Completed).\n", + "\n", + "The dataset is used to train a Recommender model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81c777b8ad32" + }, + "source": [ + "### Costs\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "- Vertex AI\n", + "- Cloud Storage\n", + "- BigQuery\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage pricing](https://cloud.google.com/storage/pricing) and [BigQuery pricing](https://cloud.google.com/bigquery/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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the following packages to further running this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_mlops" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install the dependecies\n", + "! pip3 install --upgrade google-cloud-aiplatform \\\n", + " google-cloud-bigquery \\\n", + " pyarrow \\\n", + " pandas {USER_FLAG} --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "project_id" + }, + "source": [ + "## Before you begin\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", + "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, Compute Engine, Cloud Storage and Cloud Logging APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,storage_component,logging).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "project_id" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**If you don't know your project ID**, you may be able to get your project ID with `gcloud` command below ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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": "markdown", + "metadata": { + "id": "0ba5d513b682" + }, + "source": [ + "Set the default project ID in current enviornment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_gcloud_project_id" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "29b110b44457" + }, + "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", + "1. **Click Create service account**.\n", + "\n", + "2. In the **Service account name** field, enter a name, and click **Create**.\n", + "\n", + "3. 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", + "4. Click Create. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "5. Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "89788a802687" + }, + "outputs": [], + "source": [ + "# IMPORTANT - If you are using Vertex AI Workbench Notebooks, your environment is already authenticated. Skip this step.\n", + "\n", + "# 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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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 AI 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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 + \"vai-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "342ddaf59298" + }, + "source": [ + "#### Set bucket access for Feature Store" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5103ef1b1aa2" + }, + "outputs": [], + "source": [ + "! gsutil uniformbucketlevelaccess set on {BUCKET_URI}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "source": [ + "### Import libraries and define constants" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_aip:mbsdk" + }, + "outputs": [], + "source": [ + "from datetime import datetime, timedelta\n", + "\n", + "import google.cloud.aiplatform as aiplatform\n", + "import pandas as pd\n", + "from google.cloud import bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "### Initialize Vertex AI and BigQuery clients" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)\n", + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for training and prediction.\n", + "\n", + "\n", + "For the latest list, see [Pre-built containers for training](https://cloud.google.com/ai-platform-unified/docs/training/pre-built-containers).\n", + "\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "container:training,prediction" + }, + "outputs": [], + "source": [ + "TF = \"2.8\".replace(\".\", \"-\")\n", + "TRAIN_VERSION = \"tf-cpu.{}\".format(TF)\n", + "DEPLOY_VERSION = \"tf2-cpu.{}\".format(TF)\n", + "\n", + "TRAIN_IMAGE = \"{}-docker.pkg.dev/vertex-ai/training/{}:latest\".format(\n", + " REGION.split(\"-\")[0], TRAIN_VERSION\n", + ")\n", + "DEPLOY_IMAGE = \"{}-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(\n", + " REGION.split(\"-\")[0], DEPLOY_VERSION\n", + ")\n", + "\n", + "print(\"Training:\", TRAIN_IMAGE)\n", + "print(\"Deployment:\", DEPLOY_IMAGE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training" + }, + "source": [ + "#### Set machine type\n", + "\n", + "Next, set the machine type to use for training.\n", + "\n", + "- Set the variables `TRAIN_COMPUTE`/`DEPLOY_COMPUTE` to configure the compute resources for the VMs you will use for for training and prediction.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU.\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: The following is not supported for training:*\n", + "\n", + " - `standard`: 2 vCPUs\n", + " - `highcpu`: 2, 4 and 8 vCPUs\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "machine:training" + }, + "outputs": [], + "source": [ + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "TRAIN_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", TRAIN_COMPUTE)\n", + "DEPLOY_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Deploy machine type\", DEPLOY_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_intro" + }, + "source": [ + "## Introduction to Vertex AI Feature Store\n", + "\n", + "Let's assume you have a recommendation model that predicts a coupon to print on the back of a cash register receipt. Now, if that model was trained only on single transaction instances (what was bought and how much), then (in the past) you use an Apriori algorithm.\n", + "\n", + "But now we have historical data on the customer (say it's indexed by credit card number). Like total purchases to date, average purchase per transaction, frequency of purchase by product category, etc. We use this \"enriched data\" to train a recommender system.\n", + "\n", + "Now it's time to do a live prediction. You get a transaction from the cash register, but all it has is the credit card number and this transaction. It does not have the enriched data the model needs. During serving, the credit card number is used as an index to Feature Store to get the enriched data needed for the model.\n", + "\n", + "On the other hand, let's say the enriched data the model was trained on was timestamped on June 1st. The current transaction is from June 15th. Assume that the user has made other transactions between June 1st and 15th, and the enriched data has been continuously updated in Feature Store. But the model was trained on June 1st data. Feature Store knows the version number and serves the June 1st version to the model (not the current June 15th). Otherwise, if you used June 15th data, you would have training-serving skew.\n", + "\n", + "Another problem here is the data drift. Things change and suddenly one day, everybody is buying toilet paper! There is a significant change in the distribution of existing enriched data from the distribution that the deployed model was trained on. Feature Store can detect changes/thresholds in distribution changes and trigger a notification for retraining the model.\n", + "\n", + "Learn more about [Vertex AI Feature Store API](https://cloud.google.com/vertex-ai/docs/featurestore)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_datamodel:movies" + }, + "source": [ + "## Vertex AI Feature Store data model\n", + "\n", + "Vertex AI Feature Store organizes data with the following 3 important hierarchical concepts:\n", + "\n", + " Featurestore -> EntityType -> Feature\n", + "\n", + "- `Featurestore`: the place to store your features.\n", + "- `EntityType`: under a `Featurestore`, an `EntityType` describes an object to be modeled, real one or virtual one.\n", + "- `Feature`: under an `EntityType`, a `Feature` describes an attribute of the `EntityType`.\n", + "\n", + "Learn more about [Vertex AI Feature Store data model](https://cloud.google.com/vertex-ai/docs/featurestore/concepts).\n", + "\n", + "In this ecommerce example, you will create a `Featurestore` resource called ecomm_recommendation. This `Featurestore` resource has 2 entity types: \n", + "- `users`: The entity type has the `product_id`, and `rating` features.\n", + "- `products`: The entity type has the `user_list` and `product_name` features." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_create" + }, + "source": [ + "## Create a `Featurestore` resource\n", + "\n", + "First, you create a `Featurestore` for the dataset using the `Featurestore.create()` method, with the following parameters:\n", + "\n", + "- `featurestore_id`: The name of the feature store.\n", + "- `online_store_fixed_node_count`: Configuration settings for online serving from the feature store.\n", + "- `project`: The project ID.\n", + "- `location`: The location (region)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "featurestore_create" + }, + "outputs": [], + "source": [ + "# Represents featurestore resource path.\n", + "FEATURESTORE_NAME = \"ecomm_recommendation\" + UUID\n", + "\n", + "featurestore = aiplatform.Featurestore.create(\n", + " featurestore_id=FEATURESTORE_NAME,\n", + " online_store_fixed_node_count=1,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + ")\n", + "\n", + "print(featurestore)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_get" + }, + "source": [ + "### Get a `Featurestore` resource\n", + "\n", + "You can get a specifed `Featurestore` resource in your project using the `Featurestore()` initializer, with the following parameters:\n", + "\n", + "- `featurestore_name`: The name for the `Featurestore` resource.\n", + "- `project`: The project ID.\n", + "- `location`: The location (region)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "featurestore_get" + }, + "outputs": [], + "source": [ + "featurestore = aiplatform.Featurestore(\n", + " featurestore_name=FEATURESTORE_NAME, project=PROJECT_ID, location=REGION\n", + ")\n", + "print(featurestore)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_create:entity_type" + }, + "source": [ + "## Create entity types for your `Featurestore` resource\n", + "\n", + "Next, you create the `EntityType` resources for your `Featurestore` resource using the `create_entity_type()` method, with the following parameters:\n", + "\n", + "- `entity_type_id`: The name of the `EntityType` resource.\n", + "- `description`: A description of the entity type." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "featurestore_create:entity_type" + }, + "outputs": [], + "source": [ + "for name, description in [\n", + " (\"users\", \"Description of the user\"),\n", + " (\"products\", \"Description of the product\"),\n", + "]:\n", + " entity_type = featurestore.create_entity_type(\n", + " entity_type_id=name, description=description\n", + " )\n", + " print(entity_type)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_create:feature" + }, + "source": [ + "### Add `Feature` resources for your `EntityType` resources\n", + "\n", + "Next, you create the `Feature` resources for each of the `EntityType` resources in your `Featurestore` resource using the `create_feature()` method, with the following parameters:\n", + "\n", + "- `feature_id`: The name of the `Feature` resource.\n", + "- `description`: A description of the feature.\n", + "- `value_type`: The data type for the feature." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "featurestore_create:feature,movies" + }, + "outputs": [], + "source": [ + "def create_features(featurestore_name, entity_name, features):\n", + " entity_type = aiplatform.EntityType(\n", + " entity_type_name=entity_name, featurestore_id=featurestore_name\n", + " )\n", + "\n", + " for feature in features:\n", + " feature = entity_type.create_feature(\n", + " feature_id=feature[0], description=feature[1], value_type=feature[2]\n", + " )\n", + " print(feature)\n", + "\n", + "\n", + "create_features(\n", + " FEATURESTORE_NAME,\n", + " \"users\",\n", + " [\n", + " (\"product_id\", \"product description\", \"INT64\"),\n", + " (\"rating\", \"rating of the product\", \"DOUBLE\"),\n", + " ],\n", + ")\n", + "\n", + "create_features(\n", + " FEATURESTORE_NAME,\n", + " \"products\",\n", + " [\n", + " (\"users_list\", \"List of user ids who bought product\", \"STRING_ARRAY\"),\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "05351390b8ce" + }, + "source": [ + "## Perform feature engineering on the dataset\n", + "\n", + "Next you perform feature engineering on the public BigQuery dataset and then import them into Feature Store.\n", + "\n", + "### Load the BigQuery dataset into a dataframe\n", + "\n", + "* Load the data from BigQuery into a pandas dataFrame.\n", + "* Select the columns to use.\n", + " - user_id\n", + " - product_id\n", + " - created_at\n", + " - status" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6d47e0aa0547" + }, + "outputs": [], + "source": [ + "query_string = \"\"\"\n", + "SELECT\n", + " CAST(user_id AS STRING) AS user_id,\n", + " product_id,\n", + " created_at,\n", + " status\n", + "FROM\n", + " `bigquery-public-data.thelook_ecommerce.order_items`\n", + "\"\"\"\n", + "\n", + "df_bq_table = bqclient.query(query_string).result().to_dataframe()\n", + "\n", + "print(df_bq_table.shape)\n", + "df_bq_table.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "60e6b3f9ea64" + }, + "source": [ + "### Derive a new column ratings\n", + "\n", + "Next, you add a new column for the ratings. Since the ratings are numerical, you derive them from the existing status column, as follows:\n", + "\n", + "- Map the status string values to a numerical range (0..4). \n", + "- Normalize the values between 0 and 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c34184515a49" + }, + "outputs": [], + "source": [ + "# map the status to a rating\n", + "rating_map = {\n", + " \"Cancelled\": 0,\n", + " \"Returned\": 1,\n", + " \"Processing\": 2,\n", + " \"Shipped\": 3,\n", + " \"Complete\": 4,\n", + "}\n", + "\n", + "df_bq_table[\"rating\"] = df_bq_table[\"status\"].map(rating_map)\n", + "print(df_bq_table.head())\n", + "\n", + "# Normalize the ratings\n", + "min_rating = min(df_bq_table[\"rating\"])\n", + "max_rating = max(df_bq_table[\"rating\"])\n", + "\n", + "df_bq_table[\"rating\"] = (\n", + " df_bq_table[\"rating\"]\n", + " .apply(lambda x: (x - min_rating) / (max_rating - min_rating))\n", + " .values\n", + ")\n", + "print(df_bq_table.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3102e6ef28d7" + }, + "source": [ + "### Filter the dataset\n", + "\n", + "Next, filter the dataset to only users who bought products until last week, and then drop the column 'status'." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7709f81a9d82" + }, + "outputs": [], + "source": [ + "PAST_WEEK_DATE = datetime.now() - pd.to_timedelta(\"7day\")\n", + "\n", + "df_filtered = df_bq_table[\n", + " (df_bq_table[\"created_at\"] < PAST_WEEK_DATE.isoformat() + \"Z\")\n", + "].reset_index()\n", + "\n", + "result = df_filtered.groupby([\"product_id\"])[\"user_id\"].apply(list).to_dict()\n", + "\n", + "df_prod_user_list = pd.DataFrame(result.items(), columns=[\"product_id\", \"users_list\"])\n", + "df_prod_user_list[\"product_id\"] = df_prod_user_list[\"product_id\"].astype(\"string\")\n", + "print(df_prod_user_list.head())\n", + "\n", + "df_bq_table.drop(\"status\", axis=1, inplace=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f0706ab43559" + }, + "source": [ + "### Reimport preprocessed data into BigQuery\n", + "\n", + "#### Create destination table for preprocessed data.\n", + "\n", + "Next, you create a BigQuery dataset where you will subsequently add tables for the preprocessed data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ceba9301ca2d" + }, + "outputs": [], + "source": [ + "DESTINATION_DATASET = f\"product_recommendation_{UUID}\"\n", + "\n", + "USERS_SOURCE_TABLE_NAME = \"user_prod_rating_data\"\n", + "USERS_SOURCE_TABLE_URI = (\n", + " f\"bq://{PROJECT_ID}.{DESTINATION_DATASET}.{USERS_SOURCE_TABLE_NAME}\"\n", + ")\n", + "\n", + "PRODUCTS_SOURCE_TABLE_NAME = \"prod_users_list_data\"\n", + "PRODUCTS_SOURCE_TABLE_URI = (\n", + " f\"bq://{PROJECT_ID}.{DESTINATION_DATASET}.{PRODUCTS_SOURCE_TABLE_NAME}\"\n", + ")\n", + "\n", + "# Create destination dataset\n", + "dataset_id = \"{}.{}\".format(PROJECT_ID, DESTINATION_DATASET)\n", + "dataset = bigquery.Dataset(dataset_id)\n", + "dataset.location = REGION\n", + "dataset = bqclient.create_dataset(dataset)\n", + "print(dataset)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1bb6cbbcb472" + }, + "source": [ + "#### Create table for filtered dataset\n", + "\n", + "Next, you create a table and load the filtered dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e4d8f864367a" + }, + "outputs": [], + "source": [ + "# Create a table\n", + "schema = [\n", + " bigquery.SchemaField(\"user_id\", \"STRING\"),\n", + " bigquery.SchemaField(\"product_id\", \"INT64\"),\n", + " bigquery.SchemaField(\"created_at\", \"TIMESTAMP\"),\n", + " bigquery.SchemaField(\"rating\", \"FLOAT\"),\n", + "]\n", + "\n", + "table_id = f\"{PROJECT_ID}.{DESTINATION_DATASET}.{USERS_SOURCE_TABLE_NAME}\"\n", + "table = bigquery.Table(table_id, schema=schema)\n", + "bqclient.create_table(table, exists_ok=True)\n", + "\n", + "\n", + "# Load data to BQ\n", + "job = bqclient.load_table_from_dataframe(df_bq_table, table_id)\n", + "print(job.errors, job.state)\n", + "while job.running():\n", + " from time import sleep\n", + "\n", + " sleep(30)\n", + " print(\"Running ...\")\n", + "print(job.errors, job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d71d1dec847c" + }, + "source": [ + "#### Create table for the products user list.\n", + "\n", + "Create the new table for the products users list table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5b119a73a445" + }, + "outputs": [], + "source": [ + "from time import sleep\n", + "\n", + "# Create a table\n", + "schema = [\n", + " bigquery.SchemaField(\"product_id\", \"STRING\"),\n", + " bigquery.SchemaField(\"users_list\", \"STRING\", \"REPEATED\"),\n", + "]\n", + "table_id = f\"{PROJECT_ID}.{DESTINATION_DATASET}.{PRODUCTS_SOURCE_TABLE_NAME}\"\n", + "table = bigquery.Table(table_id, schema=schema)\n", + "bqclient.create_table(table, exists_ok=True)\n", + "\n", + "# Load data to BQ\n", + "job = bqclient.load_table_from_dataframe(df_prod_user_list, table_id)\n", + "print(job.errors, job.state)\n", + "while job.running():\n", + " sleep(30)\n", + " print(\"Running ...\")\n", + "print(job.errors, job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_import:movies,avro" + }, + "source": [ + "## Import the feature data into your `Featurestore` resource\n", + "\n", + "Next, you import the feature data for your `Featurestore` resource. Once imported, you can use these feature values for online and offline (batch) serving.\n", + "\n", + "### Data layout\n", + "\n", + "Each imported `EntityType` resource data must have an ID. Also, each `EntityType` resource data item can optionally have a timestamp, specifying when the feature values were generated.\n", + "\n", + "When importing, specify the following in your request:\n", + "\n", + "- Data source format: BigQuery Table/Avro/CSV/Pandas Dataframe\n", + "- Data source URL\n", + "- Destination: featurestore/entity types/features to be imported\n", + "\n", + "In this tutorial, the schema is:\n", + "\n", + " For the Users entity:\n", + " schema = {\n", + " \"name\": \"users\",\n", + " \"fields\": [\n", + " {\n", + " \"name\":\"product_id\",\n", + " \"type\":[\"null\",\"integer\"]\n", + " },\n", + " {\n", + " \"name\":\"rating\",\n", + " \"type\":[\"null\",\"double\"]\n", + " },\n", + " ]\n", + " }\n", + " \n", + " For the Products entity:\n", + " schema = {\n", + " \"name\": \"products\",\n", + " \"fields\": [\n", + " {\n", + " \"name\":\"users_list\",\n", + " \"type\":[\"null\",\"string_array\"]\n", + " }\n", + " ]\n", + " }\n", + "\n", + "\n", + "### Importing the feature values from BigQuery\n", + "\n", + "You import the feature values for the `EntityType` resources using the `ingest_from_bq()` method, with the following parameters:\n", + "\n", + "- `entity_id_field`: The identifier name for the parent `EntityType` resource.\n", + "- `feature_ids`: A list of identifier names for `Feature` resources' data to add to the `EntityType` resource.\n", + "- `feature_time`: The field corresponding to the timestamp for the features being entered.\n", + "- `bq_source_uri`: The BigQuery table to import data from" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "featurestore_import:movies,avro" + }, + "outputs": [], + "source": [ + "entity_type = featurestore.get_entity_type(\"users\")\n", + "response = entity_type.ingest_from_bq(\n", + " entity_id_field=\"user_id\",\n", + " feature_ids=[\"product_id\", \"rating\"],\n", + " feature_time=\"created_at\",\n", + " bq_source_uri=f\"bq://{PROJECT_ID}.{DESTINATION_DATASET}.{USERS_SOURCE_TABLE_NAME}\",\n", + ")\n", + "print(response)\n", + "\n", + "\n", + "def past_6days():\n", + " return datetime.now() - timedelta(days=6)\n", + "\n", + "\n", + "entity_type = featurestore.get_entity_type(\"products\")\n", + "response = entity_type.ingest_from_bq(\n", + " entity_id_field=\"product_id\",\n", + " feature_ids=[\"users_list\"],\n", + " feature_time=past_6days(),\n", + " bq_source_uri=f\"bq://{PROJECT_ID}.{DESTINATION_DATASET}.{PRODUCTS_SOURCE_TABLE_NAME}\",\n", + ")\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_serving" + }, + "source": [ + "## Vertex AI Feature Store serving\n", + "\n", + "The Vertex AI Feature Store service provides the following two services for serving features from a `Featurestore` resource:\n", + "\n", + "- Online serving - low-latency serving of small batches of features (prediction).\n", + "\n", + "- Batch serving - high-throughput serving of large batches of features (training and prediction)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_serving:batch" + }, + "source": [ + "## Batch Serving\n", + "\n", + "The Vertex AI Feature Store's batch serving service is optimized for serving large batches of features in real-time with high throughput, typically for training a model or batch prediction.\n", + "\n", + "One can batch serve to the following destinations:\n", + "\n", + "- BigQuery table\n", + "- Cloud Storage location\n", + "- Dataframe" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_serving:batch,output,movies" + }, + "source": [ + "### Output dataset\n", + "\n", + "In this notebook, you train a model using data from your feature store in CSV format from Google Cloud Storage\n", + "\n", + "### Use case\n", + "\n", + "**The task** is to prepare a dataset to train a model, which recommends products for a given user. To achieve this, you need 2 sets of input:\n", + "\n", + "* Features: you already imported into the feature store.\n", + "* Labels: the ground-truth data recorded that is rating.\n", + "\n", + "To be more specific, the ground-truth observation is described in Table 1 and the desired dataset is described in Table 2. Each row in Table 2 is a result of joining the imported feature values from Vertex AI Feature Store according to the entity IDs and timestamps in Table 1. In this example, the `product_id` and `rating` features from `users` are chosen to batch train. \n", + "\n", + "batch_serve_to_df method takes Table 1 as\n", + "input for read_instances_df argument joins all required feature values from the feature store, and returns Table 2 for training.\n", + "\n", + "

Table 1. Ground-truth Data

\n", + "\n", + "users | timestamp \n", + "----- | -------------------- \n", + "87228 | 2022-07-01T00:00:00Z \n", + "16173 | 2022-07-01T18:09:43Z \n", + "... | ... | ... \n", + "\n", + "\n", + "

Table 2. Expected Training Data Generated by batch_serve_to_df (Positive Samples)

\n", + "\n", + "feature_timestamp | entity_type_users | product_id | rating |\n", + "-------------------- | ----------------- | --------------- | ---------------- |\n", + "2022-07-01T00:00:00Z | 87228 | 4567 | 0.5 |\n", + "2022-07-01T00:00:00Z | 16173 | 5490 | 0.75 |\n", + "... | ... | ... | ... | ... \n", + "\n", + "#### Why timestamp?\n", + "\n", + "Note that there is a `timestamp` column in Table 2. This indicates the time when the ground-truth was observed. This is to avoid data inconsistency.\n", + "\n", + "For example, the 1st row of Table 2 indicates that id `87228` brought product on `2022-07-01T00:00:00Z`. The feature store keeps feature values for all timestamps but fetches feature values *only* at the given timestamp during batch serving.\n", + "\n", + "### Batch Serve To DataFrame\n", + "\n", + "Assemble the request which specifies the following info:\n", + "\n", + "* Where is the label data, i.e., Table 1.\n", + "* Which features are read, i.e., the column names in Table 1.\n", + "\n", + "Next, you get the dataframe from the feature store using batch_serve_to_df and store it into a csv file that will be used for training the recommender model in Vertex AI.\n", + "\n", + "* Export the entityType Id (`users`) and `timestamp` columns as csv into the created GCS bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lwNAh1Ysifal" + }, + "outputs": [], + "source": [ + "from datetime import timezone\n", + "\n", + "past_week_date = (datetime.now() - pd.to_timedelta(\"7day\")).isoformat() + \"Z\"\n", + "df_sorted = df_bq_table.sort_values(\"created_at\", ascending=False, ignore_index=True)\n", + "df_sorted.rename(columns={\"user_id\": \"users\"}, inplace=True)\n", + "df_sorted = df_sorted[df_sorted[\"created_at\"] <= past_week_date].reset_index()\n", + "df_sorted[\"created_at\"] = df_sorted[\"created_at\"].astype(str)\n", + "df_sorted[\"timestamp\"] = df_sorted[\"created_at\"].map(\n", + " lambda x: datetime.fromisoformat(x).astimezone(timezone.utc)\n", + ")\n", + "df_batch = df_sorted[[\"users\", \"timestamp\"]]\n", + "\n", + "df_batch.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_serving:batch,read,movies" + }, + "source": [ + "### Batch Read Feature Values\n", + "\n", + " You batch serve entity data items to a dataframe using the `batch_serve_to_df` method with the following parameters:\n", + "\n", + "- `serving_feature_ids`: A dictionary of entity type and corresponding features to serve.\n", + "- `read_instances_uri`: A Cloud Storage location to read the entity data items from.\n", + "\n", + "The output is stored in a BigQuery table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "featurestore_serving:batch,read,movies" + }, + "outputs": [], + "source": [ + "batch_serve = featurestore.batch_serve_to_df(\n", + " serving_feature_ids={\"users\": [\"product_id\", \"rating\"]}, read_instances_df=df_batch\n", + ")\n", + "\n", + "batch_serve.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f07844d4f372" + }, + "source": [ + "### Export dataframe data to CSV\n", + "\n", + "Next, you export the dataframe data to a CSV file in Cloud Storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4853bcf78d19" + }, + "outputs": [], + "source": [ + "CSV_FILE = f\"{BUCKET_URI}/data.csv\"\n", + "\n", + "batch_serve.to_csv(CSV_FILE, index=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "11a04964fcba" + }, + "source": [ + "## Train a recommender model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TGBVQPxSifan" + }, + "source": [ + "In this section, you train a custom model for recommending products for a given user with data from the `batch_serve_to_df` method.\n", + "\n", + "You create a custom trained model from a Python script in a Docker container using the Vertex AI SDK for Python, and then get a prediction from the deployed model by sending data.\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train a Vertex AI custom `TrainingPipeline` to train a TensorFlow model.\n", + "- Deploy the `Model` resource to a serving `Endpoint` resource.\n", + "- Make a prediction.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zLruf4blifao" + }, + "source": [ + "### Train a model\n", + "\n", + "There are two ways you can train a model using a container image:\n", + "\n", + "- **Use a Vertex AI pre-built container**. If you use a pre-built training container, you must additionally specify a Python package to install into the container image. This Python package contains your training code.\n", + "\n", + "- **Use your own custom container image**. If you use your own container, the container image must contain your training code." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "s-l9xyOXifao" + }, + "source": [ + "### Define the command args for the training script\n", + "\n", + "Prepare the command-line arguments to pass to your training script.\n", + "- `args`: The command line arguments to pass to the corresponding Python module. In this example, they are:\n", + " - `\"--epochs=\" + EPOCHS`: The number of epochs for training.\n", + " - `\"--batch_size=\" + BATCH_SIZE`: The batch size for training.\n", + " - `\"--training_data=\" + GCS_PATH`: The path to the csv with training data from feature store." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4Ebg4UFWifap" + }, + "outputs": [], + "source": [ + "EPOCHS = 20\n", + "BATCH_SIZE = 10\n", + "\n", + "CMDARGS = [\n", + " \"--epochs=\" + str(EPOCHS),\n", + " \"--batch_size=\" + str(BATCH_SIZE),\n", + " \"--training_data=\" + CSV_FILE,\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CKAkzoDjifap" + }, + "source": [ + "#### Training script\n", + "\n", + "Next, you write the contents of the training script, `task.py`. In summary, the script does the following:\n", + "\n", + "- Loads the csv data from Google Cloud Storage.\n", + "- Builds a model using TF.Keras model API.\n", + "- Compiles the model (`compile()`).\n", + "- Trains the model (`fit()`) with epochs and batch size according to the arguments `args.epochs` and `args.batch_size`\n", + "- Gets the directory where to save the model artifacts from the environment variable `AIP_MODEL_DIR`. This variable is [set by the training service](https://cloud.google.com/vertex-ai/docs/training/code-requirements#environment-variables).\n", + "- Saves the trained model to the model directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GXPR1CVgifap" + }, + "outputs": [], + "source": [ + "%%writefile task.py\n", + "\n", + "import argparse\n", + "import tensorflow as tf\n", + "import numpy as np\n", + "import os\n", + "\n", + "import pandas as pd\n", + "\n", + "\n", + "# Read args\n", + "parser = argparse.ArgumentParser()\n", + "parser.add_argument('--epochs', dest='epochs',\n", + " default=10, type=int,\n", + " help='Number of epochs.')\n", + "parser.add_argument('--batch_size', dest='batch_size',\n", + " default=10, type=int,\n", + " help='Batch size.')\n", + "parser.add_argument('--training_data', dest='training_data', type=str,\n", + " help=\"URI of the training data in BQ\")\n", + "\n", + "args = parser.parse_args()\n", + "\n", + "\n", + "# Collect the arguments\n", + "training_data_uri = args.training_data\n", + "\n", + "# Set up training variables\n", + "LABEL_COLUMN = \"rating\"\n", + "UNUSED_COLUMNS = [\"timestamp\",\"entity_type_users\",\"product_id\"]\n", + "NA_VALUES = [\"NA\", \".\", \" \", \"\", \"null\", \"NaN\"]\n", + "\n", + "# # Possible categorical values\n", + "RATING = [0,1,2,3,4]\n", + "\n", + "df_train = pd.read_csv(training_data_uri)\n", + "\n", + "# Remove NA values\n", + "def clean_dataframe(df):\n", + " return df.replace(to_replace=NA_VALUES, value=np.NaN).dropna()\n", + "\n", + "df_train = clean_dataframe(df_train)\n", + "\n", + "user_ids = df_train[\"entity_type_users\"].unique().tolist()\n", + "user2user_encoded = {x: i for i, x in enumerate(user_ids)}\n", + "\n", + "product_ids = df_train[\"product_id\"].unique().tolist()\n", + "product2product_encoded = {x: i for i, x in enumerate(product_ids)}\n", + "\n", + "df_train[\"user\"] = df_train[\"entity_type_users\"].map(user2user_encoded)\n", + "df_train[\"product\"] = df_train[\"product_id\"].map(product2product_encoded)\n", + "NUM_USERS = len(user2user_encoded)\n", + "NUM_PRODUCTS = len(product2product_encoded)\n", + "\n", + "\n", + "def convert_dataframe_to_dataset(\n", + " df_train,\n", + "):\n", + " NUMERIC_COLUMNS = [\"entity_type_users\",\"product_id\",\"rating\"]\n", + " df_train[NUMERIC_COLUMNS] = df_train[NUMERIC_COLUMNS].astype(\"float32\")\n", + " df_train = df_train.drop(columns=UNUSED_COLUMNS)\n", + "\n", + " df_train_x, df_train_y = df_train, df_train.pop(LABEL_COLUMN)\n", + "\n", + " y_train = np.asarray(df_train_y).astype(\"float32\")\n", + "\n", + " # Convert to numpy representation\n", + " x_train = np.asarray(df_train_x)\n", + "\n", + " dataset_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))\n", + " return dataset_train\n", + "\n", + "# Create datasets\n", + "dataset_train = convert_dataframe_to_dataset(df_train)\n", + "\n", + "# Shuffle train set\n", + "dataset_train = dataset_train.shuffle(len(df_train))\n", + "\n", + "EMBEDDING_SIZE = 50\n", + "class RecommenderNet(tf.keras.Model):\n", + " def __init__(self, num_users, num_products, embedding_size, **kwargs):\n", + " super(RecommenderNet, self).__init__(**kwargs)\n", + " self.num_users = num_users\n", + " self.num_products = num_products\n", + " self.embedding_size = embedding_size\n", + " self.user_embedding = tf.keras.layers.Embedding(\n", + " num_users,\n", + " embedding_size,\n", + " embeddings_initializer=\"he_normal\",\n", + " embeddings_regularizer=tf.keras.regularizers.l2(1e-6),\n", + " )\n", + " self.user_bias = tf.keras.layers.Embedding(num_users, 1)\n", + " self.product_embedding = tf.keras.layers.Embedding(\n", + " num_products,\n", + " embedding_size,\n", + " embeddings_initializer=\"he_normal\",\n", + " embeddings_regularizer=tf.keras.regularizers.l2(1e-6),\n", + " )\n", + " self.product_bias = tf.keras.layers.Embedding(num_products, 1)\n", + "\n", + " def call(self, inputs):\n", + " user_vector = self.user_embedding(inputs[:, 0])\n", + " user_bias = self.user_bias(inputs[:, 0])\n", + " product_vector = self.product_embedding(inputs[:, 1])\n", + " product_bias = self.product_bias(inputs[:, 1])\n", + " dot_user_product = tf.tensordot(user_vector, product_vector, 2)\n", + " # Add all the components (including bias)\n", + " x = dot_user_product + user_bias + product_bias\n", + " # The sigmoid activation forces the rating to between 0 and 1\n", + " return tf.nn.sigmoid(x)\n", + "\n", + "def create_model(num_users,num_products):\n", + " # Create model\n", + " model = RecommenderNet(num_users, num_products, EMBEDDING_SIZE)\n", + " model.compile(\n", + " loss=tf.keras.losses.BinaryCrossentropy(),\n", + " optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),\n", + " )\n", + " return model\n", + "\n", + "\n", + "model = create_model(num_users=NUM_USERS,num_products=NUM_PRODUCTS)\n", + "\n", + "dataset_train = dataset_train.batch(args.batch_size)\n", + "\n", + "# Train the model\n", + "model.fit(dataset_train, epochs=args.epochs)\n", + "\n", + "tf.saved_model.save(model, os.getenv(\"AIP_MODEL_DIR\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GZJ0ic_oifaq" + }, + "source": [ + "### Train the model\n", + "\n", + "Use the `CustomTrainingJob` class to define the `TrainingPipeline`. The class takes the following parameters:\n", + "\n", + "- `display_name`: The user-defined name of this training pipeline.\n", + "- `script_path`: The local path to the training script.\n", + "- `container_uri`: The URI of the training container image.\n", + "- `requirements`: The list of Python package dependencies of the script.\n", + "- `model_serving_container_image_uri`: The URI of a container that can serve predictions for your model — either a pre-built container or a custom container.\n", + "\n", + "Use the `run` function to start training. The function takes the following parameters:\n", + "\n", + "- `args`: The command line arguments to be passed to the Python script.\n", + "- `replica_count`: The number of worker replicas.\n", + "- `model_display_name`: The display name of the `Model` if the script produces a managed `Model`.\n", + "- `machine_type`: The type of machine to use for training.\n", + "- `accelerator_type`: The hardware accelerator type.\n", + "- `accelerator_count`: The number of accelerators to attach to a worker replica.\n", + "\n", + "The `run` function creates a training pipeline that trains and creates a `Model` object. After the training pipeline completes, the `run` function returns the `Model` object." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mxGdxjxkifaq" + }, + "outputs": [], + "source": [ + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", + "DEPLOYED_NAME = f\"product-recommender-{UUID}-{TIMESTAMP}\"\n", + "\n", + "job = aiplatform.CustomTrainingJob(\n", + " display_name=DEPLOYED_NAME,\n", + " script_path=\"task.py\",\n", + " container_uri=TRAIN_IMAGE,\n", + " requirements=[\"google-cloud-bigquery>=2.20.0\", \"db-dtypes\"],\n", + " model_serving_container_image_uri=DEPLOY_IMAGE,\n", + ")\n", + "\n", + "# Start the training\n", + "model = job.run(\n", + " model_display_name=DEPLOYED_NAME,\n", + " args=CMDARGS,\n", + " replica_count=1,\n", + " machine_type=TRAIN_COMPUTE,\n", + " accelerator_count=0,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "090a3916e770" + }, + "source": [ + "### Deploy the model\n", + "\n", + "Next, you deploy the trained model to an `Endpoint`. You can do this by calling the `deploy` function on the `Model` resource. This will do two things:\n", + "\n", + "1. Create an `Endpoint` resource for deploying the `Model` resource.\n", + "2. Deploy the `Model` resource to the `Endpoint` resource.\n", + "\n", + "\n", + "The function takes the following parameters:\n", + "\n", + "- `deployed_model_display_name`: A human-readable name for the deployed model.\n", + "- `traffic_split`: Percent of traffic at the endpoint that goes to this model, which is specified as a dictionary of one or more key/value pairs.\n", + " - If only one model, then specify `{ \"0\": 100 }`, where \"0\" refers to this model being uploaded and 100 means 100% of the traffic.\n", + " - If there are existing models on the endpoint, for which the traffic will be split, then use `model_id` to specify `{ \"0\": percent, model_id: percent, ... }`, where `model_id` is the ID of an existing `DeployedModel` on the endpoint. The percentages must add up to 100.\n", + "- `machine_type`: The type of machine to use for training.\n", + "- `accelerator_type`: The hardware accelerator type.\n", + "- `accelerator_count`: The number of accelerators to attach to a worker replica.\n", + "- `starting_replica_count`: The number of compute instances to initially provision.\n", + "- `max_replica_count`: The maximum number of compute instances to scale to. In this tutorial, only one instance is provisioned.\n", + "\n", + "#### Traffic split\n", + "\n", + "The `traffic_split` parameter is specified as a Python dictionary. You can deploy more than one instance of your model to an endpoint, and then set the percentage of traffic that goes to each instance.\n", + "\n", + "You can use a traffic split to introduce a new model gradually into production. For example, if you had one existing model in production with 100% of the traffic, you could deploy a new model to the same endpoint, direct 10% of traffic to it, and reduce the original model's traffic to 90%. This allows you to monitor the new model's performance while minimizing the disruption to the majority of users.\n", + "\n", + "#### Compute instance scaling\n", + "\n", + "You can specify a single instance (or node) to serve your online prediction requests. This tutorial uses a single node, so the variables `MIN_NODES` and `MAX_NODES` are both set to `1`.\n", + "\n", + "If you want to use multiple nodes to serve your online prediction requests, set `MAX_NODES` to the maximum number of nodes you want to use. Vertex AI auto-scales the number of nodes used to serve your predictions, up to the maximum number you set. Refer to the [pricing page](https://cloud.google.com/vertex-ai/pricing#prediction-prices) to understand the costs of autoscaling with multiple nodes.\n", + "\n", + "#### Endpoint\n", + "\n", + "The method will block until the model is deployed and eventually return an `Endpoint` object. If this is the first time a model is deployed to the endpoint, it may take a few additional minutes to complete the provisioning of resources." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e5d1a523a28f" + }, + "outputs": [], + "source": [ + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", + "DEPLOYED_NAME = f\"product-recommender-{UUID}-{TIMESTAMP}\"\n", + "\n", + "TRAFFIC_SPLIT = {\"0\": 100}\n", + "\n", + "MIN_NODES = 1\n", + "MAX_NODES = 1\n", + "\n", + "endpoint = model.deploy(\n", + " deployed_model_display_name=DEPLOYED_NAME,\n", + " traffic_split=TRAFFIC_SPLIT,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "90afa6cebc21" + }, + "source": [ + "## Make a prediction\n", + "Finally, you make a online prediction to your recommender model that was deployed to an endpoint." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9f156d4f16ec" + }, + "source": [ + "### Prepare the test item\n", + "You use a test item from the test slice of the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7466f7676f8c" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "# Set up training variables\n", + "LABEL_COLUMN = \"rating\"\n", + "UNUSED_COLUMNS = [\"timestamp\", \"entity_type_users\", \"product_id\"]\n", + "NA_VALUES = [\"NA\", \".\", \" \", \"\", \"null\", \"NaN\"]\n", + "\n", + "# # Possible categorical values\n", + "RATING = [0, 1, 2, 3, 4]\n", + "\n", + "df_test = pd.read_csv(CSV_FILE)\n", + "\n", + "\n", + "# Remove NA values\n", + "def clean_dataframe(df):\n", + " return df.replace(to_replace=NA_VALUES, value=np.NaN).dropna()\n", + "\n", + "\n", + "df_test = clean_dataframe(df_test)\n", + "\n", + "user_ids = df_test[\"entity_type_users\"].unique().tolist()\n", + "user2user_encoded = {x: i for i, x in enumerate(user_ids)}\n", + "product_ids = df_test[\"product_id\"].unique().tolist()\n", + "product_encoded2product = {i: x for i, x in enumerate(product_ids)}\n", + "product2product_encoded = {x: i for i, x in enumerate(product_ids)}\n", + "\n", + "df_test[\"user\"] = df_test[\"entity_type_users\"].map(user2user_encoded)\n", + "df_test[\"product\"] = df_test[\"product_id\"].map(product2product_encoded)\n", + "\n", + "sample = df_test.sample(1)\n", + "user_id = sample[\"user\"].values[0]\n", + "products_bought = sample[\"product\"].to_list()\n", + "products_not_bought = (\n", + " df_test[~df_test[\"product\"].isin(products_bought)][\"product\"].unique().tolist()\n", + ")\n", + "\n", + "instances_input = [[float(user_id), k] for k in products_not_bought]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9ab821131e70" + }, + "source": [ + "### Send the prediction request\n", + "Next, you make the prediction request." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ccc139e500f2" + }, + "outputs": [], + "source": [ + "prediction = endpoint.predict(instances=instances_input)\n", + "print(prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bb9625a4b323" + }, + "source": [ + "### Getting Top 10 products recommendation\n", + "Based upon the ratings predicted by recommendation model, We selected top 10 products for the selected `user_id`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "532ed9990a40" + }, + "outputs": [], + "source": [ + "predictions_array = np.array(\n", + " [prediction.predictions[k][0] for k in range(len(prediction.predictions))]\n", + ")\n", + "top_rating_indices = predictions_array.argsort()[-10:][::-1]\n", + "top_predictions = predictions_array[top_rating_indices]\n", + "top_10_products = [\n", + " int(product_encoded2product.get(instances_input[k][1])) for k in top_rating_indices\n", + "]\n", + "print(top_10_products)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "delete_bq_dataset" + }, + "source": [ + "## Cleaning up\n", + "### Delete the BigQuery dataset\n", + "\n", + "Use the method `delete_dataset()` to delete a BigQuery dataset along with all its tables, by setting the parameter `delete_contents` to `True`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "delete_bq_dataset" + }, + "outputs": [], + "source": [ + "DESTINATION_DATASET = f\"product_recommendation_{UUID}\"\n", + "dataset_id = \"{}.{}\".format(PROJECT_ID, DESTINATION_DATASET)\n", + "dataset = bigquery.Dataset(dataset_id)\n", + "bqclient.delete_dataset(dataset, delete_contents=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "featurestore_delete" + }, + "source": [ + "### Delete a `Featurestore` resource\n", + "\n", + "You can get a delete a specified `Featurestore` resource using the `delete()` method, with the following parameter:\n", + "\n", + "- `force`: A flag indicating whether to delete a non-empy `Featurestore` resource." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "featurestore_delete" + }, + "outputs": [], + "source": [ + "featurestore.delete(force=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "04d0a00fb30c" + }, + "source": [ + "### Delete the Vertex AI `Model` and `Endpoint`\n", + "\n", + "Next, undelpoy and delete the Vertex AI Model and Endpoint resource." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "342bff50ac09" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()\n", + "endpoint.delete()\n", + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "473a3ebd9014" + }, + "source": [ + "### Delete Google Cloud Bucket Bucket\n", + "Finally, you delete the Google Cloud Bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7207f0612a0c" + }, + "outputs": [], + "source": [ + "! gsutil -m rm -r $BUCKET_URI\n", + "! gsutil rb $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_vertex_feature_store.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/community/matching_engine/matching_engine_for_indexing.ipynb b/notebooks/community/matching_engine/matching_engine_for_indexing.ipynb index 612430426..e515a301c 100644 --- a/notebooks/community/matching_engine/matching_engine_for_indexing.ipynb +++ b/notebooks/community/matching_engine/matching_engine_for_indexing.ipynb @@ -8,7 +8,7 @@ }, "outputs": [], "source": [ - "# Copyright 2021 Google LLC\n", + "# 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", @@ -24,6 +24,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "JAPoU8Sm5E6e" @@ -32,20 +33,28 @@ "\n", "\n", " \n", " \n", + " \n", "
\n", - " \n", - " Run in Google Cloud Notebooks\n", + " \n", + " \"Colab\n", + " Run in Colab\n", " \n", " \n", - " \n", + " \n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "tvgnzT1CKxrO" @@ -53,25 +62,49 @@ "source": [ "## Overview\n", "\n", - "This example demonstrates how to use the GCP ANN Service. It is a high scale, low latency solution, to find similar vectors (or more specifically \"embeddings\") for a large corpus. Moreover, it is a fully managed offering, further reducing operational overhead. It is built upon [Approximate Nearest Neighbor (ANN) technology](https://ai.googleblog.com/2020/07/announcing-scann-efficient-vector.html) developed by Google Research.\n", - "\n", - "### Dataset\n", - "\n", - "The dataset used for this tutorial is the [GloVe dataset](https://nlp.stanford.edu/projects/glove/).\n", - "\n", + "This example demonstrates how to use Vertex AI Matching Engine. It is a high scale, low latency solution, to find similar vectors (or more specifically \"embeddings\") for a large corpus. Moreover, it is a fully managed offering, further reducing operational overhead. It is built upon [Approximate Nearest Neighbor (ANN) technology](https://ai.googleblog.com/2020/07/announcing-scann-efficient-vector.html) developed by Google Research." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "56e5f9699c6c" + }, + "source": [ "### Objective\n", "\n", "In this notebook, you will learn how to create Approximate Nearest Neighbor (ANN) Index, query against indexes, and validate the performance of the index. \n", "\n", "The steps performed include:\n", "\n", - "* Create ANN Index and Brute Force Index\n", + "* Create a Vertex AI Matching Engine Index and Brute Force Index\n", "* Create an IndexEndpoint with VPC Network\n", - "* Deploy ANN Index and Brute Force Index\n", - "* Perform online query\n", - "* Compute recall\n", - "\n", + "* Deploy a Vertex AI Matching Engine Index and Brute Force Index\n", + "* Perform online queries\n", + "* Submit batch queries\n", + "* Compute recall metric" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "0aaef374550b" + }, + "source": [ + "### Dataset\n", "\n", + "The dataset used for this tutorial is the [GloVe dataset](https://nlp.stanford.edu/projects/glove/)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "5e2eba58ad71" + }, + "source": [ "### Costs \n", "\n", "This tutorial uses billable components of Google Cloud:\n", @@ -87,6 +120,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "S5zc4kbEiYCm" @@ -94,79 +128,47 @@ "source": [ "## Before you begin\n", "\n", - "* **Prepare a VPC network**. To reduce any network overhead that might lead to unnecessary increase in overhead latency, it is best to call the ANN endpoints from your VPC via a direct [VPC Peering](https://cloud.google.com/vertex-ai/docs/general/vpc-peering) connection. The following section describes how to setup a VPC Peering connection if you don't have one. This is a one-time initial setup task. You can also reuse existing VPC network and skip this section.\n", - "* **WARNING:** The match service gRPC API (to create online queries against your deployed index) has to be executed in a Google Cloud Notebook instance that is created with the following requirements:\n", - " * **In the same region as where your ANN service is deployed** (for example, if you set `REGION = \"us-central1\"` as same as the tutorial, the notebook instance has to be in `us-central1`).\n", - " * **Make sure you select the VPC network you created for ANN service** (instead of using the \"default\" one). That is, you will have to create the VPC network below and then create a new notebook instance that uses that VPC. \n", - " * If you run it in the colab or a Google Cloud Notebook instance in a different VPC network or region, the gRPC API will fail to peer the network (InactiveRPCError)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "lW2LneA5mmmP" - }, - "outputs": [], - "source": [ - "PROJECT_ID = \"\" # @param {type:\"string\"}\n", - "NETWORK_NAME = \"ucaip-haystack-vpc-network\" # @param {type:\"string\"}\n", - "PEERING_RANGE_NAME = \"ucaip-haystack-range\"\n", + "### Set up your Google Cloud project\n", "\n", - "# Create a VPC network\n", - "! gcloud compute networks create {NETWORK_NAME} --bgp-routing-mode=regional --subnet-mode=auto --project={PROJECT_ID}\n", + "**The following steps are required, regardless of your notebook environment.**\n", "\n", - "# Add necessary firewall rules\n", - "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-icmp --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow icmp\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", - "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-internal --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow all --source-ranges 10.128.0.0/9\n", + "2. [Make sure that billing is enabled for your project](https://cloud.google.com/billing/docs/how-to/modify-project).\n", "\n", - "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-rdp --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow tcp:3389\n", + "3. [Enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", "\n", - "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-ssh --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow tcp:22\n", - "\n", - "# Reserve IP range\n", - "! gcloud compute addresses create {PEERING_RANGE_NAME} --global --prefix-length=16 --network={NETWORK_NAME} --purpose=VPC_PEERING --project={PROJECT_ID} --description=\"peering range for uCAIP Haystack.\"\n", - "\n", - "# Set up peering with service networking\n", - "! gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --network={NETWORK_NAME} --ranges={PEERING_RANGE_NAME} --project={PROJECT_ID}" + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "d3uj8x73nDX_" - }, - "source": [ - "* Authentication: `$ gcloud auth login` rerun this in Google Cloud Notebook terminal when you are logged out and need the credential again." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "i7EUnXsZhAGF" + "id": "4700b0e39c5d" }, "source": [ "### Installation\n", "\n", - "Download and install the latest (preview) version of the Vertex SDK for Python." + "Download and install the latest version of the Vertex AI SDK for Python." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "wyy5Lbnzg5fi" + "id": "014470c6a8de" }, "outputs": [], "source": [ - "! pip install -U git+https://github.com/googleapis/python-aiplatform.git@main-test --user" + "! pip install -U git+https://github.com/googleapis/python-aiplatform.git@main --user" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "irSMQn6gZ19l" + "id": "cf00462144f7" }, "source": [ "Install the `h5py` to prepare sample dataset, and the `grpcio-tools` for querying against the index. " @@ -176,11 +178,15 @@ "cell_type": "code", "execution_count": null, "metadata": { - "id": "-h5sqwOEZ5Yq" + "id": "3f3e45e5a1d1" }, "outputs": [], "source": [ - "! pip install -U grpcio-tools --user\n", + "! pip install protobuf==3.20.*\n", + "! pip install -U google-api-python-client==1.8.0 --user\n", + "! pip install -U grpcio-tools==1.47.0 --user\n", + "! pip install -U grpcio==1.47.0 --user\n", + "! pip install -U grpcio-status==1.47.0 --user\n", "! pip install -U h5py --user" ] }, @@ -199,7 +205,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "id": "EzrelQZ22IZj" + "id": "aa1d87bdc90b" }, "outputs": [], "source": [ @@ -215,79 +221,216 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "BF1j6f9HApxa" + "id": "249da91c1011" }, "source": [ - "### Set up your Google Cloud project\n", + "### Set your project ID\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).\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, and Service Networking API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,servicenetworking.googleapis.com).\n", - "\n", - "1. 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 `$` into these commands." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WReHDGG5g0XY" - }, - "source": [ - "#### 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)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "oM1iC_MfAts1" + "id": "10e0d2ee8c45" }, "outputs": [], "source": [ - "import os\n", + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", "\n", - "PROJECT_ID = \"\"\n", - "\n", - "# Get your Google Cloud project ID from gcloud\n", - "if not os.getenv(\"IS_TESTING\"):\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)" + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "qJYoRfYng0XZ" + "id": "3fbfae3ff12a" }, "source": [ - "Otherwise, set your project ID here." + "### Set the region\n", + "\n", + "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).\n", + "* **WARNING:** \n", + " * **Make sure to [choose a region where Vertex AI services are available](https://cloud.google.com/vertex-ai/docs/general/locations#available_regions).**\n", + " * **If you use Vertex Workbench, the Notebook instance needs to be in the same region where your Vertex AI Matching Engine is deployed.** (for example, if you set `REGION = \"us-central1\"` as same as the tutorial, the notebook instance has to be in `us-central1`)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "riG_qUokg0XZ" + "id": "71c3fd82024e" }, "outputs": [], "source": [ - "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", - " PROJECT_ID = \"\" # @param {type:\"string\"}" + "REGION = \"us-central1\" # @param {type: \"string\"}\n", + "\n", + "# Set the regions\n", + "! gcloud config set ai_platform/region {REGION}" ] }, { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "60c5a0f69ad8" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "d118c95af93f" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "3035286fcdda" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "455882ec0f11" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "5097f3233d53" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b88e46ac2c8" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "fcdbb8929927" + }, + "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." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "7c6eef70dfdb" + }, + "source": [ + "### Prepare a VPC network\n", + "\n", + "To reduce any network overhead that might lead to unnecessary increase in overhead latency, it is best to call the Vertex AI Matching Engine endpoints from your VPC via a direct [VPC Peering](https://cloud.google.com/vertex-ai/docs/general/vpc-peering) connection. The following section describes how to setup a VPC Peering connection if you don't have one. This is a one-time initial setup task. You can also reuse existing VPC network and skip this section.\n", + "\n", + "* **WARNING:** The match service gRPC API (to create online queries against your deployed index) has to be executed in a Google Cloud Notebook instance that is created with the following requirements:\n", + " * **Make sure you select the VPC network you created for Vertex AI Matching Engine service** (instead of using the \"default\" one). That is, you will have to create the VPC network below and then create a new notebook instance that uses that VPC. \n", + " * If you run it in the colab or a Google Cloud Notebook instance in a different VPC network or region, the gRPC API will fail to peer the network (InactiveRPCError)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ab38a8cc634c" + }, + "outputs": [], + "source": [ + "NETWORK_NAME = \"ucaip-haystack-vpc-network\" # @param {type:\"string\"}\n", + "PEERING_RANGE_NAME = \"ucaip-haystack-range\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ec6bf3199835" + }, + "outputs": [], + "source": [ + "# Create a VPC network\n", + "! gcloud compute networks create {NETWORK_NAME} --bgp-routing-mode=regional --subnet-mode=auto --project={PROJECT_ID}\n", + "\n", + "# Add necessary firewall rules\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-icmp --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow icmp\n", + "\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-internal --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow all --source-ranges 10.128.0.0/9\n", + "\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-rdp --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow tcp:3389\n", + "\n", + "! gcloud compute firewall-rules create {NETWORK_NAME}-allow-ssh --network {NETWORK_NAME} --priority 65534 --project {PROJECT_ID} --allow tcp:22\n", + "\n", + "# Reserve IP range\n", + "! gcloud compute addresses create {PEERING_RANGE_NAME} --global --prefix-length=16 --network={NETWORK_NAME} --purpose=VPC_PEERING --project={PROJECT_ID} --description=\"peering range for uCAIP Haystack.\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "ddbace09fe81" + }, + "source": [ + "Create the VPC Peering. If you are running this from Vertex AI Workbench it is possible you might need your notebook's instance service or user account to have the Service Networking Admin Role" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d329aa3c54d3" + }, + "outputs": [], + "source": [ + "# Set up peering with service networking\n", + "! gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --network={NETWORK_NAME} --ranges={PEERING_RANGE_NAME} --project={PROJECT_ID}" + ] + }, + { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "zgPO1eR3CYjk" @@ -297,13 +440,11 @@ "\n", "**The following steps are required, regardless of your notebook environment.**\n", "\n", - "Set the name of your Cloud Storage bucket below. It must be unique across all\n", + "Create a storage bucket to store intermediate artifacts such as datasets. Set the name of your Cloud Storage bucket below. It must be unique across all\n", "Cloud Storage buckets.\n", "\n", - "You may also change the `REGION` variable, which is used for operations\n", - "throughout the rest of this notebook. Make sure to [choose a region where Vertex AI services are\n", - "available](https://cloud.google.com/vertex-ai/docs/general/locations#available_regions). You may\n", - "not use a Multi-Regional Storage bucket for training with Vertex AI." + "* **WARNING:** \n", + " * **You may not use a Multi-Regional Storage bucket for training with Vertex AI.**" ] }, { @@ -314,8 +455,7 @@ }, "outputs": [], "source": [ - "BUCKET_NAME = \"gs://[your-bucket-name]\" # @param {type:\"string\"}\n", - "REGION = \"us-central1\" # @param {type:\"string\"}" + "BUCKET_NAME = \"gs://[your-bucket-name-unique]\" # @param {type:\"string\"}" ] }, { @@ -328,10 +468,14 @@ "source": [ "from datetime import datetime\n", "\n", - "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", + "UUID = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", "\n", - "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"gs://[your-bucket-name]\":\n", - " BUCKET_NAME = \"gs://\" + PROJECT_ID + \"aip-\" + TIMESTAMP" + "if (\n", + " BUCKET_NAME == \"\"\n", + " or BUCKET_NAME is None\n", + " or BUCKET_NAME == \"gs://[your-bucket-name-unique]\"\n", + "):\n", + " BUCKET_NAME = \"gs://\" + PROJECT_ID + \"aip-\" + UUID" ] }, { @@ -351,7 +495,7 @@ }, "outputs": [], "source": [ - "! gsutil mb -l $REGION $BUCKET_NAME" + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_NAME" ] }, { @@ -416,10 +560,7 @@ }, "outputs": [], "source": [ - "REGION = \"us-central1\"\n", "ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", - "NETWORK_NAME = \"ucaip-haystack-vpc-network\" # @param {type:\"string\"}\n", - "\n", "\n", "AUTH_TOKEN = !gcloud auth print-access-token\n", "PROJECT_NUMBER = !gcloud projects list --filter=\"PROJECT_ID:'{PROJECT_ID}'\" --format='value(PROJECT_NUMBER)'\n", @@ -429,10 +570,7 @@ "\n", "print(\"ENDPOINT: {}\".format(ENDPOINT))\n", "print(\"PROJECT_ID: {}\".format(PROJECT_ID))\n", - "print(\"REGION: {}\".format(REGION))\n", - "\n", - "!gcloud config set project {PROJECT_ID}\n", - "!gcloud config set ai_platform/region {REGION}" + "print(\"REGION: {}\".format(REGION))" ] }, { @@ -523,12 +661,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "QuVl8DrWG8NS" }, "source": [ - "Upload the training data to GCS." + "Upload the training data to Google Cloud Storage" ] }, { @@ -539,9 +678,9 @@ }, "outputs": [], "source": [ - "# NOTE: Everything in this GCS DIR will be DELETED before uploading the data.\n", + "# NOTE: Everything in this Google Cloud Storage directory will be DELETED before uploading the data\n", "\n", - "! gsutil rm -rf {BUCKET_NAME}/*" + "! gsutil rm -raf {BUCKET_NAME}/** 2> /dev/null || true" ] }, { @@ -567,21 +706,23 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "mglUPwHpJH98" }, "source": [ - "## Create Indexes\n" + "## Create the indexes\n" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "qhIBCQ7dDSbW" }, "source": [ - "### Create ANN Index (for Production Usage)" + "### Create Vertex AI Matching Engine index (for production usage)" ] }, { @@ -597,6 +738,16 @@ ")" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "14e1ed031d66" + }, + "source": [ + "Set constants" + ] + }, { "cell_type": "code", "execution_count": null, @@ -611,14 +762,15 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "svLYiDf0OD2G" }, "source": [ - "Create the ANN index configuration:\n", + "#### Create the Vertex AI Matching Engine index configuration\n", "\n", - "Please read the documentation to understand the various configuration parameters that can be used to tune the index\n" + "Please read the [documentation](https://cloud.google.com/vertex-ai/docs/matching-engine/configuring-indexes) to understand the various configuration parameters that can be used to tune the index" ] }, { @@ -656,9 +808,9 @@ " }\n", ")\n", "\n", - "ann_index = {\n", + "matching_engine_index = {\n", " \"display_name\": DISPLAY_NAME,\n", - " \"description\": \"Glove 100 ANN index\",\n", + " \"description\": \"Glove 100 Vertex AI Matching Engine Index\",\n", " \"metadata\": struct_pb2.Value(struct_value=metadata),\n", "}" ] @@ -671,7 +823,9 @@ }, "outputs": [], "source": [ - "ann_index = index_client.create_index(parent=PARENT, index=ann_index)" + "matching_engine_index = index_client.create_index(\n", + " parent=PARENT, index=matching_engine_index\n", + ")" ] }, { @@ -686,7 +840,7 @@ "# This will take ~45 min.\n", "\n", "while True:\n", - " if ann_index.done():\n", + " if matching_engine_index.done():\n", " break\n", " print(\"Poll the operation to create index...\")\n", " time.sleep(60)" @@ -700,17 +854,18 @@ }, "outputs": [], "source": [ - "INDEX_RESOURCE_NAME = ann_index.result().name\n", + "INDEX_RESOURCE_NAME = matching_engine_index.result().name\n", "INDEX_RESOURCE_NAME" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "kSsqZuyoA1SG" }, "source": [ - "### Create Brute Force Index (for Ground Truth)\n", + "### Create brute force index (for ground truth)\n", "\n", "The brute force index uses a naive brute force method to find the nearest neighbors. This method is not fast or efficient. Hence brute force indices are not recommended for production usage. They are to be used to find the \"ground truth\" set of neighbors, so that the \"ground truth\" set can be used to measure recall of the indices being tuned for production usage. To ensure an apples to apples comparison, the `distanceMeasureType` and `featureNormType`, `dimensions` of the brute force index should match those of the production indices being tuned.\n", "\n", @@ -725,8 +880,6 @@ }, "outputs": [], "source": [ - "from google.protobuf import *\n", - "\n", "algorithmConfig = struct_pb2.Struct(\n", " fields={\"bruteForceConfig\": struct_pb2.Value(struct_value=struct_pb2.Struct())}\n", ")\n", @@ -796,12 +949,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "mglUPwHpJH98" }, "source": [ - "## Update Indexes\n", + "## Update the indexes\n", "\n", "Create incremental data file.\n" ] @@ -863,10 +1017,10 @@ " }\n", ")\n", "\n", - "ann_index = {\n", + "matching_engine_index = {\n", " \"name\": INDEX_RESOURCE_NAME,\n", " \"display_name\": DISPLAY_NAME,\n", - " \"description\": \"Glove 100 ANN index\",\n", + " \"description\": \"Glove 100 Vertex AI Matching Engine Index\",\n", " \"metadata\": struct_pb2.Value(struct_value=metadata),\n", "}" ] @@ -879,7 +1033,7 @@ }, "outputs": [], "source": [ - "ann_index = index_client.update_index(index=ann_index)" + "matching_engine_index = index_client.update_index(index=matching_engine_index)" ] }, { @@ -894,7 +1048,7 @@ "# This will take ~45 min.\n", "\n", "while True:\n", - " if ann_index.done():\n", + " if matching_engine_index.done():\n", " break\n", " print(\"Poll the operation to update index...\")\n", " time.sleep(60)" @@ -908,17 +1062,18 @@ }, "outputs": [], "source": [ - "INDEX_RESOURCE_NAME = ann_index.result().name\n", + "INDEX_RESOURCE_NAME = matching_engine_index.result().name\n", "INDEX_RESOURCE_NAME" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "qV2xjAnDDObD" }, "source": [ - "## Create an IndexEndpoint with VPC Network" + "## Create an index endpoint with VPC network" ] }, { @@ -997,21 +1152,23 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "np2cgVuuIe9k" }, "source": [ - "## Deploy Indexes" + "## Deploy the indexes" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "8Ew1UgcIIiJG" }, "source": [ - "### Deploy ANN Index" + "### Deploy a Vertex AI Matching Engine index" ] }, { @@ -1022,7 +1179,7 @@ }, "outputs": [], "source": [ - "DEPLOYED_INDEX_ID = \"ann_glove_deployed\"" + "DEPLOYED_INDEX_ID = \"matching_engine_glove_deployed\"" ] }, { @@ -1033,13 +1190,23 @@ }, "outputs": [], "source": [ - "deploy_ann_index = {\n", + "deploy_matching_engine_index = {\n", " \"id\": DEPLOYED_INDEX_ID,\n", " \"display_name\": DEPLOYED_INDEX_ID,\n", " \"index\": INDEX_RESOURCE_NAME,\n", "}" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "cb6d956d7419" + }, + "source": [ + "If errors occur with the next command wait some minutes for the index endpoint to be created and retry." + ] + }, { "cell_type": "code", "execution_count": null, @@ -1049,7 +1216,7 @@ "outputs": [], "source": [ "r = index_endpoint_client.deploy_index(\n", - " index_endpoint=INDEX_ENDPOINT_NAME, deployed_index=deploy_ann_index\n", + " index_endpoint=INDEX_ENDPOINT_NAME, deployed_index=deploy_matching_engine_index\n", ")" ] }, @@ -1082,12 +1249,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "RNZnXmO5AhDO" }, "source": [ - "### Deploy Brute Force Index" + "### Deploy brute force index" ] }, { @@ -1158,12 +1326,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "6LCGvBNvBd8D" }, "source": [ - "## Create Online Queries\n", + "## Create online queries\n", "\n", "After you built your indexes, you may query against the deployed index through the online querying gRPC API (Match service) within the virtual machine instances from the same region (for example 'us-central1' in this tutorial). \n", "\n", @@ -1178,7 +1347,15 @@ "\n", "* Compile the protocal buffer (see below)\n", "* Obtain the index endpoint\n", - "* Use a code-generated stub to make the call, passing the parameter values" + "* Use a code-generated stub to make the call, passing the parameter values\n", + "\n", + "### Troubleshooting connectivity issues\n", + "\n", + "In case you have connectivity errors please perform the following:\n", + "\n", + "* Verify that the index endpoint, index, and VPC are all in the same Google Cloud project\n", + "* Verify that the index endpoint, index, and VPC are all in the same region and it is a valid (e.g. us-central1)\n", + "* Verify the Network does not have a firewall rule which denies all egress connections. Else, disable this rule or overwrite it with another rule that allows connection to the index endpoint IP" ] }, { @@ -1351,12 +1528,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "8wXTSgz1Bl0x" }, "source": [ - "Obtain the Private Endpoint: " + "Obtain the private endpoint: " ] }, { @@ -1521,12 +1699,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "_mNwdU9_B_Ez" }, "source": [ - "### Batch Query\n", + "## Submit a batch query\n", "\n", "You can run multiple queries in a single RPC call using the BatchMatch API:" ] @@ -1764,18 +1943,20 @@ "]\n", "\n", "batch_request = match_service_pb2.BatchMatchRequest()\n", - "batch_request_ann = match_service_pb2.BatchMatchRequest.BatchMatchRequestPerIndex()\n", + "batch_request_matching_engine = (\n", + " match_service_pb2.BatchMatchRequest.BatchMatchRequestPerIndex()\n", + ")\n", "batch_request_brute_force = (\n", " match_service_pb2.BatchMatchRequest.BatchMatchRequestPerIndex()\n", ")\n", - "batch_request_ann.deployed_index_id = DEPLOYED_INDEX_ID\n", + "batch_request_matching_engine.deployed_index_id = DEPLOYED_INDEX_ID\n", "batch_request_brute_force.deployed_index_id = DEPLOYED_BRUTE_FORCE_INDEX_ID\n", "for query in queries:\n", - " batch_request_ann.requests.append(get_request(query, DEPLOYED_INDEX_ID))\n", + " batch_request_matching_engine.requests.append(get_request(query, DEPLOYED_INDEX_ID))\n", " batch_request_brute_force.requests.append(\n", " get_request(query, DEPLOYED_BRUTE_FORCE_INDEX_ID)\n", " )\n", - "batch_request.requests.append(batch_request_ann)\n", + "batch_request.requests.append(batch_request_matching_engine)\n", "batch_request.requests.append(batch_request_brute_force)\n", "\n", "response = stub.BatchMatch(batch_request)\n", @@ -1783,14 +1964,15 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "_mNwdU9_B_Ez" }, "source": [ - "### Compute Recall\n", + "### Compute the recall metric\n", "\n", - "Use deployed brute force Index as the ground truth to calculate the recall of ANN Index:" + "Use the deployed brute force index as the ground truth to calculate the recall of the Vertex AI Matching Engine index:" ] }, { @@ -1835,6 +2017,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "TpV-iwP9qw9c" @@ -1844,7 +2027,18 @@ "\n", "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", - "You can also manually delete resources that you created by running the following code." + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "390c331dc7d9" + }, + "source": [ + "### Delete the Vertex AI Matching Engine resources" ] }, { @@ -1869,6 +2063,31 @@ "source": [ "index_endpoint_client.delete_index_endpoint(name=INDEX_ENDPOINT_NAME)" ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "ff14a85c85fb" + }, + "source": [ + "### Delete the Google Cloud Storage bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "68d4781faac4" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "delete_bucket = False\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil -m rm -r $BUCKET_NAME" + ] } ], "metadata": { diff --git a/notebooks/community/matching_engine/stream_update_for_matching_engine.ipynb b/notebooks/community/matching_engine/stream_update_for_matching_engine.ipynb index fb9905149..3eb9f3c32 100644 --- a/notebooks/community/matching_engine/stream_update_for_matching_engine.ipynb +++ b/notebooks/community/matching_engine/stream_update_for_matching_engine.ipynb @@ -33,7 +33,7 @@ "\n", " \n", " \n", - " Run in Google Cloud Notebooks\n", + " Run in Workbench AI Notebooks\n", " \n", " \n", " \n", @@ -53,7 +53,7 @@ "source": [ "## Overview\n", "\n", - "This example demonstrates how to use the GCP matching engine Stream Update Service. \n", + "This example demonstrates how to use the Vertex AI Matching Engine Stream Update Service. \n", "\n", "### Dataset\n", "\n", @@ -150,7 +150,7 @@ "source": [ "### Installation\n", "\n", - "Download and install the latest (preview) version of the Vertex SDK for Python." + "Download and install the latest (preview) version of the Vertex AI SDK for Python." ] }, { @@ -442,7 +442,7 @@ "id": "8292bcedab58" }, "source": [ - "## Prepare the Data\n", + "## Prepare the data\n", "\n", "The GloVe dataset consists of a set of pre-trained embeddings. The embeddings are split into a \"train\" split, and a \"test\" split.\n", "We will create a vector search index from the \"train\" split, and use the embedding vectors in the \"test\" split as query vectors to test the vector search index.\n", @@ -525,7 +525,7 @@ " f.write('{\"id\":\"' + str(i) + '\",')\n", " f.write('\"embedding\":[' + \",\".join(str(x) for x in train[i]) + \"],\")\n", " f.write(\n", - " '\"restricts\":[{\"namespace\": \"class\", \"allow_list\": [\"' + str(i) + '\"]}],'\n", + " '\"restricts\":[{\"namespace\": \"class\", \"allow\": [\"' + str(i) + '\"]}],'\n", " )\n", " f.write('\"crowding_tag\":' + ('\"a\"' if i % 2 == 0 else '\"b\"') + \"}\")\n", " f.write(\"\\n\")\n", @@ -854,7 +854,7 @@ "id": "00c606bc97b5" }, "source": [ - "## Create Online Queries\n", + "## Create online queries\n", "\n", "After you built your indexes, you may query against the deployed index through the online querying gRPC API (Match service) within the virtual machine instances from the same region (for example 'us-central1' in this tutorial). \n", "\n", diff --git a/notebooks/community/ml_ops/stage1/README.md b/notebooks/community/ml_ops/stage1/README.md index 2f63e7157..9a2123ac2 100644 --- a/notebooks/community/ml_ops/stage1/README.md +++ b/notebooks/community/ml_ops/stage1/README.md @@ -28,9 +28,11 @@ The first stage in MLOps is the collection and preparation for the purpose of de ### Get Started -[Get started with Dataflow](community/ml_ops/stage1/get_started_dataflow.ipynb) -In this tutorial, you learn how to use `Dataflow` for training with `Vertex AI`. +[Get started with Dataflow](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage1/get_started_dataflow.ipynb) + +``` +Learn how to use `Dataflow` for training with `Vertex AI`. The steps performed include: @@ -40,10 +42,13 @@ The steps performed include: - Upstream preprocessing of data: - tabular data - image data +``` -[Get started with Vertex AI datasets](community/ml_ops/stage1/get_started_vertex_datasets.ipynb) -In this tutorial, you learn how to use `Vertex AI Dataset` for training with `Vertex AI`. +[Get started with Vertex AI datasets](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage1/get_started_vertex_datasets.ipynb) + +``` +Learn how to use `Vertex AI Dataset` for training with `Vertex AI`. The steps performed include: @@ -61,10 +66,13 @@ The steps performed include: - Detect anomalies in new data using TensorFlow Data Validation. - Generate a TFRecord feature specification using TensorFlow Transform from the data schema. - Export a dataset and convert to TFRecords. +``` -[Get started with BigQuery datasets](community/ml_ops/stage1/get_started_bq_datasets.ipynb) -In this tutorial, you learn how to use `BigQuery` as a dataset for training with `Vertex AI`. +[Get started with BigQuery datasets](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage1/get_started_bq_datasets.ipynb) + +``` +Learn how to use `BigQuery` as a dataset for training with `Vertex AI`. The steps performed include: @@ -75,10 +83,13 @@ The steps performed include: - Select rows from extracted CSV files into a `tf.data.Dataset` -- compatible for custom training `TensorFlow` models. - Create a `BigQuery` dataset from CSV files. - Extract data from `BigQuery` table into a `DMatrix` -- compatible for custom training `XGBoost` models. +``` -[Get started with Vertex AI Data Labeling](community/ml_ops/stage1/get_started_with_data_labeling.ipynb) -In this tutorial, you learn how to use the `Vertex AI Data Labeling` service. +[Get started with Vertex AI Data Labeling](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage1/get_started_with_data_labeling.ipynb) + +``` +Learn how to use the `Vertex AI Data Labeling` service/ The steps performed include: @@ -87,28 +98,31 @@ The steps performed include: - Submit the data labeling job. - List data labeling jobs. - Cancel a data labeling job. +``` +[Create an unlabelled Vertex AI AutoML text entity extraction dataset from PDFs using Vision API](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage1/get_started_with_visionapi_and_vertex_datasets.ipynb) -[Create an unlabelled Vertex AI AutoML text entity extraction dataset from PDFs using Vision API](community/ml_ops/stage1/get_started_with_visionapi_and_vertex_datasets.ipynb) - -In this tutorial, you learn to use `Vision API` to extract text from PDF files stored on a Cloud Storage bucket. You then process the results and create an unlabelled `Vertex AI Dataset`, compatible with `AutoML`, for text entity extraction. +``` +Learn to use `Vision API` to extract text from PDF files stored on a Cloud Storage bucket. The steps performed include: 1. Using `Vision API` to perform Optical Character Recognition (OCR) to extract text from PDF files. 2. Processing the results and saving them to text files. 3. Generating a `Vertex AI Dataset` import file. -4. Creating a new unlabelled text entity extraction `Vertex AI Dataset` resource in `Vertex AI`. +4. Cr ### E2E Stage Example -[Stage 1: Data Management](mlops_data_management.ipynb) - +[Data management](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage1/mlops_data_management.ipynb) ``` +In this tutorial, you create a MLOps stage 1: data management process. + The steps performed include: + - Explore and visualize the data. - Create a Vertex AI `Dataset` resource from `BigQuery` table -- for AutoML training. - Extract a copy of the dataset to a CSV file in Cloud Storage. @@ -117,4 +131,4 @@ The steps performed include: - Generate statistics and data schema using TensorFlow Data Validation from the samples in the dataframe. - Generate a TFRecord feature specification using TensorFlow Data Validation from the data schema. - Preprocess a portion of the BigQuery data using `Dataflow` -- for custom training. -``` +``` \ No newline at end of file diff --git a/notebooks/community/ml_ops/stage2/README.md b/notebooks/community/ml_ops/stage2/README.md index f07842441..31b3fac1a 100644 --- a/notebooks/community/ml_ops/stage2/README.md +++ b/notebooks/community/ml_ops/stage2/README.md @@ -35,9 +35,10 @@ The second stage in MLOps is experimenting in developing one or more baseline mo ### Get Started -[Get started with Vertex AI Training for R](community/ml_ops/stage2/get_started_vertex_training_r.ipynb) +[Get started with Vertex AI Training for R](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_training_r.ipynb) -In this tutorial, you learn how to use `Vertex AI Training` for training a R custom model. +``` +Learn how to use `Vertex AI Training` for training a R custom model. The steps performed include: @@ -51,18 +52,26 @@ The steps performed include: - Create a training image for training the model. - Train a R model using `Vertex AI Trainingh` service with the R-to-Python training package. -[Get started with Logging](community/ml_ops/stage2/get_started_with_logging.ipynb) +``` -In this tutorial, you learn how to use Python and Cloud logging awhen training with `Vertex AI`. + +[Get started with Logging](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_logging.ipynb) + +``` +Learn how to use Python and Cloud logging when training with `Vertex AI`. The steps performed include: - Use Python logging to log training configuration/results locally. - Use Google Cloud Logging to log training configuration/results in cloud storage. -[Get started with Vertex AI Hyperparameter Tuning for XGBoost] (community/ml_ops/stage2/get_started_vertex_hpt_xgboost.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Hyperparameter Tuning` for training a XGBoost custom model. + +[Get started with Vertex AI Hyperparameter Tuning for XGBoost](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_hpt_xgboost.ipynb) + +``` +Learn how to use `Vertex AI Hyperparameter Tuning` for training a XGBoost custom model. The steps performed include: @@ -71,9 +80,13 @@ The steps performed include: - Save the model artifacts to Cloud Storage using GCSFuse. - Create a `Vertex AI Model` resource. -[Get started with Vertex AI Training for XGBoost](community/ml_ops/stage2/get_started_vertex_training_xgboost.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Training` for training a XGBoost custom model. + +[Get started with Vertex AI Training for XGBoost](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_training_xgboost.ipynb) + +``` +Learn how to use `Vertex AI Training` for training a XGBoost custom model. The steps performed include: @@ -82,9 +95,13 @@ The steps performed include: - Save the model artifacts to Cloud Storage using GCSFuse. - Create a `Vertex AI Model` resource. -[Get started with TabNet builtin algorithm for training tabular models](community/ml_ops/stage2/get_started_with_tabnet.ipynb) +``` -In this notebook, you learn how to run `Vertex AI TabNet` built algorithm for training custom tabular models. + +[Get started with TabNet builtin algorithm for training tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_tabnet.ipynb) + +``` +Learn how to run `Vertex AI TabNet` built algorithm for training custom tabular models. The steps performed include: @@ -97,9 +114,13 @@ The steps performed include: - Hyperparameter tuning the `Vertex AI TabNet` model. - Train the model using `Vertex AI Training` using BigQuery table. -[Get started with prebuilt TFHub models](community/ml_ops/stage2/get_started_with_tfhub_models.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Training` with prebuilt models from TensorFlow Hub. + +[Get started with prebuilt TFHub models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_tfhub_models.ipynb) + +``` +Learn how to use `Vertex AI Training` with prebuilt models from TensorFlow Hub. The steps performed include: @@ -112,23 +133,31 @@ The steps performed include: - Train then model - Save model artifacts and upload as Vertex AI Model resource. -[Get started with BigQuery ML Training](community/ml_ops/stage2/get_started_bqml_training.ipynb) +``` -In this tutorial, you learn how to use `BigQueryML` (BQML) for training with `Vertex AI`. + +[Get started with BigQuery ML Training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_bqml_training.ipynb) + +``` +Learn how to use `BigQueryML` for training with `Vertex AI`. The steps performed include: - Create a local BigQuery table in your project -- Train a BQML model -- Evaluate the BQML model -- Export the BQML model as a cloud model +- Train a BigQuery ML model +- Evaluate the BigQuery ML model +- Export the BigQuery ML model as a cloud model - Upload the exported model as a `Vertex AI Model` resource -- Hyperparameter tune a BQML model with `Vertex AI Vizier` -- Automatically register a BQML model to `Vertex AI Model Registry` +- Hyperparameter tune a BigQuery ML model with `Vertex AI Vizier` +- Automatically register a BigQuery ML model to `Vertex AI Model Registry` -[Get started with Vertex AI Vizier](community/ml_ops/stage2/get_started_vertex_vizier.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Vizier` for when training with `Vertex AI`. + +[Get started with Vertex AI Vizier](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_vizier.ipynb) + +``` +Learn how to use `Vertex AI Vizier` for when training with `Vertex AI`. The steps performed include: @@ -136,9 +165,13 @@ The steps performed include: - Hyperparameter tuning with Vizier (Bayesian) algorithm. - Suggesting trials and updating results for Vizier study -[Get started with distributed training using DASK](community/ml_ops/stage2/get_started_with_distributed_training_xgboost.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Training` for distributed training of XGBoost model using the OSS package DASK. Additionally, you learn to construct and deploy a custom serving container using a Flask web server. + +[Get started with distributed training using DASK](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_distributed_training_xgboost.ipynb) + +``` +Learn how to use `Vertex AI Training` for distributed training of XGBoost model using the OSS package DASK. The steps performed include: @@ -152,9 +185,13 @@ The steps performed include: - Deploy the `Vertex AI Model` resource to `Vertex AI Endpoint` resource. - Make a prediction. -[Get started with Vertex AI TensorBoard](community/ml_ops/stage2/get_started_vertex_tensorboard.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI TensorBoard` when training with `Vertex AI`. + +[Get started with Vertex AI TensorBoard](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_tensorboard.ipynb) + +``` +Learn how to use `Vertex AI TensorBoard` when training with `Vertex AI`. The steps performed include: @@ -162,9 +199,13 @@ The steps performed include: - Using TensorBoard with locally trained model. - Using Vertex AI TensorBoard with Vertex AI Training. -[Get started with Vertex AI Training for R using R Kernel](community/ml_ops/stage2/get_started_vertex_training_r_using_r_kernel.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI`, using an R kernel, for training and deploying an R custom model. + +[Get started with Vertex AI Training for R using R Kernel](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_training_r_using_r_kernel.ipynb) + +``` +Learn how to use `Vertex AI`, using an R kernel, for training and deploying an R custom model. The steps performed include: @@ -176,10 +217,13 @@ The steps performed include: - Deploy the `Model` resource (trained R model) to the `Endpoint` resource. - Make an online prediction. +``` -[Get started Vision API test preprocessing and AutoML text model generation](community/ml_ops/stage2/get_started_with_visionapi_and_automl.ipynb) -In this tutorial, you create an `AutoML` text entity extraction model pre-existing extracted data by generating a custom import file. You deploy this mode for online prediction from a Python script using the `BigQuery`, `Vision AI`, Cloud Storage and `Vertex AI SDK` for Python. +[Get started Vision API test preprocessing and AutoML text model generation](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_visionapi_and_automl.ipynb) + +``` +In this tutorial, you create an `AutoML` text entity extraction model pre-existing extracted data by generating a custom import file. The steps performed include: @@ -192,9 +236,13 @@ The steps performed include: - Make a prediction. - Undeploy the `Model`. -[Get started with Vertex AI Experiments](community/ml_ops/stage2/get_started_vertex_experiments.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Experiments` when training with `Vertex AI`. + +[Get started with Vertex AI Experiments](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_experiments.ipynb) + +``` +Learn how to use `Vertex AI Experiments` when training with `Vertex AI`. The steps performed include: @@ -215,9 +263,13 @@ The steps performed include: - Execute the custom job - Visualize the experiment results -[AutoML Image Classfication Training with Customer Managed Encryption Keys (CMEK)](community/ml_ops/stage2/get_started_with_cmek_training.ipynb) +``` -In this tutorial, you learn how to use a customer managed encryption key (CMEK) for `Vertex AI AutoML` training. + +[AutoML Image Classfication Training with Customer Managed Encryption Keys (CMEK)](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_cmek_training.ipynb) + +``` +Learn how to use a customer managed encryption key (CMEK) for `Vertex AI AutoML` training. The steps performed include: @@ -225,9 +277,13 @@ The steps performed include: - Creating an image dataset with CMEK encryption. - Train an AutoML model with CMEK encryption. -[Get started with Vertex AI Feature Store](community/ml_ops/stage2/get_started_vertex_feature_store.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Feature Store` when training and predicting with `Vertex AI`. + +[Get started with Vertex AI Feature Store](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_feature_store.ipynb) + +``` +Learn how to use `Vertex AI Feature Store` when training and predicting with `Vertex AI`. The steps performed include: @@ -240,9 +296,13 @@ The steps performed include: - Perform online serving from a `Featurestore` resource. - Perform batch serving from a `Featurestore` resource. -[Get started with AutoML Training](community/ml_ops/stage2/get_started_automl_training.ipynb) +``` -In this tutorial, you learn how to use `AutoML` for training with `Vertex AI`. + +[Get started with AutoML Training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_automl_training.ipynb) + +``` +Learn how to use `AutoML` for training with `Vertex AI`. The steps performed include: @@ -253,9 +313,29 @@ The steps performed include: - Train a text model - Train a video model -[Get started with Vertex AI Training for LightGBM](community/ml_ops/stage2/get_started_vertex_training_lightgbm.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Training` for training a LightGBM custom model. + +[Get started with autologging using Vertex AI Experiments for XGBoost models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_vertex_experiments_autologging_xgboost.ipynb) + +``` +Learn how to create an experiment for training an XGBoost model, and automatically log parameters and metrics using the enclosed do-it-yourself (DIY) code. + +The steps performed include: + +- Construct the DIY autologging code. +- Construct training package with call to autologging. +- Train a model. +- View the experiment +- Delete the experiment. + +``` + + +[Get started with Vertex AI Training for LightGBM](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_training_lightgbm.ipynb) + +``` +Learn how to use `Vertex AI Training` for training a LightGBM custom model. The steps performed include: @@ -266,9 +346,26 @@ The steps performed include: - Test the deployment image locally. - Create a `Vertex AI Model` resource. -[Get started with Vertex AI Training for Scikit-Learn](community/ml_ops/stage2/get_started_vertex_training_sklearn.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Training` for training a Scikit-Learn custom model. + +[Vertex AI Hyperparameter Tuning with R kernel](None) + +``` +Learn how to use `Vertex AI`, using an R kernel, for tuning hyperparameters of a R custom model. + +The steps performed include: + +- Create a custom R training script +- Create a custom R deployment container. +- Perform hyperparameter tuning using `Vertex AI`. + +``` + +[Get started with Vertex AI Training for Scikit-Learn](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_training_sklearn.ipynb) + +``` +Learn how to use `Vertex AI Training` for training a Scikit-Learn custom model. The steps performed include: @@ -277,9 +374,13 @@ The steps performed include: - Save the model artifacts to Cloud Storage using GCSFuse. - Create a `Vertex AI Model` resource. -[Get started with Vertex AI Training](community/ml_ops/stage2/get_started_vertex_training.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Training` for custom models when training with `Vertex AI`. + +[Get started with Vertex AI Training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_training.ipynb) + +``` +Learn how to use `Vertex AI Training` for custom models when training with `Vertex AI`. The steps performed include: @@ -288,10 +389,13 @@ The steps performed include: - Training using a custom training image. - Laying out a training package. +``` -[Get started with Vertex AI Training for Pytorch](community/ml_ops/stage2/get_started_vertex_training_pytorch.ipynb) -In this tutorial, you learn how to use `Vertex AI Training` for training a Pytorch custom model. +[Get started with Vertex AI Training for PyTorch](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_training_pytorch.ipynb) + +``` +Learn how to use `Vertex AI Training` for training a PyTorch custom model. The steps performed include: @@ -300,9 +404,31 @@ The steps performed include: - Save the model artifacts to Cloud Storage using GCSFuse. - Create a `Vertex AI Model` resource. -[Get started with Vertex AI Distributed Training](community/ml_ops/stage2/get_started_vertex_distributed_training.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Distributed Training` for when training with `Vertex AI`. + +[Get started with autologging using Vertex AI Experiments for TensorFlow models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_with_vertex_experiments_autologging_tf.ipynb) + +``` +Learn how to create an experiment for training a TensorFlow model, and automatically log parameters and metrics using the enclosed do-it-yourself (DIY) code. + +The steps performed include: + +- Construct the DIY autologging code. +- Construct training package for TensorFlow Sequential model with call to autologging. +- Train a model. +- View the experiment +- Construct training package for TensorFlow Functional model with call to autologging. +- Compare the experiment runs. +- Delete the experiment. + +``` + + +[Get started with Vertex AI Distributed Training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/get_started_vertex_distributed_training.ipynb) + +``` +Learn how to use `Vertex AI Distributed Training` for when training with `Vertex AI`. The steps performed include: @@ -312,12 +438,17 @@ The steps performed include: - `ReductionServer`: Train on multiple VMS and sync updates across VMS with `Vertex AI Reduction Server`. - `TPUTraining`: Train with multiple Cloud TPUs. +``` + ### E2E Stage Example -[Stage 2: Experimentation](mlops_experimentation.ipynb) +[Experimentation](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage2/mlops_experimentation.ipynb) ``` +In this tutorial, you create a MLOps stage 2: experimentation process. + The steps performed include: + - Review the `Dataset` resource created during stage 1. - Train an AutoML tabular binary classifier model in the background. - Build the experimental model architecture. @@ -334,4 +465,5 @@ The steps performed include: - Set the evaluation results of the AutoML model as the baseline. - If the evaluation of the custom model is below baseline, continue to experiment with the custom model. - If the evaluation of the custom model is above baseline, save the model as the first best model. + ``` diff --git a/notebooks/community/ml_ops/stage3/README.md b/notebooks/community/ml_ops/stage3/README.md index dbdae94b3..0fa85df75 100644 --- a/notebooks/community/ml_ops/stage3/README.md +++ b/notebooks/community/ml_ops/stage3/README.md @@ -34,9 +34,10 @@ The third stage in MLOps is formalization to develop an automated pipeline proce ### Get Started -[Get started with Vertex AI Model Registry](community/ml_ops/stage3/get_started_with_model_registry.ipynb) +[Get started with Vertex AI Model Registry](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_model_registry.ipynb) -In this tutorial, you learn how to use `Vertex AI Model Registry` to create and register multiple versions of a model. +``` +Learn how to use `Vertex AI Model Registry` to create and register multiple versions of a model. The steps performed include: @@ -46,9 +47,13 @@ The steps performed include: - Deleting a model version. - Retraining the next model version. -[Get started with Dataflow pipeline components](community/ml_ops/stage3/get_started_with_dataflow_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Dataflow`. + +[Get started with Dataflow pipeline components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_dataflow_pipeline_components.ipynb) + +``` +Learn how to use prebuilt `Google Cloud Pipeline Components` for `Dataflow`. The steps performed include: @@ -56,9 +61,13 @@ The steps performed include: - Encapsulate the Apache Beam data pipeline with a Dataflow component in a Vertex AI pipeline. - Execute a Vertex AI pipeline. -[Get started with Apache Airflow and Vertex AI Pipelines](community/ml_ops/stage3/get_started_with_airflow_and_vertex_pipelines.ipynb) +``` -In this tutorial, you learn how to use Apache Airflow with `Vertex AI Pipelines`. + +[Get started with Apache Airflow and Vertex AI Pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_airflow_and_vertex_pipelines.ipynb) + +``` +Learn how to use Apache Airflow with `Vertex AI Pipelines`. The steps performed include: @@ -67,9 +76,13 @@ The steps performed include: - Create a `Vertex AI Pipeline` that triggers the Airflow DAG. - Execute the `Vertex AI Pipeline`. -[Get started with Kubeflow Pipelines](community/ml_ops/stage3/get_started_with_kubeflow_pipelines.ipynb) +``` -In this tutorial, you learn how to use `Kubeflow Pipelines`(KFP). + +[Get started with Kubeflow Pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_kubeflow_pipelines.ipynb) + +``` +Learn how to use `Kubeflow Pipelines`(KFP). The steps performed include: @@ -80,9 +93,13 @@ The steps performed include: - Building sequential, parallel, multiple output components. - Building control flow into pipelines. -[Get started with Vertex AI custom training pipeline components](community/ml_ops/stage3/get_started_with_custom_training_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI Training`. + +[Get started with Vertex AI custom training pipeline components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_custom_training_pipeline_components.ipynb) + +``` +Learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI Training`. The steps performed include: @@ -98,11 +115,13 @@ The steps performed include: - Deploying a Vertex AI custom trained model. - Execute a Vertex AI pipeline. -[Get started with Dataproc Serverless pipeline components](community/ml_ops/stage3/get_started_with_dataproc_serverless_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Dataproc Serverless` service. +[Get started with Dataproc Serverless pipeline components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_dataproc_serverless_pipeline_components.ipynb) +``` +Learn how to use prebuilt `Google Cloud Pipeline Components` for `Dataproc Serverless` service. The steps performed include: @@ -111,9 +130,13 @@ The steps performed include: - `DataprocSparkSqlBatchOp` for running Spark SQL batch workloads. - `DataprocSparkRBatchOp` for running SparkR batch workloads. -[Get started with Vertex AI Hyperparameter Tuning pipeline components](community/ml_ops/stage3/get_started_with_hpt_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI Hyperparameter Tuning`. + +[Get started with Vertex AI Hyperparameter Tuning pipeline components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_hpt_pipeline_components.ipynb) + +``` +Learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI Hyperparameter Tuning`. The steps performed include: @@ -125,23 +148,28 @@ The steps performed include: - Upload the model artifacts to a `Vertex AI Model` resource. - Execute a Vertex AI pipeline. -[Get started with machine management for Vertex AI Pipelines](community/ml_ops/stage3/get_started_with_machine_management.ipynb) +``` -In this tutorial, you convert a self-contained custom training component into a `Vertex AI CustomJob`, whereby: - - The training job and artifacts are trackable. - - Set machine resources, such as machine-type, cpu/gpu, memory, disk, etc. +[Get started with machine management for Vertex AI Pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_machine_management.ipynb) + +``` +Learn how to convert a self-contained custom training component into a `Vertex AI CustomJob`, whereby: The steps performed in this tutorial include: - Create a custom component with a self-contained training job. - Execute pipeline using component-level settings for machine resources - Convert the self-contained training component into a `Vertex AI CustomJob`. -- Execute pipeline using customjob-level settings for machine resources +- Execute pipeline using customjob-level settings for machine resources -[Get started with TFX pipelines](community/ml_ops/stage3/get_started_with_tfx_pipeline.ipynb) +``` -In this tutorial, you learn how to use TensorFlow Extended (TFX) with `Vertex AI Pipelines`. + +[Get started with TFX pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_tfx_pipeline.ipynb) + +``` +Learn how to use TensorFlow Extended (TFX) with `Vertex AI Pipelines`. The steps performed include: @@ -150,9 +178,28 @@ The steps performed include: - Execute the pipeline on Google Cloud using `Vertex AI Training` - Execute the pipeline using `Vertex AI Pipelines`. -[Get started with BigQuery ML pipeline components](community/ml_ops/stage3/get_started_with_bqml_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `BigQuery ML`. + +[Orchestrating a workflow to train and deploy an scikit-learn model using Vertex AI Pipelines with online prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_vertex_pipelines_sklearn_with_prediction.ipynb) + +``` +Learn how to use prebuilt components in `Vertex AI Pipelines` for training and deploying a scikit-Learn custom model, and then using `Vertex AI Prediction` to make an online prediction. + +The steps performed include: + +- Construct a scikit-learn training package. +- Construct a pipeline to train and deploy a scikit-learn model. +- Execute the pipeline. +- Make an online prediction. + +``` + + +[Get started with BigQuery ML pipeline components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_bqml_pipeline_components.ipynb) + +``` +Learn how to use prebuilt `Google Cloud Pipeline Components` for `BigQuery ML`. The steps performed include: @@ -165,9 +212,28 @@ The steps performed include: - Execute a Vertex AI pipeline. - Make a prediction with the deployed Vertex AI model. -[Get started with AutoML tabular pipeline workflows](community/ml_ops/stage3/get_started_with_automl_tabular_pipeline_workflow.ipynb) +``` -In this tutorial, you learn how to use `AutoML Tabular Pipeline Template` for training, exporting and tuning an AutoML tabular model. + +[Orchestrating a workflow to train and deploy an XGBoost model using Vertex AI Pipelines with Vertex AI Experiments](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_vertex_pipelines_xgboost_with_experiments.ipynb) + +``` +Learn how to use prebuilt components in `Vertex AI Pipelines` for training and deploying a XGBoost custom model, and using `Vertex AI Experiments` to log the corresponding training parameters and metrics, from within the training package. + +The steps performed include: + +- Construct a XGBoost training package. + - Add tracking the experiment +- Construct a pipeline to train and deploy a XGBoost model. +- Execute the pipeline. + +``` + + +[Get started with AutoML tabular pipeline workflows](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_automl_tabular_pipeline_workflow.ipynb) + +``` +Learn how to use `AutoML Tabular Pipeline Template` for training, exporting and tuning an AutoML tabular model. The steps performed include: @@ -183,9 +249,13 @@ The steps performed include: - Deploy exported OSS TF model. - Make a prediction. -[Get started with rapid prototyping with AutoML and BigQuery ML](community/ml_ops/stage3/get_started_with_rapid_prototyping_bqml_automl.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Predictions` for rapid prototyping a model. + +[Get started with rapid prototyping with AutoML and BigQuery ML](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_rapid_prototyping_bqml_automl.ipynb) + +``` +Learn how to use `Vertex AI Predictions` for rapid prototyping a model. The steps performed include: @@ -196,9 +266,13 @@ The steps performed include: - Deploying the best trained model. - Testing the deployed model infrastructure. -[Get started with AutoML pipeline components](community/ml_ops/stage3/get_started_with_automl_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI AutoML`. + +[Get started with AutoML pipeline components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_automl_pipeline_components.ipynb) + +``` +Learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI AutoML`. The steps performed include: @@ -208,10 +282,28 @@ The steps performed include: - Deploying a Vertex AI AutoML trained model. - Execute a Vertex AI pipeline. +``` -[Get started with BigQuery and TFDV pipeline components](community/ml_ops/stage3/get_started_with_bq_tfdv_pipeline_components.ipynb) -In this tutorial, you learn how to use build lightweight Python components for BigQuery and TensorFlow Data Validation. +[Orchestrating a workflow to train and deploy an XGBoost model using Vertex AI Pipelines with online prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_vertex_pipelines_xgboost_with_prediction.ipynb) + +``` +Learn how to use prebuilt components in `Vertex AI Pipelines` for training and deploying a XGBoost custom model, and then using `Vertex AI Prediction` to make an online prediction. + +The steps performed include: + +- Construct a XGBoost training package. +- Construct a pipeline to train and deploy a XGBoost model. +- Execute the pipeline. +- Make an online prediction. + +``` + + +[Get started with BigQuery and TFDV pipeline components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/get_started_with_bq_tfdv_pipeline_components.ipynb) + +``` +Learn how to use build lightweight Python components for BigQuery and TensorFlow Data Validation. The steps performed include: @@ -219,22 +311,28 @@ The steps performed include: - Build and execute a pipeline component for generating TFDV statistics and schema from a Vertex AI Tabular Dataset. - Execute a Vertex AI pipeline. +``` + ### E2E Stage Example -[Stage 3: Formalization](mlops_formalization.ipynb) +[Formalization](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage3/mlops_formalization.ipynb) ``` +In this tutorial, you create a MLOps stage 3: formalization process. + The steps performed include: + - Obtain resources from the experimentation stage. - Baseline model. - Dataset schema/statistics for baseline model. - Formalize a data preprocessing pipeline. - Extract columns/rows from BigQuery table to local BigQuery table. - - Use Tensorflow Data Validation library to determine statistics, schema, and features. + - Use TensorFlow Data Validation library to determine statistics, schema, and features. - Use Dataflow to preprocess the data. - Create a Vertex AI Dataset. - Formalize a build model architecture pipeline. - Create the Vertex AI Model base model. - Formalize a training pipeline. + ``` diff --git a/notebooks/community/ml_ops/stage4/README.md b/notebooks/community/ml_ops/stage4/README.md index b5843c4d6..ac58b560b 100644 --- a/notebooks/community/ml_ops/stage4/README.md +++ b/notebooks/community/ml_ops/stage4/README.md @@ -43,191 +43,104 @@ This stage may be done entirely by MLOps. We recommend: ### Get Started -[Get started with Vertex AI Model Registry](community/ml_ops/stage3/get_started_with_model_registry.ipynb) +[Get started with Vertex ML Metadata](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage4/get_started_with_vertex_ml_metadata.ipynb) -In this tutorial, you learn how to use `Vertex AI Model Registry` to create and register multiple versions of a model. +``` +Learn how to use `Vertex ML Metadata`. The steps performed include: -- Create and register a first version of a model to `Vertex AI Model Registry`. -- Create and register a second version of a model to `Vertex AI Model Registry`. -- Updating the model version which is the default (blessed). -- Deleting a model version. -- Retraining the next model version. +- Create a `Metadatastore` resource. +- Create (record)/List an `Artifact`, with artifacts and metadata. +- Create (record)/List an `Execution`. +- Create (record)/List a `Context`. +- Add `Artifact` to `Execution` as events. +- Add `Execution` and `Artifact` into the `Context` +- Delete `Artifact`, `Execution` and `Context`. +- Create and run a `Vertex AI Pipeline` ML workflow to train and deploy a scikit-learn model. + - Create custom pipeline components that generate artifacts and metadata. + - Compare Vertex AI Pipelines runs. + - Trace the lineage for pipeline-generated artifacts. + - Query your pipeline run metadata. -[Get started with Dataflow pipeline components](community/ml_ops/stage3/get_started_with_dataflow_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Dataflow`. + +[Get started with Google Artifact Registry](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage4/get_started_with_google_artifact_registry.ipynb) + +``` +Learn how to use `Google Artifact Registry`. The steps performed include: -- Build an Apache Beam data pipeline. -- Encapsulate the Apache Beam data pipeline with a Dataflow component in a Vertex AI pipeline. -- Execute a Vertex AI pipeline. +- Creating a private Docker repository. +- Tagging a container image, specific to the private Docker repository. +- Pushing a container image to the private Docker repository. +- Pulling a container image from the private Docker repository. +- Deleting a private Docker repository. -[Get started with Apache Airflow and Vertex AI Pipelines](community/ml_ops/stage3/get_started_with_airflow_and_vertex_pipelines.ipynb) +``` -In this tutorial, you learn how to use Apache Airflow with `Vertex AI Pipelines`. + +[Get started with Vertex AI Model Evaluation](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage4/get_started_with_model_evaluation.ipynb) + +``` +Learn how to use `Vertex AI Model Evaluation`. The steps performed include: -- Create Cloud Composer environment. -- Upload Airflow DAG to Composer environment that performs data processing -- i.e., creates a BigQuery table from a CSV file. -- Create a `Vertex AI Pipeline` that triggers the Airflow DAG. -- Execute the `Vertex AI Pipeline`. +``` -[Get started with Kubeflow Pipelines](community/ml_ops/stage3/get_started_with_kubeflow_pipelines.ipynb) -In this tutorial, you learn how to use `Kubeflow Pipelines`(KFP). +[Get started with Vertex Explainable AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage4/get_started_with_vertex_xai.ipynb) + +``` +Learn how to use `Vertex AI Explainable AI`. The steps performed include: -- Building KFP lightweight Python function components. -- Assembling and compiling KFP components into a pipeline. -- Executing a KFP pipeline using Vertex AI Pipelines. -- Loading component and pipeline definitions from a source code repository. -- Building sequential, parallel, multiple output components. -- Building control flow into pipelines. +- Train an AutoML tabular model. + - Do a batch prediction with explanations. + - Do an online prediction with explanations. +- Train an custom TensorFlow tabular model. + - Manually set configuration metadata. + - Do a batch prediction with explanations. + - Do an online prediction with explanations. + - Automatically set configuration metadata. +- Train an custom TensorFlow image model. + - Manually set configuration metadata. + - Do a batch prediction with explanations. + - Do an online prediction with explanations. +- Train an custom XGBoost tabular model. + - Manually set configuration metadata. + - Do an online prediction with explanations. +- Train an custom scikit-learn tabular model. + - Manually set configuration metadata. + - Do an online prediction with explanations. -[Get started with Vertex AI custom training pipeline components](community/ml_ops/stage3/get_started_with_custom_training_pipeline_components.ipynb) +``` -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI Training`. + +[Get started with AutoML Training and ML Metadata](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage4/get_started_with_vertex_ml_metadata_and_automl.ipynb) + +``` +Learn how to use `AutoML` for training and assemble the corresponding artifact linkage for `Vertex ML Metadata`. The steps performed include: -- Construct a pipeline for: - - Training a Vertex AI custom trained model. - - Test the serving binary with a batch prediction job. - - Deploying a Vertex AI custom trained model. -- Execute a Vertex AI pipeline. -- Construct a pipeline for: - - Construct a custom training component. - - Convert custom training component to CustomTrainingJobOp. - - Training a Vertex AI custom trained model using the converted component. - - Deploying a Vertex AI custom trained model. -- Execute a Vertex AI pipeline. +- Create a `Dataset` resource. +- Create a corresponding `google.VertexDataset` artifact. +- Train a model using `AutoML`. +- Create a corresponding `google.VertexModel` artifact. +- Create an `Endpoint` resource. +- Create a corresponding `google.Endpoint` artifact. +- Deploy the train model to the `Endpoint`. +- Create an execution and context for the `AutoML` training job and deployment. +- Add the corresponding artifacts and context to the execution. +- Add artifact links (event) to the execution. +- Display the execution graph. -[Get started with Dataproc Serverless pipeline components](community/ml_ops/stage3/get_started_with_dataproc_serverless_pipeline_components.ipynb) - - -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Dataproc Serverless` service. - - -The steps performed include: - -- `DataprocPySparkBatchOp` for running PySpark batch workloads. -- `DataprocSparkBatchOp` for running Spark batch workloads. -- `DataprocSparkSqlBatchOp` for running Spark SQL batch workloads. -- `DataprocSparkRBatchOp` for running SparkR batch workloads. - -[Get started with Vertex AI Hyperparameter Tuning pipeline components](community/ml_ops/stage3/get_started_with_hpt_pipeline_components.ipynb) - -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI Hyperparameter Tuning`. - -The steps performed include: - -- Construct a pipeline for: - - Hyperparameter tune/train a custom model. - - Retrieve the tuned hyperparameter values and metrics to optimize. - - If the metrics exceed a specified threshold. - - Get the location of the model artifacts for the best tuned model. - - Upload the model artifacts to a `Vertex AI Model` resource. -- Execute a Vertex AI pipeline. - -[Get started with machine management for Vertex AI Pipelines](community/ml_ops/stage3/get_started_with_machine_management.ipynb) - -In this tutorial, you convert a self-contained custom training component into a `Vertex AI CustomJob`, whereby: - - - The training job and artifacts are trackable. - - Set machine resources, such as machine-type, cpu/gpu, memory, disk, etc. - -The steps performed in this tutorial include: - -- Create a custom component with a self-contained training job. -- Execute pipeline using component-level settings for machine resources -- Convert the self-contained training component into a `Vertex AI CustomJob`. -- Execute pipeline using customjob-level settings for machine resources - -[Get started with TFX pipelines](community/ml_ops/stage3/get_started_with_tfx_pipeline.ipynb) - -In this tutorial, you learn how to use TensorFlow Extended (TFX) with `Vertex AI Pipelines`. - -The steps performed include: - -- Create a TFX e2e pipeline. -- Execute the pipeline locally. -- Execute the pipeline on Google Cloud using `Vertex AI Training` -- Execute the pipeline using `Vertex AI Pipelines`. - -[Get started with BigQuery ML pipeline components](community/ml_ops/stage3/get_started_with_bqml_pipeline_components.ipynb) - -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `BigQuery ML`. - -The steps performed include: - -- Construct a pipeline for: - - Training BigQuery ML model. - - Evaluating the BigQuery ML model. - - Exporting the BigQuery ML model. - - Importing the BigQuery ML model to a Vertex AI model. - - Deploy the Vertex AI model. -- Execute a Vertex AI pipeline. -- Make a prediction with the deployed Vertex AI model. - -[Get started with AutoML tabular pipeline workflows](community/ml_ops/stage3/get_started_with_automl_tabular_pipeline_workflow.ipynb) - -In this tutorial, you learn how to use `AutoML Tabular Pipeline Template` for training, exporting and tuning an AutoML tabular model. - -The steps performed include: - -- Define training specification. - - Dataset specification - - Hyperparameter overide specification - - machine specifications -- Construct tabular workflow pipeline. -- Compile and execute pipeline. -- View evaluation metrics artifact. -- Export AutoML model as an OSS TF model. -- Create `Endpoint` resource. -- Deploy exported OSS TF model. -- Make a prediction. - -[Get started with rapid prototyping with AutoML and BigQuery ML](community/ml_ops/stage3/get_started_with_rapid_prototyping_bqml_automl.ipynb) - -In this tutorial, you learn how to use `Vertex AI Predictions` for rapid prototyping a model. - -The steps performed include: - -- Creating a BigQuery and Vertex AI training dataset. -- Training a BigQuery ML and AutoML model. -- Extracting evaluation metrics from the BigQueryML and AutoML models. -- Selecting the best trained model. -- Deploying the best trained model. -- Testing the deployed model infrastructure. - -[Get started with AutoML pipeline components](community/ml_ops/stage3/get_started_with_automl_pipeline_components.ipynb) - -In this tutorial, you learn how to use prebuilt `Google Cloud Pipeline Components` for `Vertex AI AutoML`. - -The steps performed include: - -- Construct a pipeline for: - - Training a Vertex AI AutoML trained model. - - Test the serving binary with a batch prediction job. - - Deploying a Vertex AI AutoML trained model. -- Execute a Vertex AI pipeline. - - -[Get started with BigQuery and TFDV pipeline components](community/ml_ops/stage3/get_started_with_bq_tfdv_pipeline_components.ipynb) - -In this tutorial, you learn how to use build lightweight Python components for BigQuery and TensorFlow Data Validation. - -The steps performed include: - -- Build and execute a pipeline component for creating a Vertex AI Tabular Dataset from a BigQuery table. -- Build and execute a pipeline component for generating TFDV statistics and schema from a Vertex AI Tabular Dataset. -- Execute a Vertex AI pipeline. +``` ### E2E Stage Example -Stage 4: Evaluation diff --git a/notebooks/community/ml_ops/stage5/README.md b/notebooks/community/ml_ops/stage5/README.md index 412ae88c6..4200e5d29 100644 --- a/notebooks/community/ml_ops/stage5/README.md +++ b/notebooks/community/ml_ops/stage5/README.md @@ -25,9 +25,10 @@ The fifth stage in MLOps is deployment to production of the blessed model, which ### Get Started -[Get started with Vertex AI Endpoints](community/ml_ops/stage5/get_started_with_vertex_endpoints.ipynb) +[Get started with Vertex AI Endpoints](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage5/get_started_with_vertex_endpoints.ipynb) -In this tutorial, you learn how to use `Vertex AI Endpoint` resources. +``` +Learn how to use `Vertex AI Endpoint` resources. The steps performed include: @@ -46,9 +47,13 @@ The steps performed include: - In pipeline: Create an `Endpoint` resource and deploy an existing `Model` resource to the `Endpoint` resource. - In pipeline: Deploy an existing `Model` resource to an existing `Endpoint` resource. -[Get started with Vertex AI Endpoint and shared VM](community/ml_ops/stage5/get_started_with_vertex_endpoint_and_shared_vm.ipynb) +``` -In this tutorial, you learn how to use deployment resource pools for deploying models. A deployment resouce pool provides one with the ability to co-host more than one model on the same (shared) VM. + +[Get started with Vertex AI Endpoint and shared VM](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage5/get_started_with_vertex_endpoint_and_shared_vm.ipynb) + +``` +Learn how to use deployment resource pools for deploying models. The steps performed include: @@ -62,9 +67,13 @@ The steps performed include: - Make a prediction request with first deployed model (model A). - Make a prediction request with second deployed model (model B). -[Get started with configuring autoscaling for Vertex AI Endpoint deployment](community/ml_ops/stage5/get_started_with_autoscaling.ipynb) +``` -In this tutorial, you learn how to use fine-tune control auto-scaling configuration when deploying a `Model` resource to an `Endpoint` resource. + +[Get started with configuring autoscaling for Vertex AI Endpoint deployment](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage5/get_started_with_autoscaling.ipynb) + +``` +Learn how to use fine-tune control auto-scaling configuration when deploying a `Model` resource to an `Endpoint` resource. The steps performed include: @@ -78,9 +87,13 @@ The steps performed include: - Fine-tune scaling thresholds for GPU utilization. - Deploy mix of CPU and GPU model instances with auto-scaling to an `Endpoint` resource. -[Get started with Vertex AI Private Endpoints](community/ml_ops/stage5/get_started_with_vertex_private_endpoints.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Private Endpoint` resources. + +[Get started with Vertex AI Private Endpoints](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage5/get_started_with_vertex_private_endpoints.ipynb) + +``` +Learn how to use `Vertex AI Private Endpoint` resources. The steps performed include: @@ -89,8 +102,5 @@ The steps performed include: - Configuring the serving binary of a `Model` resource for deployment to a `Private Endpoint` resource. - Deploying a `Model` resource to a `Private Endpoint` resource. - Send a prediction request to a `Private Endpoint` -- Enable two additional APIs: Service Networking and Cloud DNS. -- Add Compute Admin Network role to your (default) service account. -- Issue two gcloud commands to setup the VPC peering for your service account. -- There is *currently* no SDK support yet, so private endpoint is created with GAPIC client and has an extra argument for the peering network. -- To send a request, you can't use SDK/GAPIC since they do a HTTP internet request. Instead, you use curl to send a peer-to-peer request. + +``` \ No newline at end of file diff --git a/notebooks/community/ml_ops/stage5/get_started_with_vertex_endpoint_and_shared_vm.ipynb b/notebooks/community/ml_ops/stage5/get_started_with_vertex_endpoint_and_shared_vm.ipynb index 7c56bf3ab..31155d545 100644 --- a/notebooks/community/ml_ops/stage5/get_started_with_vertex_endpoint_and_shared_vm.ipynb +++ b/notebooks/community/ml_ops/stage5/get_started_with_vertex_endpoint_and_shared_vm.ipynb @@ -159,9 +159,9 @@ "\n", "# Install the packages\n", "\n", - "! pip3 install --upgrade google-cloud-aiplatform $USER_FLAG -q\n", - "! pip3 install --upgrade tensorflow $USER_FLAG -q\n", - "! pip3 install --upgrade tensorflow-hub $USER_FLAG -q" + "! pip3 install --upgrade google-cloud-aiplatform \\\n", + " tensorflow \\\n", + " tensorflow-hub $USER_FLAG -q" ] }, { @@ -307,22 +307,29 @@ "id": "timestamp" }, "source": [ - "#### Timestamp\n", + "#### UUID\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." + "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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "timestamp" + "id": "84Vdv7R-QEH6" }, "outputs": [], "source": [ - "from datetime import datetime\n", + "import random\n", + "import string\n", "\n", - "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" ] }, { @@ -421,7 +428,7 @@ "outputs": [], "source": [ "if BUCKET_URI == \"\" or BUCKET_URI is None or BUCKET_URI == \"gs://[your-bucket-name]\":\n", - " BUCKET_NAME = PROJECT_ID + \"aip-\" + TIMESTAMP\n", + " BUCKET_NAME = PROJECT_ID + \"aip-\" + UUID\n", " BUCKET_URI = \"gs://\" + BUCKET_NAME" ] }, @@ -523,7 +530,7 @@ "\n", "Setup up the following constants for Vertex AI:\n", "\n", - "- `API_ENDPOINT`: The Vertex AI API service endpoint for `Endpoint` services." + "- `API_ENDPOINT`: The Vertex AI API service endpoint." ] }, { @@ -538,46 +545,10 @@ "API_ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", "\n", "# Vertex location root path for your dataset, model and endpoint resources\n", - "PARENT = \"projects/\" + PROJECT_ID + \"/locations/\" + REGION" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "clients:metadata" - }, - "source": [ - "## Set up clients\n", + "PARENT = \"projects/\" + PROJECT_ID + \"/locations/\" + REGION\n", "\n", - "The Vertex works as a client/server model. On your side (the Python script) you will create a client that sends requests and receives responses from the Vertex AI server.\n", - "\n", - "You will use different clients in this tutorial for different steps in the workflow. So set them all up upfront.\n", - "\n", - "- Endpoint Service for creating endpoints, and deploying models to endpoints." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "clients:metadata" - }, - "outputs": [], - "source": [ "# client options same for all services\n", - "client_options = {\"api_endpoint\": API_ENDPOINT}\n", - "\n", - "\n", - "def create_endpoint_client():\n", - " client = aip_beta.EndpointServiceClient(client_options=client_options)\n", - " return client\n", - "\n", - "\n", - "clients = {}\n", - "clients[\"endpoint\"] = create_endpoint_client()\n", - "\n", - "for client in clients.items():\n", - " print(client)" + "client_options = {\"api_endpoint\": API_ENDPOINT}" ] }, { @@ -592,7 +563,7 @@ "\n", "Set the variables `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Telsa K80 GPUs allocated to each VM, you would specify:\n", "\n", - " (aip.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + " (aip.gapic.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", "\n", "\n", "Otherwise specify `(None, None)` to use a container image to run on a CPU.\n", @@ -902,7 +873,7 @@ "outputs": [], "source": [ "model_icn = aiplatform.Model.upload(\n", - " display_name=\"icn_\" + TIMESTAMP,\n", + " display_name=\"icn_\" + UUID,\n", " artifact_uri=MODEL_ICN_DIR,\n", " serving_container_image_uri=DEPLOY_IMAGE,\n", ")\n", @@ -1013,7 +984,7 @@ "outputs": [], "source": [ "model_use = aiplatform.Model.upload(\n", - " display_name=\"icn_\" + TIMESTAMP,\n", + " display_name=\"icn_\" + UUID,\n", " artifact_uri=MODEL_USE_DIR,\n", " serving_container_image_uri=DEPLOY_IMAGE,\n", ")\n", @@ -1029,64 +1000,55 @@ "source": [ "## Creating a deployment resource pool\n", "\n", - "Currently, creating deploynent resource pools is only supported via the REST-based API (e.g., CURL).\n", + "Currently, creating deploynent resource pools is only supported via the REST-based API (e.g., CURL) and GAPIC APIs (Python).\n", "\n", - "Use `CreateDeploymentResourcePool` API to create a resource pool, with the following configuration:\n", + "Use `create_deployment_resource_pool` API to create a resource pool, with the following configuration:\n", "\n", "- `dedicated_resources`: Compute (HW) resources to allocate for the shared vm.\n", "- `min_replica_count`: Auto-scaling, the minimum number of compute nodes.\n", "- `max_replica_count`: Auto-scaling, the maximum number of compute nodes.\n", "\n", - "Learn more about [Deployment Resource Pools]()." + "Learn more about [Deployment Resource Pools](https://googleapis.dev/python/aiplatform/latest/aiplatform_v1beta1/deployment_resource_pool_service.html)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "YiBmoiWYcMQt" + "id": "90c51b6cf34a" }, "outputs": [], "source": [ - "DEPLOYMENT_RESOURCE_POOL_ID = \"shared-vm\" # @param {type: \"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "0CHPJ4h-Slgs" - }, - "outputs": [], - "source": [ - "import json\n", - "import pprint\n", - "pp = pprint.PrettyPrinter(indent=4)\n", - "\n", + "DEPLOYMENT_RESOURCE_POOL_ID = f\"shared-vm-{UUID}\" # @param {type: \"string\"}\n", "MIN_NODES = 1\n", "MAX_NODES = 2\n", "\n", - "CREATE_RP_PAYLOAD = {\n", - " \"deployment_resource_pool\":{\n", - " \"dedicated_resources\":{\n", - " \"machine_spec\":{\n", - " \"machine_type\": DEPLOY_COMPUTE\n", - " },\n", - " \"min_replica_count\": MIN_NODES, \n", - " \"max_replica_count\": MAX_NODES\n", - " }\n", - " },\n", - " \"deployment_resource_pool_id\":DEPLOYMENT_RESOURCE_POOL_ID\n", - "}\n", - "CREATE_RP_REQUEST=json.dumps(CREATE_RP_PAYLOAD)\n", - "pp.pprint(\"CREATE_RP_REQUEST: \" + CREATE_RP_REQUEST)\n", + "# Initialize request argument(s)\n", + "deployment_resource_pool = aip_beta.DeploymentResourcePool()\n", + "deployment_resource_pool.dedicated_resources.min_replica_count = MIN_NODES\n", + "deployment_resource_pool.dedicated_resources.max_replica_count = MAX_NODES\n", + "deployment_resource_pool.dedicated_resources.machine_spec.machine_type = DEPLOY_COMPUTE\n", + "if DEPLOY_NGPU:\n", + " deployment_resource_pool.dedicated_resources.machine_spec.accelerator_type = DEPLOY_GPU\n", + " deployment_resource_pool.dedicated_resources.machine_spec.accelerator_count = DEPLOY_NGPU\n", "\n", - "! curl \\\n", - "-X POST \\\n", - "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", - "-H \"Content-Type: application/json\" \\\n", - "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools \\\n", - "-d '{CREATE_RP_REQUEST}'" + "request = aip_beta.CreateDeploymentResourcePoolRequest(\n", + " parent=f\"projects/{PROJECT_ID}/locations/{REGION}\",\n", + " deployment_resource_pool=deployment_resource_pool,\n", + " deployment_resource_pool_id=DEPLOYMENT_RESOURCE_POOL_ID,\n", + ")\n", + "\n", + "pool_client = aip_beta.services.deployment_resource_pool_service.DeploymentResourcePoolServiceClient(\n", + " client_options=client_options\n", + ")\n", + "\n", + "op = pool_client.create_deployment_resource_pool(request=request)\n", + "print(op)\n", + "\n", + "result = op.result()\n", + "print(result)\n", + "\n", + "deployment_pool_id = result.name" ] }, { @@ -1099,21 +1061,19 @@ "\n", "Use `GetDeploymentResourcePool` API to check out the deploynent resource pool that you created. \n", "\n", - "Learn more about [Get Deployment Resource Pool](https://source.corp.google.com/piper///depot/google3/google/cloud/aiplatform/master/deployment_resource_pool_service.proto;l=75?q=deployment_resource_pool&sq=package:piper%20file:%2F%2Fdepot%2Fgoogle3%20-file:google3%2Fexperimental)." + "Learn more about [Get Deployment Resource Pool](https://googleapis.dev/python/aiplatform/latest/aiplatform_v1beta1/deployment_resource_pool_service.html)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "6wTLyhPraFah" + "id": "b740253903c0" }, "outputs": [], "source": [ - "! curl -X GET \\\n", - "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", - "-H \"Content-Type: application/json\" \\\n", - "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools/{DEPLOYMENT_RESOURCE_POOL_ID}" + "response = pool_client.get_deployment_resource_pool(name=deployment_pool_id)\n", + "print(response)" ] }, { @@ -1126,21 +1086,22 @@ "\n", "Use `ListDeploymentResourcePools` API to list all the deployment resource pools. \n", "\n", - "Learn more about [Listing Deployment Resource Pools](https://source.corp.google.com/piper///depot/google3/google/cloud/aiplatform/master/deployment_resource_pool_service.proto;l=101?q=deployment_resource_pool&sq=package:piper%20file:%2F%2Fdepot%2Fgoogle3%20-file:google3%2Fexperimental)." + "Learn more about [Listing Deployment Resource Pools](https://googleapis.dev/python/aiplatform/latest/aiplatform_v1beta1/deployment_resource_pool_service.html)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "Pxls4sNnaltU" + "id": "3ebfd007bff2" }, "outputs": [], "source": [ - "! curl -X GET \\\n", - "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", - "-H \"Content-Type: application/json\" \\\n", - "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools" + "pools = pool_client.list_deployment_resource_pools(\n", + " parent=f\"projects/{PROJECT_ID}/locations/{REGION}\"\n", + ")\n", + "for pool in pools:\n", + " print(pool)" ] }, { @@ -1170,11 +1131,11 @@ }, "outputs": [], "source": [ - "endpoint_icn = aiplatform.Endpoint.create(display_name=\"icn_\" + TIMESTAMP)\n", + "endpoint_icn = aiplatform.Endpoint.create(display_name=\"icn_\" + UUID)\n", "\n", "print(endpoint_icn)\n", "\n", - "endpoint_use = aiplatform.Endpoint.create(display_name=\"use_\" + TIMESTAMP)\n", + "endpoint_use = aiplatform.Endpoint.create(display_name=\"use_\" + UUID)\n", "\n", "print(endpoint_use)" ] @@ -1204,6 +1165,12 @@ }, "outputs": [], "source": [ + "import json\n", + "import pprint\n", + "\n", + "pp = pprint.PrettyPrinter(indent=4)\n", + "\n", + "\n", "SHARED_RESOURCE = \"projects/{project_id}/locations/{region}/deploymentResourcePools/{deployment_resource_pool_id}\".format(\n", " project_id=PROJECT_ID,\n", " region=REGION,\n", @@ -1363,18 +1330,27 @@ " time.sleep(30)" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "52248c450776" + }, + "source": [ + "### Get deployment details for the endpoint\n", + "\n", + "List the deployed models on the endpoint." + ] + }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "86a659bf60f0" + "id": "3b768614e7c6" }, "outputs": [], "source": [ - "! curl -X GET \\\n", - " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", - " -H \"Content-Type: application/json\" \\\n", - "https://{REGION}-aiplatform.googleapis.com/v1/projects/759209241365/locations/us-central1/endpoints/2259566763823857664" + "print(endpoint_icn.list_models())\n", + "print(endpoint_use.list_models())" ] }, { @@ -1557,21 +1533,19 @@ "source": [ "#### Delete the `DeploymentResourcePool`\n", "\n", - "The method 'delete()' will delete your deployment resource pool." + "The method 'delete_deployment_resource_pool()' will delete your deployment resource pool." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "ac40cc1d594a" + "id": "b76a4de1e57e" }, "outputs": [], "source": [ - "! curl -X DELETE \\\n", - "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", - "-H \"Content-Type: application/json\" \\\n", - "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools/{DEPLOYMENT_RESOURCE_POOL_ID}" + "response = pool_client.delete_deployment_resource_pool(name=deployment_pool_id)\n", + "print(response)" ] }, { diff --git a/notebooks/community/ml_ops/stage6/README.md b/notebooks/community/ml_ops/stage6/README.md index b1f2db973..dded83fb8 100644 --- a/notebooks/community/ml_ops/stage6/README.md +++ b/notebooks/community/ml_ops/stage6/README.md @@ -30,19 +30,23 @@ This stage may be done entirely by MLOps. We recommend: ### Get Started -[Get started with Vertex AI Batch Prediction for AutoML image models](community/ml_ops/stage6/get_started_with_automl_image_model_batch.ipynb) +[Get started with Vertex AI Batch Prediction for AutoML image models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_image_model_batch.ipynb) -In this tutorial, you create an AutoML image classification model from a Python script, and then do a batch prediction using the Vertex AI SDK. +``` +Learn how to create an AutoML image classification model from a Python script, and then do a batch prediction using the Vertex AI SDK. The steps performed include: - Create a Vertex `Dataset` resource. - Train an `AutoML` image classification model. - Make a batch prediction with JSONL input. +``` -[Get started with Vertex AI Matching Engine and Swivel builtin algorithm](community/ml_ops/stage6/get_started_with_matching_engine_swivel.ipynb) -In this notebook, you learn how to train custom embeddings using Vertex AI Pipelines and subsequently train and deploy a matching engine index using the embeddings. +[Get started with Vertex AI Matching Engine and Swivel builtin algorithm](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_matching_engine_swivel.ipynb) + +``` +Learn how to train custom embeddings using Vertex AI Pipelines and subsequently train and deploy a matching engine index using the embeddings. The steps performed include: @@ -54,9 +58,13 @@ The steps performed include: 6. Deploy the `Matching Engine Index` to a `Index Endpoint`. 7. Make a matching engine prediction request. -[Get started with Vertex AI Matching Engine](community/ml_ops/stage6/get_started_with_matching_engine.ipynb) +``` -In this notebook, you learn how to create Approximate Nearest Neighbor (ANN) Index, query against indexes. + +[Get started with Vertex AI Matching Engine](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_matching_engine.ipynb) + +``` +Learn how to create Approximate Nearest Neighbor (ANN) Index, query against indexes. The steps performed include: @@ -67,10 +75,13 @@ The steps performed include: - Deploy brute force Index. - Perform calibration between ANN and brute force index. -[Get started with Vertex AI Matching Engine and Two Towers builtin algorithm](community/ml_ops/stage6/get_started_with_matching_engine_twotowers.ipynb) +``` -In this notebook, you learn how to use the `Two-Tower` builtin algorithms for generating embeddings for a dataset, for use with generating an `Matching Engine Index`, with the `Vertex AI Matching Engine` service. +[Get started with Vertex AI Matching Engine and Two Towers builtin algorithm](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_matching_engine_twotowers.ipynb) + +``` +Learn how to use the `Two-Tower` builtin algorithms for generating embeddings for a dataset, for use with generating an `Matching Engine Index`, with the `Vertex AI Matching Engine` service. The steps performed include: @@ -83,9 +94,30 @@ The steps performed include: 7. Deploy the `Matching Engine Index` to a `Index Endpoint`. 8. Make a matching engine prediction request. -[Get started with Vertex AI Batch Prediction for custom tabular models](community/ml_ops/stage6/get_started_with_custom_tabular_model_batch.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Batch Prediction` with a custom tabular model. + +[Get started with TensorFlow Serving with Vertex AI Prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_tf_serving_tabular.ipynb) + +``` +Learn how to use `Vertex AI Prediction` on a `Vertex AI Endpoint` resource with `TensorFlow Serving` serving binary. + +The steps performed include: + +- Download a pretrained TensorFlow tabular model. +- Upload the TensorFlow model as a `Vertex AI Model` resource. +- Creating an `Endpoint` resource. +- Deploying the `Model` resource to an `Endpoint` resource with `TensorFlow Serving` serving binary. +- Make an online prediction to the `Model` resource instance deployed to the `Endpoint` resource. +- Make a batch prediction to the `Model` resource instance. + +``` + + +[Get started with Vertex AI Batch Prediction for custom tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_custom_tabular_model_batch.ipynb) + +``` +Learn how to use `Vertex AI Batch Prediction` with a custom tabular model. The steps performed include: @@ -93,10 +125,13 @@ The steps performed include: - Make batch prediction to the `Model` resource, in JSONL format. - Make batch prediction to the `Model` resource, in CSV format. - Make batch prediction to the `Model` resource, in BigQuery format. +``` -[Get started with Optimized TensorFlow Enterprise container with Vertex AI Prediction / text models](community/ml_ops/stage6/get_started_with_optimized_tfe_bert.ipynb) -In this tutorial, you learn how to use `TensorFlow Enterprise Optimized` container for TensorFlow models deployed to a `Vertex AI Endpoint` resource. +[Get started with Optimized TensorFlow Enterprise container with Vertex AI Prediction / text models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_optimized_tfe_bert.ipynb) + +``` +Learn how to use `TensorFlow Enterprise Optimized` container for TensorFlow models deployed to a `Vertex AI Endpoint` resource. The steps performed include: @@ -113,9 +148,13 @@ The steps performed include: - Deploy the `Model` resoure with then `TensorFlow Enterprise Optimized` to the `Private Endpoint` resource. - Make an online prediction request to the `Private Endpoint` resource. -[Get started with Vertex AI Batch Prediction and Explainable AI for AutoML tabular models](community/ml_ops/stage6/get_started_with_automl_tabular_model_batch.ipynb) +``` -In this tutorial, you create an AutoML tabular binary classification model from a Python script, and then do a batch prediction with Explainable AI using the Vertex AI SDK. You can alternatively create and deploy models using the `gcloud` command-line tool or online using the Cloud Console. + +[Get started with Vertex AI Batch Prediction and Explainable AI for AutoML tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_tabular_model_batch.ipynb) + +``` +In this tutorial, you create an AutoML tabular binary classification model from a Python script, and then do a batch prediction with Explainable AI using the Vertex AI SDK. The steps performed include: @@ -126,10 +165,13 @@ The steps performed include: - Make a batch prediction with JSONL list input. - Make a batch prediction with BigQuery table input. - Make a batch prediction with explanations. +``` -[Get started with re-importing AutoML tabular models](community/ml_ops/stage6/get_started_with_automl_tabular_exported_deploy.ipynb) -In this tutorial, you learn how to use `AutoML Tabular` for re-importing exported model artifacts as a `Model` resource. This is useful for example, if one wants to move the exported model across projects. +[Get started with re-importing AutoML tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_tabular_exported_deploy.ipynb) + +``` +Learn how to use `AutoML Tabular` for re-importing exported model artifacts as a `Model` resource. The steps performed include: @@ -138,19 +180,44 @@ The steps performed include: - Deploy the `Model` resource to the `Endpoint` resource. - Make a prediction. -[Get started with Vertex AI Batch Prediction for AutoML text models](community/ml_ops/stage6/get_started_with_automl_text_model_batch.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Batch Prediction` with a `AutoML` text model. + +[Get started with Vertex AI Online Prediction for XGBoost custom models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_xgboost_model_online.ipynb) + +``` +In this tutorial, you deploy an XGBoost model, and then do an online prediction using the Vertex AI SDK. + +The steps performed include: + +- Upload an XGBoost model as a Vertex AI Model resource. +- Deploy the model to a Vertex AI Endpoint resource. +- Make an online prediction. +- Construct a Vertex AI Pipeline: + - Upload an XGBoost model as a Vertex AI Model resource. + - Deploy the model to a Vertex AI Endpoint resource. +- Make an online prediction + +``` + + +[Get started with Vertex AI Batch Prediction for AutoML text models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_text_model_batch.ipynb) + +``` +Learn how to use `Vertex AI Batch Prediction` with a `AutoML` text model. The steps performed include: - Create a Vertex `Dataset` resource. - Train an `AutoML` model. - Make a batch prediction with JSONL input +``` -[Get started with Vertex AI Prediction for AutoML text models](community/ml_ops/stage6/get_started_with_automl_text_model_online.ipynb) -In this tutorial, you learn how to use `Vertex AI Prediction` with a `AutoML` text model. +[Get started with Vertex AI Prediction for AutoML text models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_text_model_online.ipynb) + +``` +Learn how to use `Vertex AI Prediction` with a `AutoML` text model. The steps performed include: @@ -159,9 +226,13 @@ The steps performed include: - Deploy the model to an `Endpoint` resource. - Make an online prediction. -[Get started with TensorFlow serving functions with Vertex AI Raw Prediction](community/ml_ops/stage6/get_started_with_raw_predict.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Raw Prediction` on a `Vertex AI Endpoint` resource. + +[Get started with TensorFlow serving functions with Vertex AI Raw Prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_raw_predict.ipynb) + +``` +Learn how to use `Vertex AI Raw Prediction` on a `Vertex AI Endpoint` resource. The steps performed include: @@ -171,9 +242,13 @@ The steps performed include: - Deploying the `Model` resource to an `Endpoint` resource. - Make an online raw prediction to the `Model` resource instance deployed to the `Endpoint` resource. -[Get started with TensorFlow serving functions with Vertex AI Prediction](community/ml_ops/stage6/get_started_with_tf_serving_function.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Prediction` on a `Vertex AI Endpoint` resource with a serving function. + +[Get started with TensorFlow serving functions with Vertex AI Prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_tf_serving_function.ipynb) + +``` +Learn how to use `Vertex AI Prediction` on a `Vertex AI Endpoint` resource with a serving function. The steps performed include: @@ -184,13 +259,17 @@ The steps performed include: - Deploying the `Model` resource to an `Endpoint` resource. - Make an online prediction to the `Model` resource instance deployed to the `Endpoint` resource. -[Get started with Vertex Explainable AI using custom deployment container](community/ml_ops/stage6/get_started_with_xai_and_custom_server.ipynb) +``` -In this tutorial, you learn to build a custom container to serve a PyTorch model on `Vertex AI Endpoint`. + +[Get started with Vertex Explainable AI using custom deployment container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_xai_and_custom_server.ipynb) + +``` +Learn to build a custom container to serve a PyTorch model on `Vertex AI Endpoint`. The steps performed include: -- Locally train a Pytorch tabular classifier. +- Locally train a PyTorch tabular classifier. - Locally test the trained model. - Build a HTTP server using FastAPI. - Create a custom serving container with the trained model and FastAPI server. @@ -201,9 +280,13 @@ The steps performed include: - Make a prediction request to the deployed custom serving container. - Make an explanation request to the deployed custom serving container. -[Get started with Vertex AI Online Prediction for AutoML image models](community/ml_ops/stage6/get_started_with_automl_image_model_online.ipynb) +``` -In this tutorial, you create an AutoML image classification model from a Python script, and then do an online prediction using the Vertex AI SDK. + +[Get started with Vertex AI Online Prediction for AutoML image models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_image_model_online.ipynb) + +``` +In this tutorial, you create an AutoML image classification model from a Python script, and then do an online prediction using the Vertex AI SDK. The steps performed include: @@ -211,9 +294,13 @@ The steps performed include: - Train an `AutoML` image classification model. - Make an online prediction. -[Get started with FastAPI with Vertex AI Prediction](community/ml_ops/stage6/get_started_with_fastapi.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Prediction` on a `Vertex AI Endpoint` with a custom serving binary using `FastAPI`. + +[Get started with FastAPI with Vertex AI Prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_fastapi.ipynb) + +``` +Learn how to use `Vertex AI Prediction` on a `Vertex AI Endpoint` with a custom serving binary using `FastAPI`. The steps performed include: @@ -224,9 +311,13 @@ The steps performed include: - Deploying the `Model` resource to an `Endpoint` resource with `FastAPI` custom serving binary. - Make an online prediction to the `Model` resource instance deployed to the `Endpoint` resource. -[Get started with Vertex AI Online Prediction for AutoML tabular models](community/ml_ops/stage6/get_started_with_automl_tabular_model_online.ipynb) +``` -In this tutorial, you create an AutoML tabular binary classification model from a Python script, and then do an online prediction using the Vertex AI SDK. + +[Get started with Vertex AI Online Prediction for AutoML tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_tabular_model_online.ipynb) + +``` +In this tutorial, you create an AutoML tabular binary classification model from a Python script, and then do an online prediction using the Vertex AI SDK. The steps performed include: @@ -236,9 +327,13 @@ The steps performed include: - Make an online prediction. - Make an online prediction with explanations. -[Get started with TensorFlow Serving with Vertex AI Prediction](community/ml_ops/stage6/get_started_with_tf_serving.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Prediction` on a `Vertex AI Endpoint` resource with `TensorFlow Serving` serving binary. + +[Get started with TensorFlow Serving with Vertex AI Prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_tf_serving.ipynb) + +``` +Learn how to use `Vertex AI Prediction` on a `Vertex AI Endpoint` resource with `TensorFlow Serving` serving binary. The steps performed include: @@ -250,9 +345,13 @@ The steps performed include: - Make an online prediction to the `Model` resource instance deployed to the `Endpoint` resource. - Make a batch prediction to the `Model` resource instance. -[Get started with Custom Prediction Routine (CPR)](community/ml_ops/stage6/get_started_with_cpr.ipynb) +``` -In this tutorial, you learn how to use Custom Prediction Routine (CPR) for `Vertex AI Predictions`. + +[Get started with Custom Prediction Routine (CPR)](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_cpr.ipynb) + +``` +Learn how to use Custom Prediction Routine (CPR) for `Vertex AI Predictions`. The steps performed include: @@ -278,19 +377,26 @@ The steps performed include: - Upload and deploy the model serving container to Vertex AI Endpoint. - Make a prediction request. -[Get started with Vertex AI Batch Prediction for custom text models](community/ml_ops/stage6/get_started_with_custom_text_model_batch.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Batch Prediction` with a custom text model. + +[Get started with Vertex AI Batch Prediction for custom text models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_custom_text_model_batch.ipynb) + +``` +Learn how to use `Vertex AI Batch Prediction` with a custom text model. The steps performed include: - Download a pretrained TensorFlow RNN model. - Upload the pretrained model as a `Vertex AI Model` resource. - Make batch prediction to the `Model` resource, in JSONL format. +``` -[Get started with NVIDIA Triton server](community/ml_ops/stage6/get_started_with_nvidia_triton_serving.ipynb) -In this tutorial, you deploy a container running Nvidia Triton Server with a `Vertex AI Model` resource to a `Vertex AI Endpoint` for making online predictions. +[Get started with NVIDIA Triton server](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_nvidia_triton_serving.ipynb) + +``` +Learn how to deploy a container running Nvidia Triton Server with a `Vertex AI Model` resource to a `Vertex AI Endpoint` for making online predictions. The steps performed in this tutorial include: @@ -302,9 +408,13 @@ The steps performed in this tutorial include: - Make a prediction request - Undeploy the `Model` resource and delete the `Endpoint` -[Get started with Vertex AI Batch Prediction for custom image models](community/ml_ops/stage6/get_started_with_custom_image_model_batch.ipynb) +``` -In this tutorial, you learn how to use `Vertex AI Batch Prediction` with a custom image model. + +[Get started with Vertex AI Batch Prediction for custom image models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_custom_image_model_batch.ipynb) + +``` +Learn how to use `Vertex AI Batch Prediction` with a custom image model. The steps performed include: @@ -314,13 +424,17 @@ The steps performed include: - Create a serving function to receive compressed image data, and output decomopressed preprocessed data for the model input. - Upload the TensorFlow Hub model and serving function as a `Vertex AI Model` resource. - Make batch prediction with compressed image data to the `Model` resource, in File-List format. +``` -[Get started with Vertex AI Batch Prediction for AutoML video models](community/ml_ops/stage6/get_started_with_automl_video_model_batch.ipynb) -In this tutorial, you learn how to use `Vertex AI Batch Prediction` with a `AutoML` video model. +[Get started with Vertex AI Batch Prediction for AutoML video models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_automl_video_model_batch.ipynb) + +``` +Learn how to use `Vertex AI Batch Prediction` with a `AutoML` video model. The steps performed include: - Create a Vertex `Dataset` resource. - Train an `AutoML` model. -- Make a batch prediction with JSONL input. \ No newline at end of file +- Make a batch prediction with JSONL input +``` diff --git a/notebooks/community/ml_ops/stage7/README.md b/notebooks/community/ml_ops/stage7/README.md index 66a7e699e..9bc7608ef 100644 --- a/notebooks/community/ml_ops/stage7/README.md +++ b/notebooks/community/ml_ops/stage7/README.md @@ -35,9 +35,28 @@ This stage may be done entirely by MLOps. We recommend: ### Get Started -[Vertex AI Model Monitoring for custom tabular models with TensorFlow Serving container](community/ml_ops/stage7/get_started_with_model_monitoring_custom_tf_serving.ipynb) +[Vertex AI Model Monitoring for XGBoost models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage7/get_started_with_model_monitoring_xgboost.ipynb) -In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models, using a custom deployment container. +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests for XGBoost models. + +The steps performed include: + +- Download a pre-trained XGBoost model. +- Upload the pre-trained model as a `Model` resource. +- Deploy the `Model` resource to the `Endpoint` resource. +- Configure the `Endpoint` resource for model monitoring: + - drift detection only -- no access to training data. + - predefine the input schema to map feature alias names to the unnamed array input to the model. +- Generate synthetic prediction requests for drift. + +``` + + +[Vertex AI Model Monitoring for custom tabular models with TensorFlow Serving container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage7/get_started_with_model_monitoring_custom_tf_serving.ipynb) + +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models, using a custom deployment container. The steps performed include: @@ -50,11 +69,13 @@ The steps performed include: - Generate synthetic prediction requests for drift. - Wait for email alert notification. +``` -[Vertex AI Model Monitoring for AutoML tabular models](community/ml_ops/stage7/get_started_with_model_monitoring_automl.ipynb) +[Vertex AI Model Monitoring for AutoML tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage7/get_started_with_model_monitoring_automl.ipynb) -In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for AutoML tabular models. +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for AutoML tabular models. The steps performed include: @@ -66,10 +87,13 @@ The steps performed include: - Generate synthetic prediction requests for drift. - Wait for email alert notification. +``` -[Vertex AI Model Monitoring for custom tabular models](community/ml_ops/stage7/get_started_with_model_monitoring_custom.ipynb) -In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models. +[Vertex AI Model Monitoring for custom tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage7/get_started_with_model_monitoring_custom.ipynb) + +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models. The steps performed include: @@ -82,11 +106,13 @@ The steps performed include: - Generate synthetic prediction requests for drift. - Wait for email alert notification. +``` -[Vertex AI Model Monitoring for setup for tabular models](community/ml_ops/stage7/get_started_with_model_monitoring_setup.ipynb) +[Vertex AI Model Monitoring for setup for tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage7/get_started_with_model_monitoring_setup.ipynb) -In this notebook, you learn to setup the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests. +``` +Learn to setup the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests. The steps performed include: @@ -100,3 +126,5 @@ The steps performed include: - List, pause, resume and delete monitoring jobs. - Restart monitoring job with predefined `input schema`. - View logged monitored data. + +``` diff --git a/notebooks/community/model_registry/vertex_ai_model_registry_bqml_custom_model_versioning.ipynb b/notebooks/community/model_registry/vertex_ai_model_registry_bqml_custom_model_versioning.ipynb index 045a445c3..0177c6e2e 100644 --- a/notebooks/community/model_registry/vertex_ai_model_registry_bqml_custom_model_versioning.ipynb +++ b/notebooks/community/model_registry/vertex_ai_model_registry_bqml_custom_model_versioning.ipynb @@ -29,7 +29,7 @@ "id": "JAPoU8Sm5E6e" }, "source": [ - "# Model Versioning with Vertex AI Model Registry\n", + "# Model Management with Vertex AI Model Registry\n", "\n", "\n", "\n", @@ -198,7 +198,7 @@ "if IS_WORKBENCH_NOTEBOOK:\n", " USER_FLAG = \"--user\"\n", "\n", - "! pip3 install --upgrade tensorflow google-cloud-bigquery google-cloud-aiplatform {USER_FLAG} -q --no-warn-conflicts" + "! pip3 install --upgrade tensorflow google-cloud-bigquery google-cloud-aiplatform \"shapely<2\" {USER_FLAG} -q --no-warn-conflicts" ] }, { @@ -1292,10 +1292,10 @@ " pandas \\\n", " python \\\n", " pyspark \\\n", - " findspark\n", + " findspark \n", "\n", "# Use conda to install spark-nlp\n", - "RUN ${CONDA_HOME}/bin/conda install -n base -c johnsnowlabs spark-nlp\n", + "RUN ${CONDA_HOME}/bin/conda install -n base -c johnsnowlabs 'spark-nlp=4.0.2'\n", "\n", "# Add lemma dictionary\n", "# ENV CONFIG_DIR='/home/app/build'\n", @@ -1425,7 +1425,7 @@ "import sparknlp\n", "from sparknlp.base import *\n", "from sparknlp.annotator import *\n", - "from pyspark.ml.feature import CountVectorizer\n", + "from pyspark.ml.feature import CountVectorizer, SQLTransformer\n", "from pyspark.ml import Pipeline\n", "\n", "# Variables ------------------------------------------------------------------------------------------------------------\n", @@ -1473,7 +1473,7 @@ " Returns:\n", " preliminary_steps: The preliminary steps for the preprocessing.\n", " '''\n", - "\n", + " \n", " document_assembler = DocumentAssembler().setInputCol(\"text\").setOutputCol(\"document\").setCleanupMode('shrink_full')\n", " sentence_detector = SentenceDetector().setInputCols(\"document\").setOutputCol(\"sentence\")\n", " tokenizer = Tokenizer().setInputCols(\"sentence\").setOutputCol(\"token\")\n", @@ -1512,6 +1512,16 @@ " feature_extraction_steps = [count_vectorizer]\n", " return feature_extraction_steps\n", "\n", + "def build_postprocessing_steps():\n", + " '''\n", + " This function builds the postprocessing steps.\n", + " Returns:\n", + " target_conversion_step: The target conversion step.\n", + " '''\n", + "\n", + " sql_transformer = SQLTransformer(statement=\"SELECT CASE WHEN (category != 'business') THEN 'other' ELSE category END AS category, text, lemma_features, features FROM __THIS__\")\n", + " build_postprocessing_steps = [sql_transformer]\n", + " return build_postprocessing_steps\n", "\n", "def read_data(spark_session, data_schema, input_dir):\n", " '''\n", @@ -1599,7 +1609,8 @@ " preliminary_steps = build_preliminary_steps()\n", " common_preprocess_steps = build_common_preprocess_steps(lemma_uri)\n", " feature_extraction_steps = build_feature_extraction_steps()\n", - " pipeline = Pipeline(stages=preliminary_steps + common_preprocess_steps + feature_extraction_steps)\n", + " postprocessing_steps = build_postprocessing_steps()\n", + " pipeline = Pipeline(stages=preliminary_steps + common_preprocess_steps + feature_extraction_steps + postprocessing_steps)\n", "\n", " # Read data\n", " logger.info('Reading data')\n", @@ -1697,6 +1708,7 @@ " --batch=$PREPROCESS_BATCH_ID \\\n", " --container-image=$DATAPROC_RUNTIME_CONTAINER_IMAGE \\\n", " --region=$REGION \\\n", + " --version='1.0.21' \\\n", " --subnet='default' \\\n", " --properties spark.executor.instances=2,spark.driver.cores=4,spark.executor.cores=4,spark.app.name=spark_preprocessing_job \\\n", " -- --input_path=$PREPARED_FILE_PATH --lemmas_path=$LEMMA_DICTIONARY_PATH --gcs_output_path=$PROCESS_DATA_PATH --bq_output_table_uri=$BQ_OUTPUT_TABLE_URI --bucket=$BUCKET_NAME --project=$PROJECT_ID" @@ -1954,7 +1966,7 @@ " \"accuracy\": round(accuracy_score(y_test, y_pred, sample_weight=get_weights(y_test)), 5),\n", " \"f1_score\": round(f1_score(y_test, y_pred, sample_weight=get_weights(y_test), average=\"weighted\"), 5),\n", " \"log_loss\": round(log_loss(y_test, y_pred_proba, sample_weight=get_weights(y_test)), 5),\n", - " \"roc_auc\": round(roc_auc_score(y_test, y_pred_proba, multi_class='ovr'), 5)\n", + " \"roc_auc\": round(roc_auc_score(y_test, y_pred_proba[:,1], sample_weight=get_weights(y_test), average=\"weighted\"), 5)\n", " }\n", " return metrics\n", "\n", @@ -2709,7 +2721,11 @@ "\n", "versions = registry.list_versions()\n", "for version in versions:\n", - " registry.delete_version(version=version.version_id)\n", + " if \"default\" not in version.version_aliases:\n", + " registry.delete_version(version=version.version_id)\n", + " else:\n", + " model = registry.get_model(version=\"default\")\n", + " model.delete()\n", "\n", "naive_bayes_train_job.delete()\n", "\n", diff --git a/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_anomaly_detection.ipynb b/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_anomaly_detection.ipynb new file mode 100644 index 000000000..784acc49d --- /dev/null +++ b/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_anomaly_detection.ipynb @@ -0,0 +1,1496 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Anomaly detection with BigQuery ML and Vertex AI\n", + "\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "24743cf4a1e1" + }, + "source": [ + "**_NOTE_**: This notebook has been tested in the following environment:\n", + "\n", + "* Python version = 3.9" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "Anomaly detection is the identification of rare observations which deviate significantly from the data using ML. Anomaly detection can be done in many ways. Supervised, unsupervised, graph-based. It is particularly important for certain industries like telecommunications, manufacturing, and financial services.\n", + "\n", + "For instance, in a manufacturing scenario, you may collect some sensor data to predict the number remaining cycles before engine failure (TTF). In this way, you can take actionable decisions about maintenance planning." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d975e698c9a4" + }, + "source": [ + "### Objective\n", + "\n", + "In the absence of labelled data, you may wonder how to best create an anomaly detector.\n", + "\n", + "In this notebook, you learn how to use autoencoders to detect anomalies from turbo fan engine data, and from there build an anomaly detection pipeline.\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- `Vertex AI Pipelines`\n", + "- `BigQuery ML pipeline components`\n", + "\n", + "\n", + "The steps performed include:\n", + "\n", + "- Define a custom evaluation and metrics visualization components\n", + "- Define a pipeline:\n", + " - Build training dataset in BigQuery\n", + " - Train a BigQuery AutoEncoder model\n", + " - Evaluate the BigQuery AutoEncoder model\n", + " - Check the model performance\n", + " - Build test dataset in BigQuery\n", + " - Detect anomalies\n", + " - Generate the MSE plot to evaluate predictions\n", + "- Compile the pipeline.\n", + "- Execute the pipeline." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "08d289fa873f" + }, + "source": [ + "### Dataset\n", + "\n", + "The [`NASA Turbofan Jet Engine Data Set`](https://www.kaggle.com/datasets/behrad3d/nasa-cmaps) is a multivariate time series where time series describes a different engine.\n", + "\n", + "The dataset contains 26 columns and it consists data taken during a single operational cycle.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aed92deeb4a0" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* BigQuery\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing),\n", + "[BigQuery pricing](https://cloud.google.com/bigquery/pricing)\n", + "and [Cloud Storage pricing](https://cloud.google.com/storage/pricing),\n", + "and use the [Pricing Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "## Installation\n", + "\n", + "Install the following packages required to execute this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "source": [ + "# Install the packages\n", + "! pip3 install --user --upgrade jinja2 google-cloud-bigquery kfp google-cloud-aiplatform google_cloud_pipeline_components -q --no-warn-conflicts" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58707a750154" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f200f10a1da3" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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 Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RXtUY-LAEB7c" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sBCra4QMA2wR" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "74ccc9e52986" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de775a3773ba" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "254614fa0c46" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ef21552ccea8" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "603adbbf0532" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f6b2ccc891ed" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zgPO1eR3CYjk" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "Create a storage bucket to store intermediate artifacts such as datasets." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MzGDU7TWdts_" + }, + "outputs": [], + "source": [ + "BUCKET_URI = \"gs://your-bucket-name-unique\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-EcIXiGsCePi" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NIq7R4HZCfIc" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gc1ubsMoF7wn" + }, + "source": [ + "### Set project template\n", + "\n", + "You create a set of repositories to organize your project locally." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "420y8i4KF_z4" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "KFP_COMPONENTS_PATH = \"components\"\n", + "PIPELINES_PATH = \"pipelines\"\n", + "TRAIN_PIPELINES_PATH = os.path.join(PIPELINES_PATH, \"train_pipelines\")\n", + "TEST_PIPELINES_PATH = os.path.join(PIPELINES_PATH, \"test_pipelines\")\n", + "\n", + "! mkdir -m 777 -p {KFP_COMPONENTS_PATH} {TRAIN_PIPELINES_PATH} {TEST_PIPELINES_PATH}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WRRE4t_bdzj_" + }, + "source": [ + "### Prepare the training data\n", + "\n", + "Next, you make a copy of the CSV training data into your Cloud Storage bucket and then create a BigQuery dataset table for the training data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8u7VsRuLaaVC" + }, + "outputs": [], + "source": [ + "PUBLIC_DATA_URI = (\n", + " \"gs://cloud-samples-data/vertex-ai/pipeline-deployment/datasets/turbofan_anomaly\"\n", + ")\n", + "GCS_TRAIN_URI = f\"{PUBLIC_DATA_URI}/train_FD001.csv\"\n", + "GCS_TEST_URI = f\"{PUBLIC_DATA_URI}/test_FD001.csv\"\n", + "GCS_LABELS_URI = f\"{PUBLIC_DATA_URI}/RUL_FD001.csv\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Wf3vIGViHYo3" + }, + "source": [ + "### Set the BigQuery datasets\n", + "\n", + "You create the following BigQuery datasets for the tutorial:\n", + "\n", + "- `sensors_train_raw_data_` contains training data collected from sensors\n", + "- `sensors_test_raw_data_` contains testing data collected from sensors\n", + "- `sensors_label_data_` contains testing label collected to validate results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "L-2dBWfq1FPq" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2ZfxQL8JHdHE" + }, + "outputs": [], + "source": [ + "LOCATION = REGION.split(\"-\")[0]\n", + "BQ_DATASET = \"iot_dataset\"\n", + "BQ_TRAIN_RAW_TABLE = f\"sensors_train_raw_data_{TIMESTAMP}\"\n", + "BQ_TEST_RAW_TABLE = f\"sensors_test_raw_data_{TIMESTAMP}\"\n", + "BQ_LABELS_TABLE = f\"sensors_label_data_{TIMESTAMP}\"\n", + "\n", + "! bq mk --location={LOCATION} --dataset {PROJECT_ID}:{BQ_DATASET}\n", + "\n", + "! bq load \\\n", + " --location={LOCATION} \\\n", + " --source_format=CSV \\\n", + " --skip_leading_rows=1 \\\n", + " {BQ_DATASET}.{BQ_TRAIN_RAW_TABLE} \\\n", + " {GCS_TRAIN_URI} \\\n", + " id:INT64,cycle:INT64,setting1:FLOAT64,setting2:FLOAT64,setting3:FLOAT64,sensor:STRING,value:FLOAT64\n", + "\n", + "! bq load \\\n", + " --location={LOCATION} \\\n", + " --source_format=CSV \\\n", + " --skip_leading_rows=1 \\\n", + " {BQ_DATASET}.{BQ_TEST_RAW_TABLE} \\\n", + " {GCS_TEST_URI} \\\n", + " id:INT64,cycle:INT64,setting1:FLOAT64,setting2:FLOAT64,setting3:FLOAT64,sensor:STRING,value:FLOAT64\n", + "\n", + "! bq load \\\n", + " --location={LOCATION} \\\n", + " --source_format=CSV \\\n", + " --skip_leading_rows=1 \\\n", + " {BQ_DATASET}.{BQ_LABELS_TABLE} \\\n", + " {GCS_LABELS_URI} \\\n", + " id:INT64,time_to_failure:FLOAT64" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "960505627ddf" + }, + "source": [ + "### Import libraries\n", + "\n", + "Next, import libraries and set up some variables used throughout the tutorial.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "outputs": [], + "source": [ + "from typing import NamedTuple\n", + "\n", + "import tensorflow as tf\n", + "from google.cloud import aiplatform as vertex_ai\n", + "from google.cloud import bigquery\n", + "from google_cloud_pipeline_components.v1.bigquery import (\n", + " BigqueryCreateModelJobOp, BigqueryEvaluateModelJobOp, BigqueryQueryJobOp)\n", + "from jinja2 import Template\n", + "from kfp.v2 import compiler, dsl\n", + "from kfp.v2.dsl import (HTML, Artifact, Condition, Input, Metrics, Output,\n", + " component)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SOskzw0enAyi" + }, + "source": [ + "### Set up variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6Sf2DSzwnD8H" + }, + "outputs": [], + "source": [ + "# SQL templates\n", + "SENSORS = (\n", + " \"s1\",\n", + " \"s2\",\n", + " \"s3\",\n", + " \"s4\",\n", + " \"s5\",\n", + " \"s6\",\n", + " \"s7\",\n", + " \"s8\",\n", + " \"s9\",\n", + " \"s10\",\n", + " \"s11\",\n", + " \"s12\",\n", + " \"s13\",\n", + " \"s14\",\n", + " \"s15\",\n", + " \"s16\",\n", + " \"s17\",\n", + " \"s18\",\n", + " \"s19\",\n", + " \"s20\",\n", + " \"s21\",\n", + ")\n", + "WINDOW = 5\n", + "PERIOD = 30\n", + "TARGET = \"is_anomalous_ttf\"\n", + "EXCLUDED_VARIABLES = \"id, cycle, setting1, setting2, setting3\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tyDIqmRWsjL4" + }, + "source": [ + "### Helper functions\n", + "\n", + "The `print_pipeline_output` helper function allows to validate the pipeline run checking for executed job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3m59SG8Vsk50" + }, + "outputs": [], + "source": [ + "def print_pipeline_output(pipeline_root, job, output_task_name):\n", + " JOB_ID = job.name\n", + " print(JOB_ID)\n", + " for _ in range(len(job.gca_resource.job_detail.task_details)):\n", + " TASK_ID = job.gca_resource.job_detail.task_details[_].task_id\n", + " EXECUTE_OUTPUT = (\n", + " pipeline_root\n", + " + \"/\"\n", + " + PROJECT_NUMBER\n", + " + \"/\"\n", + " + JOB_ID\n", + " + \"/\"\n", + " + output_task_name\n", + " + \"_\"\n", + " + str(TASK_ID)\n", + " + \"/executor_output.json\"\n", + " )\n", + " GCP_RESOURCES = (\n", + " pipeline_root\n", + " + \"/\"\n", + " + PROJECT_NUMBER\n", + " + \"/\"\n", + " + JOB_ID\n", + " + \"/\"\n", + " + output_task_name\n", + " + \"_\"\n", + " + str(TASK_ID)\n", + " + \"/gcp_resources\"\n", + " )\n", + " EVAL_METRICS = (\n", + " pipeline_root\n", + " + \"/\"\n", + " + PROJECT_NUMBER\n", + " + \"/\"\n", + " + JOB_ID\n", + " + \"/\"\n", + " + output_task_name\n", + " + \"_\"\n", + " + str(TASK_ID)\n", + " + \"/evaluation_metrics\"\n", + " )\n", + " if tf.io.gfile.exists(EXECUTE_OUTPUT):\n", + " ! gsutil cat $EXECUTE_OUTPUT\n", + " return EXECUTE_OUTPUT\n", + " elif tf.io.gfile.exists(GCP_RESOURCES):\n", + " ! gsutil cat $GCP_RESOURCES\n", + " return GCP_RESOURCES\n", + " elif tf.io.gfile.exists(EVAL_METRICS):\n", + " ! gsutil cat $EVAL_METRICS\n", + " return EVAL_METRICS\n", + "\n", + " return None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OTWzEnp4EB7e" + }, + "outputs": [], + "source": [ + "vertex_ai.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "L9iMCmfFBn6e" + }, + "source": [ + "### Initialize BigQuery SDK for Python\n", + "\n", + "Initialize the BigQuery SDK for Python for your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4Md0UdedBn6f" + }, + "outputs": [], + "source": [ + "bq_client = bigquery.Client(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QpNpPUp0m80Y" + }, + "source": [ + "## BigQuery ML pipeline formalization\n", + "\n", + "In the next cells, you build the components and pipeline to train and evaluate the anomaly detection model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RLwG5IBnF_f0" + }, + "source": [ + "### Set variables for running the pipeline\n", + "\n", + "Below you initialize a set of variables that are specific to the pipeline run you are going to run in this tutorial. For instance, you define the pipeline configuration passing training table name, model configuration and performance threshold." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "E2mtPcwyGE1P" + }, + "outputs": [], + "source": [ + "# BQML pipeline job configuation\n", + "TRAIN_PIPELINE_NAME = \"bqml-anomaly-detection-train-pipeline\"\n", + "TRAIN_PIPELINE_ROOT = (\n", + " urlparse(BUCKET_URI)._replace(path=\"pipelines/train_pipelines\").geturl()\n", + ")\n", + "TRAIN_PIPELINE_PACKAGE = os.path.join(\n", + " TRAIN_PIPELINES_PATH, f\"{TRAIN_PIPELINE_NAME}.json\"\n", + ")\n", + "\n", + "# BQML pipeline conponent configuration\n", + "BQ_TRAIN_FEATURES_TABLE_PREFIX = \"train_features\"\n", + "BQ_TEST_FEATURES_TABLE_PREFIX = \"test_features\"\n", + "BQ_TRAIN_TABLE_PREFIX = \"train_dataset\"\n", + "BQ_TEST_TABLE_PREFIX = \"test_dataset\"\n", + "BQ_RECOSTRUCTION_MODEL_TABLE_PREFIX = \"reconstruction_model\"\n", + "DETECT_ANOMALIES_TABLE_PREFIX = \"detect_anomalies\"\n", + "BQ_TRAIN_FEATURES_TABLE = f\"{BQ_TRAIN_FEATURES_TABLE_PREFIX}_{TIMESTAMP}\"\n", + "BQ_TEST_FEATURES_TABLE = f\"{BQ_TEST_FEATURES_TABLE_PREFIX}_{TIMESTAMP}\"\n", + "BQ_TRAIN_TABLE = f\"{BQ_TRAIN_TABLE_PREFIX}_{TIMESTAMP}\"\n", + "BQ_TEST_TABLE = f\"{BQ_TEST_TABLE_PREFIX}_{TIMESTAMP}\"\n", + "BQ_RECOSTRUCTION_MODEL_TABLE = f\"{BQ_RECOSTRUCTION_MODEL_TABLE_PREFIX}_{TIMESTAMP}\"\n", + "DETECT_ANOMALIES_TABLE = f\"{DETECT_ANOMALIES_TABLE_PREFIX}_{TIMESTAMP}\"\n", + "CONTAMINATION_THRESHOLD = 0.1\n", + "PERF_THRESHOLD = 10" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "m59LNgggyEYG" + }, + "source": [ + "### Set SQL queries using templates\n", + "\n", + "One way to run BigQuery and BigQuery ML pipelines on Vertex AI is defining sql queries as Jinja templates and pass them as parameters of `pipeline components`.\n", + "\n", + "In this tutorial, you define the following templates:\n", + "\n", + " - `CREATE_FEATURES_SQL_TEMPLATE` to run feature engineering\n", + " - `CREATE_TRAIN_SQL_TEMPLATE` to create the training dataset\n", + " - `TRAIN_RECONSTRUCTION_MODEL_TEMPLATE` to build a reconstruction model using BigQuery ML AutoEncoder model\n", + " - `CREATE_TEST_SQL_TEMPLATE` to create the testing dataset\n", + " - `DETECT_ANOMALIES_TEMPLATE` to detect anomalies\n", + " - `VISUALIZE_MSE_TEMPLATE` to visualize MSE plots" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P4c0wqn5GE8w" + }, + "source": [ + "#### Define SQL query templates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Gss6JR0YyaS3" + }, + "outputs": [], + "source": [ + "# Training ---------------------------------------------------------------------\n", + "CREATE_FEATURES_SQL_TEMPLATE = \"\"\"\n", + "CREATE OR REPLACE TABLE\n", + " `{{project_id}}.{{bq_dataset}}.{{features_table}}` AS\n", + "WITH\n", + " get_long_from_wide_table AS (\n", + " SELECT *\n", + " FROM `{{project_id}}.{{bq_dataset}}.{{data_table}}`\n", + " PIVOT(MAX(value) FOR sensor IN {{sensors}})\n", + " ),\n", + "\n", + " get_features_table AS (\n", + " SELECT\n", + " *,\n", + " {%- for sensor in sensors %}\n", + " -- calculate rolling average sensor value\n", + " AVG({{sensor}}) OVER(PARTITION BY id ORDER BY cycle RANGE BETWEEN {{window}} PRECEDING AND CURRENT ROW) AS {{\"rolling_avg_\" ~ sensor}},\n", + " -- calculate rolling stdev sensor value\n", + " IFNULL(STDDEV({{sensor}}) OVER(PARTITION BY id ORDER BY cycle RANGE BETWEEN {{window}} PRECEDING AND CURRENT ROW), 0) AS {{\"rolling_sd_\" ~ sensor}}\n", + " {%- if not loop.last -%}\n", + " ,\n", + " {%- endif -%}\n", + " {%- endfor %}\n", + " FROM get_long_from_wide_table\n", + " )\n", + "\n", + " SELECT * FROM get_features_table ORDER BY id, cycle\n", + "\"\"\"\n", + "\n", + "CREATE_TRAIN_SQL_TEMPLATE = \"\"\"\n", + "DECLARE period INT64 DEFAULT {{period}};\n", + "\n", + "CREATE OR REPLACE TABLE\n", + " `{{project_id}}.{{bq_dataset}}.{{train_table}}` AS\n", + "WITH\n", + " get_last_cycle AS (\n", + " SELECT id, max(cycle) as last_cycle\n", + " FROM `{{project_id}}.{{bq_dataset}}.{{features_table}}`\n", + " GROUP BY id\n", + " ),\n", + "\n", + " get_target_train AS (\n", + " SELECT\n", + " a.*,\n", + " CASE WHEN (b.last_cycle - a.cycle) < period THEN 1 ELSE 0 END AS {{target}},\n", + " FROM `{{project_id}}.{{bq_dataset}}.{{features_table}}` as a\n", + " LEFT JOIN get_last_cycle as b on a.id = b.id\n", + " )\n", + "\n", + " SELECT * EXCEPT({{excluded_variables}}) FROM get_target_train\n", + "\"\"\"\n", + "\n", + "TRAIN_RECONSTRUCTION_MODEL_TEMPLATE = \"\"\"\n", + "CREATE OR REPLACE MODEL `{{project_id}}.{{bq_dataset}}.{{recostruction_model_name}}`\n", + "OPTIONS(MODEL_TYPE='AUTOENCODER',\n", + " ACTIVATION_FN='RELU',\n", + " HIDDEN_UNITS=[32, 16, 4, 16, 32],\n", + " BATCH_SIZE=8,\n", + " DROPOUT=0.2,\n", + " EARLY_STOP=TRUE,\n", + " LEARN_RATE=0.001,\n", + " L1_REG_ACTIVATION=0.0001,\n", + " OPTIMIZER='ADAM',\n", + " MODEL_REGISTRY = 'vertex_ai',\n", + " VERTEX_AI_MODEL_ID = 'reconstruction_model',\n", + " VERTEX_AI_MODEL_VERSION_ALIASES = ['staging']\n", + " )\n", + "AS SELECT * FROM `{{project_id}}.{{bq_dataset}}.{{train_table}}`\n", + "\"\"\"\n", + "\n", + "# Test -------------------------------------------------------------------------\n", + "CREATE_TEST_SQL_TEMPLATE = \"\"\"\n", + "DECLARE period INT64 DEFAULT {{period}};\n", + "\n", + "CREATE OR REPLACE TABLE\n", + " `{{project_id}}.{{bq_dataset}}.{{test_table}}` AS\n", + "WITH\n", + " get_last_cycle AS (\n", + " SELECT id, max(cycle) as last_cycle\n", + " FROM `{{project_id}}.{{bq_dataset}}.{{features_table}}`\n", + " GROUP BY id\n", + " ),\n", + "\n", + " get_target_test AS (\n", + " SELECT\n", + " a.*\n", + " FROM `{{project_id}}.{{bq_dataset}}.{{features_table}}` as a\n", + " LEFT JOIN get_last_cycle as b ON a.id = b.id\n", + " WHERE a.cycle = b.last_cycle\n", + " )\n", + "\n", + " SELECT\n", + " a.*,\n", + " CASE WHEN b.time_to_failure < period THEN 1 ELSE 0 END AS {{target}}\n", + " FROM get_target_test as a\n", + " LEFT JOIN `{{project_id}}.{{bq_dataset}}.{{labels_table}}` as b ON a.id = b.id\n", + "\"\"\"\n", + "\n", + "DETECT_ANOMALIES_TEMPLATE = \"\"\"\n", + "CREATE OR REPLACE TABLE\n", + " `{{project_id}}.{{bq_dataset}}.{{anomalies_table}}` AS\n", + "SELECT\n", + " is_anomaly, mean_squared_error, {{target}}\n", + "FROM\n", + " ML.DETECT_ANOMALIES(MODEL `{{project_id}}.{{bq_dataset}}.{{recostruction_model_name}}`,\n", + " STRUCT({{contamination_thr}} AS contamination),\n", + " TABLE `{{project_id}}.{{bq_dataset}}.{{test_table}}`)\n", + "\"\"\"\n", + "\n", + "VISUALIZE_MSE_TEMPLATE = \"\"\"\n", + "SELECT\n", + " *\n", + "FROM\n", + " `{{project_id}}.{{bq_dataset}}.{{anomalies_table}}`\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KIUYHHbiGPWe" + }, + "source": [ + "#### Compile SQL query templates\n", + "\n", + "After defining the SQL query templates, you compile them passing training and testing parameters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lD-Q1Qek6Xrc" + }, + "outputs": [], + "source": [ + "# Training parameters specification\n", + "TRAIN_SQL_PARAMS = dict(\n", + " project_id=PROJECT_ID,\n", + " bq_dataset=BQ_DATASET,\n", + " sensors=SENSORS,\n", + " period=PERIOD,\n", + " window=WINDOW,\n", + " target=TARGET,\n", + " excluded_variables=EXCLUDED_VARIABLES,\n", + " contamination_threshold=CONTAMINATION_THRESHOLD,\n", + " data_table=BQ_TRAIN_RAW_TABLE,\n", + " features_table=BQ_TRAIN_FEATURES_TABLE,\n", + " train_table=BQ_TRAIN_TABLE,\n", + " recostruction_model_name=BQ_RECOSTRUCTION_MODEL_TABLE,\n", + " anomalies_table=DETECT_ANOMALIES_TABLE,\n", + " contamination_thr=CONTAMINATION_THRESHOLD,\n", + ")\n", + "\n", + "CREATE_TRAIN_FEATURES_QUERY = Template(CREATE_FEATURES_SQL_TEMPLATE).render(\n", + " TRAIN_SQL_PARAMS\n", + ")\n", + "CREATE_TRAIN_TABLE_QUERY = Template(CREATE_TRAIN_SQL_TEMPLATE).render(TRAIN_SQL_PARAMS)\n", + "TRAIN_RECOSTRUCTION_MODEL_QUERY = Template(TRAIN_RECONSTRUCTION_MODEL_TEMPLATE).render(\n", + " TRAIN_SQL_PARAMS\n", + ")\n", + "\n", + "# Testing parameters specification\n", + "TEST_SQL_PARAMS = dict(\n", + " project_id=PROJECT_ID,\n", + " bq_dataset=BQ_DATASET,\n", + " sensors=SENSORS,\n", + " period=PERIOD,\n", + " window=WINDOW,\n", + " data_table=BQ_TEST_RAW_TABLE,\n", + " labels_table=BQ_LABELS_TABLE,\n", + " target=TARGET,\n", + " features_table=BQ_TEST_FEATURES_TABLE,\n", + " test_table=BQ_TEST_TABLE,\n", + " recostruction_model_name=BQ_RECOSTRUCTION_MODEL_TABLE,\n", + " anomalies_table=DETECT_ANOMALIES_TABLE,\n", + " contamination_thr=CONTAMINATION_THRESHOLD,\n", + ")\n", + "\n", + "CREATE_TEST_FEATURES_QUERY = Template(CREATE_FEATURES_SQL_TEMPLATE).render(\n", + " TEST_SQL_PARAMS\n", + ")\n", + "CREATE_TEST_TABLE_QUERY = Template(CREATE_TEST_SQL_TEMPLATE).render(TEST_SQL_PARAMS)\n", + "DETECT_ANOMALIES_QUERY = Template(DETECT_ANOMALIES_TEMPLATE).render(TEST_SQL_PARAMS)\n", + "VISUALIZE_MSE_QUERY = Template(VISUALIZE_MSE_TEMPLATE).render(TRAIN_SQL_PARAMS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hZHOP2TzBn6k" + }, + "source": [ + "### Create a custom component to read model evaluation metrics\n", + "\n", + "Build a custom component to consume model evaluation metrics for visualizations in the Vertex AI Pipelines UI using Kubeflow SDK visualization APIs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Iybwx_Z4Bn6k" + }, + "outputs": [], + "source": [ + "@component(\n", + " base_image=\"python:3.8-slim\",\n", + " output_component_file=f\"{KFP_COMPONENTS_PATH}/build_bq_evaluate_metrics.yaml\",\n", + ")\n", + "def get_model_evaluation_metrics(\n", + " metrics_in: Input[Artifact],\n", + " metrics_out: Output[Metrics],\n", + " model_out: Output[Artifact],\n", + ") -> NamedTuple(\"Outputs\", [(\"mean_squared_error\", float)]):\n", + " \"\"\"\n", + " Get the average mean absolute error from the metrics\n", + " Args:\n", + " metrics_in: metrics artifact\n", + " metrics_out: resulting metrics artifact\n", + " model_out: resulting model artifact\n", + " Returns:\n", + " avg_mean_absolute_error: average mean absolute error\n", + " \"\"\"\n", + "\n", + " # Extract rows and schema from metrics artifact\n", + " rows = metrics_in.metadata[\"rows\"]\n", + " schema = metrics_in.metadata[\"schema\"]\n", + "\n", + " # Convert into a dictionary format\n", + " columns = [metrics[\"name\"] for metrics in schema[\"fields\"] if \"name\" in metrics]\n", + " records = [dl[\"v\"] for dl in rows[0][\"f\"]]\n", + " metrics = {key: round(float(value), 3) for key, value in zip(columns, records)}\n", + "\n", + " # Log metrics\n", + " for key in metrics.keys():\n", + " metrics_out.log_metric(key, metrics[key])\n", + "\n", + " # Return the target metrics\n", + " mean_absolute_error = metrics[\"mean_squared_error\"]\n", + " component_outputs = NamedTuple(\"Outputs\", [(\"mean_squared_error\", float)])\n", + "\n", + " # model metadata\n", + " model_framework = \"BQML\"\n", + " model_type = \"AutoEncoder\"\n", + " model_user = \"Author\"\n", + " model_function = \"Reconstruction model\"\n", + " model_out.metadata[\"framework\"] = model_framework\n", + " model_out.metadata[\"type\"] = model_type\n", + " model_out.metadata[\"model function\"] = model_function\n", + " model_out.metadata[\"modified by\"] = model_user\n", + "\n", + " return component_outputs(mean_absolute_error)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yEVHpbmiUmzB" + }, + "source": [ + "### Create a custom component to visualize MSE per label\n", + "\n", + "Build a custom component to visualize MSE per label in the Vertex AI Pipelines UI using Kubeflow SDK visualization APIs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "QjJWfui7U9ux" + }, + "outputs": [], + "source": [ + "@component(\n", + " base_image=\"python:3.8-slim\",\n", + " packages_to_install=[\"pandas\", \"google-cloud-bigquery[bqstorage,pandas]\", \"plotly\"],\n", + " output_component_file=f\"{KFP_COMPONENTS_PATH}/build_evaluation_plot.yaml\",\n", + ")\n", + "def get_mse_plots(\n", + " query: str,\n", + " project: str,\n", + " location: str,\n", + " metrics_out: Output[HTML],\n", + " model_out: Output[Artifact],\n", + "):\n", + " \"\"\"\n", + " Get the mean squared error per labels\n", + " Args:\n", + " query: the query to generate the metrics\n", + " project: the project id to iniziate the BQ client\n", + " location: the region to iniziate the BQ client\n", + " metrics_out: resulting metrics artifact\n", + " model_out: resulting model artifact\n", + " Returns:\n", + " avg_mean_absolute_error: average mean absolute error\n", + " \"\"\"\n", + "\n", + " import plotly.graph_objects as go\n", + " from google.cloud import bigquery\n", + " from plotly.subplots import make_subplots\n", + "\n", + " # Initiate client\n", + " client = bigquery.Client(project=project, location=location)\n", + "\n", + " # Run a Standard SQL query using the environment's default project\n", + " table_df = client.query(query).to_dataframe()\n", + "\n", + " # Create anomalies/no anomalies datasets\n", + " anomalies_df = table_df.query(\"is_anomalous_ttf == 1\")\n", + " no_anomalies_df = table_df.query(\"is_anomalous_ttf == 0\")\n", + "\n", + " # Create a figure with subplots\n", + " fig = make_subplots(\n", + " rows=2,\n", + " cols=2,\n", + " specs=[[{\"colspan\": 2}, None], [{}, {}]],\n", + " subplot_titles=(\n", + " \"Distribution of mean squared error (MSE) for anomaly and not anomaly sensor data\",\n", + " \"Distribution of mean squared error (MSE) for anomaly sensor data\",\n", + " \"Distribution of mean squared error (MSE) for not anomaly sensor data\",\n", + " ),\n", + " x_title=\"Mean squared error (MSE)\",\n", + " y_title=\"Density\",\n", + " )\n", + "\n", + " # Add subplots to figure\n", + " fig.add_trace(\n", + " go.Histogram(\n", + " x=anomalies_df[\"mean_squared_error\"],\n", + " name=\"Anomaly\",\n", + " marker_color=\"blue\",\n", + " showlegend=True,\n", + " ),\n", + " row=1,\n", + " col=1,\n", + " )\n", + " fig.add_trace(\n", + " go.Histogram(\n", + " x=no_anomalies_df[\"mean_squared_error\"],\n", + " name=\"No Anomaly\",\n", + " marker_color=\"orange\",\n", + " showlegend=True,\n", + " ),\n", + " row=1,\n", + " col=1,\n", + " )\n", + " fig.add_trace(\n", + " go.Histogram(\n", + " x=anomalies_df[\"mean_squared_error\"],\n", + " name=\"MSE_1\",\n", + " marker_color=\"red\",\n", + " showlegend=False,\n", + " ),\n", + " row=2,\n", + " col=1,\n", + " )\n", + " fig.add_trace(\n", + " go.Histogram(\n", + " x=no_anomalies_df[\"mean_squared_error\"],\n", + " name=\"MSE_2\",\n", + " marker_color=\"green\",\n", + " showlegend=False,\n", + " ),\n", + " row=2,\n", + " col=2,\n", + " )\n", + "\n", + " # Update figure properties\n", + " fig.update_layout(\n", + " title=\"Anomaly detection report\",\n", + " title_x=0.5,\n", + " bargap=0.2,\n", + " bargroupgap=0.1,\n", + " showlegend=True,\n", + " )\n", + "\n", + " # Save output to static HTML file\n", + " fig.write_html(metrics_out.path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pcSL1FHk69KT" + }, + "source": [ + "### Build the BQML training pipeline\n", + "\n", + "Define your workflow using Kubeflow Pipelines DSL package.\n", + "\n", + "Below you have the steps of the pipeline workflow:\n", + "\n", + "1. Build training dataset in BigQuery\n", + "2. Train a BigQuery AutoEncoder model\n", + "3. Evaluate the BigQuery AutoEncoder model\n", + "4. Check the model performance\n", + "5. Build test dataset in BigQuery\n", + "6. Detect anomalies\n", + "7. Generate the MSE plot to evaluate predictions\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AlFXqsPIAk0l" + }, + "outputs": [], + "source": [ + "@dsl.pipeline(\n", + " name=TRAIN_PIPELINE_NAME,\n", + " description=\"A batch pipeline to train recostruction model using BQML\",\n", + ")\n", + "def pipeline(\n", + " create_train_features_query: str,\n", + " create_train_table_query: str,\n", + " train_recostruction_model_query: str,\n", + " create_test_features_query: str,\n", + " create_test_table_query: str,\n", + " generate_anomalies_query: str,\n", + " performance_thr: float,\n", + " visualize_mse_query: str,\n", + " project: str,\n", + " location: str,\n", + "):\n", + "\n", + " # Create training features\n", + " create_train_features_op = BigqueryQueryJobOp(\n", + " query=create_train_features_query,\n", + " project=project,\n", + " location=location,\n", + " ).set_display_name(\"build train features\")\n", + "\n", + " # Create train dataset\n", + " create_train_dataset_op = (\n", + " BigqueryQueryJobOp(\n", + " query=create_train_table_query, project=project, location=location\n", + " )\n", + " .set_display_name(\"build train table\")\n", + " .after(create_train_features_op)\n", + " )\n", + "\n", + " # Train the recostruction model\n", + " bq_recostruction_model_op = (\n", + " BigqueryCreateModelJobOp(\n", + " query=train_recostruction_model_query,\n", + " project=project,\n", + " location=location,\n", + " )\n", + " .set_display_name(\"train reconstruction model\")\n", + " .after(create_train_dataset_op)\n", + " )\n", + "\n", + " # Evaluate recostruction model\n", + " bq_arima_evaluate_model_op = (\n", + " BigqueryEvaluateModelJobOp(\n", + " model=bq_recostruction_model_op.outputs[\"model\"],\n", + " project=project,\n", + " location=location,\n", + " )\n", + " .set_display_name(\"evaluate reconstruction model\")\n", + " .after(bq_recostruction_model_op)\n", + " )\n", + "\n", + " # Plot model metrics\n", + " get_evaluation_model_metrics_op = (\n", + " get_model_evaluation_metrics(\n", + " bq_arima_evaluate_model_op.outputs[\"evaluation_metrics\"]\n", + " )\n", + " .after(bq_arima_evaluate_model_op)\n", + " .set_display_name(\"generate evaluation metrics\")\n", + " )\n", + "\n", + " # Check the model performance. If AUTOENCODER MSE metric is below to a minimal threshold\n", + " with Condition(\n", + " get_evaluation_model_metrics_op.outputs[\"mean_squared_error\"] < performance_thr,\n", + " name=\"MSE good\",\n", + " ):\n", + "\n", + " # Create test features dataset\n", + " create_test_features_op = BigqueryQueryJobOp(\n", + " query=create_test_features_query,\n", + " project=project,\n", + " location=location,\n", + " ).set_display_name(\"build test features\")\n", + "\n", + " # Create test dataset\n", + " create_test_dataset_op = (\n", + " BigqueryQueryJobOp(\n", + " query=create_test_table_query, project=project, location=location\n", + " )\n", + " .set_display_name(\"build test table\")\n", + " .after(create_test_features_op)\n", + " )\n", + "\n", + " # Generate anomalies\n", + " generate_anomalies_op = (\n", + " BigqueryQueryJobOp(\n", + " query=generate_anomalies_query,\n", + " project=project,\n", + " location=location,\n", + " )\n", + " .after(create_test_dataset_op)\n", + " .set_display_name(\"generate anomalies\")\n", + " )\n", + "\n", + " # Plot mse graph of anomalies\n", + " _ = (\n", + " get_mse_plots(query=visualize_mse_query, project=project, location=location)\n", + " .after(generate_anomalies_op)\n", + " .set_display_name(\"plot mse report\")\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nghLONQX7JNg" + }, + "source": [ + "### Compile the pipeline into a JSON file\n", + "\n", + "Next, you compile the pipeline, which produces a JSON specification for your pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8l6IR7OoADJV" + }, + "outputs": [], + "source": [ + "compiler.Compiler().compile(pipeline_func=pipeline, package_path=TRAIN_PIPELINE_PACKAGE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Gtlwu0Xo1WcT" + }, + "source": [ + "### Execute your pipeline\n", + "\n", + "Next, you execute the pipeline. It takes the following parameters which you set as default:\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zzg2JDlsG2cd" + }, + "source": [ + "#### Submit pipeline job" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8meEMA6NO3aO" + }, + "outputs": [], + "source": [ + "TRAIN_PIPELINE_RUN_PARAMS = dict(\n", + " create_train_features_query=CREATE_TRAIN_FEATURES_QUERY,\n", + " create_train_table_query=CREATE_TRAIN_TABLE_QUERY,\n", + " train_recostruction_model_query=TRAIN_RECOSTRUCTION_MODEL_QUERY,\n", + " create_test_features_query=CREATE_TEST_FEATURES_QUERY,\n", + " create_test_table_query=CREATE_TEST_TABLE_QUERY,\n", + " generate_anomalies_query=DETECT_ANOMALIES_QUERY,\n", + " performance_thr=PERF_THRESHOLD,\n", + " visualize_mse_query=VISUALIZE_MSE_QUERY,\n", + " project=PROJECT_ID,\n", + " location=LOCATION,\n", + ")\n", + "\n", + "bqml_train_pipeline = vertex_ai.PipelineJob(\n", + " display_name=f\"{TRAIN_PIPELINE_PACKAGE}-job\",\n", + " template_path=TRAIN_PIPELINE_PACKAGE,\n", + " parameter_values=TRAIN_PIPELINE_RUN_PARAMS,\n", + " pipeline_root=TRAIN_PIPELINE_ROOT,\n", + " enable_caching=True,\n", + ")\n", + "\n", + "bqml_train_pipeline.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dKgPkm4cgbHd" + }, + "source": [ + "#### View BigQuery ML training pipeline results\n", + "\n", + "Finally, you will view the artifact outputs of each task in the pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "apGt59bCgbHd" + }, + "outputs": [], + "source": [ + "PROJECT_NUMBER = bqml_train_pipeline.gca_resource.name.split(\"/\")[1]\n", + "print(\"PROJECT NUMBER: \", PROJECT_NUMBER)\n", + "print(\"\\n\\n\")\n", + "print(\"bigquery-create-model-job\")\n", + "artifacts = print_pipeline_output(\n", + " TRAIN_PIPELINE_ROOT, bqml_train_pipeline, \"bigquery-create-model-job\"\n", + ")\n", + "print(\"\\n\\n\")\n", + "print(\"bigquery-ml-evaluate-job\")\n", + "artifacts = print_pipeline_output(\n", + " TRAIN_PIPELINE_ROOT, bqml_train_pipeline, \"bigquery-evaluate-model-job\"\n", + ")\n", + "print(\"\\n\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JcGuzM7nEqmj" + }, + "source": [ + "## Conclusion\n", + "\n", + "In this notebook, you built a ML pipeline to train an autoencoder for detecting anomalies using Vertex AI Pipelines and BigQuery ML.\n", + "\n", + "Now you know how to leverage prebuilt `google_cloud_components` for training BigQuery ML model and how to build custom components to evaluate and visualize performance metrics." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "P0Ks1UZpoRXS" + }, + "outputs": [], + "source": [ + "# delete pipeline\n", + "delete_pipeline = False\n", + "if delete_pipeline:\n", + " vertex_ai_pipeline_jobs = vertex_ai.PipelineJob.list(\n", + " filter=f'pipeline_name=\"{TRAIN_PIPELINE_NAME}\"'\n", + " )\n", + " for pipeline_job in vertex_ai_pipeline_jobs:\n", + " pipeline_job.delete()\n", + "\n", + "# delete model\n", + "delete_model = False\n", + "if delete_model:\n", + " DELETE_MODEL_SQL = f\"DROP MODEL {BQ_DATASET}.{BQ_RECOSTRUCTION_MODEL_TABLE}\"\n", + " try:\n", + " delete_model_query_job = bq_client.query(DELETE_MODEL_SQL)\n", + " delete_model_query_result = delete_model_query_job.result()\n", + " except Exception as e:\n", + " print(e)\n", + "\n", + "# delete bucket\n", + "delete_bucket = False\n", + "if os.getenv(\"IS_TESTING\") or delete_bucket:\n", + " ! gsutil -m rm -r $BUCKET_URI\n", + "\n", + "# Remove local resorces\n", + "delete_local_resources = False\n", + "if delete_local_resources:\n", + " ! rm -rf {KFP_COMPONENTS_PATH}\n", + " ! rm -rf {TRAIN_PIPELINES_PATH}\n", + " ! rm -rf {TEST_PIPELINES_PATH}" + ] + } + ], + "metadata": { + "colab": { + "name": "google_cloud_pipeline_components_bqml_pipeline_anomaly_detection.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_demand_forecasting.ipynb b/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_demand_forecasting.ipynb index 36aaf7c47..301016c7e 100644 --- a/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_demand_forecasting.ipynb +++ b/notebooks/community/pipelines/google_cloud_pipeline_components_bqml_pipeline_demand_forecasting.ipynb @@ -54,18 +54,20 @@ { "cell_type": "markdown", "metadata": { - "id": "tvgnzT1CKxrO" + "id": "239ba71252d3" }, "source": [ "## Overview\n", "\n", - "This notebook shows how to use `Vertex AI Pipelines` and `BigQuery ML pipeline components` to train and evaluate a demand forecasting model.\n", - "\n", - "### Dataset\n", - "\n", - "The dataset is a modified version of the dataset in [Build and visualize demand forecast predictions using Datastream, Dataflow, BigQuery ML, and Looker\n", - "](https://cloud.google.com/architecture/build-visualize-demand-forecast-prediction-datastream-dataflow-bigqueryml-looker) solution architecture\n", - "\n", + "This notebook shows how to use `Vertex AI Pipelines` and `BigQuery ML pipeline components` to train and evaluate a demand forecasting model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "25c28706c23e" + }, + "source": [ "### Objective\n", "\n", "In this tutorial, you learn how to train and evaluate a BigQuery ML model using Vertex AI Pipelines and BigQuery ML pipeline components. \n", @@ -87,8 +89,27 @@ " - Generate the ARIMA Plus forecasts\n", " - Generate the ARIMA PLUS forecast explainations\n", "- Compile the pipeline.\n", - "- Execute the pipeline.\n", + "- Execute the pipeline." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "586acfa9b502" + }, + "source": [ + "### Dataset\n", "\n", + "The dataset is a modified version of the dataset in [Build and visualize demand forecast predictions using Datastream, Dataflow, BigQuery ML, and Looker\n", + "](https://cloud.google.com/architecture/build-visualize-demand-forecast-prediction-datastream-dataflow-bigqueryml-looker) solution architecture\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ "### Costs \n", "\n", "This tutorial uses billable components of Google Cloud:\n", @@ -352,9 +373,8 @@ "id": "06571eb4063b" }, "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 it onto the name of resources you create in this tutorial." + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." ] }, { @@ -365,9 +385,16 @@ }, "outputs": [], "source": [ - "from datetime import datetime\n", + "import random\n", + "import string\n", "\n", - "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" ] }, { @@ -485,7 +512,7 @@ "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_NAME = PROJECT_ID + \"-aip-\" + UUID\n", " BUCKET_URI = f\"gs://{BUCKET_NAME}\"" ] }, @@ -706,6 +733,7 @@ "KFP_COMPONENTS_PATH = \"components\"\n", "PIPELINES_PATH = \"pipelines\"\n", "\n", + "! mkdir -m 777 -p {DATA_PATH}\n", "! mkdir -m 777 -p {KFP_COMPONENTS_PATH}\n", "! mkdir -m 777 -p {PIPELINES_PATH}" ] @@ -771,7 +799,7 @@ " --location={LOCATION} \\\n", " --source_format=CSV \\\n", " --skip_leading_rows=1\\\n", - " fast_fresh.orders_{TIMESTAMP} \\\n", + " fast_fresh.orders_{UUID} \\\n", " {RAW_DATA_URI} \\\n", " time_of_sale:DATETIME,order_id:INTEGER,product_name:STRING,price:NUMERIC,quantity:NUMERIC,payment_method:STRING,store_id:INTEGER,user_id:INTEGER" ] @@ -782,7 +810,7 @@ "id": "ZrgOD30o7HcL" }, "source": [ - "## BQML Training Formalization\n", + "## BigQuery ML Training Formalization\n", "\n", "In the next cells, you build the components and pipeline to train and evaluate the BQML demand forecasting model." ] @@ -820,13 +848,13 @@ "BQ_EVALUATE_MODEL_TABLE_PREFIX = \"orders_arima_model_evaluate\"\n", "BQ_FORECAST_TABLE_PREFIX = \"orders_arima_forecast\"\n", "BQ_EXPLAIN_FORECAST_TABLE_PREFIX = \"orders_arima_explain_forecast\"\n", - "BQ_ORDERS_TABLE = f\"{BQ_ORDERS_TABLE_PREFIX}_{TIMESTAMP}\"\n", - "BQ_TRAINING_TABLE = f\"{BQ_TRAINING_TABLE_PREFIX}_{TIMESTAMP}\"\n", - "BQ_MODEL_TABLE = f\"{BQ_MODEL_TABLE_PREFIX}_{TIMESTAMP}\"\n", - "BQ_EVALUATE_TS_TABLE = f\"{BQ_EVALUATE_TS_TABLE_PREFIX}_{TIMESTAMP}\"\n", - "BQ_EVALUATE_MODEL_TABLE = f\"{BQ_EVALUATE_MODEL_TABLE_PREFIX}_{TIMESTAMP}\"\n", - "BQ_FORECAST_TABLE = f\"{BQ_FORECAST_TABLE_PREFIX}_{TIMESTAMP}\"\n", - "BQ_EXPLAIN_FORECAST_TABLE = f\"{BQ_EXPLAIN_FORECAST_TABLE_PREFIX}_{TIMESTAMP}\"\n", + "BQ_ORDERS_TABLE = f\"{BQ_ORDERS_TABLE_PREFIX}_{UUID}\"\n", + "BQ_TRAINING_TABLE = f\"{BQ_TRAINING_TABLE_PREFIX}_{UUID}\"\n", + "BQ_MODEL_TABLE = f\"{BQ_MODEL_TABLE_PREFIX}_{UUID}\"\n", + "BQ_EVALUATE_TS_TABLE = f\"{BQ_EVALUATE_TS_TABLE_PREFIX}_{UUID}\"\n", + "BQ_EVALUATE_MODEL_TABLE = f\"{BQ_EVALUATE_MODEL_TABLE_PREFIX}_{UUID}\"\n", + "BQ_FORECAST_TABLE = f\"{BQ_FORECAST_TABLE_PREFIX}_{UUID}\"\n", + "BQ_EXPLAIN_FORECAST_TABLE = f\"{BQ_EXPLAIN_FORECAST_TABLE_PREFIX}_{UUID}\"\n", "\n", "BQ_TRAIN_CONFIGURATION = {\n", " \"destinationTable\": {\n", @@ -1022,7 +1050,7 @@ "id": "pcSL1FHk69KT" }, "source": [ - "### Build the BQML training pipeline\n", + "### Build the BigQuery ML training pipeline\n", "\n", "Define your workflow using Kubeflow Pipelines DSL package. \n", "\n", @@ -1094,8 +1122,8 @@ " location=location,\n", " ).set_display_name(\"get train data\")\n", "\n", - " # Train the ARIMA PLUS model\n", - " bq_arima_model_op = (\n", + " # Run an ARIMA PLUS experiment\n", + " bq_arima_model_exp_op = (\n", " BigqueryCreateModelJobOp(\n", " query=f\"\"\"\n", " -- create model table\n", @@ -1104,10 +1132,7 @@ " MODEL_TYPE = \\'ARIMA_PLUS\\',\n", " TIME_SERIES_TIMESTAMP_COL = \\'hourly_timestamp\\',\n", " TIME_SERIES_DATA_COL = \\'total_sold\\',\n", - " TIME_SERIES_ID_COL = [\\'product_name\\'],\n", - " MODEL_REGISTRY = \\'vertex_ai\\',\n", - " VERTEX_AI_MODEL_ID = \\'order_demand_forecasting\\',\n", - " VERTEX_AI_MODEL_VERSION_ALIASES = [\\'staging\\']\n", + " TIME_SERIES_ID_COL = [\\'product_name\\']\n", " ) AS\n", " SELECT\n", " hourly_timestamp,\n", @@ -1119,7 +1144,7 @@ " project=project,\n", " location=location,\n", " )\n", - " .set_display_name(\"train arima plus model\")\n", + " .set_display_name(\"run arima+ model experiment\")\n", " .after(create_training_dataset_op)\n", " )\n", "\n", @@ -1128,12 +1153,12 @@ " BigqueryMLArimaEvaluateJobOp(\n", " project=project,\n", " location=location,\n", - " model=bq_arima_model_op.outputs[\"model\"],\n", + " model=bq_arima_model_exp_op.outputs[\"model\"],\n", " show_all_candidate_models=False,\n", " job_configuration_query=bq_evaluate_time_series_configuration,\n", " )\n", " .set_display_name(\"evaluate arima plus time series\")\n", - " .after(bq_arima_model_op)\n", + " .after(bq_arima_model_exp_op)\n", " )\n", "\n", " # Evaluate ARIMA Plus model\n", @@ -1141,12 +1166,12 @@ " BigqueryEvaluateModelJobOp(\n", " project=project,\n", " location=location,\n", - " model=bq_arima_model_op.outputs[\"model\"],\n", + " model=bq_arima_model_exp_op.outputs[\"model\"],\n", " query_statement=f\"\"\"SELECT * FROM `{project}.{bq_dataset}.{bq_training_table}` WHERE split='TEST'\"\"\",\n", " job_configuration_query=bq_evaluate_model_configuration,\n", " )\n", " .set_display_name(\"evaluate arima plus model\")\n", - " .after(bq_arima_model_op)\n", + " .after(bq_arima_model_exp_op)\n", " )\n", "\n", " # Plot model metrics\n", @@ -1164,6 +1189,34 @@ " < PERF_THRESHOLD,\n", " name=\"avg. mae good\",\n", " ):\n", + " # Train the ARIMA PLUS model\n", + " bq_arima_model_op = (\n", + " BigqueryCreateModelJobOp(\n", + " query=f\"\"\"\n", + " -- create model table\n", + " CREATE OR REPLACE MODEL `{project}.{bq_dataset}.{bq_model_table}`\n", + " OPTIONS(\n", + " MODEL_TYPE = \\'ARIMA_PLUS\\',\n", + " TIME_SERIES_TIMESTAMP_COL = \\'hourly_timestamp\\',\n", + " TIME_SERIES_DATA_COL = \\'total_sold\\',\n", + " TIME_SERIES_ID_COL = [\\'product_name\\'],\n", + " MODEL_REGISTRY = \\'vertex_ai\\',\n", + " VERTEX_AI_MODEL_ID = \\'order_demand_forecasting\\',\n", + " VERTEX_AI_MODEL_VERSION_ALIASES = [\\'staging\\']\n", + " ) AS\n", + " SELECT\n", + " DATETIME_TRUNC(time_of_sale, HOUR) as hourly_timestamp,\n", + " product_name,\n", + " SUM(quantity) AS total_sold,\n", + " FROM `{project}.{bq_dataset}.{bq_orders_table}`\n", + " GROUP BY hourly_timestamp, product_name;\n", + " \"\"\",\n", + " project=project,\n", + " location=location,\n", + " )\n", + " .set_display_name(\"train arima+ model\")\n", + " .after(get_evaluation_model_metrics_op)\n", + " )\n", "\n", " # Generate the ARIMA PLUS forecasts\n", " bq_arima_forecast_op = (\n", @@ -1224,7 +1277,7 @@ "source": [ "### Execute your pipeline\n", "\n", - "Next, you execute the pipeline. It takes the following parameters which we set as default:\n", + "Next, we execute the pipeline. It takes the following parameters which we set as default:\n", "\n", "- `bq_dataset`: The BigQuery dataset to train on.\n", "- `bq_orders_table` : The BigQuery table of raw data.\n", @@ -1266,7 +1319,7 @@ "source": [ "### View BigQuery ML training pipeline results\n", "\n", - "Finally, you will view the artifact outputs of each task in the pipeline." + "Finally, you view the artifact outputs of each task in the pipeline." ] }, { @@ -1342,8 +1395,8 @@ "print(\"bigquery-ml-arima-evaluate-job\")\n", "artifacts = print_pipeline_output(bqml_pipeline, \"bigquery-ml-arima-evaluate-job\")\n", "print(\"\\n\\n\")\n", - "print(\"get-model-evaluation-metrics\")\n", - "artifacts = print_pipeline_output(bqml_pipeline, \"get-model-evaluation-metrics\")\n", + "print(\"bigquery-evaluate-model-job\")\n", + "artifacts = print_pipeline_output(bqml_pipeline, \"bigquery-evaluate-model-job\")\n", "print(\"\\n\\n\")\n", "print(\"bigquery-forecast-model-job\")\n", "artifacts = print_pipeline_output(bqml_pipeline, \"bigquery-forecast-model-job\")\n", @@ -1407,7 +1460,8 @@ "\n", "# Remove local resorces\n", "! rm -rf {KFP_COMPONENTS_PATH}\n", - "! rm -rf {PIPELINES_PATH}" + "! rm -rf {PIPELINES_PATH}\n", + "! rm -rf {DATA_PATH}" ] } ], diff --git a/notebooks/community/pipelines/google_cloud_pipeline_components_cloud_natural_language_pipeline.ipynb b/notebooks/community/pipelines/google_cloud_pipeline_components_cloud_natural_language_pipeline.ipynb new file mode 100644 index 000000000..c2774bead --- /dev/null +++ b/notebooks/community/pipelines/google_cloud_pipeline_components_cloud_natural_language_pipeline.ipynb @@ -0,0 +1,870 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1142fd18" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "BwO30Ag12YcB" + }, + "source": [ + "# Vertex Pipelines: Cloud Natural Language model training pipeline\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "This notebook shows how to use [Google Cloud Pipeline Components SDK](https://cloud.google.com/vertex-ai/docs/pipelines/components-introduction) and additional components in this directory to run a machine learning pipeline in [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) to train a TensorFlow text classification model.\n", + "\n", + "In this pipeline, the model training Docker image utilizes [TFHub](https://tfhub.dev/) models to perform state-of-the-art text classification training. The image is pre-built and ready to use, so no additional Docker setup is required." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d975e698c9a4" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to construct an end-to-end training pipeine within Vertex AI pipelines that ingests a dataset, trains a text classification model on it, and outputs evaluation metrics.\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Pipelines\n", + "- Vertex AI Datasets\n", + "\n", + "The steps performed include:\n", + "\n", + "- Define Kubeflow pipeline components\n", + "- Setup Kubeflow pipeline\n", + "- Run pipeline on Vertex AI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "08d289fa873f" + }, + "source": [ + "## Dataset\n", + "\n", + "This notebook requires that the user has two datasets exported from Vertex AI [managed datasets](https://cloud.google.com/vertex-ai/docs/training/using-managed-datasets): one with train and validation data splits, and the other with test data used for evaluation. Please ensure no data is shared between the two datasets (in particular, no evaluation data should be part of the train or validation splits). To export a Vertex AI dataset, please follow the following public docs:\n", + "* [Preparing data](https://cloud.google.com/vertex-ai/docs/text-data/classification/prepare-data)\n", + "* [Creating a Vertex AI dataset](https://cloud.google.com/vertex-ai/docs/text-data/classification/create-dataset) from the above data\n", + "* [Exporting dataset and its annotations](https://cloud.google.com/vertex-ai/docs/datasets/export-metadata-annotations); ensure the resulting export is located in a Google Cloud Storage (GCS) bucket you own. You may need to manually separate the test split data into its own file." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aed92deeb4a0" + }, + "source": [ + "## Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_local" + }, + "source": [ + "## Setup\n", + "\n", + "If you are using Colab or Google Vertex AI Workbench Notebooks, your environment already meets all the requirements to run this notebook. You can skip this step.\n", + "\n", + "***NOTE***: This notebook has been tested in the following environment:\n", + "\n", + "* Python version = 3.8\n", + "\n", + "Otherwise, make sure your environment meets this notebook's requirements. You need the following:\n", + "\n", + "- The Cloud Storage SDK\n", + "- Python 3\n", + "- virtualenv\n", + "- Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Cloud Storage guide to [Setting up a Python development environment](https://cloud.google.com/python/setup) and the [Jupyter installation guide](https://jupyter.org/install) provide detailed instructions for meeting these requirements. The following steps provide a condensed set of instructions:\n", + "\n", + "1. [Install and initialize the SDK](https://cloud.google.com/sdk/docs/).\n", + "\n", + "2. [Install Python 3](https://cloud.google.com/python/setup#installing_python).\n", + "\n", + "3. [Install virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv) and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "4. Activate that environment and run `pip3 install Jupyter` in a terminal shell to install Jupyter.\n", + "\n", + "5. Run `jupyter notebook` on the command line in a terminal shell to launch Jupyter.\n", + "\n", + "6. Open this notebook in the Jupyter Notebook Dashboard.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "568d5c16" + }, + "source": [ + "### Install additional packages\n", + "\n", + "Run the following commands to setup the packages for this notebook. Note that the last code snippet in this section restarts your kernel in order to load the installs properly, so when initalizing this notebook from scratch, it is recommended to run up to that cell, then afterwards you may start running the cell after that." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dac98aac" + }, + "outputs": [], + "source": [ + "# Install using pip3\n", + "!pip3 install -U tensorflow google-cloud-pipeline-components google-cloud-aiplatform kfp==1.8.16 \"shapely<2\" -q" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "alRWYgYTdz7P" + }, + "outputs": [], + "source": [ + "# Version check\n", + "# This has been tested with KFP 1.8.16\n", + "! python3 -c \"import kfp; print('KFP SDK version: {}'.format(kfp.__version__))\"\n", + "! python3 -c \"import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d0a15440" + }, + "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": "B9IYalYObAbY" + }, + "source": [ + "## Before you begin\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 Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,storage.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VA_kzAIIj2G_" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", + "authenticated. Skip this step.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "set_service_account" + }, + "source": [ + "### Set project ID\n", + "\n", + "Set your project ID here. If you don't know this, the following snippet attempts to deterine this from your gcloud config. Please continue only if the notebook can see your desired project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AkqEd5Gin9mn" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"your-project-id\" # @param {type:\"string\"}\n", + "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": "OVO_gUqpFEP2" + }, + "outputs": [], + "source": [ + "!gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a27d4cee" + }, + "source": [ + "### Setup project information\n", + "\n", + "Enter information about your project and datasets here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7e9477a2" + }, + "outputs": [], + "source": [ + "REGION = \"us\" # @param {type:\"string\"}\n", + "LOCATION = \"us-central1\" # @param {type:\"string\"}\n", + "TRAINING_DATA_LOCATION = \"gs://your-training-data-location\" # @param {type:\"string\"}\n", + "TASK_TYPE = \"CLASSIFICATION\" # @param [\"CLASSIFICATION\", \"MULTILABEL_CLASSIFICATION\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "o-MZnHsimbOH" + }, + "outputs": [], + "source": [ + "# Since we are training a custom model, we need to specify the list of possible\n", + "# classes/labels.\n", + "# e.g, [\"FirstClass\", \"SecondClass\"]\n", + "# An additional class \"[UNK]\" will be added to the list indicating that none of\n", + "# the specified labels are a match.\n", + "CLASS_NAMES = [\"\"]\n", + "\n", + "# This is a list of GCS URIs; e.g., [\"gs://your-bucket-name-here/your-input-file.jsonl\"].\n", + "TEST_DATA_URIS = [\"gs://your-bucket-name-here/your-input-file.jsonl\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "timestamp" + }, + "source": [ + "#### UUID\n", + "\n", + "To avoid name collisions with other resources in your project, you can create a UUID with the code below and append it onto the name of the bucket(s) created in this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wh9sgzemwLXE" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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 AI 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dO0NV93IwLXF" + }, + "outputs": [], + "source": [ + "!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": "Hg5f2oKBwLXG" + }, + "outputs": [], + "source": [ + "!gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EuFETRptyKXc" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform\n", + "\n", + "aiplatform.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3a09765" + }, + "source": [ + "## Create training pipeline" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "89bb4a50" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0f361e65" + }, + "outputs": [], + "source": [ + "from google_cloud_pipeline_components.aiplatform import ModelBatchPredictOp\n", + "from google_cloud_pipeline_components.experimental import natural_language\n", + "from google_cloud_pipeline_components.experimental.evaluation import (\n", + " GetVertexModelOp, ModelEvaluationClassificationOp,\n", + " TargetFieldDataRemoverOp)\n", + "from kfp import components\n", + "from kfp.v2 import compiler, dsl" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d33c87e4-2ada-4b87-bf75-064247f3162d" + }, + "source": [ + "### Define constants" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "36ceb9f8" + }, + "outputs": [], + "source": [ + "# Worker pool specs\n", + "TRAINING_MACHINE_TYPE = \"n1-highmem-8\"\n", + "ACCELERATOR_TYPE = \"NVIDIA_TESLA_T4\"\n", + "ACCELERATOR_COUNT = 1\n", + "EVAL_MACHINE_TYPE = \"n1-highmem-8\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zAaMJKrhAe5L" + }, + "source": [ + "## Define components\n", + "\n", + "This pipeline is composed from the following components:\n", + "\n", + "- **train-tfhub-model** - Trains a new Tensorflow model using TFHub layers from pre-built Docker image\n", + "- **upload-tensorflow-model-to-google-cloud-vertex-ai** - Uploads resulting model to Vertex AI model registry\n", + "- **get-vertex-model** - Gets model that has just been uploaded as an artifact in pipeline\n", + "- **convert-dataset-export-for-batch-predict** - Preprocessing component that takes the test dataset exported from Vertex datasets and converts it to a simpler compatible one that is readable from the batch predict component\n", + "- **target-field-data-remover** - Removes the target field (i.e., label) in the test dataset for the downstream batch predict component\n", + "- **model-batch-predict** - Performs a batch prediction job\n", + "- **model-evaluation-classification** - Calculates the evaluation metrics from the above batch predict job and exports the metrics artifact\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "DKe2iQNKgpKG" + }, + "outputs": [], + "source": [ + "# Load upload TF model component\n", + "upload_tensorflow_model_to_vertex_op = components.load_component_from_url(\n", + " \"https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/workaround_for_buggy_KFPv2_compiler/component.yaml\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TEnh9Pcx6Xfi" + }, + "source": [ + "### Define the pipeline\n", + "\n", + "The pipeline performs the following steps:\n", + "- Trains new text classification model\n", + "- Uploads model to Vertex AI Model Registry\n", + "- Performs preprocessing steps on test dataset export: formats data for batch predcition, removes target field\n", + "- Performs batch prediction on preprocessed test data\n", + "- Evaluates performance of model based on batch prediction output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2a67cde8" + }, + "outputs": [], + "source": [ + "@dsl.pipeline(name=\"text-classification-model\")\n", + "def pipeline():\n", + " train_task = natural_language.TrainTextClassificationOp()(\n", + " project=PROJECT_ID,\n", + " location=LOCATION,\n", + " machine_type=TRAINING_MACHINE_TYPE,\n", + " accelerator_type=ACCELERATOR_TYPE,\n", + " accelerator_count=ACCELERATOR_COUNT,\n", + " input_data_path=TRAINING_DATA_LOCATION,\n", + " input_format=\"jsonl\",\n", + " natural_language_task_type=TASK_TYPE,\n", + " )\n", + "\n", + " upload_task = upload_tensorflow_model_to_vertex_op(\n", + " model=train_task.outputs[\"model_output\"]\n", + " )\n", + "\n", + " get_model_task = GetVertexModelOp(\n", + " model_resource_name=upload_task.outputs[\"model_name\"]\n", + " )\n", + "\n", + " classification_type = (\n", + " \"multilabel\" if TASK_TYPE == \"MULTILABEL_CLASSIFICATION\" else \"multiclass\"\n", + " )\n", + "\n", + " convert_dataset_task = natural_language.ConvertDatasetExportForBatchPredictOp(\n", + " file_paths=TEST_DATA_URIS, classification_type=classification_type\n", + " )\n", + "\n", + " target_field_remover_task = TargetFieldDataRemoverOp(\n", + " project=PROJECT_ID,\n", + " location=LOCATION,\n", + " root_dir=BUCKET_URI,\n", + " gcs_source_uris=convert_dataset_task.outputs[\"output_files\"],\n", + " target_field_name=\"labels\",\n", + " instances_format=\"jsonl\",\n", + " )\n", + "\n", + " # Note: ModelBatchPredictOp doesn't support accelerators currently.\n", + " batch_predict_task = ModelBatchPredictOp(\n", + " project=PROJECT_ID,\n", + " location=LOCATION,\n", + " model=get_model_task.outputs[\"model\"],\n", + " job_display_name=\"nl-batch-predict-evaluation\",\n", + " gcs_source_uris=target_field_remover_task.outputs[\"gcs_output_directory\"],\n", + " instances_format=\"jsonl\",\n", + " predictions_format=\"jsonl\",\n", + " gcs_destination_output_uri_prefix=BUCKET_URI,\n", + " machine_type=EVAL_MACHINE_TYPE,\n", + " )\n", + "\n", + " # Note: Because we're running a custom training pipeline, the model source\n", + " # is detected as Custom and thus it doesn't use AutoML NL's default settings\n", + " # and fails if class_labels is excluded.\n", + " ModelEvaluationClassificationOp(\n", + " project=PROJECT_ID,\n", + " location=LOCATION,\n", + " root_dir=BUCKET_URI,\n", + " class_labels=CLASS_NAMES + [\"[UNK]\"],\n", + " predictions_gcs_source=batch_predict_task.outputs[\"gcs_output_directory\"],\n", + " predictions_format=\"jsonl\",\n", + " prediction_label_column=\"prediction.displayNames\",\n", + " prediction_score_column=\"prediction.confidences\",\n", + " ground_truth_gcs_source=convert_dataset_task.outputs[\"output_files\"],\n", + " ground_truth_format=\"jsonl\",\n", + " target_field_name=\"labels\",\n", + " classification_type=TASK_TYPE,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3211ba19" + }, + "source": [ + "### Compile the pipeline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c368c73f" + }, + "outputs": [], + "source": [ + "compiler.Compiler().compile(pipeline, \"nl_pipeline.json\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l_Vxwz5cdF5f" + }, + "source": [ + "Running the above line will generate a file locally or in Colab's directory." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ax0jOxIaholy" + }, + "source": [ + "### Run the pipeline\n", + "\n", + "This sends a create pipeline job request to Vertex Pipelines. Note that this task run synchronously and may take a while to complete.\n", + "\n", + "You may view the progress of the job at any time by clicking on the generated links (after \"View Pipeline Job\" in the console output of the cell below). Once the pipeline finishes, you may examine the artifacts produced from this pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Wfs7QOSxhp_n" + }, + "outputs": [], + "source": [ + "job = aiplatform.PipelineJob(\n", + " display_name=\"nl_pipeline\",\n", + " template_path=\"nl_pipeline.json\",\n", + " location=LOCATION,\n", + " enable_caching=True,\n", + " parameter_values={},\n", + ")\n", + "\n", + "job.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UIyGPaihWJWn" + }, + "source": [ + "Once the pipeline successfully finishes, go to the pipeline and examine the resulting metrics artifacts for the results. Otherwise, refer to the failing step(s) in the pipeline to determine the cause of any errors." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OoexTJTy9jnH" + }, + "source": [ + "## View model evaluation results\n", + "\n", + "To check the results of evaluation after pipeline execution, find the \"model-evaluation-classification\" subdirectory in the Cloud Storage bucket created by this pipeline. You may also run the following to directly output the contents of the metrics file:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "h9EqPCQF9lN9" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "\n", + "EVAL_TASK_NAME = \"model-evaluation-classification\"\n", + "PROJECT_NUMBER = job.gca_resource.name.split(\"/\")[1]\n", + "for _ in range(len(job.gca_resource.job_detail.task_details)):\n", + " TASK_ID = job.gca_resource.job_detail.task_details[_].task_id\n", + " EVAL_METRICS = (\n", + " BUCKET_URI\n", + " + \"/\"\n", + " + PROJECT_NUMBER\n", + " + \"/\"\n", + " + job.name\n", + " + \"/\"\n", + " + EVAL_TASK_NAME\n", + " + \"_\"\n", + " + str(TASK_ID)\n", + " + \"/executor_output.json\"\n", + " )\n", + " if tf.io.gfile.exists(EVAL_METRICS):\n", + " ! gsutil cat $EVAL_METRICS" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up the resources used by this pipeline, run the command below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "# Delete GCS bucket.\n", + "!gsutil -m rm -r {BUCKET_URI}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UMuyzrnZLoUa" + }, + "source": [ + "# Next steps\n", + "\n", + "For an alternate approach, please check out the [\"ready-to-go\" text classification pipeline](https://colab.research.google.com/github/GoogleCloudPlatform/vertex-ai-samples/blob/master/notebooks/community/pipelines/google_cloud_pipeline_components_ready_to_go_text_classification_pipeline.ipynb). This pipeline exposes the model logic for further customization if needed, and adds an additional pipeline step to deploy the model to enable online predictions." + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "d975e698c9a4", + "08d289fa873f", + "d33c87e4-2ada-4b87-bf75-064247f3162d", + "3211ba19", + "TpV-iwP9qw9c", + "UMuyzrnZLoUa" + ], + "name": "google_cloud_pipeline_components_cloud_natural_language_pipeline.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/community/pipelines/google_cloud_pipeline_components_ready_to_go_text_classification_pipeline.ipynb b/notebooks/community/pipelines/google_cloud_pipeline_components_ready_to_go_text_classification_pipeline.ipynb new file mode 100644 index 000000000..1dcc0ad68 --- /dev/null +++ b/notebooks/community/pipelines/google_cloud_pipeline_components_ready_to_go_text_classification_pipeline.ipynb @@ -0,0 +1,1208 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Tb01JWKr4ima" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Vertex Pipelines: Ready-to-go text classification model training pipeline\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "This demo showcases the use of [Google Cloud Pipeline Components (GCPC)](https://pypi.org/project/google-cloud-pipeline-components/), [Kubeflow Pipelines (KFP)](https://pypi.org/project/kfp/), and various Vertex AI services such as [Vertex Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction), [Vertex Tensorboard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview), [Vertex Training for distributed training](https://cloud.google.com/vertex-ai/docs/training/distributed-training) with accelerators, [Vertex Online Prediction](https://cloud.google.com/vertex-ai/docs/predictions/getting-predictions), and [Vertex Model Evaluation components](https://cloud.google.com/vertex-ai/docs/pipelines/model-evaluation-component) in building an end-to-end text classification pipeline that identifies the category of a news article based on its headline and a short description. The demo is intended to show developers how to build end-to-end pipelines using KFP and Vertex Pipelines to classify their own text data.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YLMHSSKNGuB-" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you will build an end-to-end text classification pipeline to classify news headlines and descriptions. You will use KFP, Vertex AI, and Vertex Pipelines to generate a managed and highly scalable solution.\n", + "\n", + "The Text Classification Pipeline includes the following steps:\n", + "\n", + "- Split the data into training and validation datasets\n", + "- Fine-tune a pre-trained [BERT](https://www.tensorflow.org/text/tutorials/classify_text_with_bert) model\n", + "- Upload your model to Vertex\n", + "- Deploy your model to a Vertex endpoint\n", + "- Perform model evaluation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eMxTrJCKGqsD" + }, + "source": [ + "### Dataset\n", + "\n", + "This demo uses a Kaggle [News Category Dataset](https://www.kaggle.com/datasets/rmisra/news-category-dataset), which contains around 200k news headlines from the years 2012-2018 obtained from HuffPost. It is located in the public samples Cloud Storage bucket as `gs://cloud-samples-data/vertex-ai/community-content/datasets/news/news_category_data.json`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yPPEG6lwGxPv" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ze4-nDLfK4pw" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench Notebooks**, your environment already meets\n", + "all the requirements to run this notebook. Skip to the 'Install additional packages' section below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gCuSR8GkAgzl" + }, + "source": [ + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [Setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip3 install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook Dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "### Install additional packages\n", + "\n", + "Install the following packages required to execute this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "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", + "\n", + "# Vertex AI Notebook requires dependencies to be installed with '--user'\n", + "USER_FLAG = \"\"\n", + "if IS_WORKBENCH_NOTEBOOK:\n", + " USER_FLAG = \"--user\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "LoSXmPuYg5zA" + }, + "outputs": [], + "source": [ + "! pip3 install --upgrade pip google-cloud-aiplatform google-cloud-pipeline-components kfp tensorflow tensorboard numpy {USER_FLAG} -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "Restart your notebook kernel to ensure all newly installed packages can be found." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "lWEdiXsJg0XY" + }, + "source": [ + "## Before you begin" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "### 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", + "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](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,storage.googleapis.com).\n", + "\n", + "1. If you are running this notebook locally, you will need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "PROJECT_ID = \"\"\n", + "\n", + "# Get your Google Cloud project ID from gcloud\n", + "if not os.getenv(\"IS_TESTING\"):\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": "markdown", + "metadata": { + "id": "qJYoRfYng0XZ" + }, + "source": [ + "Otherwise, set your project ID here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", + " PROJECT_ID = \"\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_gcloud_project_id" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9LYAz8zhg5zC" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "code", + "id": "zW8Byl_jg5zC" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "code", + "id": "A75Sm4Zpg5zC" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", + "authenticated. Skip this step.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zgPO1eR3CYjk" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "In this tutorial, a Cloud Storage bucket holds the News Category dataset file that is used to train the model. Vertex AI also saves artifacts, such as the split training and validation datasets generated by the preprocessing component, in the same bucket. Using this model artifact, you can then create a Vertex AI model and endpoint in order to serve online predictions.\n", + "\n", + "Set the name of your Cloud Storage bucket below. It must be unique across all\n", + "Cloud Storage buckets." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MzGDU7TWdts_" + }, + "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": "cf221059d072" + }, + "outputs": [], + "source": [ + "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"[your-bucket-name]\":\n", + " BUCKET_NAME = PROJECT_ID + \"aip-\" + UUID\n", + " BUCKET_URI = f\"gs://{BUCKET_NAME}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-EcIXiGsCePi" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NIq7R4HZCfIc" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ucvCsknMCims" + }, + "source": [ + "Finally, validate access to your Cloud Storage bucket by examining its contents:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vhOb7YnwClBb" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "set_service_account" + }, + "source": [ + "### Setup service account and permissions\n", + "A service account will be used to create a custom training job. If you do not want to use your project's Compute Engine service account, set SERVICE_ACCOUNT to another service account ID. You can create a service account by following the [instructions](https://cloud.google.com/iam/docs/creating-managing-service-accounts#creating)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EGFb5_BNg5zD" + }, + "outputs": [], + "source": [ + "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "autoset_service_account" + }, + "outputs": [], + "source": [ + "if (\n", + " SERVICE_ACCOUNT == \"\"\n", + " or SERVICE_ACCOUNT is None\n", + " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", + "):\n", + " # Get your service account from gcloud\n", + " if not IS_COLAB:\n", + " shell_output = !gcloud auth list 2>/dev/null\n", + " SERVICE_ACCOUNT = shell_output[2].replace(\"*\", \"\").strip()\n", + "\n", + " else: # IS_COLAB:\n", + " shell_output = ! gcloud projects describe $PROJECT_ID\n", + " project_number = shell_output[-1].split(\":\")[1].strip().replace(\"'\", \"\")\n", + " SERVICE_ACCOUNT = f\"{project_number}-compute@developer.gserviceaccount.com\"\n", + "\n", + " print(\"Service Account:\", SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "set_service_account:pipelines" + }, + "source": [ + "#### Set service account access\n", + "\n", + "Run the following commands to grant your service account access to read and write pipeline artifacts in the bucket that you created in the previous step. You only need to run this step once per service account." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VxXITjj2g5zE" + }, + "outputs": [], + "source": [ + "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator $BUCKET_URI\n", + "\n", + "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pRUOFELefqf1" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform\n", + "from kfp import components\n", + "from kfp.v2 import compiler, dsl\n", + "from kfp.v2.dsl import InputPath, component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kCGX-LsRg5zE" + }, + "outputs": [], + "source": [ + "# Model evaluation components\n", + "from google_cloud_pipeline_components.experimental.evaluation import \\\n", + " GetVertexModelOp as get_vertex_model_op\n", + "from google_cloud_pipeline_components.experimental.evaluation import \\\n", + " ModelEvaluationClassificationOp as evaluation_classification_op\n", + "from google_cloud_pipeline_components.experimental.evaluation import \\\n", + " ModelImportEvaluationOp as model_import_evaluation_op\n", + "from google_cloud_pipeline_components.experimental.evaluation import \\\n", + " TargetFieldDataRemoverOp as target_field_data_remover_op\n", + "# Text Classification components\n", + "from google_cloud_pipeline_components.experimental.sklearn import \\\n", + " SklearnTrainTestSplitJsonlOp as train_test_split_op\n", + "from google_cloud_pipeline_components.experimental.text_classification import \\\n", + " TextClassificationTrainingOp as text_classification_training_op\n", + "from google_cloud_pipeline_components.v1.batch_predict_job import \\\n", + " ModelBatchPredictOp as batch_prediction_op" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5IFdqoBqg5zE" + }, + "source": [ + "### Fill out the following required configurations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YoWhYTV3g5zE" + }, + "source": [ + "This pipeline accepts a JSONL dataset where each JSON object sample has two required keys: `text` and `label`. The `text` key should map to the sample's text data, while the `label` key should map to its classified category.\n", + "\n", + "Here is an example of a JSON object in the dataset used in this demo.\n", + "\n", + "{\n", + "**\"label\"**:\"CRIME\",\n", + "**\"text\"**:\"There Were 2 Mass Shootings In Texas Last Week, But Only 1 On TV\"\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "T17qYMhxg5zE" + }, + "outputs": [], + "source": [ + "BASE_OUTPUT_DIR = f\"gs://{BUCKET_NAME}\"\n", + "\n", + "SAMPLE_DATA_URI = \"gs://cloud-samples-data/vertex-ai/community-content/datasets/news/news_category_data.json\"\n", + "TRAINING_DATA_URI = (\n", + " f\"{BASE_OUTPUT_DIR}/data/news_category_data.json\" # @param {type:\"string\"}\n", + ")\n", + "\n", + "# The GCS directory for keeping staging files for model evaluation.\n", + "ROOT_DIR = \"'f\\\"{BASE_OUTPUT_DIR}/root\\\"'\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rcimKmcMg5zE" + }, + "source": [ + "Copy the sample data to TRAINING_DATA_URI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Nr3KLUEyg5zE" + }, + "outputs": [], + "source": [ + "! gsutil cp {SAMPLE_DATA_URI} {TRAINING_DATA_URI}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3pIcOb86g5zE" + }, + "source": [ + "`CLASS_NAMES` should be a list of all the categories to which a text sample can be classified as.\n", + "\n", + "In this demo, there are 41 genre categories (listed below) that a headline can be classfied as." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CZTJ1NwIg5zE" + }, + "outputs": [], + "source": [ + "CLASS_NAMES = [\n", + " \"GOOD NEWS\",\n", + " \"STYLE\",\n", + " \"STYLE & BEAUTY\",\n", + " \"ARTS\",\n", + " \"IMPACT\",\n", + " \"WEIRD NEWS\",\n", + " \"FIFTY\",\n", + " \"ENTERTAINMENT\",\n", + " \"ARTS & CULTURE\",\n", + " \"HEALTHY LIVING\",\n", + " \"WEDDINGS\",\n", + " \"PARENTING\",\n", + " \"BLACK VOICES\",\n", + " \"GREEN\",\n", + " \"RELIGION\",\n", + " \"POLITICS\",\n", + " \"PARENTS\",\n", + " \"BUSINESS\",\n", + " \"DIVORCE\",\n", + " \"WELLNESS\",\n", + " \"FOOD & DRINK\",\n", + " \"THE WORLDPOST\",\n", + " \"MEDIA\",\n", + " \"COLLEGE\",\n", + " \"WOMEN\",\n", + " \"TASTE\",\n", + " \"WORLDPOST\",\n", + " \"TRAVEL\",\n", + " \"CULTURE & ARTS\",\n", + " \"SPORTS\",\n", + " \"CRIME\",\n", + " \"QUEER VOICES\",\n", + " \"TECH\",\n", + " \"COMEDY\",\n", + " \"MONEY\",\n", + " \"WORLD NEWS\",\n", + " \"LATINO VOICES\",\n", + " \"SCIENCE\",\n", + " \"EDUCATION\",\n", + " \"HOME & LIVING\",\n", + " \"ENVIRONMENT\",\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JqSq5J7pg5zF" + }, + "source": [ + "### Load Components\n", + "The KFP SDK provides various methods to [load a component](https://www.kubeflow.org/docs/components/pipelines/sdk/component-development/#using-your-component-in-a-pipeline) for use in a pipeline. In this demo, we will be loading five components.\n", + "\n", + "This pipeline is composed of the following components:\n", + "\n", + "- **train_test_split_jsonl_with_sklearn** - splits data into training and validation datasets.\n", + "- **train_tensorflow_text_classification_model** - creates a trained text classification TensorFlow Model.\n", + "- **upload_Tensorflow_model_to_Google_Cloud_Vertex_AI** - converts a TensorFlow model to a Vertex model and uploads it to Vertex.\n", + "- **deploy_model_to_endpoint** - deploys a Vertex model to an endpoint for online predictions.\n", + "- **get_gcs_uris_from_jsonl_artifact** - A python function based op to convert data artifact to a format acceptable by model evaluation components.\n", + "- **target_field_data_remover** - removes the target (label) field in the validation data for downstream Vertex Batch Predictions.\n", + "- **model_batch_predict** - submits a batch prediction job.\n", + "- **model_evaluation_classification** - calculates and exports evaluation metrics.\n", + "- **model_evaluation_import** - imports model evaluation metrics results.\n", + "\n", + "Use the `load_component_from_url` for published components that have been made available by GCPC." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aQtIfCuqg5zF" + }, + "outputs": [], + "source": [ + "upload_tensorflow_model_to_vertex_op = components.load_component_from_url(\n", + " \"https://raw.githubusercontent.com/Ark-kun/pipeline_components/c6a8b67d1ada2cc17665c99ff6b410df588bee28/components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/workaround_for_buggy_KFPv2_compiler/component.yaml\"\n", + ")\n", + "deploy_model_to_endpoint_op = components.load_component_from_url(\n", + " \"https://raw.githubusercontent.com/Ark-kun/pipeline_components/27a5ea25e849c9e8c0cb6ed65518bc3ece259aaf/components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/workaround_for_buggy_KFPv2_compiler/component.yaml\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pdi60Egyg5zM" + }, + "source": [ + "Convert the validation data (an Artifact with the annotation of \"JSONLines\") to the output parameter gcs_source_uris (type: Sequence[str]) that can be ingested by the downstream \"target_field_data_remover_op\" and \"model_evaluation_op\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Lw5YefFeg5zM" + }, + "outputs": [], + "source": [ + "@component(\n", + " base_image=\"python:3.9\",\n", + ")\n", + "def get_gcs_uris_from_jsonl_artifact(input_jsonl: InputPath(\"JSONLines\")) -> list:\n", + " return [\"gs://\" + input_jsonl[5:]]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xX9pQ0T_g5zM" + }, + "source": [ + "### Build a pipeline\n", + "The following pipeline code links the inputs and outputs of the loaded components. The resulting pipeline performs the following steps:\n", + "- Partitions data into train and test splits.\n", + "- Trains new text classification model.\n", + "- Uploads model to Vertex AI Model Registry.\n", + "- Performs batch prediction with test data.\n", + "- Evaluates performance of model using above batch prediction.\n", + "- Imports evaluation metrics into model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "j_Ev_TOug5zM" + }, + "outputs": [], + "source": [ + "@dsl.pipeline(name=\"text-classification-pipeline\")\n", + "def text_pipeline(\n", + " project: str,\n", + " training_data_uri: str,\n", + " class_names: list,\n", + " root_dir: str,\n", + " target_field_name: str,\n", + " batch_predict_display_name: str,\n", + " batch_predict_instances_format: str = \"jsonl\",\n", + " batch_predictions_format: str = \"jsonl\",\n", + " model_name: str = \"small_bert/bert_en_uncased_L-2_H-128_A-2\",\n", + " validation_split: float = 0.2,\n", + " batch_size: int = 256,\n", + " learning_rate: float = 3e-4,\n", + " num_epochs: int = 5,\n", + " random_seed: int = 0,\n", + ") -> None:\n", + "\n", + " \"\"\"End-to-end text classification pipeline.\n", + "\n", + " Args:\n", + " project: Required. GCP project ID.\n", + " training_data_uri: Required. Data in JSON lines format.\n", + " class_names: Required. List of categories (string) for classification.\n", + " root_dir: Required. The GCS directory for keeping staging files for model evaluation.\n", + " target_field_name: Required. The name of the features target field in the predictions file (e.g. 'label').\n", + " batch_predict_instances_format: The file format for the ground truth files.\n", + " batch_predictions_format: The file format for the batch prediction results.\n", + " batch_predict_display_name: Required. The user-defined name of this BatchPredictionJob.\n", + " model_name: Optional. Name of pre-trained BERT model to be used.\n", + " Default: \"small_bert/bert_en_uncased_L-2_H-128_A-2\"\n", + " validation_split: Optional. Fraction of data that will make up validation dataset.\n", + " Default: 0.2\n", + " batch_size: Optional. Batch size\n", + " Default: 256\n", + " learning_rate: Optional. Learning rate\n", + " Default: 3e-4\n", + " num_epochs: Optional. Number of epochs\n", + " Default: 10\n", + " random_seed: Optional. Random seed\n", + " Default: 0\n", + " \"\"\"\n", + "\n", + " text_data_preprocess_task = train_test_split_op(\n", + " input_data_path=training_data_uri,\n", + " )\n", + "\n", + " training_data = text_data_preprocess_task.outputs[\"training_data_path\"]\n", + "\n", + " validation_data = text_data_preprocess_task.outputs[\"validation_data_path\"]\n", + "\n", + " # Set CPU, memory, and GPU configuration settings for this step (https://cloud.google.com/vertex-ai/docs/pipelines/machine-types)\n", + " model = (\n", + " text_classification_training_op(\n", + " preprocessed_training_data_path=training_data,\n", + " preprocessed_validation_data_path=validation_data,\n", + " model_name=model_name,\n", + " class_names=class_names,\n", + " batch_size=batch_size,\n", + " learning_rate=learning_rate,\n", + " num_epochs=num_epochs,\n", + " random_seed=random_seed,\n", + " )\n", + " ).add_node_selector_constraint(\n", + " \"cloud.google.com/gke-accelerator\", \"NVIDIA_TESLA_A100\"\n", + " ) # Note that A100 is available on us-central1\n", + "\n", + " vertex_model_name = upload_tensorflow_model_to_vertex_op(\n", + " model=model.outputs[\"trained_model_path\"],\n", + " ).outputs[\"model_name\"]\n", + "\n", + " # Model evaluation\n", + " # Need a component to convert Artifact('JsonLinesDataset') to JsonArray\n", + " validation_data_uris = get_gcs_uris_from_jsonl_artifact(validation_data).output\n", + "\n", + " evaluation_data_for_batch_predict = target_field_data_remover_op(\n", + " project=project,\n", + " root_dir=root_dir,\n", + " target_field_name=target_field_name,\n", + " gcs_source_uris=validation_data_uris,\n", + " ).outputs[\"gcs_output_directory\"]\n", + "\n", + " vertex_model = get_vertex_model_op(\n", + " model_resource_name=vertex_model_name,\n", + " ).outputs[\"model\"]\n", + "\n", + " batch_prediction_task = batch_prediction_op(\n", + " project=project,\n", + " model=vertex_model,\n", + " job_display_name=batch_predict_display_name,\n", + " gcs_source_uris=evaluation_data_for_batch_predict,\n", + " gcs_destination_output_uri_prefix=root_dir,\n", + " instances_format=batch_predict_instances_format,\n", + " predictions_format=batch_predictions_format,\n", + " machine_type=\"n1-standard-32\",\n", + " starting_replica_count=5,\n", + " max_replica_count=10,\n", + " )\n", + "\n", + " # Run the evaluation based on prediction type\n", + " eval_task = evaluation_classification_op(\n", + " project=project,\n", + " root_dir=root_dir,\n", + " ground_truth_gcs_source=validation_data_uris,\n", + " target_field_name=target_field_name,\n", + " prediction_score_column=\"prediction\",\n", + " prediction_label_column=\"\",\n", + " class_labels=class_names,\n", + " ground_truth_format=batch_predict_instances_format,\n", + " predictions_format=batch_predictions_format,\n", + " predictions_gcs_source=batch_prediction_task.outputs[\"gcs_output_directory\"],\n", + " )\n", + " # Import the model evaluations to the Vertex AI model\n", + " model_import_evaluation_op(\n", + " classification_metrics=eval_task.outputs[\"evaluation_metrics\"],\n", + " model=vertex_model,\n", + " dataset_type=\"jsonl\",\n", + " )\n", + "\n", + " # For online predictions\n", + " _ = deploy_model_to_endpoint_op(\n", + " model_name=vertex_model_name,\n", + " ).outputs[\"endpoint_name\"]\n", + "\n", + "\n", + "pipeline_func = text_pipeline" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DiuoDAI8g5zM" + }, + "source": [ + "### Run the Pipeline" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Tjbfj0Dwg5zM" + }, + "source": [ + "The following block creates a pipline run from the pipeline function above and submits to the Vertex AI platform. You can view the pipeline's artifacts in [Vertex ML Metadata (MLMD)](https://cloud.google.com/vertex-ai/docs/ml-metadata/introduction) at the link that is ouputted when the next block is run.\n", + "\n", + "Only the parameters of this pipeline need to be changed to adapt to your specific usecase. Specify the required pipeline parameters and any optional ones in the `parameter_values` dictionary." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OMZJdsVCg5zM" + }, + "outputs": [], + "source": [ + "compiler.Compiler().compile(\n", + " pipeline_func=pipeline_func,\n", + " package_path=\"text_classification_pipeline.json\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "UnpTVTkZg5zM" + }, + "outputs": [], + "source": [ + "PIPELINE_DISPLAY_NAME = f\"text-classification-train-evaluate-{UUID}\" # \"[your-pipeline-display-name]\" # @param {type:\"string\"}\n", + "\n", + "BATCH_PREDICTION_DISPLAY_NAME = f\"batch-prediction-on-pipelines-model-{UUID}\"\n", + "\n", + "parameters = {\n", + " \"project\": PROJECT_ID,\n", + " \"training_data_uri\": TRAINING_DATA_URI,\n", + " \"class_names\": CLASS_NAMES,\n", + " \"num_epochs\": 5,\n", + " \"root_dir\": ROOT_DIR,\n", + " \"target_field_name\": \"label\",\n", + " \"batch_predict_display_name\": BATCH_PREDICTION_DISPLAY_NAME,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6tjK6MUYg5zM" + }, + "outputs": [], + "source": [ + "job = aiplatform.PipelineJob(\n", + " display_name=PIPELINE_DISPLAY_NAME,\n", + " template_path=\"text_classification_pipeline.json\",\n", + " location=REGION,\n", + " enable_caching=True,\n", + " parameter_values=parameters,\n", + ")\n", + "\n", + "job.submit(service_account=SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tNkT5JDHg5zM" + }, + "source": [ + "## Make predictions\n", + "\n", + "Once your model is deployed to an endpoint, it can be used to make predictions using the UI or KFP SDK.\n", + "\n", + "To use the UI, watch this short [tutorial](https://screencast.googleplex.com/cast/NDY5Nzk3NzUzNzk1Mzc5MnxiNDMxZTFkNi1lNg) or follow the steps highlighted [here](https://cloud.google.com/vertex-ai/docs/predictions/online-predictions-custom-models).\n", + "\n", + "To make predictions using the KFP SDK, the endpoint to which the model was deployed is needed. The code below extracts the `ENDPOINT_ID` from the PipelineJob." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "r9y_riwHg5zM" + }, + "outputs": [], + "source": [ + "task_id = \"deploy-model-to-endpoint-for-google-cloud-vertex-ai-model\"\n", + "deploy_task_detail = [\n", + " task_details\n", + " for task_details in job.task_details\n", + " if task_details.task_name == task_id\n", + "][0]\n", + "ENDPOINT_ID = deploy_task_detail.execution.metadata[\"output:endpoint_name\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "skY2oAy8g5zN" + }, + "source": [ + "Each request must be its own JSON object with a `text` key. `instances` should be a list that holds all the requests." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "E-GNIT9Ng5zN" + }, + "outputs": [], + "source": [ + "instances = [\n", + " {\n", + " \"text\": \"Irish Voters Set To Liberalize Abortion Laws In Landslide, Exit Poll Signals Vote counting will begin Saturday.\"\n", + " }\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5DXeesSog5zN" + }, + "source": [ + "A list of predictions in order of how the requests were structured above. Each prediction is a vector of with probabilities of each category in `class_names` being the proper label. The probabilites match up to each category in `class_names` in order." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nRMUx8tng5zN" + }, + "outputs": [], + "source": [ + "endpoint = aiplatform.Endpoint(ENDPOINT_ID)\n", + "prediction = endpoint.predict(instances=instances)\n", + "print(prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "# Delete GCS bucket.\n", + "! gsutil -m rm -r {BUCKET_URI}\n", + "\n", + "# Delete endpoint resource.\n", + "! gcloud ai endpoints delete $ENDPOINT_ID --quiet --region $REGION" + ] + } + ], + "metadata": { + "colab": { + "name": "google_cloud_pipeline_components_ready_to_go_text_classification_pipeline.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/community/sdk/sdk_pytorch_torchrun_custom_container_training_imagenet.ipynb b/notebooks/community/sdk/sdk_pytorch_torchrun_custom_container_training_imagenet.ipynb new file mode 100644 index 000000000..3276ba078 --- /dev/null +++ b/notebooks/community/sdk/sdk_pytorch_torchrun_custom_container_training_imagenet.ipynb @@ -0,0 +1,1872 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Vertex AI SDK: Using PyTorch torchrun to simplify multi-node training with custom containers\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial uses the Tiny ImageNet dataset to run multi-node distributed training on Vertex AI with Torchrun. It will run distributed training on multiple nodes with GPUs\n", + "\n", + "### Objective\n", + "\n", + "In this tutorial, you will learn how to train an Imagenet model using PyTorch's Torchrun on multiple nodes:\n", + "\n", + " * Install necessary libraries\n", + " * Create a shell script to start an ETCD cluster on the master node\n", + " * Create a training script using code from PyTorch Elastic's Github repository\n", + " * Create containers that download the data, and start an ETCD cluster on the host\n", + " * Train the model using multiple nodes with GPUs\n", + "\n", + "### Dataset\n", + "\n", + "For the sake of training time, the Tiny ImageNet dataset is used in this tutorial: https://image-net.org/data/tiny-imagenet-200.zip\n", + "\n", + "This dataset consists of many small (~2KB) images. To avoid network bottlenecks with the large volume of network transfers from Cloud Storage to the GPUs, we will download this dataset to the containers\n", + "\n", + "The training code is based on this PyTorch Torchrun example for ImageNet: https://github.com/pytorch/elastic/blob/master/examples/imagenet/main.py\n", + "\n", + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI Training w/ GPUs\n", + "* Vertex AI TensorBoard\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "## Installation\n", + "\n", + "Install the following packages required to execute this notebook. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "source": [ + "# Install the packages\n", + "! pip3 install --user --upgrade google-cloud-aiplatform python-etcd" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58707a750154" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f200f10a1da3" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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 Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sBCra4QMA2wR" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "74ccc9e52986" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de775a3773ba" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "254614fa0c46" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ef21552ccea8" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "603adbbf0532" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f6b2ccc891ed" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zgPO1eR3CYjk" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "Create a storage bucket to store intermediate artifacts such as datasets.\n", + "\n", + "- *{Note to notebook author: For any user-provided strings that need to be unique (like bucket names or model ID's), append \"-unique\" to the end so proper testing can occur}*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MzGDU7TWdts_" + }, + "outputs": [], + "source": [ + "BUCKET_URI = \"gs://your-bucket-name-unique\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-EcIXiGsCePi" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NIq7R4HZCfIc" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "960505627ddf" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a7a84e2e4c4e" + }, + "source": [ + "### Service Account\n", + "\n", + "You use a service account to create the Vertex AI Training job. If you do not want to use your project's Compute Engine service account, set SERVICE_ACCOUNT to another service account ID." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e0c9c4f84849" + }, + "outputs": [], + "source": [ + "SERVICE_ACCOUNT = \"[your-service-account]\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2d9440bb3017" + }, + "source": [ + "If you do not provide a service account, run the code below to get the Compute Engine service account" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "304a9ea0b6d0" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Google Cloud Notebook product has specific requirements\n", + "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", + "\n", + "if (\n", + " SERVICE_ACCOUNT == \"\"\n", + " or SERVICE_ACCOUNT is None\n", + " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", + "):\n", + " # Get your service account from gcloud\n", + " if IS_GOOGLE_CLOUD_NOTEBOOK:\n", + " shell_output = !gcloud auth list 2>/dev/null\n", + " SERVICE_ACCOUNT = shell_output[2].replace(\"*\", \"\").strip()\n", + "\n", + " if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", + " shell_output = ! gcloud projects describe $PROJECT_ID\n", + " project_number = shell_output[-1].split(\":\")[1].strip().replace(\"'\", \"\")\n", + " SERVICE_ACCOUNT = f\"{project_number}-compute@developer.gserviceaccount.com\"\n", + "\n", + " print(\"Service Account:\", SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gar_enable_api" + }, + "source": [ + "### Enable Artifact Registry API\n", + "\n", + "First, you must enable the Artifact Registry API service for your project.\n", + "\n", + "Learn more about [Enabling service](https://cloud.google.com/artifact-registry/docs/enable-service)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gar_enable_api" + }, + "outputs": [], + "source": [ + "! gcloud services enable artifactregistry.googleapis.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gar_create_repo" + }, + "source": [ + "### Create a private Docker repository\n", + "\n", + "Your first step is to create your own Docker repository in Artifact Registry.\n", + "\n", + "1. Run the `gcloud artifacts repositories create` command to create a new Docker repository with your region with the description \"docker repository\".\n", + "\n", + "2. Run the `gcloud artifacts repositories list` command to verify that your repository was created." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ea7cf85d87d2" + }, + "outputs": [], + "source": [ + "REPOSITORY = \"torchrun-imagenet-repo\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gar_create_repo" + }, + "outputs": [], + "source": [ + "! gcloud artifacts repositories create {REPOSITORY} --repository-format=docker --location={REGION} --description=\"Docker repository\"\n", + "\n", + "! gcloud artifacts repositories list" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gar_auth" + }, + "source": [ + "### Configure authentication to your private repo\n", + "\n", + "Before you push or pull container images, configure Docker to use the `gcloud` command-line tool to authenticate requests to `Artifact Registry` for your region." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gar_auth" + }, + "outputs": [], + "source": [ + "! gcloud auth configure-docker {REGION}-docker.pkg.dev --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8f3ea1210749" + }, + "source": [ + "## Vertex AI Training with GPUs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2f6e7336d1a0" + }, + "source": [ + "### Create files for the host container" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fd9228f35579" + }, + "outputs": [], + "source": [ + "%mkdir -p trainer\n", + "%cat /dev/null > trainer/__init__.py" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "70886930375a" + }, + "source": [ + "#### Create the Dockerfile\n", + "Installs necessary libraries, and downloads the tiny ImageNet data for training" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b7da2e37e767" + }, + "outputs": [], + "source": [ + "%%writefile trainer/Dockerfile\n", + "FROM gcr.io/deeplearning-platform-release/pytorch-gpu.1-13:m102\n", + "\n", + "RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \\\n", + " # Install reduction server plugin on GPU containers. google-fast-socket is\n", + " # previously installed in GPU dlenv containers only and it is not compatible\n", + " # with google-reduction-server.\n", + " if dpkg -s google-fast-socket; then \\\n", + " apt remove -y google-fast-socket && \\\n", + " apt install -y google-reduction-server; \\\n", + " fi\n", + "\n", + "RUN rm -f /etc/apt/sources.list.d/cuda.list && \\\n", + " rm -f /etc/apt/sources.list.d/nvidia-ml.list\n", + "\n", + "RUN apt-key del 7fa2af80 && \\\n", + " apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub && \\\n", + " apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub\n", + "\n", + "RUN apt-get update -y && \\\n", + " apt-get install -y curl gnupg telnet nano net-tools iputils-ping\n", + "\n", + "# Set ETCD version\n", + "ARG ETCD_VER=v2.3.0\n", + "# Choose either URL\n", + "ARG GOOGLE_URL=https://storage.googleapis.com/etcd\n", + "ARG GITHUB_URL=https://github.com/etcd-io/etcd/releases/download\n", + "# Set ETCD URL to download from\n", + "ARG DOWNLOAD_URL=$GOOGLE_URL\n", + "\n", + "# Install ETCD\n", + "RUN mkdir -p /tmp/etcd-download-test && \\\n", + " curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz && \\\n", + " tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1 && \\\n", + " rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz\n", + "\n", + "# Copy training application code\n", + "COPY . /trainer\n", + "\n", + "WORKDIR /trainer\n", + "\n", + "# Install dependencies\n", + "RUN pip install -r requirements.txt\n", + "\n", + "RUN chmod 777 main.sh\n", + "\n", + "# Download data to the container\n", + "RUN wget -q -P /trainer/data https://image-net.org/data/tiny-imagenet-200.zip\n", + "RUN unzip -q /trainer/data/tiny-imagenet-200.zip\n", + "RUN rm /trainer/data/tiny-imagenet-200.zip\n", + "\n", + "CMD [\"/bin/bash\", \"main.sh\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cbcfa70f5d54" + }, + "outputs": [], + "source": [ + "%%writefile trainer/requirements.txt\n", + "torch==1.13.0\n", + "torchvision==0.14.0\n", + "tensorboard==2.5.0\n", + "protobuf==3.20.*\n", + "python-etcd\n", + "python-json-logger" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "127c2963c3b8" + }, + "source": [ + "#### Create the main.sh file \n", + "Starts the ETCD server on the host, saves the host IP to Cloud Storage (for the workers), and calls torchrun" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "77dba1b6bf95" + }, + "outputs": [], + "source": [ + "%%writefile trainer/main.sh\n", + "#!/bin/bash\n", + "# Copyright 2022 Google Inc. All Rights Reserved.\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", + "# http://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.\n", + "\n", + "# Provision the prerequisites for running a job on TPU VMs in GKE \n", + "# using a Vertex AI Pipeline \n", + "# USAGE: ./install.sh PROJECT_ID GKE_CLUSTER NAME_PREFIX [ZONE=us-central1-b]\n", + "# ./install.sh your-project-id gke-tpu-cluster gke-tpu us-central1-b\n", + "\n", + "# Set up a global error handler\n", + "err_handler() {\n", + " echo \"Error on line: $1\"\n", + " echo \"Caused by: $2\"\n", + " echo \"That returned exit status: $3\"\n", + " echo \"Aborting...\"\n", + " exit $3\n", + "}\n", + "\n", + "trap 'err_handler \"$LINENO\" \"$BASH_COMMAND\" \"$?\"' ERR\n", + "\n", + "setup_etcd() {\n", + " HOST_IP=$1\n", + " # Start a local instane of ETCD v2 \n", + " export ETCD_ENABLE_V2=true\n", + " export ETCDCTL_API=2\n", + "\n", + " /tmp/etcd-download-test/etcd --name s1 --data-dir /tmp/etcd-download-test/s1 \\\n", + " --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://$HOST_IP:2379 \\\n", + " --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://$HOST_IP:2380 \\\n", + " --initial-cluster s1=http://$HOST_IP:2380 --initial-cluster-token tkn \\\n", + " --initial-cluster-state new &> /tmp/etcd-download-test/node.log &\n", + "\n", + " /tmp/etcd-download-test/etcd --version\n", + " /tmp/etcd-download-test/etcdctl --version\n", + "}\n", + "\n", + "\n", + "# Process and print passed in variables\n", + "while getopts e:a:b:d:t:w:v:u:i:p:n:r:c: option\n", + "do \n", + " case \"${option}\"\n", + " in\n", + " e)epochs=${OPTARG};;\n", + " a)arch=${OPTARG};;\n", + " b)batchsize=${OPTARG};;\n", + " d)distbackend=${OPTARG};;\n", + " t)data=${OPTARG};;\n", + " w)workers=${OPTARG};;\n", + " v)env=${OPTARG};;\n", + " u)rdvzbackend=${OPTARG};;\n", + " i)rdvzid=${OPTARG};;\n", + " p)endpoint=${OPTARG};;\n", + " n)nnodes=${OPTARG};;\n", + " r)nprocpernode=${OPTARG};;\n", + " c)ischief=${OPTARG};;\n", + " esac\n", + "done\n", + "\n", + "echo \"epochs : $epochs\"\n", + "echo \"arch : $arch\"\n", + "echo \"batchsize : $batchsize\"\n", + "echo \"distbackend : $distbackend\"\n", + "echo \"data : $data\"\n", + "echo \"workers : $workers\"\n", + "echo \"env : $env\"\n", + "echo \"rdvzbackend : $rdvzbackend\"\n", + "echo \"rdvzid : $rdvzid\"\n", + "echo \"endpoint : $endpoint\"\n", + "echo \"nnodes : $nnodes\"\n", + "echo \"nprocpernode : $nprocpernode\"\n", + "echo \"ischief : $ischief\"\n", + "\n", + "# parse cluster config\n", + "IFS=' ' read -a conf <<< $(python parse_cluster_config.py)\n", + "WORKERPOOL_TYPE=\"${conf[0]}\"\n", + "\n", + "echo \"WORKERPOOL_TYPE=${WORKERPOOL_TYPE}\"\n", + "echo \"CLUSTER_SPEC=${CLUSTER_SPEC}\"\n", + "\n", + "gcsfilepath=\"${env//\\/gcs\\//gs://}\"\n", + "\n", + "if [ \"$WORKERPOOL_TYPE\" == \"workerpool0\" ] || [ \"$WORKERPOOL_TYPE\" == \"chief\" ]; then\n", + " HOST_IP=$(hostname -i)\n", + " echo \"HOST_IP=\"$HOST_IP\n", + " echo \"Writing host IP address to \"$gcsfilepath\n", + " echo $HOST_IP| gsutil cp - $gcsfilepath\n", + " setup_etcd $HOST_IP\n", + "else\n", + " echo \"Wait 60s for the host server to come online\"\n", + " sleep 60\n", + " echo \"reading host IP address from \"$gcsfilepath\n", + " HOST_IP=$(gsutil cat $gcsfilepath)\n", + " echo \"HOST_IP=\"$HOST_IP\n", + "fi\n", + "\n", + "env=\"env://\"\n", + "ping -c 1 $HOST_IP\n", + "\n", + "set -x\n", + "\n", + "torchrun --rdzv_backend $rdvzbackend --rdzv_id $rdvzid --rdzv_endpoint $HOST_IP:2379 \\\n", + "--nnodes $nnodes --nproc_per_node $nprocpernode --master_addr $HOST_IP --master_port 2379 \\\n", + "main.py --epochs $epochs --arch $arch --batch-size $batchsize --dist-backend $distbackend \\\n", + "--data $data \\\n", + "--env $env \\\n", + "--hostip $HOST_IP \\\n", + "--hostipport 2379 \\\n", + "--workers $workers \\\n", + "--ischief $ischief" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3294e388117a" + }, + "outputs": [], + "source": [ + "%%writefile trainer/parse_cluster_config.py\n", + "import os\n", + "import json\n", + "\n", + "cluster_config_str = os.environ.get('CLUSTER_SPEC')\n", + "cluster_config_dict = json.loads(cluster_config_str)\n", + "workerpool_type = cluster_config_dict['task']['type']\n", + "\n", + "print(workerpool_type)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "10fdcf6db6bb" + }, + "source": [ + "#### Create the main.py file \n", + "Main trainer for the ImageNet training job" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "24793c94ebff" + }, + "outputs": [], + "source": [ + "%%writefile trainer/main.py\n", + "#!/usr/bin/env python3\n", + "\n", + "# Copyright (c) Facebook, Inc. and its affiliates.\n", + "# All rights reserved.\n", + "#\n", + "# This source code is licensed under the BSD-style license found in the\n", + "# LICENSE file in the root directory of this source tree.\n", + "\n", + "r\"\"\"\n", + "Source: `pytorch imagenet example `_ # noqa B950\n", + "Modified and simplified to make the original pytorch example compatible with\n", + "torchelastic.distributed.launch.\n", + "Changes:\n", + "1. Removed ``rank``, ``gpu``, ``multiprocessing-distributed``, ``dist_url`` options.\n", + " These are obsolete parameters when using ``torchelastic.distributed.launch``.\n", + "2. Removed ``seed``, ``evaluate``, ``pretrained`` options for simplicity.\n", + "3. Removed ``resume``, ``start-epoch`` options.\n", + " Loads the most recent checkpoint by default.\n", + "4. ``batch-size`` is now per GPU (worker) batch size rather than for all GPUs.\n", + "5. Defaults ``workers`` (num data loader workers) to ``0``.\n", + "Usage\n", + "::\n", + " >>> python -m torchelastic.distributed.launch\n", + " --nnodes=$NUM_NODES\n", + " --nproc_per_node=$WORKERS_PER_NODE\n", + " --rdzv_id=$JOB_ID\n", + " --rdzv_backend=etcd\n", + " --rdzv_endpoint=$ETCD_HOST:$ETCD_PORT\n", + " main.py\n", + " --arch resnet18\n", + " --epochs 20\n", + " --batch-size 32\n", + " \n", + "\"\"\"\n", + "\n", + "import traceback\n", + "import argparse\n", + "import io\n", + "import os\n", + "import shutil\n", + "import time\n", + "from contextlib import contextmanager\n", + "from datetime import timedelta\n", + "from typing import List, Tuple\n", + "\n", + "import numpy\n", + "import torch\n", + "import torch.backends.cudnn as cudnn\n", + "import torch.distributed as dist\n", + "import torch.nn as nn\n", + "import torch.nn.parallel\n", + "import torch.optim\n", + "import torch.utils.data\n", + "import torch.utils.data.distributed\n", + "import torchvision.datasets as datasets\n", + "import torchvision.models as models\n", + "import torchvision.transforms as transforms\n", + "from torch.distributed.elastic.utils.data import ElasticDistributedSampler\n", + "from torch.nn.parallel import DistributedDataParallel\n", + "from torch.optim import SGD\n", + "from torch.utils.data import DataLoader\n", + "\n", + "\n", + "model_names = sorted(\n", + " name\n", + " for name in models.__dict__\n", + " if name.islower() and not name.startswith(\"__\") and callable(models.__dict__[name])\n", + ")\n", + "\n", + "parser = argparse.ArgumentParser(description=\"PyTorch Elastic ImageNet Training\")\n", + "parser.add_argument(\"--data\", metavar=\"DIR\", help=\"path to dataset\")\n", + "parser.add_argument(\n", + " \"-a\",\n", + " \"--arch\",\n", + " metavar=\"ARCH\",\n", + " default=\"resnet18\",\n", + " choices=model_names,\n", + " help=\"model architecture: \" + \" | \".join(model_names) + \" (default: resnet18)\",\n", + ")\n", + "parser.add_argument(\n", + " \"-j\",\n", + " \"--workers\",\n", + " default=0,\n", + " type=int,\n", + " metavar=\"N\",\n", + " help=\"number of data loading workers\",\n", + ")\n", + "parser.add_argument(\n", + " \"--epochs\", default=90, type=int, metavar=\"N\", help=\"number of total epochs to run\"\n", + ")\n", + "parser.add_argument(\n", + " \"-b\",\n", + " \"--batch-size\",\n", + " default=32,\n", + " type=int,\n", + " metavar=\"N\",\n", + " help=\"mini-batch size (default: 32), per worker (GPU)\",\n", + ")\n", + "parser.add_argument(\n", + " \"--lr\",\n", + " \"--learning-rate\",\n", + " default=0.1,\n", + " type=float,\n", + " metavar=\"LR\",\n", + " help=\"initial learning rate\",\n", + " dest=\"lr\",\n", + ")\n", + "parser.add_argument(\"--momentum\", default=0.9, type=float, metavar=\"M\", help=\"momentum\")\n", + "parser.add_argument(\n", + " \"--wd\",\n", + " \"--weight-decay\",\n", + " default=1e-4,\n", + " type=float,\n", + " metavar=\"W\",\n", + " help=\"weight decay (default: 1e-4)\",\n", + " dest=\"weight_decay\",\n", + ")\n", + "parser.add_argument(\n", + " \"-p\",\n", + " \"--print-freq\",\n", + " default=10,\n", + " type=int,\n", + " metavar=\"N\",\n", + " help=\"print frequency (default: 10)\",\n", + ")\n", + "parser.add_argument(\n", + " \"--dist-backend\",\n", + " default=\"nccl\",\n", + " choices=[\"nccl\", \"gloo\"],\n", + " type=str,\n", + " help=\"distributed backend\",\n", + ")\n", + "parser.add_argument(\n", + " \"--checkpoint-file\",\n", + " default=\"/tmp/checkpoint.pth.tar\",\n", + " type=str,\n", + " help=\"checkpoint file path, to load and save to\",\n", + ")\n", + "parser.add_argument(\n", + " \"--env\",\n", + " default=\"env://\",\n", + " type=str,\n", + " help=\"setting for init_method for torch.distributed.init_process_group. Leave default unless you want to pass a shared gcs path\",\n", + ")\n", + "parser.add_argument(\n", + " \"--hostip\",\n", + " default=\"localhost\",\n", + " type=str,\n", + " help=\"setting for etcd host ip\",\n", + ")\n", + "parser.add_argument(\n", + " \"--hostipport\",\n", + " default=2379,\n", + " type=int,\n", + " help=\"setting for etcd host ip port\",\n", + ")\n", + "parser.add_argument(\n", + " \"--ischief\",\n", + " default=\"n\", \n", + " type=str,\n", + " help='is this cheif or worker')\n", + "\n", + "def main():\n", + " args = parser.parse_args()\n", + " print(args)\n", + " device_id = int(os.environ[\"LOCAL_RANK\"])\n", + " torch.cuda.set_device(device_id)\n", + " print(f\"=> set cuda device = {device_id}\")\n", + "\n", + " LOCAL_RANK=int(os.environ[\"LOCAL_RANK\"])\n", + " RANK=int(os.environ[\"RANK\"])\n", + " WORLD_SIZE=int(os.environ[\"WORLD_SIZE\"])\n", + "\n", + " print (f\"LOCAL_RANK={os.environ['LOCAL_RANK']} RANK={os.environ['RANK']} WORLD_SIZE={os.environ['WORLD_SIZE']}\")\n", + " print (f\"args env= {args.env}\")\n", + " \n", + " print (f\"Host address: {os.environ['MASTER_ADDR']}:{os.environ['MASTER_PORT']}\")\n", + " os.environ['MASTER_ADDR']=args.hostip\n", + " print (f\"Updated IPv4 host address: {os.environ['MASTER_ADDR']}:{os.environ['MASTER_PORT']}\")\n", + " \n", + " print ('Initialize process group')\n", + " if args.env == \"env://\":\n", + " dist.init_process_group(\n", + " backend=args.dist_backend, init_method=f\"{args.env}\", timeout=timedelta(seconds=120)\n", + " )\n", + " else:\n", + " if args.ischief.lower() == 'y':\n", + " print ('Setting store')\n", + " #STORE = dist.FileStore(args.env, WORLD_SIZE)\n", + " STORE = dist.TCPStore(host_name=args.hostip, port=args.hostipport, world_size=WORLD_SIZE, is_master=True, timeout=timedelta(seconds=30))\n", + " print (f'Store set = {STORE}') \n", + " dist.init_process_group(\n", + " backend=args.dist_backend, store=STORE, timeout=timedelta(seconds=30),\n", + " rank=RANK, world_size=WORLD_SIZE\n", + " )\n", + "\n", + " dist.init_process_group(\n", + " backend=args.dist_backend, init_method=f\"tcp://{args.hostip}:{args.hostipport}\", timeout=timedelta(seconds=120), rank=RANK, world_size=WORLD_SIZE\n", + " )\n", + " print ('Process initialized')\n", + "\n", + " model, criterion, optimizer = initialize_model(\n", + " args.arch, args.lr, args.momentum, args.weight_decay, device_id\n", + " )\n", + "\n", + " train_loader, val_loader = initialize_data_loader(\n", + " args.data, args.batch_size, args.workers\n", + " )\n", + "\n", + " # resume from checkpoint if one exists;\n", + " state = load_checkpoint(\n", + " args.checkpoint_file, device_id, args.arch, model, optimizer\n", + " )\n", + "\n", + " start_epoch = state.epoch + 1\n", + " print(f\"=> start_epoch: {start_epoch}, best_acc1: {state.best_acc1}\")\n", + "\n", + " print_freq = args.print_freq\n", + " for epoch in range(start_epoch, args.epochs):\n", + " state.epoch = epoch\n", + " train_loader.batch_sampler.sampler.set_epoch(epoch)\n", + " adjust_learning_rate(optimizer, epoch, args.lr)\n", + "\n", + " # train for one epoch\n", + " train(train_loader, model, criterion, optimizer, epoch, device_id, print_freq)\n", + "\n", + " # evaluate on validation set\n", + " acc1 = validate(val_loader, model, criterion, device_id, print_freq)\n", + "\n", + " # remember best acc@1 and save checkpoint\n", + " is_best = acc1 > state.best_acc1\n", + " state.best_acc1 = max(acc1, state.best_acc1)\n", + "\n", + " if device_id == 0:\n", + " save_checkpoint(state, is_best, args.checkpoint_file)\n", + "\n", + "\n", + "class State:\n", + " \"\"\"\n", + " Container for objects that we want to checkpoint. Represents the\n", + " current \"state\" of the worker. This object is mutable.\n", + " \"\"\"\n", + "\n", + " def __init__(self, arch, model, optimizer):\n", + " self.epoch = -1\n", + " self.best_acc1 = 0\n", + " self.arch = arch\n", + " self.model = model\n", + " self.optimizer = optimizer\n", + "\n", + " def capture_snapshot(self):\n", + " \"\"\"\n", + " Essentially a ``serialize()`` function, returns the state as an\n", + " object compatible with ``torch.save()``. The following should work\n", + " ::\n", + " snapshot = state_0.capture_snapshot()\n", + " state_1.apply_snapshot(snapshot)\n", + " assert state_0 == state_1\n", + " \"\"\"\n", + " return {\n", + " \"epoch\": self.epoch,\n", + " \"best_acc1\": self.best_acc1,\n", + " \"arch\": self.arch,\n", + " \"state_dict\": self.model.state_dict(),\n", + " \"optimizer\": self.optimizer.state_dict(),\n", + " }\n", + "\n", + " def apply_snapshot(self, obj, device_id):\n", + " \"\"\"\n", + " The complimentary function of ``capture_snapshot()``. Applies the\n", + " snapshot object that was returned by ``capture_snapshot()``.\n", + " This function mutates this state object.\n", + " \"\"\"\n", + "\n", + " self.epoch = obj[\"epoch\"]\n", + " self.best_acc1 = obj[\"best_acc1\"]\n", + " self.state_dict = obj[\"state_dict\"]\n", + " self.model.load_state_dict(obj[\"state_dict\"])\n", + " self.optimizer.load_state_dict(obj[\"optimizer\"])\n", + "\n", + " def save(self, f):\n", + " torch.save(self.capture_snapshot(), f)\n", + "\n", + " def load(self, f, device_id):\n", + " # Map model to be loaded to specified single gpu.\n", + " snapshot = torch.load(f, map_location=f\"cuda:{device_id}\")\n", + " self.apply_snapshot(snapshot, device_id)\n", + "\n", + "\n", + "def initialize_model(\n", + " arch: str, lr: float, momentum: float, weight_decay: float, device_id: int\n", + "):\n", + " print(f\"=> creating model: {arch}\")\n", + " model = models.__dict__[arch]()\n", + " # For multiprocessing distributed, DistributedDataParallel constructor\n", + " # should always set the single device scope, otherwise,\n", + " # DistributedDataParallel will use all available devices.\n", + " model.cuda(device_id)\n", + " cudnn.benchmark = True\n", + " model = DistributedDataParallel(model, device_ids=[device_id])\n", + " # define loss function (criterion) and optimizer\n", + " criterion = nn.CrossEntropyLoss().cuda(device_id)\n", + " optimizer = SGD(\n", + " model.parameters(), lr, momentum=momentum, weight_decay=weight_decay\n", + " )\n", + " return model, criterion, optimizer\n", + "\n", + "\n", + "def initialize_data_loader(\n", + " data_dir, batch_size, num_data_workers\n", + ") -> Tuple[DataLoader, DataLoader]:\n", + " traindir = os.path.join(data_dir, \"train\")\n", + " valdir = os.path.join(data_dir, \"val\")\n", + " normalize = transforms.Normalize(\n", + " mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]\n", + " )\n", + " train_dataset = datasets.ImageFolder(\n", + " traindir,\n", + " transforms.Compose(\n", + " [\n", + " transforms.RandomResizedCrop(224),\n", + " transforms.RandomHorizontalFlip(),\n", + " transforms.ToTensor(),\n", + " normalize,\n", + " ]\n", + " ),\n", + " )\n", + " train_sampler = ElasticDistributedSampler(train_dataset)\n", + " train_loader = DataLoader(\n", + " train_dataset,\n", + " batch_size=batch_size,\n", + " num_workers=num_data_workers,\n", + " pin_memory=True,\n", + " sampler=train_sampler,\n", + " )\n", + " val_loader = DataLoader(\n", + " datasets.ImageFolder(\n", + " valdir,\n", + " transforms.Compose(\n", + " [\n", + " transforms.Resize(256),\n", + " transforms.CenterCrop(224),\n", + " transforms.ToTensor(),\n", + " normalize,\n", + " ]\n", + " ),\n", + " ),\n", + " batch_size=batch_size,\n", + " shuffle=False,\n", + " num_workers=num_data_workers,\n", + " pin_memory=True,\n", + " )\n", + " return train_loader, val_loader\n", + "\n", + "\n", + "def load_checkpoint(\n", + " checkpoint_file: str,\n", + " device_id: int,\n", + " arch: str,\n", + " model: DistributedDataParallel,\n", + " optimizer, # SGD\n", + ") -> State:\n", + " \"\"\"\n", + " Loads a local checkpoint (if any). Otherwise, checks to see if any of\n", + " the neighbors have a non-zero state. If so, restore the state\n", + " from the rank that has the most up-to-date checkpoint.\n", + " .. note:: when your job has access to a globally visible persistent storage\n", + " (e.g. nfs mount, S3) you can simply have all workers load\n", + " from the most recent checkpoint from such storage. Since this\n", + " example is expected to run on vanilla hosts (with no shared\n", + " storage) the checkpoints are written to local disk, hence\n", + " we have the extra logic to broadcast the checkpoint from a\n", + " surviving node.\n", + " \"\"\"\n", + "\n", + " state = State(arch, model, optimizer)\n", + "\n", + " if os.path.isfile(checkpoint_file):\n", + " print(f\"=> loading checkpoint file: {checkpoint_file}\")\n", + " state.load(checkpoint_file, device_id)\n", + " print(f\"=> loaded checkpoint file: {checkpoint_file}\")\n", + "\n", + " # logic below is unnecessary when the checkpoint is visible on all nodes!\n", + " # create a temporary cpu pg to broadcast most up-to-date checkpoint\n", + " with tmp_process_group(backend=\"gloo\") as pg:\n", + " rank = dist.get_rank(group=pg)\n", + "\n", + " # get rank that has the largest state.epoch\n", + " epochs = torch.zeros(dist.get_world_size(), dtype=torch.int32)\n", + " epochs[rank] = state.epoch\n", + " dist.all_reduce(epochs, op=dist.ReduceOp.SUM, group=pg)\n", + " t_max_epoch, t_max_rank = torch.max(epochs, dim=0)\n", + " max_epoch = t_max_epoch.item()\n", + " max_rank = t_max_rank.item()\n", + "\n", + " # max_epoch == -1 means no one has checkpointed return base state\n", + " if max_epoch == -1:\n", + " print(f\"=> no workers have checkpoints, starting from epoch 0\")\n", + " return state\n", + "\n", + " # broadcast the state from max_rank (which has the most up-to-date state)\n", + " # pickle the snapshot, convert it into a byte-blob tensor\n", + " # then broadcast it, unpickle it and apply the snapshot\n", + " print(f\"=> using checkpoint from rank: {max_rank}, max_epoch: {max_epoch}\")\n", + "\n", + " with io.BytesIO() as f:\n", + " torch.save(state.capture_snapshot(), f)\n", + " raw_blob = numpy.frombuffer(f.getvalue(), dtype=numpy.uint8)\n", + "\n", + " blob_len = torch.tensor(len(raw_blob))\n", + " dist.broadcast(blob_len, src=max_rank, group=pg)\n", + " print(f\"=> checkpoint broadcast size is: {blob_len}\")\n", + "\n", + " if rank != max_rank:\n", + " # pyre-fixme[6]: For 1st param expected `Union[List[int], Size,\n", + " # typing.Tuple[int, ...]]` but got `Union[bool, float, int]`.\n", + " blob = torch.zeros(blob_len.item(), dtype=torch.uint8)\n", + " else:\n", + " blob = torch.as_tensor(raw_blob, dtype=torch.uint8)\n", + "\n", + " dist.broadcast(blob, src=max_rank, group=pg)\n", + " print(f\"=> done broadcasting checkpoint\")\n", + "\n", + " if rank != max_rank:\n", + " with io.BytesIO(blob.numpy()) as f:\n", + " snapshot = torch.load(f)\n", + " state.apply_snapshot(snapshot, device_id)\n", + "\n", + " # wait till everyone has loaded the checkpoint\n", + " dist.barrier(group=pg)\n", + "\n", + " print(f\"=> done restoring from previous checkpoint\")\n", + " return state\n", + "\n", + "\n", + "@contextmanager\n", + "def tmp_process_group(backend):\n", + " cpu_pg = dist.new_group(backend=backend)\n", + " try:\n", + " yield cpu_pg\n", + " finally:\n", + " dist.destroy_process_group(cpu_pg)\n", + "\n", + "\n", + "def save_checkpoint(state: State, is_best: bool, filename: str):\n", + " checkpoint_dir = os.path.dirname(filename)\n", + " os.makedirs(checkpoint_dir, exist_ok=True)\n", + "\n", + " # save to tmp, then commit by moving the file in case the job\n", + " # gets interrupted while writing the checkpoint\n", + " tmp_filename = filename + \".tmp\"\n", + " torch.save(state.capture_snapshot(), tmp_filename)\n", + " os.rename(tmp_filename, filename)\n", + " print(f\"=> saved checkpoint for epoch {state.epoch} at {filename}\")\n", + " if is_best:\n", + " best = os.path.join(checkpoint_dir, \"model_best.pth.tar\")\n", + " print(f\"=> best model found at epoch {state.epoch} saving to {best}\")\n", + " shutil.copyfile(filename, best)\n", + "\n", + "\n", + "def train(\n", + " train_loader: DataLoader,\n", + " model: DistributedDataParallel,\n", + " criterion, # nn.CrossEntropyLoss\n", + " optimizer, # SGD,\n", + " epoch: int,\n", + " device_id: int,\n", + " print_freq: int,\n", + "):\n", + " batch_time = AverageMeter(\"Time\", \":6.3f\")\n", + " data_time = AverageMeter(\"Data\", \":6.3f\")\n", + " losses = AverageMeter(\"Loss\", \":.4e\")\n", + " top1 = AverageMeter(\"Acc@1\", \":6.2f\")\n", + " top5 = AverageMeter(\"Acc@5\", \":6.2f\")\n", + " progress = ProgressMeter(\n", + " len(train_loader),\n", + " [batch_time, data_time, losses, top1, top5],\n", + " prefix=\"Epoch: [{}]\".format(epoch+1),\n", + " )\n", + "\n", + " # switch to train mode\n", + " model.train()\n", + "\n", + " end = time.time()\n", + " for i, (images, target) in enumerate(train_loader):\n", + " # measure data loading time\n", + " data_time.update(time.time() - end)\n", + "\n", + " images = images.cuda(device_id, non_blocking=True)\n", + " target = target.cuda(device_id, non_blocking=True)\n", + "\n", + " # compute output\n", + " output = model(images)\n", + " loss = criterion(output, target)\n", + "\n", + " # measure accuracy and record loss\n", + " acc1, acc5 = accuracy(output, target, topk=(1, 5))\n", + " losses.update(loss.item(), images.size(0))\n", + " top1.update(acc1[0], images.size(0))\n", + " top5.update(acc5[0], images.size(0))\n", + "\n", + " # compute gradient and do SGD step\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # measure elapsed time\n", + " batch_time.update(time.time() - end)\n", + " end = time.time()\n", + "\n", + " if i % print_freq == 0:\n", + " progress.display(i)\n", + "\n", + "\n", + "def validate(\n", + " val_loader: DataLoader,\n", + " model: DistributedDataParallel,\n", + " criterion, # nn.CrossEntropyLoss\n", + " device_id: int,\n", + " print_freq: int,\n", + "):\n", + " batch_time = AverageMeter(\"Time\", \":6.3f\")\n", + " losses = AverageMeter(\"Loss\", \":.4e\")\n", + " top1 = AverageMeter(\"Acc@1\", \":6.2f\")\n", + " top5 = AverageMeter(\"Acc@5\", \":6.2f\")\n", + " progress = ProgressMeter(\n", + " len(val_loader), [batch_time, losses, top1, top5], prefix=\"Test: \"\n", + " )\n", + "\n", + " # switch to evaluate mode\n", + " model.eval()\n", + "\n", + " with torch.no_grad():\n", + " end = time.time()\n", + " for i, (images, target) in enumerate(val_loader):\n", + " if device_id is not None:\n", + " images = images.cuda(device_id, non_blocking=True)\n", + " target = target.cuda(device_id, non_blocking=True)\n", + "\n", + " # compute output\n", + " output = model(images)\n", + " loss = criterion(output, target)\n", + "\n", + " # measure accuracy and record loss\n", + " acc1, acc5 = accuracy(output, target, topk=(1, 5))\n", + " losses.update(loss.item(), images.size(0))\n", + " top1.update(acc1[0], images.size(0))\n", + " top5.update(acc5[0], images.size(0))\n", + "\n", + " # measure elapsed time\n", + " batch_time.update(time.time() - end)\n", + " end = time.time()\n", + "\n", + " if i % print_freq == 0:\n", + " progress.display(i)\n", + "\n", + " # TODO: this should also be done with the ProgressMeter\n", + " print(\n", + " \" * Acc@1 {top1.avg:.3f} Acc@5 {top5.avg:.3f}\".format(top1=top1, top5=top5)\n", + " )\n", + "\n", + " return top1.avg\n", + "\n", + "\n", + "class AverageMeter(object):\n", + " \"\"\"Computes and stores the average and current value\"\"\"\n", + "\n", + " def __init__(self, name: str, fmt: str = \":f\"):\n", + " self.name = name\n", + " self.fmt = fmt\n", + " self.reset()\n", + "\n", + " def reset(self) -> None:\n", + " self.val = 0\n", + " self.avg = 0\n", + " self.sum = 0\n", + " self.count = 0\n", + "\n", + " def update(self, val, n=1) -> None:\n", + " self.val = val\n", + " self.sum += val * n\n", + " self.count += n\n", + " self.avg = self.sum / self.count\n", + "\n", + " def __str__(self):\n", + " fmtstr = \"{name} {val\" + self.fmt + \"} ({avg\" + self.fmt + \"})\"\n", + " return fmtstr.format(**self.__dict__)\n", + "\n", + "\n", + "class ProgressMeter(object):\n", + " def __init__(self, num_batches: int, meters: List[AverageMeter], prefix: str = \"\"):\n", + " self.batch_fmtstr = self._get_batch_fmtstr(num_batches)\n", + " self.meters = meters\n", + " self.prefix = prefix\n", + "\n", + " def display(self, batch: int) -> None:\n", + " entries = [self.prefix + self.batch_fmtstr.format(batch)]\n", + " entries += [str(meter) for meter in self.meters]\n", + " print(\"\\t\".join(entries))\n", + "\n", + " def _get_batch_fmtstr(self, num_batches: int) -> str:\n", + " num_digits = len(str(num_batches // 1))\n", + " fmt = \"{:\" + str(num_digits) + \"d}\"\n", + " return \"[\" + fmt + \"/\" + fmt.format(num_batches) + \"]\"\n", + "\n", + "\n", + "def adjust_learning_rate(optimizer, epoch: int, lr: float) -> None:\n", + " \"\"\"\n", + " Sets the learning rate to the initial LR decayed by 10 every 30 epochs\n", + " \"\"\"\n", + " learning_rate = lr * (0.1 ** (epoch // 30))\n", + " for param_group in optimizer.param_groups:\n", + " param_group[\"lr\"] = learning_rate\n", + "\n", + "\n", + "def accuracy(output, target, topk=(1,)):\n", + " \"\"\"\n", + " Computes the accuracy over the k top predictions for the specified values of k\n", + " \"\"\"\n", + " with torch.no_grad():\n", + " maxk = max(topk)\n", + " batch_size = target.size(0)\n", + "\n", + " _, pred = output.topk(maxk, 1, True, True)\n", + " pred = pred.t()\n", + " correct = pred.eq(target.view(1, -1).expand_as(pred))\n", + "\n", + " res = []\n", + " for k in topk:\n", + " correct_k = correct[:k].reshape(1, -1).view(-1).float().sum(0, keepdim=True)\n", + " res.append(correct_k.mul_(100.0 / batch_size))\n", + " return res\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " try:\n", + " main()\n", + " except Exception as e:\n", + " trace_str = ''.join(traceback.format_tb(e.__traceback__))\n", + " print(trace_str)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "93002a20a2a6" + }, + "source": [ + "### Build custom container" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8ea6fc98b2a9" + }, + "outputs": [], + "source": [ + "CONTENT_NAME = \"pytorch-torchrun-imagenet-multi-node\"\n", + "CONTAINER_NAME = CONTENT_NAME + \"-gpu\"\n", + "TAG = \"latest\"\n", + "\n", + "custom_container_host_image_uri = (\n", + " f\"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{CONTAINER_NAME}:{TAG}\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ee1a0a06d0b4" + }, + "outputs": [], + "source": [ + "!gcloud builds submit \\\n", + " --region $REGION \\\n", + " --tag $custom_container_host_image_uri \\\n", + " --timeout \"2h\" \\\n", + " --machine-type=e2-highcpu-32 \\\n", + " trainer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4a87f56e869a" + }, + "source": [ + "### Run training on Vertex AI using `torchrun` with ETCD on host" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "63ca30b33176" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "BUCKET_NAME = BUCKET_URI.replace(\"gs://\", \"\")\n", + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", + "PRIMARY_COMPUTE = \"n1-highmem-16\"\n", + "TRAIN_COMPUTE = \"n1-highmem-16\"\n", + "NUM_CPUS = 14 # Set to a few less than max CPUs per instance for paralle data loading\n", + "TRAIN_GPU = \"NVIDIA_TESLA_T4\"\n", + "TRAIN_NGPU = 1\n", + "BATCH_SIZE = 512\n", + "REPLICAS = 2\n", + "EPOCHS = 5\n", + "ARCH = \"resnet18\"\n", + "BACKEND = \"nccl\" # gloo for CPU only, nccl for GPUs\n", + "TRAIN_DATA_LOCATION = \"/trainer/tiny-imagenet-200\" # Data location of filed downloaded in Dockerfile\n", + "\n", + "display_name = (\n", + " CONTAINER_NAME\n", + " + \"-LOCAL-ETCD-\"\n", + " + f\"{REPLICAS}workers-{TRAIN_NGPU}{TRAIN_GPU}-{BATCH_SIZE}batch-\"\n", + " + TIMESTAMP\n", + ")\n", + "gcs_output_uri_prefix = f\"{BUCKET_URI}/{display_name}\"\n", + "\n", + "RDZV_BACKEND = \"etcd-v2\"\n", + "RDZV_BACKEND_STORE = f\"/gcs/{BUCKET_NAME}/sharedfile-{display_name}\"\n", + "RDZV_ENDPOINT = \"localhost:2379\"\n", + "\n", + "# Use letters for each parameter to be processed in the shell script\n", + "\"\"\"\n", + "e)epochs=${OPTARG};;\n", + "a)arch=${OPTARG};;\n", + "b)batchsize=${OPTARG};;\n", + "d)distbackend=${OPTARG};;\n", + "t)data=${OPTARG};;\n", + "w)workers=${OPTARG};;\n", + "v)env=${OPTARG};;\n", + "u)rdvzbackend=${OPTARG};;\n", + "i)rdvzid=${OPTARG};;\n", + "p)endpoint=${OPTARG};;\n", + "n)nnodes=${OPTARG};;\n", + "r)nprocpernode=${OPTARG};;\n", + "c)ischief=${OPTARG};;\n", + "\"\"\"\n", + "\n", + "CONTAINER_SPEC = {\n", + " \"image_uri\": custom_container_host_image_uri,\n", + " \"command\": [\n", + " \"/bin/bash\",\n", + " \"main.sh\",\n", + " f\"-e {EPOCHS}\",\n", + " f\"-a {ARCH}\",\n", + " f\"-b {BATCH_SIZE}\",\n", + " f\"-d {BACKEND}\",\n", + " f\"-t {TRAIN_DATA_LOCATION}\",\n", + " f\"-w {NUM_CPUS}\",\n", + " f\"-v {RDZV_BACKEND_STORE}\",\n", + " f\"-u {RDZV_BACKEND}\",\n", + " f\"-i {display_name}\",\n", + " f\"-p {RDZV_ENDPOINT}\",\n", + " f\"-n {REPLICAS+1}\",\n", + " f\"-r {TRAIN_NGPU}\",\n", + " \"-c y\"\n", + " ]\n", + "}\n", + "\n", + "CONTAINER_WORKER_SPEC = {\n", + " \"image_uri\": custom_container_host_image_uri,\n", + " \"command\": [\n", + " \"/bin/bash\",\n", + " \"main.sh\",\n", + " f\"-e {EPOCHS}\",\n", + " f\"-a {ARCH}\",\n", + " f\"-b {BATCH_SIZE}\",\n", + " f\"-d {BACKEND}\",\n", + " f\"-t {TRAIN_DATA_LOCATION}\",\n", + " f\"-w {NUM_CPUS}\",\n", + " f\"-v {RDZV_BACKEND_STORE}\",\n", + " f\"-u {RDZV_BACKEND}\",\n", + " f\"-i {display_name}\",\n", + " f\"-p {RDZV_ENDPOINT}\",\n", + " f\"-n {REPLICAS+1}\",\n", + " f\"-r {TRAIN_NGPU}\",\n", + " \"-c n\"\n", + " ]\n", + "}\n", + "\n", + "PRIMARY_WORKER_POOL = {\n", + " \"replica_count\": 1,\n", + " \"machine_spec\": {\n", + " \"machine_type\": PRIMARY_COMPUTE,\n", + " \"accelerator_count\": TRAIN_NGPU,\n", + " \"accelerator_type\": TRAIN_GPU,\n", + " },\n", + " \"container_spec\": CONTAINER_SPEC,\n", + "}\n", + "\n", + "WORKER_POOL_SPECS = [PRIMARY_WORKER_POOL]\n", + "\n", + "TRAIN_WORKER_POOL = {\n", + " \"replica_count\": REPLICAS,\n", + " \"machine_spec\": {\n", + " \"machine_type\": TRAIN_COMPUTE,\n", + " \"accelerator_count\": TRAIN_NGPU,\n", + " \"accelerator_type\": TRAIN_GPU,\n", + " },\n", + " \"container_spec\": CONTAINER_WORKER_SPEC,\n", + "}\n", + "\n", + "WORKER_POOL_SPECS.append(TRAIN_WORKER_POOL)\n", + "\n", + "job = aiplatform.CustomJob(\n", + " display_name=display_name,\n", + " base_output_dir=gcs_output_uri_prefix,\n", + " worker_pool_specs=WORKER_POOL_SPECS,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4684fde1a6" + }, + "outputs": [], + "source": [ + "job.run(\n", + " sync=True\n", + " # comment out the line below to turn off interactive debug\n", + " ,\n", + " enable_web_access=True,\n", + " service_account=SERVICE_ACCOUNT,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "796de99ae13a" + }, + "source": [ + "### Run training on Vertex AI using `torchrun` with ETCD on host and reduction server" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6815ecb07ad9" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "BUCKET_NAME = BUCKET_URI.replace(\"gs://\", \"\")\n", + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", + "PRIMARY_COMPUTE = \"n1-highmem-16\"\n", + "TRAIN_COMPUTE = \"n1-highmem-16\"\n", + "REDUCTION_COMPUTE = \"n1-highcpu-16\"\n", + "NUM_CPUS = 14 # Set to a few less than max CPUs per instance for paralle data loading\n", + "TRAIN_GPU = \"NVIDIA_TESLA_T4\"\n", + "TRAIN_NGPU = 1\n", + "BATCH_SIZE = 512\n", + "REPLICAS = 2\n", + "EPOCHS = 5\n", + "ARCH = \"resnet18\"\n", + "BACKEND = \"nccl\" # gloo for CPU only, nccl for GPUs\n", + "TRAIN_DATA_LOCATION = \"/trainer/tiny-imagenet-200\" # Data location of filed downloaded in Dockerfile\n", + "\n", + "\n", + "display_name = (\n", + " CONTAINER_NAME\n", + " + \"-LOCAL-ETCD-reduc-server-\"\n", + " + f\"{REPLICAS}workers-{TRAIN_NGPU}{TRAIN_GPU}-{BATCH_SIZE}batch-\"\n", + " + TIMESTAMP\n", + ")\n", + "gcs_output_uri_prefix = f\"{BUCKET_URI}/{display_name}\"\n", + "\n", + "RDZV_BACKEND = \"etcd-v2\"\n", + "RDZV_BACKEND_STORE = f\"/gcs/{BUCKET_NAME}/sharedfile-{display_name}\"\n", + "RDZV_ENDPOINT = \"localhost:2379\"\n", + "\n", + "\n", + "# Use letters for each parameter to be processed in the shell script\n", + "\"\"\"\n", + "e)epochs=${OPTARG};;\n", + "a)arch=${OPTARG};;\n", + "b)batchsize=${OPTARG};;\n", + "d)distbackend=${OPTARG};;\n", + "t)data=${OPTARG};;\n", + "w)workers=${OPTARG};;\n", + "v)env=${OPTARG};;\n", + "u)rdvzbackend=${OPTARG};;\n", + "i)rdvzid=${OPTARG};;\n", + "p)endpoint=${OPTARG};;\n", + "n)nnodes=${OPTARG};;\n", + "r)nprocpernode=${OPTARG};;\n", + "c)ischief=${OPTARG};;\n", + "\"\"\"\n", + "\n", + "CONTAINER_SPEC = {\n", + " \"image_uri\": custom_container_host_image_uri,\n", + " \"command\": [\n", + " \"/bin/bash\",\n", + " \"main.sh\",\n", + " f\"-e {EPOCHS}\",\n", + " f\"-a {ARCH}\",\n", + " f\"-b {BATCH_SIZE}\",\n", + " f\"-d {BACKEND}\",\n", + " f\"-t {TRAIN_DATA_LOCATION}\",\n", + " f\"-w {NUM_CPUS}\",\n", + " f\"-v {RDZV_BACKEND_STORE}\",\n", + " f\"-u {RDZV_BACKEND}\",\n", + " f\"-i {display_name}\",\n", + " f\"-p {RDZV_ENDPOINT}\",\n", + " f\"-n {REPLICAS+1}\",\n", + " f\"-r {TRAIN_NGPU}\",\n", + " \"-c y\"\n", + " ]\n", + "}\n", + "\n", + "CONTAINER_WORKER_SPEC = {\n", + " \"image_uri\": custom_container_host_image_uri,\n", + " \"command\": [\n", + " \"/bin/bash\",\n", + " \"main.sh\",\n", + " f\"-e {EPOCHS}\",\n", + " f\"-a {ARCH}\",\n", + " f\"-b {BATCH_SIZE}\",\n", + " f\"-d {BACKEND}\",\n", + " f\"-t {TRAIN_DATA_LOCATION}\",\n", + " f\"-w {NUM_CPUS}\",\n", + " f\"-v {RDZV_BACKEND_STORE}\",\n", + " f\"-u {RDZV_BACKEND}\",\n", + " f\"-i {display_name}\",\n", + " f\"-p {RDZV_ENDPOINT}\",\n", + " f\"-n {REPLICAS+1}\",\n", + " f\"-r {TRAIN_NGPU}\",\n", + " \"-c n\"\n", + " ]\n", + "}\n", + "\n", + "PRIMARY_WORKER_POOL = {\n", + " \"replica_count\": 1,\n", + " \"machine_spec\": {\n", + " \"machine_type\": PRIMARY_COMPUTE,\n", + " \"accelerator_count\": TRAIN_NGPU,\n", + " \"accelerator_type\": TRAIN_GPU,\n", + " },\n", + " \"container_spec\": CONTAINER_SPEC,\n", + "}\n", + "\n", + "WORKER_POOL_SPECS = [PRIMARY_WORKER_POOL]\n", + "\n", + "TRAIN_WORKER_POOL = {\n", + " \"replica_count\": REPLICAS,\n", + " \"machine_spec\": {\n", + " \"machine_type\": TRAIN_COMPUTE,\n", + " \"accelerator_count\": TRAIN_NGPU,\n", + " \"accelerator_type\": TRAIN_GPU,\n", + " },\n", + " \"container_spec\": CONTAINER_WORKER_SPEC,\n", + "}\n", + "\n", + "WORKER_POOL_SPECS.append(TRAIN_WORKER_POOL)\n", + "\n", + "# Add Reduction Server worker pool\n", + "REDUCTION_SERVER_REPLICAS = 3\n", + "REDUCTION_SERVER_IMAGE_URI = (\n", + " \"us-docker.pkg.dev/vertex-ai-restricted/training/reductionserver:latest\"\n", + ")\n", + "\n", + "CONTAINER_REDUCTION_SPEC = {\"image_uri\": REDUCTION_SERVER_IMAGE_URI}\n", + "\n", + "REDUCTION_WORKER_POOL = {\n", + " \"replica_count\": REDUCTION_SERVER_REPLICAS,\n", + " \"machine_spec\": {\n", + " \"machine_type\": REDUCTION_COMPUTE,\n", + " },\n", + " \"container_spec\": CONTAINER_REDUCTION_SPEC,\n", + "}\n", + "\n", + "WORKER_POOL_SPECS.append(REDUCTION_WORKER_POOL)\n", + "\n", + "job = aiplatform.CustomJob(\n", + " display_name=display_name,\n", + " base_output_dir=gcs_output_uri_prefix,\n", + " worker_pool_specs=WORKER_POOL_SPECS,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d4591d0a861a" + }, + "outputs": [], + "source": [ + "job.run(\n", + " sync=True\n", + " # comment out the line below to turn off interactive debug\n", + " ,\n", + " enable_web_access=True,\n", + " service_account=SERVICE_ACCOUNT,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Delete Cloud Storage objects that were created\n", + "delete_bucket = False\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil -m rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "sdk_pytorch_torchrun_custom_container_training_imagenet.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/benchmark.py b/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/benchmark.py index 0eb65a043..0398bb450 100644 --- a/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/benchmark.py +++ b/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/benchmark.py @@ -112,7 +112,7 @@ def benchmark( results = [] for qps in qps_list: - num_requests = max(qps * duration_sec, 10) + num_requests = int(max(qps * duration_sec, 10)) requests_for_qps = list( itertools.islice(itertools.cycle(requests), num_requests) ) diff --git a/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/t5x_base_optimized_online_prediction.ipynb b/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/t5x_base_optimized_online_prediction.ipynb new file mode 100644 index 000000000..127a4d2a3 --- /dev/null +++ b/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/t5x_base_optimized_online_prediction.ipynb @@ -0,0 +1,1569 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "f7a906901030" + }, + "source": [ + "# Deploying T5x base on Vertex AI Predictions using the optimized TensorFlow runtime" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JAPoU8Sm5E6e" + }, + "source": [ + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f53c3b14e636" + }, + "source": [ + "## Overview\n", + "\n", + "In this sample you learn how to deploy a T5x base model to Vertex AI Prediction using optimized TensorFlow runtime containers.\n", + "\n", + "You evaluate model performance with different optimizations available on optimized TensorFlow runtime containers using MLPerf inference Vertex Prediction benchmark tool.\n", + "\n", + "For additional information about Vertex AI Prediction optimized TensorFlow runtime containers, see https://cloud.google.com/vertex-ai/docs/predictions/optimized-tensorflow-runtime." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "830934f1850b" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn how to deploy a fine-tuned T5x base model to Vertex AI Prediction service using the optimized TensorFlow runtime. For the best performance you can use NVIDIA A100 GPUs.\n", + "\n", + "The steps you perform include:\n", + "* Learn how to fine-tune T5x base model on Vertex\n", + "* Deploy a T5x base model to Vertex AI Prediction using an optimized TensorFlow runtime container using different optimization options\n", + "* Benchmark deployed modes and validate their predictions\n", + "\n", + "You can deploy fine-tuned model to Vertex AI Prediction using Colab. But in order to get reliable benchmark results, this walkthrough must be run on Jupyter VM running in the same region as your model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fd44e72fd4bf" + }, + "source": [ + "### Model\n", + "\n", + "In this notebook you use a T5x base model. \n", + "\n", + "T5 is an encoder-decoder model pre-trained on a multi-task mixture of unsupervised and supervised tasks and for which each task is converted into a text-to-text format. T5 works well on a variety of tasks out-of-the-box by prepending a different prefix to the input corresponding to each task, e.g., for translation: translate English to German: …, for summarization: summarize: ….\n", + "Model can be further fine-tuned to be used for specific tasks that it was not trained to do. \n", + "\n", + "T5X is the new and improved implementation of T5 in JAX and Flax.\n", + "After model is fine-tuned it can be exported in TensorFlow SavedModel format that can be used on Vertex AI Prediction using optimized TensorFlow runtime." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses the following billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "* Cloud TPU (if you choose to fine-tune model on your own)\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ze4-nDLfK4pw" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench Notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gCuSR8GkAgzl" + }, + "source": [ + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [Setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip3 install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook Dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "### Install additional packages\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", + "\n", + "# Vertex AI Workbench Notebook requires dependencies to be installed with '--user'\n", + "USER_FLAG = \"\"\n", + "if IS_GOOGLE_CLOUD_NOTEBOOK:\n", + " USER_FLAG = \"--user\"\n", + "\n", + "!pip3 install {USER_FLAG} --upgrade google-cloud-aiplatform google-cloud-storage tensorflow-serving-api -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7fd8df302e11" + }, + "source": [ + "If you also plan to run MLPerf infereence benchmark, you'd also need to download and install additional dependencies (see https://github.com/tensorflow/tpu/tree/master/models/experimental/inference/load_test#run-the-benchmark-locally for details)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "68c85f558bd4" + }, + "outputs": [], + "source": [ + "!pip3 install {USER_FLAG} transformers tf-models-official -q" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9dba7d2da016" + }, + "outputs": [], + "source": [ + "!git clone --recurse-submodules -b r1.0 https://github.com/mlcommons/inference.git" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cf1b9005a7f5" + }, + "outputs": [], + "source": [ + "!cd inference/loadgen && CFLAGS=\"-std=c++14 -O3\" python3 setup.py bdist_wheel && pip3 install {USER_FLAG} --force-reinstall dist/mlperf_loadgen-*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a57f89a5675f" + }, + "outputs": [], + "source": [ + "!git clone https://github.com/tensorflow/tpu.git" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the additional packages, you must restart the notebook kernel so it can find the packages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "lWEdiXsJg0XY" + }, + "source": [ + "## Before you begin" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "### Set up your Google Cloud project\n", + "\n", + "**The following steps are required for all notebook environments.**\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 credit towards your compute and 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](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "1. If you run this notebook locally, you must install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. Enter your project ID in the following cell. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**If you don't know your project ID**, you can try to get your project ID using `gcloud`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "PROJECT_ID = \"\"\n", + "\n", + "# Get your Google Cloud project ID from gcloud\n", + "if not os.getenv(\"IS_TESTING\"):\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": "markdown", + "metadata": { + "id": "qJYoRfYng0XZ" + }, + "source": [ + "Otherwise, set your project ID here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", + " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b9a78e10b72b" + }, + "source": [ + "#### Set your region\n", + "\n", + "Select region where you are going to deploy your model to. Note that if you plan to deploy model on NVIDIA A100, it is only available in select regions: https://cloud.google.com/vertex-ai/docs/general/locations#region_considerations\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3f22a26ddc83" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type:\"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", + "authenticated. Skip this step." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sBCra4QMA2wR" + }, + "source": [ + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click **Create**. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the following cell, then and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "\n", + "# 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", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", + "\n", + "# If on Vertex AI Workbench Notebooks, then don't execute this code\n", + "if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", + " if \"google.colab\" in sys.modules:\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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7fea9a57a59b" + }, + "source": [ + "# Fine-tune T5x base model\n", + "\n", + "In this sample you use T5x base model fine-tuned to do English to German language translation.\n", + "\n", + "T5x is a JAX based model that can be trained and fine-tuned on Google Cloud TPUs, and then exported as a TensorFlow Saved model.\n", + "\n", + "To fine-tune model, please follow steps at https://github.com/google-research/t5x to fine-tune model on Cloud TPU VM. Alternatively you can fine-tune model using Vertex Training service, refer https://github.com/GoogleCloudPlatform/t5x-on-vertex-ai for the steps describing how to do that.\n", + "\n", + "For exporting fine-tuned model refer to [Exporting as TensorFlow Saved Model](https://github.com/google-research/t5x#exporting-as-tensorflow-saved-model) section.\n", + "\n", + "For the purpose of this guide, you can use already fine-tuned models available under gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/base/.\n", + "\n", + "## Model Arithmetic and Weights Type\n", + "\n", + "Note that there are 2 types of model, one is exported with `float32` weights, another one with `bfloat16` weights.\n", + "\n", + "`bfloat16` is a native format for Google Cloud TPUs, and T5x model also using it by default.\n", + "NVIDIA A100 GPU has support for `bfloat16` arithmetic, and optimized TensorFlow runtime allows to take advantage of this.\n", + "If you plan to deploy model on GPU that doesn't have `bfloat16` support, such as NVIDIA T4 or NVIDIA V100, you'll need to use model with `float32` weights. Luckily optimized TensorFlow runtime has an optimization that allows running models on lower precision by specifying `--allow_compression` option." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6d793476c569" + }, + "outputs": [], + "source": [ + "T5X_BASE_FLOAT32_MODEL_URI = \"gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/base/saved_model.float32/1\"\n", + "T5X_BASE_BFLOAT16_MODEL_URI = \"gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/base/saved_model.bfloat16/1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1d6602e97750" + }, + "source": [ + "You can observe model definition using `saved_model_cli` tool that is part of TensorFlow. Feel free to ignore error related to `SentencepieceOp`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7b3cc6c3b0f3" + }, + "outputs": [], + "source": [ + "!saved_model_cli show --dir=$T5X_BASE_FLOAT32_MODEL_URI --all" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "df9dcbe4727a" + }, + "source": [ + "# Deploy model to Vertex AI Endpoint" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8b80237db652" + }, + "source": [ + "You deploy model using [Vertex AI SDK](https://cloud.google.com/python/docs/reference/aiplatform/latest), import it into your notebook environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c369155c05c2" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b095feae48f0" + }, + "source": [ + "Define the node configuration to use for deployments. To learn about Vertex AI Prediction options, see [configure compute resources](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute). " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e3f4d8bde9b5" + }, + "source": [ + "You are going to deploy models using optimized TensorFlow runtime container, see the full list available containers in official documentation: https://cloud.google.com/vertex-ai/docs/predictions/optimized-tensorflow-runtime#available_container_images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fa7bfb2b61ee" + }, + "outputs": [], + "source": [ + "OPTIMIZED_TF_RUNTIME_IMAGE_URI = (\n", + " \"us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-gpu.nightly:latest\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a3b7e5804f06" + }, + "source": [ + "You are going to deploy T5x model on NVIDIA T4 GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd6d54513910" + }, + "outputs": [], + "source": [ + "DEPLOY_COMPUTE_T4 = \"n1-standard-8\"\n", + "DEPLOY_GPU_T4 = \"NVIDIA_TESLA_T4\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fdbdd5a570a5" + }, + "source": [ + "Deploy T5x base model with float32 weights and no optimizations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6832a146bfaa" + }, + "outputs": [], + "source": [ + "t5x_base_float32 = aiplatform.Model.upload(\n", + " display_name=\"t5x_base_float32\",\n", + " artifact_uri=T5X_BASE_FLOAT32_MODEL_URI,\n", + " serving_container_image_uri=OPTIMIZED_TF_RUNTIME_IMAGE_URI,\n", + " serving_container_args=[],\n", + " location=REGION,\n", + ")\n", + "\n", + "t5x_base_float32_t4_endpoint = t5x_base_float32.deploy(\n", + " deployed_model_display_name=\"t5x_base_float32_deployed\",\n", + " traffic_split={\"0\": 100},\n", + " machine_type=DEPLOY_COMPUTE_T4,\n", + " accelerator_type=DEPLOY_GPU_T4,\n", + " accelerator_count=1,\n", + " min_replica_count=1,\n", + " max_replica_count=1,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ca3fc5656fb5" + }, + "source": [ + "Deploy T5x base model with float32 weights and precompilation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce09e2c6bc6a" + }, + "outputs": [], + "source": [ + "t5x_base_float32_precompiled = aiplatform.Model.upload(\n", + " display_name=\"t5x_base_float32_precompiled\",\n", + " artifact_uri=T5X_BASE_FLOAT32_MODEL_URI,\n", + " serving_container_image_uri=OPTIMIZED_TF_RUNTIME_IMAGE_URI,\n", + " serving_container_args=[\"--allow_precompilation\"],\n", + " location=REGION,\n", + ")\n", + "\n", + "t5x_base_float32_precompiled_t4_endpoint = t5x_base_float32_precompiled.deploy(\n", + " deployed_model_display_name=\"t5x_base_float32_precompiled_deployed\",\n", + " traffic_split={\"0\": 100},\n", + " machine_type=DEPLOY_COMPUTE_T4,\n", + " accelerator_type=DEPLOY_GPU_T4,\n", + " accelerator_count=1,\n", + " min_replica_count=1,\n", + " max_replica_count=1,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9f077f774408" + }, + "source": [ + "Deploy T5x base model with float32 weights, precompilation and compression. Model compression optimizes model to make compute intensive parts of the model to run at lower float16 precision and utilize NVIDIA GPU TensorCores." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dac28ddef3ce" + }, + "outputs": [], + "source": [ + "t5x_base_float32_precompiled_mixedprecision = aiplatform.Model.upload(\n", + " display_name=\"t5x_base_float32_precompiled_mixedprecision\",\n", + " artifact_uri=T5X_BASE_FLOAT32_MODEL_URI,\n", + " serving_container_image_uri=OPTIMIZED_TF_RUNTIME_IMAGE_URI,\n", + " serving_container_args=[\"--allow_precompilation\", \"--allow_compression\"],\n", + " location=REGION,\n", + ")\n", + "\n", + "t5x_base_float32_precompiled_mixedprecision_t4_endpoint = t5x_base_float32_precompiled_mixedprecision.deploy(\n", + " deployed_model_display_name=\"t5x_base_float32_precompiled_mixedprecision_deployed\",\n", + " traffic_split={\"0\": 100},\n", + " machine_type=DEPLOY_COMPUTE_T4,\n", + " accelerator_type=DEPLOY_GPU_T4,\n", + " accelerator_count=1,\n", + " min_replica_count=1,\n", + " max_replica_count=1,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "888aa8507e0c" + }, + "source": [ + "For the best performance you can deploy T5x base model with bfloat16 weights on NVIDIA A100 that has support for bfloat16 arithmetic. Note that in order for effectively utilize bfloat16 logic model has to be deployed with precompilation. Since model is already running at half precision, model compression is not needed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "29bd5ce90f1a" + }, + "outputs": [], + "source": [ + "DEPLOY_COMPUTE_A100 = \"a2-highgpu-1g\"\n", + "DEPLOY_GPU_A100 = \"NVIDIA_TESLA_A100\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cbaedf0b4f1e" + }, + "outputs": [], + "source": [ + "t5x_base_float32_a100_endpoint = t5x_base_float32.deploy(\n", + " deployed_model_display_name=\"t5x_base_float32_deployed\",\n", + " traffic_split={\"0\": 100},\n", + " machine_type=DEPLOY_COMPUTE_A100,\n", + " accelerator_type=DEPLOY_GPU_A100,\n", + " accelerator_count=1,\n", + " min_replica_count=1,\n", + " max_replica_count=1,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "80f45a86d18a" + }, + "outputs": [], + "source": [ + "t5x_base_bfloat16_precompiled = aiplatform.Model.upload(\n", + " display_name=\"t5x_base_bfloat16_precompiled\",\n", + " artifact_uri=T5X_BASE_BFLOAT16_MODEL_URI,\n", + " serving_container_image_uri=OPTIMIZED_TF_RUNTIME_IMAGE_URI,\n", + " serving_container_args=[\"--allow_precompilation\"],\n", + " location=REGION,\n", + ")\n", + "\n", + "t5x_base_bfloat16_precompiled_a100_endpoint = t5x_base_bfloat16_precompiled.deploy(\n", + " deployed_model_display_name=\"t5x_base_bfloat16_precompiled_deployed\",\n", + " traffic_split={\"0\": 100},\n", + " machine_type=DEPLOY_COMPUTE_A100,\n", + " accelerator_type=DEPLOY_GPU_A100,\n", + " accelerator_count=1,\n", + " min_replica_count=1,\n", + " max_replica_count=1,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0016bab3f15d" + }, + "source": [ + "## Sending prediction requests" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ca1dfbcdf81e" + }, + "source": [ + "You can send requests directly from each endpoint. T5x models expects data to be in a dictionary with \"text_batch\" key (see response from `saved_model_cli` call above)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9e596e14f2f0" + }, + "outputs": [], + "source": [ + "instances = [{\"text_batch\": \"translate English to German: this is good\"}]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7ae0e1eef2cb" + }, + "outputs": [], + "source": [ + "t5x_base_float32_t4_endpoint.predict(instances=instances)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f1b562190c2e" + }, + "outputs": [], + "source": [ + "t5x_base_float32_precompiled_t4_endpoint.predict(instances=instances)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3ff281732942" + }, + "outputs": [], + "source": [ + "t5x_base_float32_precompiled_mixedprecision_t4_endpoint.predict(instances=instances)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b04cb34b872c" + }, + "outputs": [], + "source": [ + "t5x_base_float32_a100_endpoint.predict(instances=instances)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1f58ddf970a4" + }, + "outputs": [], + "source": [ + "t5x_base_bfloat16_precompiled_a100_endpoint.predict(instances=instances)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ddac29c44fab" + }, + "source": [ + "Alternatively you can send POST REST requests without using the SDK. Learn more about https://cloud.google.com/vertex-ai/docs/predictions/online-predictions-custom-models#online_predict_custom_trained-drest.\n", + "This method is slightly faster." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c36d488325dd" + }, + "source": [ + "## Compare predictions\n", + "\n", + "To make sure that all models returns same results, send same requests to all endpoints and compare predictions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3746a32d3e05" + }, + "outputs": [], + "source": [ + "# Add your samples here\n", + "samples = [\n", + " \"hello world\",\n", + " \"this is a prediction from T5x model\",\n", + " \"this is good\",\n", + " \"my name is T5x\",\n", + "]\n", + "\n", + "endpoints = {\n", + " \"t5x_base_float32_t4\": t5x_base_float32_t4_endpoint,\n", + " \"t5x_base_float32_precompiled_t4\": t5x_base_float32_precompiled_t4_endpoint,\n", + " \"t5x_base_float32_precompiled_mixedprecision_t4\": t5x_base_float32_precompiled_mixedprecision_t4_endpoint,\n", + " \"t5x_base_float32_a100\": t5x_base_float32_a100_endpoint,\n", + " \"t5x_base_bfloat16_precompiled_a100\": t5x_base_bfloat16_precompiled_a100_endpoint,\n", + "}\n", + "\n", + "prefix = \"translate English to German: \"\n", + "\n", + "for sample in samples:\n", + " print(f\"Prediction for: {prefix}{sample}\")\n", + " for model_name, endpoint in endpoints.items():\n", + " response = endpoint.predict(instances=[{\"text_batch\": f\"{prefix}{sample}\"}])\n", + " prediction = response.predictions[0][\"output_0\"][0]\n", + " print(f\"Model: {model_name} Prediction: {prediction}\")\n", + " print(\"-----------\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d5ce470e856f" + }, + "source": [ + "## (optional) Compare performance of deployed models" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f02ce0cc8d3c" + }, + "source": [ + "You can run benchmarks from Colab environment, also in order to get reliable results you should use VM is in the same region as your model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c047d35d3ef6" + }, + "source": [ + "Import helper functions for benchmarking models." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2a52069756ba" + }, + "outputs": [], + "source": [ + "!curl https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/notebooks/community/vertex_endpoints/optimized_tensorflow_runtime/benchmark.py -o benchmark.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "92e7ff416f7c" + }, + "outputs": [], + "source": [ + "from benchmark import benchmark" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "287028072667" + }, + "source": [ + "This code sends a specified number of requests asynchronously and uniformly at a given QPS, then records the observed latency. Next, the latency results are aggregated and percentiles are calculated. The actual_qps that the model can handle is calculated as the time it takes for a model to process the sent requests divided by the number of requests. By providing different implementations for send_request and build_request functions, the same code can be used for benchmarking models running locally or on Vertex AI Prediction using gRPC and REST protocols.\n", + "\n", + "The main goal of this benchmark is to measure model latency on different loads, and maximum throughput the model can handle. In order to find maximum throughput, gradually increase QPS until actual_qps stops increasing and latency increases dramatically.\n", + "\n", + "On the production deployment, the workload is not uniform, and therefore the maximum model throughput is likely to be lower. The goal is not to simulate production workload, this benchmark is meant to compare latency and throughput for same model running on different environments." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "382954a4d93b" + }, + "outputs": [], + "source": [ + "def build_rest_request(row_dict, model_name):\n", + " return row_dict\n", + "\n", + "\n", + "def validate_response(response):\n", + " assert response\n", + " assert len(response.predictions) == 1\n", + " assert \"output_0\" in response.predictions[0]\n", + " assert response.predictions[0][\"output_0\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7c4df717c84b" + }, + "outputs": [], + "source": [ + "def send_rest_request(request):\n", + " response = t5x_base_float32_t4_endpoint.predict(instances=[request])\n", + " validate_response(response)\n", + "\n", + "\n", + "t5x_base_float32_t4_results = benchmark(\n", + " send_rest_request,\n", + " build_rest_request,\n", + " \"gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl\",\n", + " [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2.0],\n", + " 10,\n", + ")\n", + "\n", + "t5x_base_float32_t4_results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "01c88cf59367" + }, + "outputs": [], + "source": [ + "def send_rest_request(request):\n", + " response = t5x_base_float32_precompiled_t4_endpoint.predict(instances=[request])\n", + " validate_response(response)\n", + "\n", + "\n", + "t5x_base_float32_precompiled_t4_results = benchmark(\n", + " send_rest_request,\n", + " build_rest_request,\n", + " \"gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl\",\n", + " [0.5, 1, 2, 3, 4, 5],\n", + " 10,\n", + ")\n", + "\n", + "t5x_base_float32_precompiled_t4_results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a4311bebc18d" + }, + "outputs": [], + "source": [ + "def send_rest_request(request):\n", + " response = t5x_base_float32_precompiled_mixedprecision_t4_endpoint.predict(\n", + " instances=[request]\n", + " )\n", + " validate_response(response)\n", + "\n", + "\n", + "t5x_base_float32_precompiled_mixedprecision_t4_results = benchmark(\n", + " send_rest_request,\n", + " build_rest_request,\n", + " \"gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl\",\n", + " [0.5, 1, 2, 3, 4, 5],\n", + " 10,\n", + ")\n", + "\n", + "t5x_base_float32_precompiled_mixedprecision_t4_results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aeff92ba97ba" + }, + "outputs": [], + "source": [ + "def send_rest_request(request):\n", + " response = t5x_base_float32_a100_endpoint.predict(instances=[request])\n", + " validate_response(response)\n", + "\n", + "\n", + "t5x_base_float32_a100_results = benchmark(\n", + " send_rest_request,\n", + " build_rest_request,\n", + " \"gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl\",\n", + " [0.5, 1, 1.25, 1.5, 1.75, 2.0, 2.25],\n", + " 10,\n", + ")\n", + "\n", + "t5x_base_float32_a100_results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e4a1ba7d2a58" + }, + "outputs": [], + "source": [ + "def send_rest_request(request):\n", + " response = t5x_base_bfloat16_precompiled_a100_endpoint.predict(instances=[request])\n", + " validate_response(response)\n", + "\n", + "\n", + "t5x_base_bfloat16_precompiled_a100_results = benchmark(\n", + " send_rest_request,\n", + " build_rest_request,\n", + " \"gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl\",\n", + " [0.5, 5, 7.5, 10, 12.5, 15],\n", + " 10,\n", + ")\n", + "\n", + "t5x_base_bfloat16_precompiled_a100_results" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5f855885e50f" + }, + "source": [ + "Combine and visualize results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1afa1a329b0e" + }, + "outputs": [], + "source": [ + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "\n", + "def build_graph(x_key, y_key, results_dict, axis, title=\"T5x base model latency\"):\n", + " matplotlib.rcParams[\"figure.figsize\"] = [10.0, 7.0]\n", + "\n", + " fig, ax = plt.subplots(facecolor=(1, 1, 1))\n", + " ax.set_xlabel(\"QPS\")\n", + " ax.set_ylabel(\"Latency(ms)\")\n", + " for label, results in results_dict.items():\n", + " x = np.array(results[x_key])\n", + " y = np.array(results[y_key])\n", + " ax.plot(x, y, label=label, marker=\"s\")\n", + " ax.grid()\n", + " ax.legend()\n", + " ax.axis(axis)\n", + " ax.set_title(title)\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "204d66f54e46" + }, + "outputs": [], + "source": [ + "fig = build_graph(\n", + " \"actual_qps\",\n", + " \"p50\",\n", + " {\n", + " \"T5x base float32 on T4\": t5x_base_float32_t4_results,\n", + " \"T5x base float32 on T4 with precompilation\": t5x_base_float32_precompiled_t4_results,\n", + " \"T5x base float32 on T4 with precompilation and compression\": t5x_base_float32_precompiled_mixedprecision_t4_results,\n", + " \"T5x base float32 on A100\": t5x_base_float32_a100_results,\n", + " \"T5x base bfloat16 on A100 with precompilation\": t5x_base_bfloat16_precompiled_a100_results,\n", + " },\n", + " (0, 10, 0, 2500),\n", + " title=\"T5x base model p50 latency, batch size 1\",\n", + ")\n", + "fig.savefig(\"t5x_base_p50_latency.png\", bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7251aa3b7721" + }, + "outputs": [], + "source": [ + "fig = build_graph(\n", + " \"actual_qps\",\n", + " \"p99\",\n", + " {\n", + " \"T5x base float32 on T4\": t5x_base_float32_t4_results,\n", + " \"T5x base float32 on T4 with precompilation\": t5x_base_float32_precompiled_t4_results,\n", + " \"T5x base float32 on T4 with precompilation and compression\": t5x_base_float32_precompiled_mixedprecision_t4_results,\n", + " \"T5x base float32 on A100\": t5x_base_float32_a100_results,\n", + " \"T5x base bfloat16 on A100 with precompilation\": t5x_base_bfloat16_precompiled_a100_results,\n", + " },\n", + " (0, 5, 0, 5500),\n", + " title=\"T5x base model p99 latency, batch size 1\",\n", + ")\n", + "fig.savefig(\"t5x_base_p99_latency.png\", bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b8e97703a929" + }, + "source": [ + "As you can see Vertex AI Prediction optimized TensorFlow runtime optimizations offer signficantly higher throughput and lower latency for T5x base model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06f2711e6221" + }, + "source": [ + "## (Optional) Compare performance of deployed models using MLPerf Inference loadgen" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "adcd7c46de26" + }, + "source": [ + "MLPerf Inference is a benchmark suite for measuring how fast systems can run models in a variety of deployment scenarios. MLPerf is now an industry standard way of measuring model performance. You can follow instructions at https://github.com/tensorflow/tpu/tree/master/models/experimental/inference/load_test to run MLPerf Inferenence benchmark for deployed models.\n", + "\n", + "Unlike naive benchmark that was used before, MLPerf loadgen is sending requests using [Poisson distribution](https://github.com/mlcommons/inference_policies/blob/master/inference_rules.adoc#3-scenarios)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d73bf182f27a" + }, + "outputs": [], + "source": [ + "project_id = t5x_base_float32_t4_endpoint.resource_name.split(\"/\")[1]\n", + "project_id\n", + "\n", + "endpoint_id = t5x_base_float32_t4_endpoint.resource_name.split(\"/\")[-1]\n", + "endpoint_id" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "51a52c6698de" + }, + "outputs": [], + "source": [ + "%cd tpu/models/experimental/inference" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c4f70d73f164" + }, + "outputs": [], + "source": [ + "!python3 -m load_test.examples.loadgen_vertex_main \\\n", + " --project_id={project_id} \\\n", + " --region={REGION} \\\n", + " --endpoint_id={t5x_base_float32_t4_endpoint.resource_name.split(\"/\")[-1]} \\\n", + " --dataset=generic_jsonl \\\n", + " --data_file=gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl \\\n", + " --api_type=rest \\\n", + " --min_query_count=10 \\\n", + " --min_duration_ms=10000 \\\n", + " --qps=0.5 --qps=1.0 --qps=1.25 --qps=1.5 --qps=1.75 --qps=2.0 \\\n", + " --csv_report_filename=\"t5x_base_float32_t4_results.csv\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "456e293c8419" + }, + "outputs": [], + "source": [ + "!python3 -m load_test.examples.loadgen_vertex_main \\\n", + " --project_id={project_id} \\\n", + " --region={REGION} \\\n", + " --endpoint_id={t5x_base_float32_precompiled_t4_endpoint.resource_name.split(\"/\")[-1]} \\\n", + " --dataset=generic_jsonl \\\n", + " --data_file=gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl \\\n", + " --api_type=rest \\\n", + " --min_query_count=10 \\\n", + " --min_duration_ms=10000 \\\n", + " --qps=0.5 --qps=1 --qps=2 --qps=3 --qps=4 --qps=5 \\\n", + " --csv_report_filename=\"t5x_base_float32_precompiled_t4_results.csv\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "11b28328eb97" + }, + "outputs": [], + "source": [ + "!python3 -m load_test.examples.loadgen_vertex_main \\\n", + " --project_id={project_id} \\\n", + " --region={REGION} \\\n", + " --endpoint_id={t5x_base_float32_precompiled_mixedprecision_t4_endpoint.resource_name.split(\"/\")[-1]} \\\n", + " --dataset=generic_jsonl \\\n", + " --data_file=gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl \\\n", + " --api_type=rest \\\n", + " --min_query_count=10 \\\n", + " --min_duration_ms=10000 \\\n", + " --qps=0.5 --qps=1 --qps=2 --qps=3 --qps=4 --qps=5 --qps=6 \\\n", + " --csv_report_filename=\"t5x_base_float32_precompiled_mixedprecision_t4_results.csv\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "23342227c786" + }, + "outputs": [], + "source": [ + "!python3 -m load_test.examples.loadgen_vertex_main \\\n", + " --project_id={project_id} \\\n", + " --region={REGION} \\\n", + " --endpoint_id={t5x_base_float32_a100_endpoint.resource_name.split(\"/\")[-1]} \\\n", + " --dataset=generic_jsonl \\\n", + " --data_file=gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl \\\n", + " --api_type=rest \\\n", + " --min_query_count=10 \\\n", + " --min_duration_ms=10000 \\\n", + " --qps=0.5 --qps=1.0 --qps=1.25 --qps=1.5 --qps=1.75 --qps=2.0 --qps=2.25 \\\n", + " --csv_report_filename=\"t5x_base_float32_a100_results.csv\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d6ad17ddc3d7" + }, + "outputs": [], + "source": [ + "!python3 -m load_test.examples.loadgen_vertex_main \\\n", + " --project_id={project_id} \\\n", + " --region={REGION} \\\n", + " --endpoint_id={t5x_base_bfloat16_precompiled_a100_endpoint.resource_name.split(\"/\")[-1]} \\\n", + " --dataset=generic_jsonl \\\n", + " --data_file=gs://cloud-samples-data/vertex-ai/model-deployment/models/t5x/requests/requests_100.jsonl \\\n", + " --api_type=rest \\\n", + " --min_query_count=10 \\\n", + " --min_duration_ms=10000 \\\n", + " --qps=0.5 --qps=5 --qps=7.5 --qps=10 --qps=12.5 --qps=15 \\\n", + " --csv_report_filename=\"t5x_base_bfloat16_precompiled_a100_results.csv\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "310d3f7291c4" + }, + "outputs": [], + "source": [ + "import csv\n", + "\n", + "\n", + "def parse_report_csv(file_name):\n", + " with open(file_name, newline=\"\") as f:\n", + " reader = csv.reader(f)\n", + "\n", + " d = {}\n", + " index_to_key = {}\n", + " for row in reader:\n", + " if not d:\n", + " for index in range(len(row)):\n", + " key = row[index]\n", + " index_to_key[index] = key\n", + " d[key] = []\n", + " else:\n", + " for index in range(len(row)):\n", + " if index_to_key[index] != \"scenario\":\n", + " d[index_to_key[index]].append(float(row[index]))\n", + " else:\n", + " d[index_to_key[index]].append(row[index])\n", + " return d" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "09b0dd57beb1" + }, + "outputs": [], + "source": [ + "fig = build_graph(\n", + " \"actual_qps\",\n", + " \"p50\",\n", + " {\n", + " \"T5x base float32 on T4\": parse_report_csv(\"t5x_base_float32_t4_results.csv\"),\n", + " \"T5x base float32 on T4 with precompilation\": parse_report_csv(\n", + " \"t5x_base_float32_precompiled_t4_results.csv\"\n", + " ),\n", + " \"T5x base float32 on T4 with precompilation and compression\": parse_report_csv(\n", + " \"t5x_base_float32_precompiled_mixedprecision_t4_results.csv\"\n", + " ),\n", + " \"T5x base float32 on A100\": parse_report_csv(\n", + " \"t5x_base_float32_a100_results.csv\"\n", + " ),\n", + " \"T5x base bfloat16 on A100 with precompilation\": parse_report_csv(\n", + " \"t5x_base_bfloat16_precompiled_a100_results.csv\"\n", + " ),\n", + " },\n", + " (0, 10, 0, 2500),\n", + " title=\"T5x base model p50 latency measured by MLPerf loadgen, batch size 1\",\n", + ")\n", + "fig.savefig(\"t5x_base_p50_mlperf_latency.png\", bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2ffb220d9cd6" + }, + "outputs": [], + "source": [ + "fig = build_graph(\n", + " \"actual_qps\",\n", + " \"p99\",\n", + " {\n", + " \"T5x base float32 on T4\": parse_report_csv(\"t5x_base_float32_t4_results.csv\"),\n", + " \"T5x base float32 on T4 with precompilation\": parse_report_csv(\n", + " \"t5x_base_float32_precompiled_t4_results.csv\"\n", + " ),\n", + " \"T5x base float32 on T4 with precompilation and compression\": parse_report_csv(\n", + " \"t5x_base_float32_precompiled_mixedprecision_t4_results.csv\"\n", + " ),\n", + " \"T5x base float32 on A100\": parse_report_csv(\n", + " \"t5x_base_float32_a100_results.csv\"\n", + " ),\n", + " \"T5x base bfloat16 on A100 with precompilation\": parse_report_csv(\n", + " \"t5x_base_bfloat16_precompiled_a100_results.csv\"\n", + " ),\n", + " },\n", + " (0, 10, 0, 3500),\n", + " title=\"T5x base model p99 latency measured by MLPerf loadgen, batch size 1\",\n", + ")\n", + "fig.savefig(\"t5x_base_p99_mlperf_latency.png\", bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f35eff5aea2e" + }, + "source": [ + "These results are mostly consistent with results obtained using naive benchmarking code." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c69570acca3d" + }, + "source": [ + "## Cleanup" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "df0bd8f8c5f2" + }, + "source": [ + "After you are done, it's safe to remove the endpoints you created and the model you deployed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ab6cb1891003" + }, + "outputs": [], + "source": [ + "# Undeploy models\n", + "t5x_base_float32_t4_endpoint.undeploy_all()\n", + "t5x_base_float32_precompiled_t4_endpoint.undeploy_all()\n", + "t5x_base_float32_precompiled_mixedprecision_t4_endpoint.undeploy_all()\n", + "t5x_base_float32_a100_endpoint.undeploy_all()\n", + "t5x_base_bfloat16_precompiled_a100_endpoint.undeploy_all()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d1389efff614" + }, + "outputs": [], + "source": [ + "# Delete models\n", + "t5x_base_float32.delete()\n", + "t5x_base_float32_precompiled.delete()\n", + "t5x_base_float32_precompiled_mixedprecision.delete()\n", + "t5x_base_bfloat16_precompiled.delete()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "33f5b617c39b" + }, + "outputs": [], + "source": [ + "# Delete endpoints\n", + "t5x_base_float32_t4_endpoint.delete()\n", + "t5x_base_float32_precompiled_t4_endpoint.delete()\n", + "t5x_base_float32_precompiled_mixedprecision_t4_endpoint.delete()\n", + "t5x_base_float32_a100_endpoint.delete()\n", + "t5x_base_bfloat16_precompiled_a100_endpoint.delete()" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "t5x_base_optimized_online_prediction.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/notebook_template_review.py b/notebooks/notebook_template_review.py index 9c68f2843..def89987b 100644 --- a/notebooks/notebook_template_review.py +++ b/notebooks/notebook_template_review.py @@ -12,6 +12,10 @@ --errors-codes: A list of error codes to report errors. Otherwise, all errors are reported. --errors-csv: Report errors in CSV format + # options for automatic fixing + --fix: Automatic fix + --fix-codes: A list of fix codes to fix. Otherwise, all fix codes are enabled. + # index generatation --repo: Generate index in markdown format --web: Generate index in HTML format @@ -19,6 +23,7 @@ --desc: Add description to index --steps: Add steps to index --uses: Add "resources" used to index + --linkback: Add linkback to index Format of CSV file for notebooks to review: @@ -37,6 +42,7 @@ import urllib.request import csv from enum import Enum from abc import ABC, abstractmethod +from typing import List parser = argparse.ArgumentParser() @@ -60,10 +66,16 @@ parser.add_argument('--uses', dest='uses', action='store_true', default=False, help='Output uses (resources)') parser.add_argument('--steps', dest='steps', action='store_true', default=False, help='Ouput steps') +parser.add_argument('--linkback', dest='linkback', action='store_true', + default=False, help='Ouput linkback') parser.add_argument('--web', dest='web', action='store_true', default=False, help='Output format in HTML') parser.add_argument('--repo', dest='repo', action='store_true', default=False, help='Output format in Markdown') +parser.add_argument('--fix', dest='fix', action='store_true', + default=False, help='Fix the notebook non-conformance errors') +parser.add_argument('--fix-codes', dest='fix_codes', + default=None, type=str, help='Fix only specified errors') args = parser.parse_args() if args.errors_codes: @@ -73,6 +85,10 @@ if args.errors_codes: if args.errors_csv: args.errors = True +if args.fix_codes: + args.fix_codes = args.fix_codes.split(',') + args.fix = True + class ErrorCode(Enum): # Copyright cell @@ -100,13 +116,14 @@ class ErrorCode(Enum): # Costs cell required # Check for required Vertex and optional BQ and Dataflow ERROR_OVERVIEW_NOTFOUND = 10, - ERROR_OBJECTIVE_NOTFOUND = 11, - ERROR_OBJECTIVE_MISSING_DESC = 12, - ERROR_OBJECTIVE_MISSING_USES = 13, - ERROR_OBJECTIVE_MISSING_STEPS = 14, - ERROR_DATASET_NOTFOUND = 15, - ERROR_COSTS_NOTFOUND = 16, - ERROR_COSTS_MISSING = 17, + ERROR_LINKBACK_NOTFOUND = 11, + ERROR_OBJECTIVE_NOTFOUND = 12, + ERROR_OBJECTIVE_MISSING_DESC = 13, + ERROR_OBJECTIVE_MISSING_USES = 14, + ERROR_OBJECTIVE_MISSING_STEPS = 15, + ERROR_DATASET_NOTFOUND = 16, + ERROR_COSTS_NOTFOUND = 17, + ERROR_COSTS_MISSING = 18, # Installation cell # Installation cell required @@ -117,34 +134,34 @@ class ErrorCode(Enum): # option {USER_FLAG} required # installation code cell not match template # all packages must be installed as a single pip3 - ERROR_INSTALLATION_NOTFOUND = 18, - ERROR_INSTALLATION_HEADING = 19, - ERROR_INSTALLATION_CODE_NOTFOUND = 20, - ERROR_INSTALLATION_PIP3 = 21, - ERROR_INSTALLATION_QUIET = 22, - ERROR_INSTALLATION_USER_FLAG = 23, - ERROR_INSTALLATION_CODE_TEMPLATE = 24, - ERROR_INSTALLATION_SINGLE_PIP3 = 25, + ERROR_INSTALLATION_NOTFOUND = 19, + ERROR_INSTALLATION_HEADING = 20, + ERROR_INSTALLATION_CODE_NOTFOUND = 21, + ERROR_INSTALLATION_PIP3 = 22, + ERROR_INSTALLATION_QUIET = 23, + ERROR_INSTALLATION_USER_FLAG = 24, + ERROR_INSTALLATION_CODE_TEMPLATE = 25, + ERROR_INSTALLATION_SINGLE_PIP3 = 26, # Restart kernel cell # Restart code cell required # Restart code cell not found - ERROR_RESTART_NOTFOUND = 23, - ERROR_RESTART_CODE_NOTFOUND = 24, + ERROR_RESTART_NOTFOUND = 27, + ERROR_RESTART_CODE_NOTFOUND = 28, # Before you begin cell # Before you begin cell required # Before you begin cell incomplete - ERROR_BEFOREBEGIN_NOTFOUND = 25, - ERROR_BEFOREBEGIN_INCOMPLETE = 26, + ERROR_BEFOREBEGIN_NOTFOUND = 29, + ERROR_BEFOREBEGIN_INCOMPLETE = 30, # Set Project ID # Set project ID cell required # Set project ID code cell not found # Set project ID not match template - ERROR_PROJECTID_NOTFOUND = 27, - ERROR_PROJECTID_CODE_NOTFOUND = 28, - ERROR_PROJECTID_TEMPLATE = 29, + ERROR_PROJECTID_NOTFOUND = 31, + ERROR_PROJECTID_CODE_NOTFOUND = 32, + ERROR_PROJECTID_TEMPLATE = 33, # Technical Writer Rules ERROR_TWRULE_TODO = 51, @@ -154,767 +171,957 @@ class ErrorCode(Enum): ERROR_EMPTY_CALL = 101 +class FixCode(Enum): + FIX_BAD_LINK = 0, + FIX_PLACEHOLDER = 1 + + # globals -num_errors = 0 last_tag = '' -def parse_dir(directory: str) -> None: +def parse_dir(directory: str) -> int: """ Recursively walk the specified directory, reviewing each notebook (.ipynb) encountered. - directory: The directory path. + directory: The directory path. + + Returns the numbern of errors """ + exit_code = 0 + + sorted_entries = [] entries = os.scandir(directory) + for entry in entries: + + inserted = False + for ix in range(len(sorted_entries)): + if entry.name < sorted_entries[ix].name: + sorted_entries.insert(ix, entry) + inserted = True + break + + if not inserted: + sorted_entries.append(entry) + + entries = sorted_entries for entry in entries: if entry.is_dir(): if entry.name[0] == '.': continue if entry.name == 'src' or entry.name == 'images' or entry.name == 'sample_data': continue - print("\n##", entry.name, "\n") - parse_dir(entry.path) + exit_code += parse_dir(entry.path) elif entry.name.endswith('.ipynb'): - parse_notebook(entry.path) - - -def parse_notebook(path: str) -> None: - """ - Review the specified notebook. - - path: The path to the notebook. - """ - with open(path, 'r') as f: - try: - content = json.load(f) - except: - print("Corrupted notebook:", path) - return - - cells = content['cells'] - - NotebookRule.init() - - CopyrightRule().validate(path, cells) + tag = directory.split('/')[-1] + if tag == 'automl': + tag = 'AutoML' + elif tag == 'bigquery_ml': + tag = 'BigQuery ML' + elif tag == 'custom': + tag = 'Vertex AI Training' + elif tag == 'experiments': + tag = 'Vertex AI Experiments' + elif tag == 'explainable_ai': + tag = 'Vertex Explainable AI' + elif tag == 'feature_store': + tag = 'Vertex AI Feature Store' + elif tag == 'matching_engine': + tag = 'Vertex AI Matching Engine' + elif tag == 'migration': + tag = 'CAIP to Vertex AI migration' + elif tag == 'ml_metadata': + tag = 'Vertex ML Metadata' + elif tag == 'model_evaluation': + tag = 'Vertex AI Model Evaluation' + elif tag == 'model_monitoring': + tag = 'Vertex AI Model Monitoring' + elif tag == 'model_registry': + tag = 'Vertex AI Model Registry' + elif tag == 'pipelines': + tag = 'Vertex AI Pipelines' + elif tag == 'prediction': + tag = 'Vertex AI Prediction' + elif tag == 'pytorch': + tag = 'Vertex AI Training' + elif tag == 'reduction_server': + tag = 'Vertex AI Reduction Server' + elif tag == 'sdk': + tag = 'Vertex AI SDK' + elif tag == 'structured_data': + tag = 'AutoML / BQML' + elif tag == 'tabnet': + tag = 'Vertex AI TabNet' + elif tag == 'tabular_workflows': + tag = 'AutoML Tabular Workflows' + elif tag == 'tensorboard': + tag = 'Vertex AI TensorBoard' + elif tag == 'training': + tag = 'Vertex AI Training' + elif tag == 'vizier': + tag = 'Vertex AI Vizier' + + # special case + if 'workbench' in directory: + tag = 'Vertex AI Workbench' + + exit_code += parse_notebook(entry.path, tags=[tag], linkback=None, rules=rules) - NoticesRule().validate(path, cells) - - TitleRule().validate(path, cells) + return exit_code - LinksRule().validate(path, cells) + +def parse_notebook(path: str, + tags: List, + linkback: str, + rules: List) -> int: + """ + Review the specified notebook for conforming to the notebook template + and notebook authoring requirements. - OverviewRule().validate(path, cells) - - ObjectiveRule().validate(path, cells) - if NotebookRule.desc != '': - add_index(path, - tag, - NotebookRule.title, - NotebookRule.desc, - NotebookRule.uses, - NotebookRule.steps, - NotebookRule.git_link, - NotebookRule.colab_link, - NotebookRule.workbench_link - ) + path: The path to the notebook. + tags: The associated tags + linkback: A link back to the web docs + rules: The cell rules to apply - RecommendationsRule().validate(path, cells) + Returns the number of errors + """ + notebook = Notebook(path) + + for rule in rules: + rule.validate(notebook) - DatasetRule().validate(path, cells) + + # Automatic Index Generation + if objective.desc != '': + if overview.linkbacks: + linkbacks = overview.linkbacks + else: + if linkback: + linkbacks = [linkback] + else: + linkbacks = [] - CostsRule().validate(path, cells) - - SetupLocalRule().validate(path, cells) - - HelpersRule().validate(path, cells) - - InstallationRule().validate(path, cells) - - RestartRule().validate(path, cells) + if overview.tags: + tags = overview.tags + + add_index(path, + tags, + linkbacks, + title.title, + objective.desc, + objective.uses, + objective.steps, + links.git_link, + links.colab_link, + links.workbench_link + ) - VersionsRule().validate(path, cells) + if args.fix: + notebook.writeback() - BeforeBeginRule().validate(path, cells) + return notebook.num_errors + +class Notebook(object): + ''' + Class for navigating through a notebook + ''' + def __init__(self, path): + """ + Initializer + path: The path to the notebook + """ + self._path = path - EnableAPIsRule().validate(path, cells) + with open(self._path, 'r') as f: + try: + self._content = json.load(f) + except: + print("Corrupted notebook:", path) + return + + self._cells = self._content['cells'] + self._cell_index = 0 + self._num_errors = 0 - SetupProjectRule().validate(path, cells) + # cross cell information + self._costs = [] + + + def get(self) -> list: + ''' + Get the next cell in the notebook + + Returns the current cell + ''' + cell = self._cells[self._cell_index] + self._cell_index += 1 + return cell + + + def peek(self) -> list: + ''' + Peek at the next cell in the notebook + + Returns the current cell + ''' + cell = self._cells[self._cell_index] + return cell + + + def pop(self, n_cells=1): + ''' + Advance the specified number of cells + + n_cells: The number of cells to advance + ''' + self._cell_index += n_cells + + + @property + def path(self): + ''' + Getter: return the filename path for the notebook + ''' + return self._path + + + @property + def num_errors(self): + ''' + Getter: return the number of errors + ''' + return self._num_errors + + + def report_error(self, + code: ErrorCode, + errmsg: str): + """ + Report an error. + If args.errors_codes set, then only report these errors. Otherwise, all errors. + + code: The error code number. + errmsg: The error message + """ + + if args.errors: + code = code.value[0] + if args.errors_codes: + if str(code) not in args.errors_codes: + return + + if args.errors_csv: + print(self._path, ',', code) + else: + print(f"{self._path}: ERROR ({code}): {errmsg}", file=sys.stderr) + self._num_errors += 1 + + return False + return True + + + def report_fix(self, + code: FixCode, + fixmsg: str): + """ + Report an automatic fix + + code: The fox code number. + fixmsg: The autofix message + Returns: + Whether code is to be fixed + """ + if args.fix: + code = code.value[0] + if args.fix_codes: + if str(code) not in args.fix_codes: + return False + + print(f"{self._path}: FIXED ({code}): {fixmsg}", file=sys.stderr) + return True + return False + + + def writeback(self): + """ + Write back the updated (autofixed) notebook + """ + with open(self._path, 'w') as f: + json.dump(self._content, f) + class NotebookRule(ABC): """ Abstract class for defining notebook conformance rules """ - cell_index = 0 - title = '' - git_link = None - colab_link = None - workbench_link = None - desc = '' - uses = '' - steps = '' - costs = [] - - @staticmethod - def init(): - NotebookRule.cell_index = 0 - NotebookRule.title = '' - NotebookRule.git_link = None - NotebookRule.colab_link = None - NotebookRule.workbench_link = None - NotebookRule.desc = '' - NotebookRule.uses = '' - NotebookRule.steps = '' - NotebookRule.costs = '' - @abstractmethod - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: + ''' + Applies cell specific rules to validate whether the cell + does or does not conform to the rules. + + Returns whether the cell passed the validation rules + ''' pass class CopyrightRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the copyright cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.get() if not 'Copyright' in cell['source'][0]: - report_error(path, ErrorCode.ERROR_COPYRIGHT, "missing copyright cell") - - NotebookRule.cell_index = cell_index + return notebook.report_error(ErrorCode.ERROR_COPYRIGHT, "missing copyright cell") + return True class NoticesRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the (optional) notices cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.peek() if cell['source'][0].startswith('This notebook'): - NotebookRule.cell_index = cell_index - else: - NotebookRule.cell_index = cell_index - 1 + notebook.pop() + return True -class TitleRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: +class TitleRule(NotebookRule): + def validate(self, notebook: Notebook) -> bool: """ Parse the title in the links cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + ret = True + self.title = '' + + cell = notebook.peek() if not cell['source'][0].startswith('# '): - report_error(path, ErrorCode.ERROR_TITLE_HEADING, "title cell must start with H1 heading") - NotebookRule.title = '' + ret = notebook.report_error(ErrorCode.ERROR_TITLE_HEADING, "title cell must start with H1 heading") else: - NotebookRule.title = cell['source'][0][2:].strip() - check_sentence_case(path, NotebookRule.title) + self.title = cell['source'][0][2:].strip() + SentenceCaseTWRule().validate(notebook, [self.title]) # H1 title only if len(cell['source']) == 1: - cell, cell_index = get_cell(path, cells, cell_index) - - NotebookRule.cell_index = cell_index + notebook.pop() + + return ret class LinksRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the links in the links cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell = cells[NotebookRule.cell_index-1] + self.git_link = None + self.colab_link = None + self.workbench_link = None source = '' - git_link = None - colab_link = None - workbench_link = None - for line in cell['source']: + ret = True + + cell = notebook.get() + for ix in range(len(cell['source'])): + + line = cell['source'][ix] source += line if '\n" + cell['source'][ix] = fix_link + else: + ret = notebook.report_error(ErrorCode.ERROR_LINK_GIT_BAD, f"bad GitHub link: {self.git_link}") + if '\n" + cell['source'][ix] = fix_link + else: + ret = notebook.report_error(ErrorCode.ERROR_LINK_COLAB_BAD, f"bad Colab link: {self.colab_link}") if '\n" + cell['source'][ix] = fix_link + else: + ret = notebook.report_error(ErrorCode.ERROR_LINK_WORKBENCH_BAD, f"bad Workbench link: {self.workbench_link}") + + + if 'View on GitHub' not in source or not self.git_link: + ret = notebook.report_error(ErrorCode.ERROR_LINK_GIT_MISSING, 'Missing link for GitHub') + if 'Run in Colab' not in source or not self.colab_link: + ret = notebook.report_error(ErrorCode.ERROR_LINK_COLAB_MISSING, 'Missing link for Colab') + if 'Open in Vertex AI Workbench' not in source or not self.workbench_link: + ret = notebook.report_error(ErrorCode.ERROR_LINK_WORKBENCH_MISSING, 'Missing link for Workbench') - NotebookRule.git_link = git_link - NotebookRule.colab_link = colab_link - NotebookRule.workbench_link = workbench_link + return ret + + +class TableRule(NotebookRule): + def validate(self, notebook: Notebook) -> bool: + """ + Parse the (optional) table of contents cell + """ + cell = notebook.peek() + if cell['source'][0].startswith('## Table of contents'): + notebook.pop() + return True + + +class TestEnvRule(NotebookRule): + def validate(self, notebook: Notebook) -> bool: + """ + Parse the (optional) test in which environment cell + """ + cell = notebook.peek() + if cell['source'][0].startswith('**_NOTE_**: This notebook has been tested'): + notebook.pop() + return True class OverviewRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the overview cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + self.linkbacks = [] + self.tags = [] + + cell = notebook.get() if not cell['source'][0].startswith("## Overview"): - report_error(path, ErrorCode.ERROR_OVERVIEW_NOTFOUND, "Overview section not found") - - NotebookRule.cell_index = cell_index + return notebook.report_error(ErrorCode.ERROR_OVERVIEW_NOTFOUND, "Overview section not found") + + last_line = cell['source'][-1] + if last_line.startswith('Learn more about ['): + for more in last_line.split('[')[1:]: + tag = more.split(']')[0] + linkback = more.split('(')[1].split(')')[0] + self.tags.append(tag) + self.linkbacks.append(linkback) + else: + return notebook.report_error(ErrorCode.ERROR_LINKBACK_NOTFOUND, "Linkback missing in overview section") + + return True class ObjectiveRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the objective cell. Find the description, uses and steps. - - path: The path to the notebook. - cells: The content cells (JSON) for the notebook """ - desc = '' - uses = '' - steps = '' - costs = [] + + self.desc = '' + self.uses = '' + self.steps = '' + self.costs = [] + ret = True - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.get() if not cell['source'][0].startswith("### Objective"): - report_error(path, ErrorCode.ERROR_OBJECTIVE_NOTFOUND, "Objective section not found") - return cell_index, desc, uses, steps, costs + ret = notebook.report_error(ErrorCode.ERROR_OBJECTIVE_NOTFOUND, "Objective section not found") + notebook.costs = [] + return ret in_desc = True in_uses = False in_steps = False for line in cell['source'][1:]: + # TOC anchor + if line.startswith(' 0 and line.strip() == '': + if len(self.desc) > 0 and line.strip() == '': in_desc = False continue - desc += line + self.desc += line elif in_uses: sline = line.strip() if len(sline) == 0: - uses += '\n' + self.uses += '\n' else: ch = sline[0] if ch in ['-', '*', '1', '2', '3', '4', '5', '6', '7', '8', '9']: - uses += line + self.uses += line elif in_steps: sline = line.strip() if len(sline) == 0: - steps += '\n' + self.steps += '\n' else: ch = sline[0] if ch in ['-', '*', '1', '2', '3', '4', '5', '6', '7', '8', '9']: - steps += line + # check for italic font setting + if ch == '*' and sline[1] != ' ': + in_steps = False + # special case + elif sline.startswith('* Prediction Service'): + in_steps = False + else: + self.steps += line + elif ch == '#': + in_steps = False + - if desc == '': - report_error(path, ErrorCode.ERROR_OBJECTIVE_MISSING_DESC, "Objective section missing desc") + if self.desc == '': + ret = notebook.report_error(ErrorCode.ERROR_OBJECTIVE_MISSING_DESC, "Objective section missing desc") else: - desc = desc.lstrip() - sentences = desc.split('.') + self.desc = self.desc.lstrip() + + bracket = False + paren = False + sentences = "" + for _ in range(len(self.desc)): + if self.desc[_] == '[': + bracket = True + continue + elif self.desc[_] == ']': + bracket = False + continue + elif self.desc[_] == '(': + paren = True + elif self.desc[_] == ')': + paren = False + continue + + if not paren: + sentences += self.desc[_] + sentences = sentences.split('.') if len(sentences) > 1: - desc = sentences[0] + '.\n' - if desc.startswith('In this tutorial, you learn') or desc.startswith('In this notebook, you learn'): - desc = desc[22].upper() + desc[23:] + self.desc = sentences[0] + '.\n' + if self.desc.startswith('In this tutorial, you learn') or self.desc.startswith('In this notebook, you learn'): + self.desc = self.desc[22].upper() + self.desc[23:] - if uses == '': - report_error(path, ErrorCode.ERROR_OBJECTIVE_MISSING_USES, "Objective section missing uses services list") + if self.uses == '': + ret = notebook.report_error(ErrorCode.ERROR_OBJECTIVE_MISSING_USES, "Objective section missing uses services list") else: - if 'BigQuery' in uses: - costs.append('BQ') - if 'Vertex' in uses: - costs.append('Vertex') - if 'Dataflow' in uses: - costs.append('Dataflow') + if 'BigQuery' in self.uses: + self.costs.append('BQ') + if 'Vertex' in self.uses: + self.costs.append('Vertex') + if 'Dataflow' in self.uses: + self.costs.append('Dataflow') - if steps == '': - report_error(path, ErrorCode.ERROR_OBJECTIVE_MISSING_STEPS, "Objective section missing steps list") + if self.steps == '': + ret = notebook.report_error(ErrorCode.ERROR_OBJECTIVE_MISSING_STEPS, "Objective section missing steps list") - NotebookRule.cell_index = cell_index - NotebookRule.desc = desc - NotebookRule.uses = uses - NotebookRule.steps = steps - NotebookRule.costs = costs + notebook.costs = self.costs + return ret class RecommendationsRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the (optional) recommendations cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ # (optional) Recommendation - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.peek() if cell['source'][0].startswith("### Recommendations"): - NotebookRule.cell_index = cell_index - else: - NotebookRule.cell_index = cell_index - 1 + notebook.pop() + return True class DatasetRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the dataset cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - # Dataset - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.get() if not cell['source'][0].startswith("### Dataset") and not cell['source'][0].startswith("### Model") and not cell['source'][0].startswith("### Embedding"): - report_error(path, ErrorCode.ERROR_DATASET_NOTFOUND, "Dataset/Model section not found") - - NotebookRule.cell_index = cell_index + return notebook.report_error(ErrorCode.ERROR_DATASET_NOTFOUND, "Dataset/Model section not found") + return True class CostsRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the costs cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - # Costs - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + ret = True + + cell = notebook.get() if not cell['source'][0].startswith("### Costs"): - report_error(path, ErrorCode.ERROR_COSTS_NOTFOUND, "Costs section not found") + ret = notebook.report_error(ErrorCode.ERROR_COSTS_NOTFOUND, "Costs section not found") else: text = '' for line in cell['source']: text += line - if 'BQ' in NotebookRule.costs and 'BigQuery' not in text: - report_error(path, ErrorCode.ERROR_COSTS_MISSING, 'Costs section missing reference to BiqQuery') - if 'Vertex' in NotebookRule.costs and 'Vertex' not in text: - report_error(path, ErrorCode.ERROR_COSTS_MISSING, 'Costs section missing reference to Vertex') - if 'Dataflow' in NotebookRule.costs and 'Dataflow' not in text: - report_error(path, ErrorCode.ERROR_COSTS_MISSING, 'Costs section missing reference to Dataflow') + if 'BQ' in notebook.costs and 'BigQuery' not in text: + ret = notebook.report_error(ErrorCode.ERROR_COSTS_MISSING, 'Costs section missing reference to BiqQuery') + if 'Vertex' in notebook.costs and 'Vertex' not in text: + ret = notebook.report_error(ErrorCode.ERROR_COSTS_MISSING, 'Costs section missing reference to Vertex') + if 'Dataflow' in notebook.costs and 'Dataflow' not in text: + ret = notebook.report_error(ErrorCode.ERROR_COSTS_MISSING, 'Costs section missing reference to Dataflow') + return ret - NotebookRule.cell_index = cell_index class SetupLocalRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the (optional) setup local environment cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.peek() + if cell['source'][0].startswith('## Before you begin'): + notebook.pop() + + cell = notebook.peek() if not cell['source'][0].startswith('### Set up your local development environment'): - NotebookRule.cell_index = cell_index - 1 - return + return True + notebook.pop() - cell, cell_index = get_cell(path, cells, cell_index) - if not cell['source'][0].startswith('**Otherwise**, make sure your environment meets'): - NotebookRule.cell_index = cell_index - 1 - else: - NotebookRule.cell_index = cell_index + cell = notebook.peek() + if cell['source'][0].startswith('**Otherwise**, make sure your environment meets'): + notebook.pop() + + return True class HelpersRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the (optional) helpers text/code cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.peek() if 'helper' in cell['source'][0]: - NotebookRule.cell_index = cell_index + 1 # text and code - else: - NotebookRule.cell_index = cell_index - 1 + notebook.pop(2) # text and cell + return True class InstallationRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the installation cells - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + ret = True + + cell = notebook.get() + + if 'Install' not in cell['source'][0]: + return notebook.report_error(ErrorCode.ERROR_INSTALLATION_NOTFOUND, "Installation section not found") + if not cell['source'][0].startswith("## Install"): - if cell['source'][0].startswith("### Install"): - report_error(path, ErrorCode.ERROR_INSTALLATION_HEADING, "Installation section needs to be H2 heading") - else: - report_error(path, ErrorCode.ERROR_INSTALLATION_NOTFOUND, "Installation section not found") + ret = notebook.report_error(ErrorCode.ERROR_INSTALLATION_HEADING, "Installation section needs to be H2 heading") + + + cell = notebook.get() + if cell['cell_type'] != 'code': + ret = notebook.report_error(ErrorCode.ERROR_INSTALLATION_NOTFOUND, "Installation section not found") else: - cell, cell_index = get_cell(path, cells, cell_index) - if cell['cell_type'] != 'code': - report_error(path, ErrorCode.ERROR_INSTALLATION_NOTFOUND, "Installation section not found") - else: - if cell['source'][0].startswith('! mkdir'): - cell, cell_index = get_cell(path, cells, cell_index) - if 'requirements.txt' in cell['source'][0]: - cell, cell_index = get_cell(path, cells, cell_index) + if cell['source'][0].startswith('! mkdir'): + cell = notebook.get() + if 'requirements.txt' in cell['source'][0]: + cell = notebook.get() - text = '' - for line in cell['source']: - text += line - if 'pip ' in line: - if 'pip3' not in line: - report_error(path, ErrorCode.ERROR_INSTALLATION_PIP3, "Installation code section: use pip3") - if line.endswith('\\\n'): - continue - if '-q' not in line and '--quiet' not in line : - report_error(path, ErrorCode.ERROR_INSTALLATION_QUIET, "Installation code section: use -q with pip3") - if 'USER_FLAG' not in line and 'sh(' not in line: - report_error(path, ErrorCode.ERROR_INSTALLATION_USER_FLAG, "Installation code section: use {USER_FLAG} with pip3") - if 'if IS_WORKBENCH_NOTEBOOK:' not in text: - report_error(path, ErrorCode.ERROR_INSTALLATION_CODE_TEMPLATE, "Installation code section out of date (see template)") - - NotebookRule.cell_index = cell_index + text = '' + for line in cell['source']: + text += line + if 'pip ' in line: + if 'pip3' not in line: + notebook.report_error(ErrorCode.ERROR_INSTALLATION_PIP3, "Installation code section: use pip3") + if line.endswith('\\\n'): + continue + if '-q' not in line and '--quiet' not in line : + notebook.report_error(ErrorCode.ERROR_INSTALLATION_QUIET, "Installation code section: use -q with pip3") + if 'USER_FLAG' not in line and 'sh(' not in line: + notebook.report_error(ErrorCode.ERROR_INSTALLATION_USER_FLAG, "Installation code section: use {USER_FLAG} with pip3") + if 'required_packages <' in text: + pass # R kernel + elif 'if IS_WORKBENCH_NOTEBOOK:' not in text: + ret = notebook.report_error(ErrorCode.ERROR_INSTALLATION_CODE_TEMPLATE, "Installation code section out of date (see template)") + return ret class RestartRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the restart cells - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - # Restart kernel - cell_index = NotebookRule.cell_index + ret = True + while True: cont = False - cell, cell_index = get_cell(path, cells, cell_index) + cell = notebook.peek() for line in cell['source']: if 'pip' in line: - report_error(path, ErrorCode.ERROR_INSTALLATION_SINGLE_PIP3, f"All pip installations must be in a single code cell: {line}") + ret = notebook.report_error(ErrorCode.ERROR_INSTALLATION_SINGLE_PIP3, f"All pip installations must be in a single code cell: {line}") cont = True break if not cont: break + notebook.pop() + cell = notebook.peek() if not cell['source'][0].startswith("### Restart the kernel"): - report_error(path, ErrorCode.ERROR_RESTART_NOTFOUND, "Restart the kernel section not found") + ret = notebook.report_error(ErrorCode.ERROR_RESTART_NOTFOUND, "Restart the kernel section not found") else: - cell, cell_index = get_cell(path, cells, cell_index) # code cell + notebook.pop() + cell = notebook.get() # code cell if cell['cell_type'] != 'code': - report_error(path, ErrorCode.ERROR_RESTART_CODE_NOTFOUND, "Restart the kernel code section not found") - - NotebookRule.cell_index = cell_index + ret = notebook.report_error(ErrorCode.ERROR_RESTART_CODE_NOTFOUND, "Restart the kernel code section not found") + + return ret class VersionsRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the (optional) package versions code/text cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.peek() if cell['source'][0].startswith('#### Check package versions'): - NotebookRule.cell_index = cell_index + 1 - else: - NotebookRule.cell_index = cell_index - 1 + notebook.pop(2) # text and code + return True class BeforeBeginRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the before you begin cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + ret = True + + cell = notebook.get() if not cell['source'][0].startswith("## Before you begin"): - report_error(path, ErrorCode.ERROR_BEFOREBEGIN_NOTFOUND, "Before you begin section not found") + ret = notebook.report_error(ErrorCode.ERROR_BEFOREBEGIN_NOTFOUND, "Before you begin section not found") else: - # maybe one or two cells + # is two cells instead of one if len(cell['source']) < 2: - cell, cell_index = get_cell(path, cells, cell_index) + cell = notebook.get() if not cell['source'][0].startswith("### Set up your Google Cloud project"): - report_error(path, ErrorCode.ERROR_BEFOREBEGIN_INCOMPLETE, "Before you begin section incomplete") - NotebookRule.cell_index = cell_index + ret = notebook.report_error(ErrorCode.ERROR_BEFOREBEGIN_INCOMPLETE, "Before you begin section incomplete") + return ret class EnableAPIsRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the (optional) enable apis code/text cell - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + cell = notebook.peek() if cell['source'][0].startswith("### Enable APIs"): - NotebookRule.cell_index = cell_index + 1 - else: - NotebookRule.cell_index = cell_index - 1 + notebook.pop(2) # text and code + return True class SetupProjectRule(NotebookRule): - def validate(self, path: str, cells: list) -> None: + def validate(self, notebook: Notebook) -> bool: """ Parse the set project cells - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook """ - cell, cell_index = get_cell(path, cells, NotebookRule.cell_index) + ret = True + + cell = notebook.get() if not cell['source'][0].startswith('#### Set your project ID'): - report_error(path, ErrorCode.ERROR_PROJECTID_NOTFOUND, "Set project ID section not found") + ret = notebook.report_error(ErrorCode.ERROR_PROJECTID_NOTFOUND, "Set project ID section not found") else: - cell, cell_index = get_cell(path, cells, cell_index) + cell = notebook.get() if cell['cell_type'] != 'code': - report_error(path, ErrorCode.ERROR_PROJECTID_CODE_NOTFOUND, "Set project ID code section not found") + ret = notebook.report_error(ErrorCode.ERROR_PROJECTID_CODE_NOTFOUND, "Set project ID code section not found") elif not cell['source'][0].startswith('PROJECT_ID = "[your-project-id]"'): - report_error(path, ErrorCode.ERROR_PROJECTID_TEMPLATE, f"Set project ID not match template") + ret = notebook.report_error(ErrorCode.ERROR_PROJECTID_TEMPLATE, "Set project ID not match template") - cell, cell_index = get_cell(path, cells, cell_index) + cell = notebook.get() if cell['cell_type'] != 'code' or 'or PROJECT_ID == "[your-project-id]":' not in cell['source'][0]: - report_error(path, ErrorCode.ERROR_PROJECTID_TEMPLATE, f"Set project ID not match template") + ret = notebook.report_error(ErrorCode.ERROR_PROJECTID_TEMPLATE, "Set project ID not match template") - cell, cell_index = get_cell(path, cells, cell_index) + cell = notebook.get() if cell['cell_type'] != 'code' or '! gcloud config set project' not in cell['source'][0]: - report_error(path, ErrorCode.ERROR_PROJECTID_TEMPLATE, f"Set project ID not match template") - - NotebookRule.cell_index = cell_index + ret = notebook.report_error(ErrorCode.ERROR_PROJECTID_TEMPLATE, "Set project ID not match template") + + return ret -def check_text_cell(path: str, - cell: list) -> None: +class TextRule(ABC): """ - Check text cells for technical writing requirements - 1. Product branding names - 2. No future tense - 3. No 1st person - - path: used only for reporting an error - cell: The text cell to review. + Abstract class for defining text writing conformance rules """ - - branding = { - 'Vertex SDK': 'Vertex AI SDK', - 'Vertex Training': 'Vertex AI Training', - 'Vertex Prediction': 'Vertex AI Prediction', - 'Vertex Batch Prediction': 'Vertex AI Batch Prediction', - 'Vertex XAI': 'Vertex Explainable AI', - 'Vertex Explainability': 'Vertex Explainable AI', - 'Vertex AI Explainability': 'Vertex Explainable AI', - 'Vertex Pipelines': 'Vertex AI Pipelines', - 'Vertex Experiments': 'Vertex AI Experiments', - 'Vertex TensorBoard': 'Vertex AI TensorBoard', - 'Vertex Hyperparameter Tuning': 'Vertex AI Hyperparameter Tuning', - 'Vertex Metadata': 'Vertex ML Metadata', - 'Vertex AI Metadata': 'Vertex ML Metadata', - 'Vertex AI ML Metadata': 'Vertex ML Metadata', - 'Vertex Vizier': 'Vertex AI Vizier', - 'Vertex Feature Store': 'Vertex AI Feature Store', - 'Vertex Forecasting': 'Vertex AI Forecasting', - 'Vertex Matching Engine': 'Vertex AI Matching Engine', - 'Vertex TabNet': 'Vertex AI TabNet', - 'Tabnet': 'TabNet', - 'Vertex Two Towers': 'Vertex AI Two-Towers', - 'Vertex Two-Towers': 'Vertex AI Two-Towers', - 'Vertex Dataset': 'Vertex AI Dataset', - 'Vertex Model': 'Vertex AI Model', - 'Vertex Endpoint': 'Vertex AI Endpoint', - 'Vertex Private Endpoint': 'Vertex AI Private Endpoint', - 'Automl': 'AutoML', - 'AutoML Tables': 'AutoML Tabular', - 'AutoML Vision': 'AutoML Image', - 'AutoML Language': 'AutoML Text', - 'Tensorflow': 'TensorFlow', - 'Tensorboard': 'TensorBoard', - 'Google Cloud Notebooks': 'Vertex AI Workbench Notebooks', - 'BQ ': 'BigQuery', - 'BQ.': 'BigQuery', - 'Bigquery': 'BigQuery', - 'BQML': 'BigQuery ML', - 'GCS ': 'Cloud Storage', - 'GCS.': 'Cloud Storage', - 'Google Cloud Storage': 'Cloud Storage', - 'Pytorch': 'PyTorch', - 'Sklearn': 'scikit-learn', - 'sklearn': 'scikit-learn' - } - - for line in cell['source']: - # HTML code - if ' {brand}: {line}") - - -def check_sentence_case(path: str, - heading: str) -> None: - """ - Check that headings are in sentence case - - path: used only for reporting an error - heading: the heading to check - """ - - ACRONYMS = ['E2E', 'Vertex', 'AutoML', 'ML', 'AI', 'GCP', 'API', 'R', 'CMEK', - 'TF', 'TFX', 'TFDV', 'SDK', 'VM', 'CPR', 'NVIDIA', 'ID', 'DASK', - 'ARIMA_PLUS', 'KFP', 'I/O', 'GPU', 'Google', 'TensorFlow', 'PyTorch' - ] - - words = heading.split(' ') - if not words[0][0].isupper(): - report_error(path, ErrorCode.ERROR_HEADING_CAP, f"heading must start with capitalized word: {words[0]}") + @abstractmethod + def validate(self, notebook: Notebook, text: List[str]) -> bool: + ''' + Applies text writing specific rules to validate whether the text + does or does not conform to the rules. - for word in words[1:]: - word = word.replace(':', '').replace('(', '').replace(')', '') - if word in ACRONYMS: - continue - if word.isupper(): - report_error(path, ErrorCode.ERROR_HEADING_CASE, f"heading is not sentence case: {word}") - - -def get_cell(path: str, - cells: list, - cell_index: int) -> (list, int): - """ - Get the next notebook cell. - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook - cell_index: The index of the last cell that was parsed (reviewed). - - Returns: - - cell: content of the next cell - cell_index + 1: index of subsequent cell - """ - while empty_cell(path, cells, cell_index): - cell_index += 1 - - cell = cells[cell_index] - if cell['cell_type'] == 'markdown': - check_text_cell(path, cell) - return cell, cell_index + 1 - - -def empty_cell(path: str, - cells: list, - cell_index: int) -> bool: - """ - Check for empty cells - - path: used only for reporting an error - cells: The content cells (JSON) for the notebook - cell_index: The index of the last cell that was parsed (reviewed). - - Returns: - - bool: whether cell is empty or not - """ - if len(cells[cell_index]['source']) == 0: - report_error(path, ErrorCode.ERROR_EMPTY_CELL, f'empty cell: cell #{cell_index}') - return True - else: + Returns whether the test passed the validation rules + ''' return False -def report_error(notebook: str, - code: ErrorCode, - errmsg: str) -> None: - """ - Report an error. - If args.errors_codes set, then only report these errors. Otherwise, all errors. +class BrandingRule(TextRule): + def validate(self, notebook: Notebook, text: List[str]) -> bool: + """ + Check the text for branding issues + 1. Product branding names + 2. No future tense + 3. No 1st person + + """ + ret = True + branding = { + 'Vertex SDK': 'Vertex AI SDK', + 'Vertex Training': 'Vertex AI Training', + 'Vertex Prediction': 'Vertex AI Prediction', + 'Vertex Batch Prediction': 'Vertex AI Batch Prediction', + 'Vertex XAI': 'Vertex Explainable AI', + 'Vertex Explainability': 'Vertex Explainable AI', + 'Vertex AI Explainability': 'Vertex Explainable AI', + 'Vertex Pipelines': 'Vertex AI Pipelines', + 'Vertex Experiments': 'Vertex AI Experiments', + 'Vertex TensorBoard': 'Vertex AI TensorBoard', + 'Vertex Hyperparameter Tuning': 'Vertex AI Hyperparameter Tuning', + 'Vertex Metadata': 'Vertex ML Metadata', + 'Vertex AI Metadata': 'Vertex ML Metadata', + 'Vertex AI ML Metadata': 'Vertex ML Metadata', + 'Vertex Vizier': 'Vertex AI Vizier', + 'Vertex Feature Store': 'Vertex AI Feature Store', + 'Vertex Forecasting': 'Vertex AI Forecasting', + 'Vertex Matching Engine': 'Vertex AI Matching Engine', + 'Vertex TabNet': 'Vertex AI TabNet', + 'Tabnet': 'TabNet', + 'Vertex Two Towers': 'Vertex AI Two-Towers', + 'Vertex Two-Towers': 'Vertex AI Two-Towers', + 'Vertex Dataset': 'Vertex AI Dataset', + 'Vertex Model': 'Vertex AI Model', + 'Vertex Endpoint': 'Vertex AI Endpoint', + 'Vertex Private Endpoint': 'Vertex AI Private Endpoint', + 'Automl': 'AutoML', + 'AutoML Tables': 'AutoML Tabular', + 'AutoML Vision': 'AutoML Image', + 'AutoML Language': 'AutoML Text', + 'Tensorflow': 'TensorFlow', + 'Tensorboard': 'TensorBoard', + 'Google Cloud Notebooks': 'Vertex AI Workbench Notebooks', + 'BQ ': 'BigQuery', + 'BQ.': 'BigQuery', + 'Bigquery': 'BigQuery', + 'BQML': 'BigQuery ML', + 'GCS ': 'Cloud Storage', + 'GCS.': 'Cloud Storage', + 'Google Cloud Storage': 'Cloud Storage', + 'Pytorch': 'PyTorch', + 'Sklearn': 'scikit-learn', + 'sklearn': 'scikit-learn' + } + + for line in text: + for mistake, brand in branding.items(): + if mistake in line: + ret = notebook.report_error(ErrorCode.ERROR_TWRULE_BRANDING, f"Branding {mistake} -> {brand}: {line}") + + return ret + + +class SentenceCaseTWRule(TextRule): + def validate(self, + notebook, + text: List[str]) -> bool: + """ + Check that headings are in sentence case + + path: used only for reporting an error + text: the heading to check + """ + ret = True + + ACRONYMS = ['E2E', 'Vertex', 'AutoML', 'ML', 'AI', 'GCP', 'API', 'R', 'CMEK', + 'TF', 'TFX', 'TFDV', 'SDK', 'VM', 'CPR', 'NVIDIA', 'ID', 'DASK', + 'ARIMA_PLUS', 'KFP', 'I/O', 'GPU', 'Google', 'TensorFlow', 'PyTorch' + ] + + # Check the first line + words = text[0].replace('#', '').split(' ') + if not words[0][0].isupper(): + ret = notebook.report_error(ErrorCode.ERROR_HEADING_CAP, f"heading must start with capitalized word: {words[0]}") + + for word in words[1:]: + word = word.replace(':', '').replace('(', '').replace(')', '') + if word in ACRONYMS: + continue + if word.isupper(): + ret = notebook.report_error(ErrorCode.ERROR_HEADING_CASE, f"heading is not sentence case: {word}") + + return ret + + + +class TextTWRule(TextRule): + def validate(self, notebook: Notebook, text: List[str]) -> bool: + """ + Check for conformance to the following techwriter rules + 1. No future tense + 2. No 1st person + + """ + ret = True - notebook: The notebook path. - code: The error code number. - errmsg: The error message - """ - - global num_errors - - if args.errors: - code = code.value[0] - if args.errors_codes: - if str(code) not in args.errors_codes: - return - - if args.errors_csv: - print(notebook, ',', code) - else: - print(f"{notebook}: ERROR ({code}): {errmsg}", file=sys.stderr) - num_errors += 1 + for line in text: + # HTML code + if ' None: + workbench_link: str + ): """ + Add a discoverability index for this notebook + + path: The path to the notebook + tags: The tags (if any) for the notebook + title: The H1 title for the notebook + desc: The notebook description + uses: The resources/services used by the notebook + steps: The steps specified by the notebook + git_link: The link to the notebook in the git repo + colab_link: Link to launch notebook in Colab + workbench_link: Link to launch notebook in Workbench + linkbacks: The linkbacks per tag """ global last_tag @@ -924,45 +1131,84 @@ def add_index(path: str, title = title.split(':')[-1].strip() title = title[0].upper() + title[1:] if args.web: - title = title.replace('`', '') + title = replace_cl(title.replace('`', '')) print(' ') print(' ') - tags = tag.split(',') for tag in tags: + tag = replace_cl(tag) print(f' {tag.strip()}
\n') print(' ') print(' ') - print(f' {title}
\n') + print(f' {title}. ') if args.desc: - desc = desc.replace('`', '') + desc = replace_cl(desc.replace('`', '')) + print('
') print(f' {desc}
\n') - if linkback: - text = '' - for tag in tags: - text += tag.strip() + ' ' - - print(f' Learn more about
{text}
\n') + + if args.steps: + print("\n") + print('
Notebook steps
\n') + print('
    \n') + + if ":" in steps: + steps = steps.split(':')[1].replace('*', '').replace('-', '').strip().split('\n') + else: + steps = [] + + for step in steps: + print(f'
  • {replace_cl(step)}
  • \n') + #steps = replace_cl(steps.replace('\n', '
    ').replace('-', '  -').replace('**', '').replace('*', '  -').replace('`', '')) + #print('
    ' + steps + '
    ') + print('
\n') + print("
\n") + + if args.linkback and linkbacks: + num = len(tags) + for _ in range(num): + if linkbacks[_].startswith("vertex-ai"): + print(f' Learn more about {replace_cl(tags[_])}.\n') + else: + print(f' Learn more about {replace_cl(tags[_])}.\n') + + if args.steps: + print("\n") + print('
Notebook steps
\n') + print('
    \n') + + if ":" in steps: + steps = steps.split(':')[1].replace('*', '').replace('-', '').strip().split('\n') + else: + steps = [] + + for step in steps: + print(f'
  • {replace_cl(step)}
  • \n') + print('
\n') + print("
\n") + print(' ') print(' ') if colab_link: - print(f' Colab
\n') + print(f' Colab
\n') if git_link: - print(f' GitHub
\n') + print(f' GitHub
\n') if workbench_link: - print(f' Vertex AI Workbench
\n') + print(f' Vertex AI Workbench
\n') print(' ') print(' \n') elif args.repo: - tags = tag.split(',') - if tags != last_tag and tag != '': - last_tag = tags - flat_list = '' - for item in tags: - flat_list += item.replace("'", '') + ' ' - print(f"\n### {flat_list}\n") + try: + if tags != last_tag and tag != '': + last_tag = tags + flat_list = '' + for item in tags: + flat_list += item.replace("'", '') + ' ' + print(f"\n### {flat_list}\n") + except: + pass print(f"\n[{title}]({git_link})\n") + print("```") if args.desc: print(desc) @@ -970,30 +1216,143 @@ def add_index(path: str, print(uses) if args.steps: - print(steps) + print(steps.rstrip() + '\n') + + print("```\n") + + if args.linkback and linkbacks: + num = len(tags) + for _ in range(num): + if linkbacks[_].startswith("vertex-ai"): + print(f'   Learn more about [{tags[_]}]({linkbacks[_]}).\n') + else: + print(f'   Learn more about [{tags[_]}]({linkbacks[_]}).\n') + +def replace_cl(text : str ) -> str: + ''' + Replace product names with CL substitution variables + ''' + substitutions = { + #'AutoML Tabular Workflow': '{{automl_name}} Tabular Workflow', + #'AutoML Tables': '{{automl_tables_name}}', + #'AutoML Tabular': '{{automl_tables_name}}', + #'AutoML Vision': '{automl_vision_name}}', + #'AutoML Image': '{automl_vision_name}}', + 'AutoML': '{{automl_name}}', + + 'BigQuery ML': '{{bigqueryml_name}}', + 'BQML': '{{bigqueryml_name}}', + 'BigQuery': '{{bigquery_name}}', + 'BQ': '{{bigquery_name}}', + + 'Vertex Dataset': '{{vertex_ai_name}} Dataset', + 'Vertex Model': '{{vertex_ai_name}} Model', + 'Vertex Endpoint': '{{vertex_ai_name}} Endpoint', + 'Vertex Model Registry': '{{vertex_model_registry_name}}', + 'Vertex AI Model Registry': '{{vertex_model_registry_name}}', + 'Vertex Training': '{{vertex_training_name}}', + 'Vertex AI Training': '{{vertex_training_name}}', + 'Vertex Prediction': '{{vertex_prediction_name}}', + 'Vertex AI Prediction': '{{vertex_prediction_name}}', + 'Vertex TensorBoard': '{{vertex_tensorboard_name}}', + 'Vertex AI TensorBoard': '{{vertex_tensorboard_name}}', + 'Vertex ML Metadata': '{{vertex_metadata_name}}', + 'Vertex Pipelines': '{{vertex_pipelines_name}}', + 'Vertex AI Pipelines': '{{vertex_pipelines_name}}', + 'Vertex AI Data Labeling': '{{vertex_data_labeling_name}}', + 'Vertex AI Experiments': '{{vertex_experiments_name}}', + 'Vertex Experiments': '{{vertex_experiments_name}}', + 'Vertex AI Matching Engine': '{{vertex_matching_engine_name}}', + 'Vertex Matching Engine': '{{vertex_matching_engine_name}}', + 'Vertex Model Monitoring': '{{vertex_model_monitoring_name}}', + 'Vertex AI Model Monitoring': '{{vertex_model_monitoring_name}}', + 'Vertex Feature Store': '{{vertex_featurestore_name}}', + 'Vertex AI Feature Store': '{{vertex_featurestore_name}}', + 'Vertex Vizier': '{{vertex_vizier_name}}', + 'Vertex AI Vizier': '{{vertex_vizier_name}}', + 'Vertex Explainable AI': '{{vertex_xai_name}}', + 'NAS': '{{vertex_nas_name}', + 'Vertex AI Neural Architectural Search': '{{vertex_nas_name}}', + 'Vertex Workbench': '{{vertex_workbench_name}}', + 'Vertex AI Workbench': '{{vertex_workbench_name}}', + 'Vertex AI Edge Manager': '{{vertex_edge_manager_name}}', + 'Vertex SDK': '{{vertex_sdk_name}}', + 'Vertex AI SDK': '{{vertex_sdk_name}}', + 'Vertex AI': '{{vertex_ai_name}}', + + 'Cloud Storage': '{{storage_name}}', + 'TensorFlow Enterprise': '{{tf4gcp_name}}', + 'TensorFlow': '{{tensorflow_name}}', + } + + for key, value in substitutions.items(): + if key in text: + text = text.replace(key, value) + + return text + + + +# Instantiate the rules +copyright = CopyrightRule() +notices = NoticesRule() +title = TitleRule() +links = LinksRule() +testenv = TestEnvRule() +table = TableRule() +overview = OverviewRule() +objective = ObjectiveRule() +recommendations = RecommendationsRule() +dataset = DatasetRule() +costs = CostsRule() +setuplocal = SetupLocalRule() +helpers = HelpersRule() +installation = InstallationRule() +restart = RestartRule() +versions = VersionsRule() +beforebegin = BeforeBeginRule() +enableapis = EnableAPIsRule() +setupproject = SetupProjectRule() + + # Cell Validation +rules = [ copyright, notices, title, links, testenv, table, overview, objective, + recommendations, dataset, costs, setuplocal, helpers, + installation, restart, versions, beforebegin, enableapis, + setupproject +] if args.web: + print('') print('') - print(' ') - print(' ') - print(' ') + print(' ') + print(' ') + print(' ') + print(' ') + print(' ') + print(' ') + print(' ') + print(' ') if args.notebook_dir: if not os.path.isdir(args.notebook_dir): - print("Error: not a directory:", args.notebook_dir) + print(f"Error: not a directory: {args.notebook_dir}", file=sys.stderr) exit(1) - tag = '' - parse_dir(args.notebook_dir) + exit_code = parse_dir(args.notebook_dir) elif args.notebook: if not os.path.isfile(args.notebook): - print("Error: not a notebook:", args.notebook) + print(f"Error: not a notebook: {args.notebook}", file=sys.stderr) exit(1) - tag = '' - parse_notebook(args.notebook) + exit_code = parse_notebook(args.notebook, tags=[], linkback=None, rules=rules) elif args.notebook_file: if not os.path.isfile(args.notebook_file): print("Error: file does not exist", args.notebook_file) else: + exit_code = 0 with open(args.notebook_file, 'r') as csvfile: reader = csv.reader(csvfile) heading = True @@ -1001,18 +1360,19 @@ elif args.notebook_file: if heading: heading = False else: - tag = row[0] + tags = row[0].split(',') notebook = row[1] try: linkback = row[2] except: linkback = None - parse_notebook(notebook) + exit_code += parse_notebook(notebook, tags=tags, linkback=linkback, rules=rules) else: - print("Error: must specify a directory or notebook") + print("Error: must specify a directory or notebook", file=sys.stderr) exit(1) if args.web: + print(' \n') print('
Vertex AI FeatureDescriptionOpen in
ServicesDescriptionOpen in
\n') -exit(num_errors) +exit(exit_code) diff --git a/notebooks/official.csv b/notebooks/official.csv new file mode 100644 index 000000000..1a9357cc8 --- /dev/null +++ b/notebooks/official.csv @@ -0,0 +1,70 @@ +tag,notebook,doc +"AutoML, Text data",official/automl/automl-text-classification.ipynb,vertex-ai/docs/text-data/classification/train-model +"AutoML, Text data",official/automl/sdk_automl_text_entity_extraction_online.ipynb, +"AutoML, Text data",official/automl/sdk_automl_text_sentiment_analysis_online.ipynb, +"AutoML, Tabular data",official/automl/sdk_automl_tabular_forecasting_batch.ipynb,vertex-ai/docs/tabular-data/forecasting/tutorials-samples +"AutoML, Tabular Data",official/automl/automl_tabular_on_vertex_pipelines.ipynb,vertex-ai/docs/tabular-data/tabular-workflows/e2e-automl +"AutoML, Tabular Data",official/automl/sdk_automl_tabular_regression_batch_bq.ipynb, +"AutoML, Tabular Data",official/automl/sdk_automl_tabular_regression_batch_bq.ipynb, +"AutoML, Forecasting",official/automl/automl_forecasting_bqml_arima_plus_comparison.ipynb,vertex-ai/docs/tabular-data/forecasting-arima/overview +"AutoML, Forecasting",official/automl/sdk_automl_tabular_forecasting_batch.ipynb, +"AutoML, Image data",official/automl/sdk_automl_text_sentiment_analysis_online.ipynb, +"AutoML, Video data",official/automl/sdk_automl_text_sentiment_analysis_online.ipynb, +"AutoML, Video data",official/automl/sdk_automl_video_classification_batch.ipynb, +"AutoML, Video data",official/automl/sdk_automl_video_object_tracking_batch.ipynb, +"AutoML, Video data",official/sdk/SDK_AutoML_Video_Classification.ipynb, +"BigQuery, Vertex AI Workbench",official/workbench/exploratory_data_analysis/explore_data_in_bigquery_with_workbench.ipynb, +"BigQuery ML, Vertex AI Model Registry, Batch prediction",official/model_registry/bqml_vertexai_model_registry.ipynb, +"BigQuery ML, Vertex AI Model Registry, Online prediction",official/bigquery_ml/bqml-online-prediction.ipynb, +"BigQuery ML",official/structured_data/rapid_prototyping_bqml_automl.ipynb, +Custom Training,official/custom/sdk-custom-image-classification-batch.ipynb, +Custom Training,official/custom/sdk-custom-image-classification-online.ipynb, +Custom Training,official/custom/SDK_Custom_Container_Prediction.ipynb, +"Custom Training, BiqQuery dataset",official/custom/custom-tabular-bq-managed-dataset.ipynb, +"Custom Training, TensorBoard",official/custom/custom-tabular-bq-managed-dataset.ipynb, +"Custom Training, TensorBoard",official/tensorboard/tensorboard_custom_training_with_custom_container.ipynb, +"Custom Training, TensorBoard",official/tensorboard/tensorboard_custom_training_with_prebuilt_container.ipynb +"Custom Training, Managed dataset",official/sdk/SDK_Custom_Training_Python_Package_Managed_Text_Dataset_Tensorflow_Serving_Container.ipynb, +"Custom Training, Distributed",official/training/multi_node_ddp_gloo_vertex_training_with_custom_container.ipynb, +"Custom Training, Distributed",official/training/multi_node_ddp_nccl_vertex_training_with_custom_container.ipynb +Vertex AI Experiments,official/experiments/comparing_pipeline_runs.ipynb, +Vertex AI Experiments,official/experiments/build_model_experimentation_lineage_with_prebuild_code.ipynb, +Vertex AI Experiments,official/experiments/comparing_local_trained_models.ipynb, +"Vertex Explainable AI, Tabular data",official/explainable_ai/sdk_automl_tabular_binary_classification_batch_explain.ipynb,vertex-ai/docs/explainable-ai/overview +"Vertex Explainable AI, Tabular data",official/explainable_ai/sdk_automl_tabular_classification_online_explain.ipynb,vertex-ai/docs/explainable-ai/overview +"Vertex Explainable AI, Image data",official/explainable_ai/sdk_custom_image_classification_batch_explain.ipynb,vertex-ai/docs/explainable-ai/overview +"Vertex Explainable AI, Tabular data",official/explainable_ai/sdk_custom_tabular_regression_batch_explain.ipynb,vertex-ai/docs/explainable-ai/overview +"Vertex Explainable AI, Tabular data",official/explainable_ai/sdk_custom_tabular_regression_online_explain.ipynb,vertex-ai/docs/explainable-ai/overview +Vertex ML Metadata,official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb, +"Vertex Explainable AI, Image data",official/explainable_ai/sdk_custom_image_classification_online_explain.ipynb,vertex-ai/docs/explainable-ai/overview +Vertex AI Feature Store,official/feature_store/sdk-feature-store.ipynb, +Vertex AI Feature Store,official/feature_store/sdk-feature-store-pandas.ipynb, +Vertex AI Matching Engine,official/matching_engine/sdk_matching_engine_for_indexing.ipynb, +Vertex ML Metadata,official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb, +Vertex ML Metadata,official/ml_metadata/sdk-metric-parameter-tracking-for-locally-trained-models.ipynb, +"Vertex ML Metadata, Vertex AI Pipelines",official/ml_metadata/sdk-metric-parameter-tracking-for-locally-trained-models.ipynb, +"Vertex AI Model Evaluation, AutoML",official/model_evaluation/automl_tabular_classification_model_evaluation.ipynb, +"Vertex AI Model Evaluation, AutoML",official/model_evaluation/automl_tabular_regression_model_evaluation.ipynb, +"Vertex AI Model Evaluation, AutoML",official/model_evaluation/automl_text_classification_model_evaluation.ipynb, +"Vertex AI Model Evaluation, AutoML",official/model_evaluation/automl_video_classification_model_evaluation.ipynb, +"Vertex AI Model Evaluation, Custom Training",official/model_evaluation/custom_tabular_regression_model_evaluation.ipynb, +Model Monitoring,official/model_monitoring/model_monitoring.ipynb, +Vertex AI Pipelines,official/pipelines/pipelines_intro_kfp.ipynb, +Vertex AI Pipelines,official/pipelines/control_flow_kfp.ipynb, +Vertex AI Pipelines,official/pipelines/metrics_viz_run_compare_kfp.ipynb, +Vertex AI Pipelines,official/pipelines/lightweight_functions_component_io_kfp.ipynb, +"Vertex AI Pipelines Image data",official/pipelines/google_cloud_pipeline_components_automl_images.ipynb, +"Vertex AI Pipelines, Tabular data",official/pipelines/automl_tabular_classification_beans.ipynb, +"Vertex AI Pipelines, Tabular data",official/pipelines/google_cloud_pipeline_components_automl_tabular.ipynb, +"Vertex AI Pipelines, Tabular data",official/pipelines/google_cloud_pipeline_components_dataproc_tabular.ipynb, +"Vertex AI Pipelines, Text data",official/pipelines/google_cloud_pipeline_components_automl_text.ipynb, +"Vertex AI Pipelines, Text data",official/pipelines/google_cloud_pipeline_components_bqml_text.ipynb, +Vertex AI Pipelines,official/pipelines/custom_model_training_and_batch_prediction.ipynb, +Vertex AI Pipelines,official/pipelines/google_cloud_pipeline_components_model_train_upload_deploy.ipynb, +Vertex AI Pipelines,official/pipelines/google_cloud_pipeline_components_model_upload_predict_evaluate.ipynb, +"Vertex AI Training, Reduction Server, PyTorch",official/reduction_server/pytorch_distributed_training_reduction_server.ipynb, +"Tabular Workflows, Vertex AI TabNet",official/tabnet/tabnet_vertex_tutorial.ipynb, +"Tabular Workflows, Vertex AI TabNet, Vertex Explainablee AI",official/tabnet/ai-explanations-tabnet-algorithm.ipynb, +"Tabular Workflows, Vertex AI TabNet, Vertex AI Pipelines",official/tabular_workflows/tabnet_on_vertex_pipelines.ipynb, +"Tabular Workflows, Vertex AI Wide and Deep",official/tabular_workflows/wide_and_deep_on_vertex_pipelines.ipynb, +Vertex AI Vizier,official/vizier/gapic-vizier-multi-objective-optimization.ipynb,vertex-ai/docs/vizier/using-vizier diff --git a/notebooks/official/CODEOWNERS b/notebooks/official/CODEOWNERS index aa9b063cb..c367c0049 100644 --- a/notebooks/official/CODEOWNERS +++ b/notebooks/official/CODEOWNERS @@ -29,14 +29,16 @@ /pipelines/google_cloud_pipelines_dataproc_tabular @inardini /automl/automl_forecasting_bqml_arima_plus_comparison.ipynb @TheMichaelHu /automl/automl_tabular_on_vertex_pipelines.ipynb @helinwang -/custom/custom_training_tensorboard_profiler.ipynb @itseric +/custom/custom_training_tensorboard_profiler.ipynb @gericdong +/custom/get_started_with_vertex_endpoint_and_shared_vm.ipynb @andrewferlitsch /workbench/spark/spark_sample_notebook.ipynb @bradmiro /workbench/spark/spark_ml.ipynb @bradmiro /model_registry/bqml_vertexai_model_registry.ipynb @soheilazangeneh -/workbench/exploratory_data_analysis/explore_data_in_bigquery_with_workbench.ipynb @alokpattani /model_evaluation/automl_tabular_classification_model_evaluation.ipynb @soheilazangeneh /model_evaluation/automl_tabular_regression_model_evaluation.ipynb @soheilazangeneh -/tabular_workflows/tabnet_on_vertex_pipelines.ipynb @sakagarwal -/tabular_workflows/wide_and_deep_on_vertex_pipelines.ipynb @sakagarwal +/tabular_workflows/prophet_on_vertex_pipelines.ipynb @TheMichaelHu /model_evaluation/custom_tabular_classification_model_evaluation.ipynb @soheilazangeneh -/sdk/SDK_FBProphet_Forecasting_Online.ipynb @brianchunkang \ No newline at end of file +/sdk/SDK_FBProphet_Forecasting_Online.ipynb @brianchunkang +/automl/sdk_automl_forecasting_hierarchical_batch.ipynb @ivanmkc +/prediction/custom_batch_prediction_feature_filter.ipynb @soheilazangeneh +/feature_store/feature_store_streaming_ingestion_sdk.ipynb @soheilazangeneh diff --git a/notebooks/official/automl/README.md b/notebooks/official/automl/README.md index 549f9ba3e..547a2db34 100644 --- a/notebooks/official/automl/README.md +++ b/notebooks/official/automl/README.md @@ -1,6 +1,7 @@ -[AutoML Tabular Training and Prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/automl-tabular-classification.ipynb) +[AutoML Tabular training and prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/automl-tabular-classification.ipynb) +``` Learn how to train and make predictions on an AutoML model based on a tabular dataset. The steps performed include the following: @@ -11,8 +12,14 @@ The steps performed include the following: - Make a prediction by sending data. - Undeploy the `Model` resource. +``` + +   Learn more about [Classification for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview). + + [Create, train, and deploy an AutoML text classification model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/automl-text-classification.ipynb) +``` Learn how to use `AutoML` to train a text classification model. The steps performed include: @@ -25,9 +32,88 @@ The steps performed include: * Make an online prediction * Make a batch prediction -[AutoML training video classification model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_video_classification_batch.ipynb) +``` -Learn how to create an AutoML video classification model from a Python script, and then do a batch prediction using the Vertex AI SDK. +   Learn more about [Classification for text data](https://cloud.google.com/vertex-ai/docs/training-overview#classification_for_text). + + +[Compare Vertex AI Forecasting and BigQuery ML ARIMA_PLUS](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/automl_forecasting_bqml_arima_plus_comparison.ipynb) + +``` +Learn how to create an BigQuery ML ARIMA_PLUS model using a training [Vertex AI Pipeline](https://cloud. + +The steps performed are: + +- Train the BigQuery ML ARIMA_PLUS model. +- View BigQuery ML model evaluation. +- Make a batch prediction with the BigQuery ML model. +- Create a Vertex AI `Dataset` resource. +- Train the Vertex AI Forecasting model. +- View the Model evaluation. +- Make a batch prediction with the Model. + +``` + +   Learn more about [BQML ARIMA+ forecasting for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting-arima/overview). + + +[AutoML Tabular Workflow pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/automl_tabular_on_vertex_pipelines.ipynb) + +``` +Learn how to create two regression models using [Vertex AI Pipelines](https://cloud. + +The steps performed are: + +- Create a training pipeline that reduces the search space from the default to save time. +- Create a training pipeline that reuses the architecture search results from the previous pipeline to save time. + +``` + +   Learn more about [Tabular Workflow for E2E AutoML](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/e2e-automl). + + +[Get started with AutoML Training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/get_started_automl_training.ipynb) + +``` +Learn how to use `AutoML` for training with `Vertex AI`. + +The steps performed include: + +- Train an image model +- Export the image model as an edge model +- Train a tabular model +- Export the tabular model as a cloud model +- Train a text model +- Train a video model + +``` + +   Learn more about [Vertex AI for AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users). + + +[AutoML training hierarchical forecasting for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_forecasting_hierarchical_batch.ipynb) + +``` +In this tutorial, you create an AutoML hierarchical forecasting model and deploy it for batch prediction using the Vertex AI SDK for Python. + +The steps performed include: + +- Create a Vertex AI `TimeSeriesDataset` resource. +- Train the model. +- View the model evaluation. +- Deploy the `Model` resource to a serving `Endpoint` resource. +- Make a prediction. +- Undeploy the `Model`. + +``` + +   Learn more about [Hierarchical forecasting for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/hierarchical). + + +[AutoML training image object detection model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_image_object_detection_batch.ipynb) + +``` +In this tutorial, you create an AutoML image object detection model from a Python script, and then do a batch prediction using the Vertex AI SDK. The steps performed include: @@ -36,26 +122,14 @@ The steps performed include: - View the model evaluation. - Make a batch prediction. +``` -* Prediction Service: Does an on-demand prediction for the entire set of instances (i.e., one or more data items) and returns the results in real-time. +   Learn more about [Object detection for image data](https://cloud.google.com/vertex-ai/docs/training-overview#object_detection_for_images). -* Batch Prediction Service: Does a queued (batch) prediction for the entire set of instances in the background and stores the results in a Cloud Storage bucket when ready. - -[AutoML training text entity extraction model for online prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_text_entity_extraction_online.ipynb) - -Learn how to create an AutoML text entity extraction model and deploy for online prediction from a Python script using the Vertex SDK. - -The steps performed include: - -- Create a Vertex `Dataset` resource. -- Train the model. -- View the model evaluation. -- Deploy the `Model` resource to a serving `Endpoint` resource. -- Make a prediction. -- Undeploy the `Model`. [AutoML tabular forecasting model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_tabular_forecasting_batch.ipynb) +``` Learn how to create an `AutoML` tabular forecasting model from a Python script, and then do a batch prediction using the Vertex AI SDK. The steps performed include: @@ -65,77 +139,33 @@ The steps performed include: - Obtain the evaluation metrics for the `Model` resource. - Make a batch prediction. -[AutoML training image object detection model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_image_object_detection_batch.ipynb) +``` -Learn how to create an AutoML image object detection model from a Python script, and then do a batch prediction using the Vertex AI SDK. +   Learn more about [Forecasting for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/overview). + + +[AutoML training tabular regression model for batch prediction using BigQuery](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_tabular_regression_batch_bq.ipynb) + +``` +Learn how to create an AutoML tabular regression model and deploy it for batch prediction using the Vertex AI SDK for Python. The steps performed include: -- Create a Vertex `Dataset` resource. +- Create a Vertex AI `Dataset` resource. - Train the model. - View the model evaluation. -- Make a batch prediction. - - -* Prediction Service: Does an on-demand prediction for the entire set of instances (i.e., one or more data items) and returns the results in real-time. - -* Batch Prediction Service: Does a queued (batch) prediction for the entire set of instances in the background and stores the results in a Cloud Storage bucket when ready. - -[AutoML training video action recognition model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_video_action_recognition_batch.ipynb) - -Learn how to create an AutoML video action recognition model from a Python script, and then do a batch prediction using the Vertex AI SDK. - -The steps performed include: - -- Create a Vertex `Dataset` resource. -- Train the model. -- View the model evaluation. -- Make a batch prediction. - - -* Prediction Service: Does an on-demand prediction for the entire set of instances (i.e., one or more data items) and returns the results in real-time. - -* Batch Prediction Service: Does a queued (batch) prediction for the entire set of instances in the background and stores the results in a Cloud Storage bucket when ready. - -[AutoML Tabular Pipeline](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/automl_tabular_on_vertex_pipelines.ipynb) - -Learn how to create two regression models using [Vertex Pipelines](https://cloud. - -The steps performed are: - -- Create a training pipeline that reduces the search space from the default to save time. -- Create a training pipeline that reuses the architecture search results from the previous pipeline to save time. - -[AutoML training text sentiment analysis model for online prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_text_sentiment_analysis_online.ipynb) - -Learn how to create an AutoML text sentiment analysis model and deploy for online prediction from a Python script using the Vertex SDK. - -The steps performed include: - -- Create a Vertex `Dataset` resource. -- Create a training job for the model. -- View the model evaluation. - Deploy the `Model` resource to a serving `Endpoint` resource. - Make a prediction. - Undeploy the `Model`. -[Compare Vertex AI Forecasting and BigQuery ML ARIMA_PLUS](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/automl_forecasting_bqml_arima_plus_comparison.ipynb) +``` -Learn how to create an BQML ARIMA_PLUS model using a training [Vertex AI Pipeline](https://cloud. - -The steps performed are: - -- Train the BQML ARIMA_PLUS model. -- View BQML model evaluation. -- Make a batch prediction with the BQML model. -- Create a Vertex AI `Dataset` resource. -- Train the Vertex AI Forecasting model. -- View the Model evaluation. -- Make a batch prediction with the Model. +   Learn more about [Regression for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview). -[AutoML training tabular regression model for online prediction using BigQuery](https://github.com/GoogleCloudPlatform/vertex-ai-samples/tree/master/notebooks/official/automl/sdk_automl_tabular_regression_online_bq.ipynb) +[AutoML training tabular regression model for online prediction using BigQuery](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_tabular_regression_online_bq.ipynb) +``` Learn how to create an AutoML tabular regression model and deploy for online prediction from a Python script using the Vertex AI SDK. The steps performed include: @@ -147,9 +177,71 @@ The steps performed include: - Make a prediction. - Undeploy the `Model`. -[AutoML training video object tracking model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_video_object_tracking_batch.ipynb) +``` -Learn how to create an AutoML video object tracking model from a Python script, and then do a batch prediction using the Vertex SDK. +   Learn more about [Regression for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview). + + +[AutoML training text entity extraction model for online prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_text_entity_extraction_online.ipynb) + +``` +Learn how to create an AutoML text entity extraction model and deploy for online prediction from a Python script using the Vertex AI SDK. + +The steps performed include: + +- Create a Vertex `Dataset` resource. +- Train the model. +- View the model evaluation. +- Deploy the `Model` resource to a serving `Endpoint` resource. +- Make a prediction. +- Undeploy the `Model`. + +``` + +   Learn more about [Entity extraction for text data](https://cloud.google.com/vertex-ai/docs/training-overview#entity_extraction_for_text). + + +[Training an AutoML text sentiment analysis model for online predictions](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_text_sentiment_analysis_online.ipynb) + +``` +Learn how to create an AutoML text sentiment analysis model and deploy it for online predictions from a Python script using the Vertex AI SDK. + +The steps performed include: + +- Create a `Vertex AI Dataset` resource. +- Create a training job for the AutoML model on the dataset. +- View the model evaluation metrics. +- Deploy the `Vertex AI Model` resource to a serving `Vertex AI Endpoint`. +- Make a prediction request to the deployed model. +- Undeploy the model from endpoint. +- Perform clean up process. + +``` + +   Learn more about [Sentiment analysis for text data](https://cloud.google.com/vertex-ai/docs/training-overview#sentiment_analysis_for_text). + + +[AutoML training video action recognition model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_video_action_recognition_batch.ipynb) + +``` +Learn how to create an AutoML video action recognition model from a Python script, and then do a batch prediction using the Vertex AI SDK. + +The steps performed include: + +- Create a `Vertex AI Dataset` resource. +- Train the model. +- View the model evaluation. +- Make a batch prediction. + +``` + +   Learn more about [Action recognition for video data](https://cloud.google.com/vertex-ai/docs/training-overview#action_recognition_for_videos). + + +[AutoML training video classification model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_video_classification_batch.ipynb) + +``` +Learn how to create an AutoML video classification model from a Python script, and then do a batch prediction using the Vertex AI SDK. The steps performed include: @@ -158,20 +250,24 @@ The steps performed include: - View the model evaluation. - Make a batch prediction. +``` -* Prediction Service: Does an on-demand prediction for the entire set of instances (i.e., one or more data items) and returns the results in real-time. +   Learn more about [Classification for video data](https://cloud.google.com/vertex-ai/docs/training-overview#classification_for_videos). -* Batch Prediction Service: Does a queued (batch) prediction for the entire set of instances in the background and stores the results in a Cloud Storage bucket when ready. -[AutoML training tabular regression model for batch prediction using BigQuery](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_tabular_regression_batch_bq.ipynb) +[AutoML training video object tracking model for batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/automl/sdk_automl_video_object_tracking_batch.ipynb) -Learn how to create an AutoML tabular regression model and deploy it for batch prediction using the Vertex AI SDK for Python. +``` +Learn how to create an AutoML video object tracking model from a Python script, and then do a batch prediction using the Vertex AI SDK. The steps performed include: -- Create a Vertex AI `Dataset` resource. +- Create a Vertex `Dataset` resource. - Train the model. - View the model evaluation. -- Deploy the `Model` resource to a serving `Endpoint` resource. -- Make a prediction. -- Undeploy the `Model`. +- Make a batch prediction. + +``` + +   Learn more about [Object tracking for video data](https://cloud.google.com/vertex-ai/docs/training-overview#object_tracking_for_videos). + diff --git a/notebooks/official/automl/automl-tabular-classification.ipynb b/notebooks/official/automl/automl-tabular-classification.ipynb index 1e0278303..b5837c64f 100644 --- a/notebooks/official/automl/automl-tabular-classification.ipynb +++ b/notebooks/official/automl/automl-tabular-classification.ipynb @@ -29,7 +29,7 @@ "id": "JAPoU8Sm5E6e" }, "source": [ - "# Vertex AI SDK for Python: AutoML Tabular Training and Prediction\n", + "# Vertex AI SDK for Python: AutoML Tabular training and prediction\n", "\n", "\n", "
\n", @@ -63,7 +63,9 @@ "\n", "This tutorial demonstrates how to use the Vertex AI Python client library to train and deploy a tabular classification model for online prediction.\n", "\n", - "**Note**: you may incur charges for training, prediction, storage, or usage of other GCP products in connection with testing this SDK." + "**Note**: you may incur charges for training, prediction, storage, or usage of other Google Cloud products in connection with testing this SDK.\n", + "\n", + "Learn more about [Classification for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { @@ -76,6 +78,11 @@ "\n", "In this tutorial, you learn how to train and make predictions on an AutoML model based on a tabular dataset. Alternatively, you can train and make predictions on models by using the `gcloud` command-line tool or by using the online Cloud Console.\n", "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI\n", + "- AutoML Tabular\n", + "\n", "The steps performed include the following:\n", "\n", "- Create a Vertex AI model training job.\n", @@ -122,7 +129,9 @@ "id": "install_aip" }, "source": [ - "## Installation" + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." ] }, { @@ -135,55 +144,20 @@ "source": [ "import os\n", "\n", - "# The Google Cloud Notebook product has specific requirements\n", - "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\n", "\n", - "# Google Cloud Notebook requires dependencies to be installed with '--user'\n", + "# Vertex AI Notebook requires dependencies to be installed with '--user'\n", "USER_FLAG = \"\"\n", - "if IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " USER_FLAG = \"--user\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "b03b7f4487ff" - }, - "source": [ - "Install the latest version of the Vertex AI client library.\n", + "if IS_WORKBENCH_NOTEBOOK:\n", + " USER_FLAG = \"--user\"\n", "\n", - "Run the following command in your virtual environment to install the Vertex SDK for Python:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "d489d38261dd" - }, - "outputs": [], - "source": [ - "! pip install {USER_FLAG} --upgrade google-cloud-aiplatform" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "install_storage" - }, - "source": [ - "Install the Cloud Storage library:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "qssss-KSlugo" - }, - "outputs": [], - "source": [ - "! pip install {USER_FLAG} --upgrade google-cloud-storage" + "# Install the packagesimport os\n", + "! pip3 install {USER_FLAG} -q --upgrade google-cloud-aiplatform \\\n", + " google-cloud-storage" ] }, { diff --git a/notebooks/official/automl/automl-text-classification.ipynb b/notebooks/official/automl/automl-text-classification.ipynb index e91522f68..13afc1eb0 100644 --- a/notebooks/official/automl/automl-text-classification.ipynb +++ b/notebooks/official/automl/automl-text-classification.ipynb @@ -68,7 +68,9 @@ "source": [ "## Overview\n", "\n", - "This notebook walks you through the major phases of building and using an AutoML text classification model on [Vertex AI](https://cloud.google.com/vertex-ai/docs/). \n" + "This notebook walks you through the major phases of building and using an AutoML text classification model on [Vertex AI](https://cloud.google.com/vertex-ai/docs/). \n", + "\n", + "Learn more about [Classification for text data](https://cloud.google.com/vertex-ai/docs/training-overview#classification_for_text)." ] }, { diff --git a/notebooks/official/automl/automl_forecasting_bqml_arima_plus_comparison.ipynb b/notebooks/official/automl/automl_forecasting_bqml_arima_plus_comparison.ipynb index 1bfde96d1..327aeefc4 100644 --- a/notebooks/official/automl/automl_forecasting_bqml_arima_plus_comparison.ipynb +++ b/notebooks/official/automl/automl_forecasting_bqml_arima_plus_comparison.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "In this tutorial, you take on the role of a store planner who must determine how much inventory they will need to order for each of their products and stores for November 2019. You accomplish this by training forecasting models using historical sales data. You start with a baseline model using BigQuery ML (BQML) [ARIMA_PLUS](https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-create-time-series) and then compare it against a [Vertex AI Forecasting](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/overview) model." + "In this tutorial, you take on the role of a store planner who must determine how much inventory they will need to order for each of their products and stores for November 2019. You accomplish this by training forecasting models using historical sales data. You start with a baseline model using BigQuery ML (BQML) [ARIMA_PLUS](https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-create-time-series) and then compare it against a [Vertex AI Forecasting](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/overview) model.\n", + "\n", + "Learn more about [BQML ARIMA+ forecasting for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting-arima/overview)." ] }, { diff --git a/notebooks/official/automl/automl_tabular_on_vertex_pipelines.ipynb b/notebooks/official/automl/automl_tabular_on_vertex_pipelines.ipynb index bbb714aab..2313fbd6a 100644 --- a/notebooks/official/automl/automl_tabular_on_vertex_pipelines.ipynb +++ b/notebooks/official/automl/automl_tabular_on_vertex_pipelines.ipynb @@ -29,7 +29,7 @@ "id": "mThXALJl9Yue" }, "source": [ - "# Tabular Workflow: AutoML Tabular Pipeline\n", + "# AutoML Tabular Workflow pipelines\n", "\n", "\n", " \n", " \n", @@ -63,18 +63,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to create image object detection models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dataset:salads,iod" - }, - "source": [ - "### Dataset\n", + "This tutorial demonstrates how to use the Vertex AI SDK to create image object detection models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", "\n", - "The dataset used for this tutorial is the Salads category of the [OpenImages dataset](https://www.tensorflow.org/datasets/catalog/open_images_v4) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview). This dataset does not require any feature engineering. The version of the dataset you will use in this tutorial is stored in a public Cloud Storage bucket. The trained model predicts the bounding box locations and the corresponding type of salad items in an image from a class of five items: salad, seafood, tomato, baked goods, or cheese." + "Learn more about [Object detection for image data](https://cloud.google.com/vertex-ai/docs/training-overview#object_detection_for_images)." ] }, { @@ -87,6 +78,11 @@ "\n", "In this tutorial, you create an AutoML image object detection model from a Python script, and then do a batch prediction using the Vertex AI SDK. You can alternatively create and deploy models using the `gcloud` command-line tool or online using the Cloud Console.\n", "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML Training`\n", + "- `Vertex AI Datasets`\n", + "\n", "The steps performed include:\n", "\n", "- Create a Vertex `Dataset` resource.\n", @@ -101,6 +97,17 @@ "* Batch Prediction Service: Does a queued (batch) prediction for the entire set of instances in the background and stores the results in a Cloud Storage bucket when ready." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:salads,iod" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the Salads category of the [OpenImages dataset](https://www.tensorflow.org/datasets/catalog/open_images_v4) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview). This dataset does not require any feature engineering. The version of the dataset you will use in this tutorial is stored in a public Cloud Storage bucket. The trained model predicts the bounding box locations and the corresponding type of salad items in an image from a class of five items: salad, seafood, tomato, baked goods, or cheese." + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/automl/sdk_automl_tabular_forecasting_batch.ipynb b/notebooks/official/automl/sdk_automl_tabular_forecasting_batch.ipynb index f06185c22..14b924dde 100644 --- a/notebooks/official/automl/sdk_automl_tabular_forecasting_batch.ipynb +++ b/notebooks/official/automl/sdk_automl_tabular_forecasting_batch.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to create tabular forecasting models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK to create tabular forecasting models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Forecasting for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/overview)." ] }, { @@ -831,6 +833,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "99b7a9287ba6" @@ -838,7 +841,7 @@ "source": [ "For AutoML models, manual scaling can be adjusted by setting both min and max nodes i.e., `starting_replica_count` and `max_replica_count` as the same value(in this example, set to 1). The node count can be increased or decreased as required by load.\n", " \n", - "`batch_predict` can export predictions either to BigQuery or GCS. The BigQuery options are commented out below and the predictions will be exported to the BUCKET_URI." + "`batch_predict` can export predictions either to BigQuery or GCS. This example exports to BigQuery." ] }, { diff --git a/notebooks/official/automl/sdk_automl_tabular_regression_batch_bq.ipynb b/notebooks/official/automl/sdk_automl_tabular_regression_batch_bq.ipynb index 5eee4fc7b..dedf14723 100644 --- a/notebooks/official/automl/sdk_automl_tabular_regression_batch_bq.ipynb +++ b/notebooks/official/automl/sdk_automl_tabular_regression_batch_bq.ipynb @@ -44,7 +44,7 @@ " \n", " \n", "
\n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "In this tutorial, you will use two Vertex AI Tabular Workflows pipelines to train AutoML models using different configurations. You will see how `get_automl_tabular_pipeline_and_parameters` gives you the ability to customize the default AutoML Tabular pipeline, and how `get_skip_architecture_search_pipeline_and_parameters` allows you to reduce the training time and cost for an AutoML model by using the tuning results from a previous pipeline run." + "In this tutorial, you will use two Vertex AI Tabular Workflows pipelines to train AutoML models using different configurations. You will see how `get_automl_tabular_pipeline_and_parameters` gives you the ability to customize the default AutoML Tabular pipeline, and how `get_skip_architecture_search_pipeline_and_parameters` allows you to reduce the training time and cost for an AutoML model by using the tuning results from a previous pipeline run.\n", + "\n", + "Learn more about [Tabular Workflow for E2E AutoML](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/e2e-automl)." ] }, { @@ -72,7 +74,12 @@ "source": [ "### Objective\n", "\n", - "In this tutorial, you learn how to create two regression models using [Vertex Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) downloaded from [Google Cloud Pipeline Components](https://cloud.google.com/vertex-ai/docs/pipelines/components-introduction) (GCPC). These pipelines will be Vertex AI Tabular Workflow pipelines which are maintained by Google. These pipelines will showcase different ways to customize the Vertex Tabular training process.\n", + "In this tutorial, you learn how to create two regression models using [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) downloaded from [Google Cloud Pipeline Components](https://cloud.google.com/vertex-ai/docs/pipelines/components-introduction) (GCPC). These pipelines will be Vertex AI Tabular Workflow pipelines which are maintained by Google. These pipelines will showcase different ways to customize the Vertex Tabular training process.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML Training`\n", + "- `Vertex AI Datasets`\n", "\n", "The steps performed are:\n", "\n", @@ -640,9 +647,7 @@ "prediction_type = \"classification\"\n", "optimization_objective = \"minimize-log-loss\"\n", "target_column = \"deposit\"\n", - "data_source_csv_filenames = (\n", - " \"gs://cloud-samples-data/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv\"\n", - ")\n", + "data_source_csv_filenames = \"gs://cloud-samples-data/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv\"\n", "data_source_bigquery_table_path = None # format: bq://bq_project.bq_dataset.bq_table\n", "\n", "timestamp_split_key = None # timestamp column name when using timestamp split\n", diff --git a/notebooks/official/automl/get_started_automl_training.ipynb b/notebooks/official/automl/get_started_automl_training.ipynb new file mode 100644 index 000000000..78261b2e5 --- /dev/null +++ b/notebooks/official/automl/get_started_automl_training.ipynb @@ -0,0 +1,2487 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Get started with AutoML Training\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use AutoML in production. This tutorial covers get started with AutoML training.\n", + "\n", + "Learn more about [Vertex AI for AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage2,get_started_automl_training" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `AutoML` for training with `Vertex AI`.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML Training`\n", + "- `Vertex AI Datasets`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train an image model\n", + "- Export the image model as an edge model\n", + "- Train a tabular model\n", + "- Export the tabular model as a cloud model\n", + "- Train a text model\n", + "- Train a video model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "recommendation:mlops,stage2,automl,training" + }, + "source": [ + "### Recommendations\n", + "\n", + "When doing E2E MLOps on Google Cloud, the following are best practices for when to use AutoML:\n", + "\n", + "* **You have a limited amount of training data**\n", + "\n", + "* **You want to establish a baseline metric before experimenting with a custom model**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:flowers,icn" + }, + "source": [ + "### Datasets\n", + "\n", + "#### Image\n", + "\n", + "The image dataset used for this tutorial is the [Flowers dataset](https://www.tensorflow.org/datasets/catalog/tf_flowers) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview). The version of the dataset in this tutorial is stored in a public Cloud Storage bucket. The trained model predicts the type of flower in a given image from a class of five flowers: daisy, dandelion, rose, sunflower, or tulip.\n", + "\n", + "#### Tabular\n", + "\n", + "The tabular dataset used for this tutorial is the GSOD dataset from [BigQuery public datasets](https://cloud.google.com/bigquery/public-data). The version of the dataset you use only the fields year, month and day to predict the value of mean daily temperature (mean_temp).\n", + "\n", + "#### Text\n", + "\n", + "The text dataset used for this tutorial is the [Happy Moments dataset](https://www.kaggle.com/ritresearch/happydb) from [Kaggle Datasets](https://www.kaggle.com/ritresearch/happydb). The version of the dataset you use in this tutorial is stored in a public Cloud Storage bucket.\n", + "\n", + "#### Video\n", + "\n", + "The video dataset used for this tutorial is the golf swing recognition portion of the [Human Motion dataset](https://todo) from [MIT](http://cbcl.mit.edu/publications/ps/Kuehne_etal_iccv11.pdf). The version of the dataset you use in this tutorial is stored in a public Cloud Storage bucket. The trained model predicts the start frame where a golf swing begins." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fb3451ce8e47" + }, + "source": [ + "### Costs\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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_mlops" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install the packages\n", + "\n", + "! pip3 install --upgrade google-cloud-aiplatform $USER_FLAG -q\n", + "! pip3 install --upgrade google-cloud-storage $USER_FLAG -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "project_id" + }, + "source": [ + "## Before you begin\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", + "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, Compute Engine and Cloud Storage APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,storage_component).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5aee4379e8e5" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "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\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3ffa6b6c7cdb" + }, + "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", + "1. **Click Create service account**.\n", + "\n", + "2. In the **Service account name** field, enter a name, and click **Create**.\n", + "\n", + "3. In the **Grant this service account access to project** section, click the Role drop-down list. Type \"Vertex AI\" into the filter box, and select **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "4. Click Create. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "5. Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b72272258fc" + }, + "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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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_URI == \"\" or BUCKET_URI is None or BUCKET_URI == \"gs://[your-bucket-name]\":\n", + " BUCKET_NAME = PROJECT_ID + \"aip-\" + TIMESTAMP\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "setup_vars" + }, + "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": 1, + "metadata": { + "id": "import_aip:mbsdk" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "automl_training_intro" + }, + "source": [ + "## AutoML training job\n", + "\n", + "AutoML can be used to automatically train a wide variety of image model types. AutoML automates the following:\n", + "\n", + "- Dataset preprocessing\n", + "- Feature Engineering\n", + "- Data feeding\n", + "- Model Architecture selection\n", + "- Hyperparameter tuning\n", + "- Training the model\n", + "\n", + "Learn more about [Vertex AI for AutoML users](https://cloud.google.com/vertex-ai/docs/start/automl-users)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "automl_image_intro" + }, + "source": [ + "## AutoML image models\n", + "\n", + "AutoML can train the following types of image models:\n", + "\n", + "- classification\n", + "- objection detection\n", + "- segmentation\n", + "\n", + "A model can be trained for either deployment to the cloud or exported to the edge.\n", + "\n", + "Learn more about [AutoML Model Types](https://cloud.google.com/vertex-ai/docs/start/automl-model-types)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_preparation:image,u_dataset" + }, + "source": [ + "### Data preparation\n", + "\n", + "The Vertex `Dataset` resource for images has some requirements for your data:\n", + "\n", + "- Images must be stored in a Cloud Storage bucket.\n", + "- Each image file must be in an image format (PNG, JPEG, BMP, ...).\n", + "- There must be an index file stored in your Cloud Storage bucket that contains the path and label for each image.\n", + "- The index file must be either CSV or JSONL.\n", + "\n", + "Learn more about [Preparing image data](https://cloud.google.com/vertex-ai/docs/datasets/prepare-image)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_import_format:icn,u_dataset,csv" + }, + "source": [ + "#### CSV\n", + "\n", + "For image classification, the CSV index file has the requirements:\n", + "\n", + "- No heading.\n", + "- First column is the Cloud Storage path to the image.\n", + "- Second column is the label.\n", + "- Any remaining columns are additional labels for multi-label image classification.\n", + "\n", + "For image object detection, the CSV index file has the requirements:\n", + "\n", + "- No heading.\n", + "- First column is the Cloud Storage path to the image.\n", + "- Second column is the label.\n", + "- Third/Fourth columns are the upper left corner of bounding box. Coordinates are normalized, between 0 and 1.\n", + "- Fifth/Sixth/Seventh columns are not used and should be 0.\n", + "- Eighth/Ninth columns are the lower right corner of the bounding box.\n", + "\n", + "##### ML_USE\n", + "\n", + "Each row may additionally specify which split to assign the data item to when the dataset is split for training; otherwise, the dataset will be randomly split: 80/10/10.\n", + "\n", + "The `ml_use` assignment is specified by prepending a column for specifying the assignment -- as the first column. The value may be one of: training, test, or validation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_import_format:isg,u_dataset,jsonl" + }, + "source": [ + "#### JSONL\n", + "\n", + "For image classification, the JSONL index file has the requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `image_gcs_uri` is the Cloud Storage path to the image.\n", + "- The key/value pair `display_name` is the label for the image.\n", + "\n", + " { 'image_gcs_uri': image, \n", + " 'classification_annotations': \n", + " { 'display_name': label\n", + " }\n", + " }\n", + " \n", + "For multi-label, the labels are specified as a list of `display_name` key/value pairs:\n", + "\n", + " { 'image_gcs_uri': image, \n", + " 'classification_annotations': [\n", + " { 'display_name': label1\n", + " },\n", + " { 'display_name': labelN\n", + " },\n", + " ]\n", + " }\n", + " \n", + "For object detection, the JSONL index file has the requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `image_gcs_uri` is the Cloud Storage path to the image.\n", + "- The key/value pair `bounding_box_annotations` is a list of:\n", + " - `display_name`: The label of the object\n", + " - `x_min`, `y_min`, `x_max`, `y_max`: The coordinates for the bounding box\n", + "\n", + "{\n", + " \"image_gcs_uri\": image,\n", + " \"bounding_box_annotations\": [\n", + " {\n", + " \"display name\": label,\n", + " \"x_min\": \"X_MIN\",\n", + " \"y_min\": \"Y_MIN\",\n", + " \"x_max\": \"X_MAX\",\n", + " \"y_max\": \"Y_MAX\"\n", + " }\n", + " },\n", + " {\n", + " \"displayName\": \"OBJECT2_LABEL\",\n", + " \"x_min\": \"X_MIN\",\n", + " \"y_min\": \"Y_MIN\",\n", + " \"x_max\": \"X_MAX\",\n", + " \"y_max\": \"Y_MAX\"\n", + " }\n", + " ]\n", + "}\n", + "\n", + "\n", + "For image segmentation, the JSONL index file has the requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `image_gcs_uri` is the Cloud Storage path to the image.\n", + "- The key/value pair `category_mask_uri` is the Cloud Storage path to the mask image in PNG format.\n", + "- The key/value pair `'annotation_spec_colors'` is a list mapping mask colors to a label.\n", + " - The key/value pair pair `display_name` is the label for the pixel color mask.\n", + " - The key/value pair pair `color` are the RGB normalized pixel values (between 0 and 1) of the mask for the corresponding label.\n", + "\n", + " { 'image_gcs_uri': image, \n", + " 'segmentation_annotations': { 'category_mask_uri': mask_image, 'annotation_spec_colors' : [ \n", + " { 'display_name': label, 'color': {\"red\": value, \"blue\", value, \"green\": value} }, ...\n", + " ] \n", + " }\n", + " \n", + "##### ML_USE\n", + "\n", + "Each JSONL object may additionally specify which split to assign the data item to when the dataset is split for training; otherwise, the dataset will be randomly split: 80/10/10.\n", + "\n", + "\"data_item_resource_labels\": {\n", + " \"aiplatform.googleapis.com/ml_use\": \"training|test|validation\"\n", + " }\n", + "\n", + "*Note*: The dictionary key fields may alternatively be in camelCase. For example, 'image_gcs_uri' can also be 'imageGcsUri'." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,csv" + }, + "source": [ + "#### Location of Cloud Storage training data.\n", + "\n", + "Now set the variable `IMPORT_FILE` to the location of the CSV index file in Cloud Storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:flowers,csv,icn" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = (\n", + " \"gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "quick_peek:csv" + }, + "source": [ + "#### Quick peek at your data\n", + "\n", + "This tutorial uses a version of the Happy Moments dataset that is stored in a public Cloud Storage bucket, using a CSV index file.\n", + "\n", + "Start by doing a quick peek at the data. You count the number of examples by counting the number of rows in the CSV index file (`wc -l`) and then peek at the first few rows." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "quick_peek:csv" + }, + "outputs": [], + "source": [ + "FILE = IMPORT_FILE\n", + "\n", + "count = ! gsutil cat $FILE | wc -l\n", + "print(\"Number of Examples\", int(count[0]))\n", + "\n", + "print(\"First 10 rows\")\n", + "! gsutil cat $FILE | head" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:image,icn" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `ImageDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `gcs_source`: A list of one or more dataset index files to import the data items into the `Dataset` resource.\n", + "- `import_schema_uri`: The data labeling schema for the data items:\n", + " - `single_label`: Binary and multi-class classification\n", + " - `multi_label`: Multi-label multi-class classification\n", + " - `bounding_box`: Object detection\n", + " - `image_segmentation`: Segmentation\n", + "\n", + "Learn more about [ImageDataset](https://cloud.google.com/vertex-ai/docs/datasets/prepare-image)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:image,icn" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.ImageDataset.create(\n", + " display_name=\"flowers_\" + TIMESTAMP,\n", + " gcs_source=[IMPORT_FILE],\n", + " import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,\n", + ")\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:image,edge,icn" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, you perform two steps: 1) create a training pipeline, and 2) run the pipeline.\n", + "\n", + "#### Create training pipeline\n", + "\n", + "An AutoML training pipeline is created with the `AutoMLImageTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `prediction_type`: The type task to train the model for.\n", + " - `classification`: An image classification model.\n", + " - `object_detection`: An image object detection model.\n", + "- `multi_label`: If a classification task, whether single (`False`) or multi-labeled (`True`).\n", + "- `model_type`: The type of model for deployment.\n", + " - `CLOUD`: Deployment on Google Cloud\n", + " - `CLOUD_HIGH_ACCURACY_1`: Optimized for accuracy over latency for deployment on Google Cloud.\n", + " - `CLOUD_LOW_LATENCY_`: Optimized for latency over accuracy for deployment on Google Cloud.\n", + " - `MOBILE_TF_VERSATILE_1`: Deployment on an edge device.\n", + " - `MOBILE_TF_HIGH_ACCURACY_1`:Optimized for accuracy over latency for deployment on an edge device.\n", + " - `MOBILE_TF_LOW_LATENCY_1`: Optimized for latency over accuracy for deployment on an edge device.\n", + "- `base_model`: (optional) Transfer learning from existing `Model` resource -- supported for image classification only.\n", + "\n", + "The instantiated object is the DAG (directed acyclic graph) for the training job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_automl_pipeline:image,edge,icn" + }, + "outputs": [], + "source": [ + "dag = aiplatform.AutoMLImageTrainingJob(\n", + " display_name=\"flowers_\" + TIMESTAMP,\n", + " prediction_type=\"classification\",\n", + " multi_label=False,\n", + " model_type=\"MOBILE_TF_LOW_LATENCY_1\",\n", + " base_model=None,\n", + ")\n", + "\n", + "print(dag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:image" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Next, you run the created DAG to start the training job by invoking the method `run`, with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "- `validation_fraction_split`: The percentage of the dataset to use for validation.\n", + "- `budget_milli_node_hours`: (optional) Maximum training time specified in unit of milli node-hours (1000 = node-hour).\n", + "- `disable_early_stopping`: If `True`, training maybe completed before using the entire budget if the service believes it cannot further improve on the model objective measurements.\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "The execution of the training pipeline will take upto > 30 minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_automl_pipeline:image" + }, + "outputs": [], + "source": [ + "model = dag.run(\n", + " dataset=dataset,\n", + " model_display_name=\"flowers_\" + TIMESTAMP,\n", + " training_fraction_split=0.8,\n", + " validation_fraction_split=0.1,\n", + " test_fraction_split=0.1,\n", + " budget_milli_node_hours=8000,\n", + " disable_early_stopping=False,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "source": [ + "## Review model evaluation scores\n", + "\n", + "After your model training has finished, you can review the evaluation scores for it using the `list_model_evaluations()` method. This method will return an iterator for each evaluation slice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "outputs": [], + "source": [ + "model_evaluations = model.list_model_evaluations()\n", + "\n", + "for model_evaluation in model_evaluations:\n", + " print(model_evaluation.to_dict())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "deploy_model:mbsdk,automatic" + }, + "source": [ + "## Deploy the model\n", + "\n", + "Next, deploy your model for online prediction. To deploy the model, you invoke the `deploy` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "deploy_model:mbsdk,automatic" + }, + "outputs": [], + "source": [ + "endpoint = model.deploy()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "make_prediction" + }, + "source": [ + "## Send a online prediction request\n", + "\n", + "Send a online prediction to your deployed model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "get_test_item" + }, + "source": [ + "### Get test item\n", + "\n", + "You will use an arbitrary example out of the dataset as a test item. Don't be concerned that the example was likely used in training the model. You are just looking at how to make a prediction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "get_test_item:automl,icn,csv" + }, + "outputs": [], + "source": [ + "test_item = !gsutil cat $IMPORT_FILE | head -n1\n", + "if len(str(test_item[0]).split(\",\")) == 3:\n", + " _, test_item, test_label = str(test_item[0]).split(\",\")\n", + "else:\n", + " test_item, test_label = str(test_item[0]).split(\",\")\n", + "\n", + "print(test_item, test_label)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "predict_request:mbsdk,icn" + }, + "source": [ + "### Make the prediction\n", + "\n", + "Now that your `Model` resource is deployed to an `Endpoint` resource, you can do online predictions by sending prediction requests to the Endpoint resource.\n", + "\n", + "#### Request\n", + "\n", + "Since your test item is in a public Cloud Storage bucket in this example, you copy it to your bucket and read the contents of the image using `Cloud Storage SDK`. To pass the test data to the prediction service, you encode the bytes into base64 which makes the content safe from modification while transmitting binary data over the network.\n", + "\n", + "The format of each instance is:\n", + "\n", + " { 'content': { 'b64': base64_encoded_bytes } }\n", + "\n", + "Since the `predict()` method can take multiple items (instances), send your single test item as a list of one test item.\n", + "\n", + "#### Response\n", + "\n", + "The response from the `predict()` call is a Python dictionary with the following entries:\n", + "\n", + "- `ids`: The internal assigned unique identifiers for each prediction request.\n", + "- `displayNames`: The class names for each class label.\n", + "- `confidences`: The predicted confidence, between 0 and 1, per class label.\n", + "- `deployed_model_id`: The Vertex AI identifier for the deployed Model resource which did the predictions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1c1d53e89beb" + }, + "outputs": [], + "source": [ + "import base64\n", + "\n", + "from google.cloud import storage\n", + "\n", + "# Copy the test image to the Cloud storage bucket as \"test.jpg\"\n", + "test_image_local = \"{}/test.jpg\".format(BUCKET_URI)\n", + "! gsutil cp $test_item $test_image_local\n", + "\n", + "# Download the test image in bytes format\n", + "storage_client = storage.Client(project=PROJECT_ID)\n", + "bucket = storage_client.bucket(bucket_name=BUCKET_NAME)\n", + "test_content = bucket.get_blob(\"test.jpg\").download_as_bytes()\n", + "\n", + "# The format of each instance should conform to the deployed model's prediction input schema.\n", + "instances = [{\"content\": base64.b64encode(test_content).decode(\"utf-8\")}]\n", + "\n", + "prediction = endpoint.predict(instances=instances)\n", + "\n", + "print(prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3b1b67898533" + }, + "source": [ + "#### Alternate method using [GFile](https://www.tensorflow.org/api_docs/python/tf/io/gfile/GFile)\n", + "\n", + "Alternatively, [GFile](https://www.tensorflow.org/api_docs/python/tf/io/gfile/GFile) method from tensorflow-io library can be used to read the data from Cloud storage directly. The following code snippet does the same :\n", + "\n", + "```\n", + "import base64\n", + "import tensorflow as tf\n", + "\n", + "# Read the test file using GFile\n", + "with tf.io.gfile.GFile(test_item, \"rb\") as f:\n", + " content = f.read()\n", + "\n", + "# The format of each instance should conform to the deployed model's prediction input schema.\n", + "instances = [{\"content\": base64.b64encode(content).decode(\"utf-8\")}]\n", + "\n", + "prediction = endpoint.predict(instances=instances)\n", + "\n", + "print(prediction)\n", + "```\n", + "Nevertheless, `tf.io.gfile.GFile` supports multiple file system implementations, including local files, Google Cloud Storage (using a gs:// prefix), and HDFS (using an hdfs:// prefix)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "source": [ + "#### Undeploy the model\n", + "\n", + "When you are done doing predictions, you undeploy the model from the `Endpoint` resouce. This deprovisions all compute resources and ends billing for the deployed model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "export_model:mbsdk,image" + }, + "source": [ + "## Export as Edge model\n", + "\n", + "You can export an AutoML cloud model as a `Edge` model which you can then custom deploy to an edge device or download locally. Use the method `export_model()` to export the model to Cloud Storage, which takes the following parameters:\n", + "\n", + "- `artifact_destination`: The Cloud Storage location to store the SavedFormat model artifacts to.\n", + "- `export_format_id`: The format to save the model format as. For AutoML cloud there is just one option:\n", + " - `tf-saved-model`: TensorFlow SavedFormat for deployment to a container.\n", + " - `tflite`: TensorFlow Lite for deployment to an edge or mobile device.\n", + " - `edgetpu-tflite`: TensorFlow Lite for TPU\n", + " - `tf-js`: TensorFlow for web client\n", + " - `coral-ml`: for Coral devices\n", + "\n", + "- `sync`: Whether to perform operational sychronously or asynchronously." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "export_model:mbsdk,image" + }, + "outputs": [], + "source": [ + "response = model.export_model(\n", + " artifact_destination=BUCKET_URI, export_format_id=\"tflite\", sync=True\n", + ")\n", + "\n", + "model_package = response[\"artifactOutputUri\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "model_delete:mbsdk" + }, + "source": [ + "#### Delete the model\n", + "\n", + "The method 'delete()' will delete the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "model_delete:mbsdk" + }, + "outputs": [], + "source": [ + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "source": [ + "#### Delete the dataset\n", + "\n", + "The method 'delete()' will delete the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "outputs": [], + "source": [ + "dataset.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "source": [ + "#### Delete the endpoint\n", + "\n", + "The method 'delete()' will delete the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "automl_tabular_intro" + }, + "source": [ + "## AutoML tabular models\n", + "\n", + "AutoML can train the following types of tabular models:\n", + "\n", + "- classification\n", + "- regression\n", + "- forecasting\n", + "\n", + "A model can be trained for either automatic deployment to the cloud or exported for manual deployment to the cloud.\n", + "\n", + "Learn more about [AutoML Model Types](https://cloud.google.com/vertex-ai/docs/start/automl-model-types)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_preparation:tabular,u_dataset" + }, + "source": [ + "### Data preparation\n", + "\n", + "The Vertex AI `Dataset` resource for tabular has a couple of requirements for your tabular data.\n", + "\n", + "- Must be in a CSV file or a BigQuery table.\n", + "\n", + "Learn more about [Preparing tabular data](https://cloud.google.com/vertex-ai/docs/datasets/prepare-tabular)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_import_format:lbn,u_dataset,csv" + }, + "source": [ + "#### CSV\n", + "\n", + "For tabular models, the CSV file has a few requirements:\n", + "\n", + "- The first row must be the heading -- note how this is different from Image, Text and Video where the requirement is no heading.\n", + "- All but one column are features.\n", + "- One column is the label, which you will specify when you subsequently create the training pipeline.\n", + "\n", + "##### ML_USE\n", + "\n", + "Each row may additionally specify which split to assign the data item to when the dataset is split for training; otherwise, the dataset will be randomly split: 80/10/10.\n", + "\n", + "The `ml_use` assignment is specified by prepending a column for specifying the assignment -- as the first column. The value may be one of: training, test, or validation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,bq" + }, + "source": [ + "#### Location of BigQuery training data.\n", + "\n", + "Now set the variable `IMPORT_FILE` to the location of the data table in BigQuery." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:gsod,bq,lrg" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = \"bq://bigquery-public-data.samples.gsod\"\n", + "BQ_TABLE = \"bigquery-public-data.samples.gsod\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "#### BigQuery input data\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `TabularDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `bq_source`: Import data items from a BigQuery table into the `Dataset` resource.\n", + "- `labels`: User defined metadata. In this example, you store the location of the Cloud Storage bucket containing the user defined data.\n", + "\n", + "Learn more about [TabularDataset from BigQuery table](https://cloud.google.com/vertex-ai/docs/datasets/create-dataset-api#aiplatform_create_dataset_tabular_bigquery_sample-python)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.TabularDataset.create(\n", + " display_name=\"gsod_\" + TIMESTAMP,\n", + " bq_source=[IMPORT_FILE],\n", + " labels={\"user_metadata\": BUCKET_NAME},\n", + ")\n", + "\n", + "label_column = \"mean_temp\"\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_transformations:gsod" + }, + "outputs": [], + "source": [ + "TRANSFORMATIONS = [\n", + " {\"auto\": {\"column_name\": \"year\"}},\n", + " {\"auto\": {\"column_name\": \"month\"}},\n", + " {\"auto\": {\"column_name\": \"day\"}},\n", + "]\n", + "\n", + "label_column = \"mean_temp\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:tabular,lrg,transformations" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, you perform two steps: 1) create a training pipeline, and 2) run the pipeline.\n", + "\n", + "#### Create training pipeline\n", + "\n", + "An AutoML training pipeline is created with the `AutoMLTabularTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `optimization_prediction_type`: The type task to train the model for.\n", + " - `classification`: A tabuar classification model.\n", + " - `regression`: A tabular regression model.\n", + "- `column_transformations`: (Optional): Transformations to apply to the input columns\n", + "- `optimization_objective`: The optimization objective to minimize or maximize.\n", + " - binary classification:\n", + " - `minimize-log-loss`\n", + " - `maximize-au-roc`\n", + " - `maximize-au-prc`\n", + " - `maximize-precision-at-recall`\n", + " - `maximize-recall-at-precision`\n", + " - multi-class classification:\n", + " - `minimize-log-loss`\n", + " - regression:\n", + " - `minimize-rmse`\n", + " - `minimize-mae`\n", + " - `minimize-rmsle`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_automl_pipeline:tabular,lrg,transformations" + }, + "outputs": [], + "source": [ + "dag = aiplatform.AutoMLTabularTrainingJob(\n", + " display_name=\"gsod_\" + TIMESTAMP,\n", + " optimization_prediction_type=\"regression\",\n", + " optimization_objective=\"minimize-rmse\",\n", + " column_transformations=TRANSFORMATIONS,\n", + ")\n", + "\n", + "print(dag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:tabular" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Next, you run the created DAG to start the training job by invoking the method `run`, with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "- `validation_fraction_split`: The percentage of the dataset to use for validation.\n", + "- `target_column`: The name of the column to train as the label.\n", + "- `budget_milli_node_hours`: (optional) Maximum training time specified in unit of millihours (1000 = hour).\n", + "- `disable_early_stopping`: If `True`, training maybe completed before using the entire budget if the service believes it cannot further improve on the model objective measurements.\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "The execution of the training pipeline will take upto > 30 minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_automl_pipeline:tabular" + }, + "outputs": [], + "source": [ + "model = dag.run(\n", + " dataset=dataset,\n", + " model_display_name=\"gsod_\" + TIMESTAMP,\n", + " training_fraction_split=0.8,\n", + " validation_fraction_split=0.1,\n", + " test_fraction_split=0.1,\n", + " budget_milli_node_hours=8000,\n", + " disable_early_stopping=False,\n", + " target_column=\"mean_temp\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "source": [ + "## Review model evaluation scores\n", + "\n", + "After your model training has finished, you can review the evaluation scores for it using the `list_model_evaluations()` method. This method will return an iterator for each evaluation slice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "outputs": [], + "source": [ + "model_evaluations = model.list_model_evaluations()\n", + "\n", + "for model_evaluation in model_evaluations:\n", + " print(model_evaluation.to_dict())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "deploy_model:mbsdk,dedicated" + }, + "source": [ + "## Deploy the model\n", + "\n", + "Next, deploy your model for online prediction. To deploy the model, you invoke the `deploy` method, with the following parameters:\n", + "\n", + "- `machine_type`: The type of compute machine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "deploy_model:mbsdk,dedicated" + }, + "outputs": [], + "source": [ + "endpoint = model.deploy(machine_type=\"n1-standard-4\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "source": [ + "#### Undeploy the model\n", + "\n", + "When you are done doing predictions, you undeploy the model from the `Endpoint` resouce. This deprovisions all compute resources and ends billing for the deployed model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "export_model:mbsdk,tabular" + }, + "source": [ + "## Export as cloud model\n", + "\n", + "You can export an AutoML cloud model as a TensorFlow SavedFormat model which you can then custom deploy to Cloud Storage or download locally. Use the method `export_model()` to export the model to Cloud Storage, which takes the following parameters:\n", + "\n", + "- `artifact_destination`: The Cloud Storage location to store the SavedFormat model artifacts to.\n", + "- `export_format_id`: The format to save the model format as. For AutoML cloud there is just one option:\n", + " - `tf-saved-model`: TensorFlow SavedFormat\n", + "- `sync`: Whether to perform operational sychronously or asynchronously." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "export_model:mbsdk,tabular" + }, + "outputs": [], + "source": [ + "response = model.export_model(\n", + " artifact_destination=BUCKET_URI, export_format_id=\"tf-saved-model\", sync=True\n", + ")\n", + "\n", + "model_package = response[\"artifactOutputUri\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "model_delete:mbsdk" + }, + "source": [ + "#### Delete the model\n", + "\n", + "The method 'delete()' will delete the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "model_delete:mbsdk" + }, + "outputs": [], + "source": [ + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "source": [ + "#### Delete the dataset\n", + "\n", + "The method 'delete()' will delete the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "outputs": [], + "source": [ + "dataset.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "source": [ + "#### Delete the endpoint\n", + "\n", + "The method 'delete()' will delete the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "automl_text_intro" + }, + "source": [ + "## AutoML text models\n", + "\n", + "AutoML can train the following types of text models:\n", + "\n", + "- classification\n", + "- sentiment analysis\n", + "- entity extraction\n", + "\n", + "Learn more about [AutoML Model Types](https://cloud.google.com/vertex-ai/docs/start/automl-model-types)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_preparation:text,u_dataset" + }, + "source": [ + "### Data preparation\n", + "\n", + "The Vertex AI `Dataset` resource for text has a couple of requirements for your text data.\n", + "\n", + "- Text examples must be stored in a CSV or JSONL file.\n", + "\n", + "Learn more about [Preparing text data](https://cloud.google.com/vertex-ai/docs/datasets/prepare-text)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_import_format:tcn,u_dataset,csv" + }, + "source": [ + "#### CSV\n", + "\n", + "For text classification, the CSV file has a few requirements:\n", + "\n", + "- No heading.\n", + "- First column is the text example or Cloud Storage path to text file (.txt suffix).\n", + "- Second column the label.\n", + "- Any remaining columns are additional labels for multi-label text classification.\n", + "\n", + "For text sentiment analysis, the CSV file has a few requirements:\n", + "\n", + "- No heading.\n", + "- First column is the text example or Cloud Storage path to text file (.txt suffix).\n", + "- Second column is the sentiment value.\n", + "- Third column is the maximum possible sentiment value.\n", + "\n", + "##### ML_USE\n", + "\n", + "Each row may additionally specify which split to assign the data item to when the dataset is split for training; otherwise, the dataset will be randomly split: 80/10/10.\n", + "\n", + "The `ml_use` assignment is specified by prepending a column for specifying the assignment -- as the first column. The value may be one of: training, test, or validation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "766c838de8a0" + }, + "source": [ + "#### JSONL \n", + "\n", + "For text classification, the JSONL file has a few requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `text_gcs_uri` is the Cloud Storage path to the text file.\n", + "- The key/value pair `text_content` is the alternate way of specifying the text as inlined.\n", + "- The key/value pair `display_name` is the label for the text.\n", + "\n", + "{\n", + " \"classification_annotation\": {\n", + " \"display_name\": label\n", + " },\n", + " \"text_content\": text\n", + "}\n", + "{\n", + " \"classification_annotation\": {\n", + " \"display_name\": label\n", + " },\n", + " \"text_gcs_uri\": \"gcs_uri_to_file\"\n", + "}\n", + "\n", + " \n", + "For multi-label, the labels are specified as a list of `display_name` key/value pairs:\n", + "\n", + " 'classification_annotations': [\n", + " { 'display_name': label1\n", + " },\n", + " { 'display_name': labelN\n", + " },\n", + " ]\n", + "\n", + "For text sentiment analysis, the JSONL file has a few requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `text_gcs_uri` is the Cloud Storage path to the text file.\n", + "- The key/value pair `text_content` is the alternate way of specifying the text as inlined.\n", + "- The key/value pair `sentiment` is the sentiment value as an integer value greater than 0.\n", + "- The key/value pair `sentiment_max`is the maximum possible value for the sentiment.\n", + "\n", + "{\n", + " \"sentiment_annotation\": {\n", + " \"sentiment\": number,\n", + " \"sentiment_max\": number\n", + " },\n", + " \"text_content\": text,\n", + "}\n", + "{\n", + " \"sentiment_annotation\": {\n", + " \"sentiment\": number,\n", + " \"sentiment_max\": number\n", + " },\n", + " \"text_gcs_uri\": \"gcs_uri_to_file\"\n", + "}\n", + "\n", + "\n", + "For text entity extraction, the JSONL file has a few requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `text_gcs_uri` is the Cloud Storage path to the text file.\n", + "- The key/value pair `text_content` is the alternate way of specifying the text as inlined.\n", + "- The key/value pair `start_offset` is the character offset of the start of the text.\n", + "- The key/value pair `end_offset` is the character offset of the end of the text.\n", + "- The key/value pair `display_name` is the label for the text.\n", + "\n", + "{\n", + " \"text_segment_annotations\": [\n", + " {\n", + " \"start_offset\":number,\n", + " \"end_offset\":number,\n", + " \"display_name\": label\n", + " },\n", + " ...\n", + " ],\n", + " \"textContent\": \"inline_text\"\n", + "}\n", + "{\n", + " \"textSegmentAnnotations\": [\n", + " {\n", + " \"start_offset\": number,\n", + " \"end_offset\": number,\n", + " \"displayName\": label\n", + " },\n", + " ...\n", + " ],\n", + " \"text_gcs_uri\": \"gcs_uri_to_file\"\n", + "}\n", + "\n", + "##### ML_USE\n", + "\n", + "Each JSONL object may additionally specify which split to assign the data item to when the dataset is split for training; otherwise, the dataset will be randomly split: 80/10/10.\n", + "\n", + "\"data_item_resource_labels\": {\n", + " \"aiplatform.googleapis.com/ml_use\": \"training|test|validation\"\n", + " }\n", + "\n", + "*Note*: The dictionary key fields may alternatively be in camelCase. For example, 'text_gcs_uri' can also be 'textGcsUri'." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,csv" + }, + "source": [ + "#### Location of Cloud Storage training data.\n", + "\n", + "Now set the variable `IMPORT_FILE` to the location of the CSV index file in Cloud Storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:happydb,csv,tcn" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = \"gs://cloud-ml-data/NL-classification/happiness.csv\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "quick_peek:csv" + }, + "source": [ + "#### Quick peek at your data\n", + "\n", + "This tutorial uses a version of the Happy Moments dataset that is stored in a public Cloud Storage bucket, using a CSV index file.\n", + "\n", + "Start by doing a quick peek at the data. You count the number of examples by counting the number of rows in the CSV index file (`wc -l`) and then peek at the first few rows." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "quick_peek:csv" + }, + "outputs": [], + "source": [ + "FILE = IMPORT_FILE\n", + "\n", + "count = ! gsutil cat $FILE | wc -l\n", + "print(\"Number of Examples\", int(count[0]))\n", + "\n", + "print(\"First 10 rows\")\n", + "! gsutil cat $FILE | head" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:text,tcn" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `TextDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `gcs_source`: A list of one or more dataset index files to import the data items into the `Dataset` resource.\n", + "- `import_schema_uri`: The data labeling schema for the data items.\n", + " - `single_label`: Binary and multi-class classification\n", + " - `multi_label`: Multi-label multi-class classification\n", + " - `sentiment`: Sentiment analysis\n", + " - `extraction`: Entity extraction\n", + "\n", + "Learn more about [TextDataset](https://cloud.google.com/vertex-ai/docs/datasets/prepare-text)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:text,tcn" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.TextDataset.create(\n", + " display_name=\"happydb_\" + TIMESTAMP,\n", + " gcs_source=[IMPORT_FILE],\n", + " import_schema_uri=aiplatform.schema.dataset.ioformat.text.single_label_classification,\n", + ")\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:text,tcn" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, you perform two steps: 1) create a training pipeline, and 2) run the pipeline.\n", + "\n", + "#### Create training pipeline\n", + "\n", + "An AutoML training pipeline is created with the `AutoMLTextTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `prediction_type`: The type task to train the model for.\n", + " - `classification`: A text classification model.\n", + " - `sentiment`: A text sentiment analysis model.\n", + " - `extraction`: A text entity extraction model.\n", + "- `multi_label`: If a classification task, whether single (False) or multi-labeled (True).\n", + "- `sentiment_max`: If a sentiment analysis task, the maximum sentiment value.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_automl_pipeline:text,tcn" + }, + "outputs": [], + "source": [ + "dag = aiplatform.AutoMLTextTrainingJob(\n", + " display_name=\"happydb_\" + TIMESTAMP,\n", + " prediction_type=\"classification\",\n", + " multi_label=False,\n", + ")\n", + "\n", + "print(dag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:text" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Next, you run the created DAG to start the training job by invoking the method `run`, with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "- `validation_fraction_split`: The percentage of the dataset to use for validation.\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "The execution of the training pipeline will take upto > 30 minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_automl_pipeline:text" + }, + "outputs": [], + "source": [ + "model = dag.run(\n", + " dataset=dataset,\n", + " model_display_name=\"happydb_\" + TIMESTAMP,\n", + " training_fraction_split=0.8,\n", + " validation_fraction_split=0.1,\n", + " test_fraction_split=0.1,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "source": [ + "## Review model evaluation scores\n", + "\n", + "After your model training has finished, you can review the evaluation scores for it using the `list_model_evaluations()` method. This method will return an iterator for each evaluation slice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "outputs": [], + "source": [ + "model_evaluations = model.list_model_evaluations()\n", + "\n", + "for model_evaluation in model_evaluations:\n", + " print(model_evaluation.to_dict())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "deploy_model:mbsdk,automatic" + }, + "source": [ + "## Deploy the model\n", + "\n", + "Next, deploy your model for online prediction. To deploy the model, you invoke the `deploy` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "deploy_model:mbsdk,automatic" + }, + "outputs": [], + "source": [ + "endpoint = model.deploy()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "source": [ + "#### Undeploy the model\n", + "\n", + "When you are done doing predictions, you undeploy the model from the `Endpoint` resouce. This deprovisions all compute resources and ends billing for the deployed model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "model_delete:mbsdk" + }, + "source": [ + "#### Delete the model\n", + "\n", + "The method 'delete()' will delete the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "model_delete:mbsdk" + }, + "outputs": [], + "source": [ + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "source": [ + "#### Delete the dataset\n", + "\n", + "The method 'delete()' will delete the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "outputs": [], + "source": [ + "dataset.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "source": [ + "#### Delete the endpoint\n", + "\n", + "The method 'delete()' will delete the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "automl_video_intro" + }, + "source": [ + "## AutoML video models\n", + "\n", + "AutoML can train the following types of video models:\n", + "\n", + "- classification\n", + "- object tracking\n", + "- action recognition\n", + "\n", + "A model can be trained for either deployment to the cloud or exported to the edge.\n", + "\n", + "Learn more about [AutoML Model Types](https://cloud.google.com/vertex-ai/docs/start/automl-model-types)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "data_preparation:text,u_dataset" + }, + "source": [ + "### Data preparation\n", + "\n", + "The Vertex AI `Dataset` resource for text has a couple of requirements for your text data.\n", + "\n", + "- Text examples must be stored in a CSV or JSONL file.\n", + "\n", + "Learn more about [Preparing video data](https://cloud.google.com/vertex-ai/docs/datasets/prepare-video)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "427212b48840" + }, + "source": [ + "#### CSV\n", + "\n", + "For video classification, the CSV file has a few requirements:\n", + "\n", + "- No heading.\n", + "- First column is the Cloud Storage path to video file.\n", + "- Second column the label.\n", + "- Third column is the start time (seconds) in the video to classify.\n", + "- Fourth column is the end time (seconds) in the video to classify.\n", + "\n", + "For multi-label classification, each label is a separate row entry.\n", + "\n", + "For video object tracking, the CSV file has a few requirements:\n", + "\n", + "- No heading.\n", + "- First column is the Cloud Storage path to video file.\n", + "- Second column the label.\n", + "- Third column is unused (blank).\n", + "- Fourth column is the start time (seconds) in the video to start tracking the object.\n", + "- The fifth through eighth columns are the vertices of the object to track.\n", + " - x_min\n", + " - y_min\n", + " - x_max\n", + " - y_max\n", + " \n", + "For action recognition, the CSV file has a few requirements:\n", + "\n", + "- No heading.\n", + "- Each row can be one of the following four formats:\n", + "\n", + "VIDEO_URI, TIME_SEGMENT_START, TIME_SEGMENT_END, LABEL, ANNOTATION_FRAME_TIMESTAMP\n", + "\n", + "VIDEO_URI, , , LABEL, ANNOTATION_FRAME_TIMESTAMP\n", + "\n", + "VIDEO_URI, TIME_SEGMENT_START, TIME_SEGMENT_END, LABEL, ANNOTATION_SEGMENT_START, ANNOTATION_SEGMENT_END\n", + "\n", + "VIDEO_URI, , , LABEL, ANNOTATION_SEGMENT_START, ANNOTATION_SEGMENT_END\n", + "\n", + "\n", + "##### ML_USE\n", + "\n", + "Each row may additionally specify which split to assign the data item to when the dataset is split for training; otherwise, the dataset will be randomly split: 80/10/10.\n", + "\n", + "The `ml_use` assignment is specified by prepending a column for specifying the assignment -- as the first column. The value may be one of: training, or test." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "461301339727" + }, + "source": [ + "#### JSONL\n", + "\n", + "For video classification, the CSV file has a few requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `video_gcs_uri` is the Cloud Storage path to the text file.\n", + "- The key/value pair `display_name` is the label for the text.\n", + "- The key/value pair `start_time` is the start time (seconds) for classifying.\n", + "- The key/value pair `end_time` is the end time (seconds) for classifying.\n", + "\n", + "\n", + " {\n", + " \"video_gcs_uri\": video,\n", + " \"time_segment_annotations\": [{\n", + " \"display_name\": label,\n", + " \"start_time\": \"start_time_of_segment\",\n", + " \"end_time\": \"end_time_of_segment\"\n", + " }]\n", + " }\n", + "\n", + "For video object tracking, the CSV file has a few requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `video_gcs_uri` is the Cloud Storage path to the text file.\n", + "\n", + " {\n", + " \"video_gcs_uri\": video,\n", + " \"temporal_bounding_box_annotations\": [{\n", + " \"display_name\": label,\n", + " \"x_min\": \"leftmost_coordinate_of_the_bounding box\",\n", + " \"x_max\": \"rightmost_coordinate_of_the_bounding box\",\n", + " \"y_min\": \"topmost_coordinate_of_the_bounding box\",\n", + " \"y_max\": \"bottommost_coordinate_of_the_bounding box\",\n", + " \"time_offset\": \"timeframe_object-detected\"\n", + " }]\n", + " }\n", + "\n", + "For video action recognition, the CSV file has a few requirements:\n", + "\n", + "- Each data item is a separate JSON object, on a separate line.\n", + "- The key/value pair `video_gcs_uri` is the Cloud Storage path to the text file.\n", + "\n", + " {\n", + " \"video_gcs_uri': video,\n", + " \"time_segments\": [{\n", + " \"start_time\": \"start_time_of_fully_annotated_segment\",\n", + " \"end_time\": \"end_time_of_segment\"}],\n", + " \"time_segment_annotations\": [{\n", + " \"display_name\": label,\n", + " \"start_time\": \"start_time_of_segment\",\n", + " \"end_time\": \"end_time_of_segment\"\n", + " }]\n", + " }\n", + "\n", + "##### ML_USE\n", + "\n", + "Each JSONL object may additionally specify which split to assign the data item to when the dataset is split for training; otherwise, the dataset will be randomly split: 80/20.\n", + "\n", + "\"data_item_resource_labels\": {\n", + " \"aiplatform.googleapis.com/ml_use\": \"training|test\"\n", + " }\n", + "\n", + "*Note*: The dictionary key fields may alternatively be in camelCase. For example, 'video_gcs_uri' can also be 'videoGcsUri'." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,csv" + }, + "source": [ + "#### Location of Cloud Storage training data.\n", + "\n", + "Now set the variable `IMPORT_FILE` to the location of the CSV index file in Cloud Storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:hmdb,csv,vcn" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = \"gs://automl-video-demo-data/hmdb_split1_5classes_train_inf.csv\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "quick_peek:csv" + }, + "source": [ + "#### Quick peek at your data\n", + "\n", + "This tutorial uses a version of the Happy Moments dataset that is stored in a public Cloud Storage bucket, using a CSV index file.\n", + "\n", + "Start by doing a quick peek at the data. You count the number of examples by counting the number of rows in the CSV index file (`wc -l`) and then peek at the first few rows." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "quick_peek:csv" + }, + "outputs": [], + "source": [ + "FILE = IMPORT_FILE\n", + "\n", + "count = ! gsutil cat $FILE | wc -l\n", + "print(\"Number of Examples\", int(count[0]))\n", + "\n", + "print(\"First 10 rows\")\n", + "! gsutil cat $FILE | head" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:video,vcn" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `VideoDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `gcs_source`: A list of one or more dataset index files to import the data items into the `Dataset` resource.\n", + "- `import_schema_uri`: The data labeling schema for the data items.\n", + " - `classification`: Binary and multi-class classification\n", + " - `object_tracking`: Object tracking\n", + " - `action_recognition`: Action recognition\n", + "\n", + "Learn more about [VideoDataset](https://cloud.google.com/vertex-ai/docs/datasets/prepare-video)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:video,vcn" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.VideoDataset.create(\n", + " display_name=\"human_motion_\" + TIMESTAMP,\n", + " gcs_source=[IMPORT_FILE],\n", + " import_schema_uri=aiplatform.schema.dataset.ioformat.video.classification,\n", + ")\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:video,vcn" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, you perform two steps: 1) create a training pipeline, and 2) run the pipeline.\n", + "\n", + "#### Create training pipeline\n", + "\n", + "An AutoML training pipeline is created with the `AutoMLVideoTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `prediction_type`: The type task to train the model for.\n", + " - `classification`: A video classification model.\n", + " - `object_tracking`: A video object tracking model.\n", + " - `action_recognition`: A video action recognition model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_automl_pipeline:video,vcn" + }, + "outputs": [], + "source": [ + "dag = aiplatform.AutoMLVideoTrainingJob(\n", + " display_name=\"human_motion_\" + TIMESTAMP,\n", + " prediction_type=\"classification\",\n", + ")\n", + "\n", + "print(dag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:video" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Next, you run the created DAG to start the training job by invoking the method `run`, with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "The execution of the training pipeline will take upto > 30 minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_automl_pipeline:video" + }, + "outputs": [], + "source": [ + "model = dag.run(\n", + " dataset=dataset,\n", + " model_display_name=\"human_motion_\" + TIMESTAMP,\n", + " training_fraction_split=0.8,\n", + " test_fraction_split=0.2,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "source": [ + "## Review model evaluation scores\n", + "\n", + "After your model training has finished, you can review the evaluation scores for it using the `list_model_evaluations()` method. This method will return an iterator for each evaluation slice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "outputs": [], + "source": [ + "model_evaluations = model.list_model_evaluations()\n", + "\n", + "for model_evaluation in model_evaluations:\n", + " print(model_evaluation.to_dict())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "model_delete:mbsdk" + }, + "source": [ + "#### Delete the model\n", + "\n", + "The method 'delete()' will delete the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "model_delete:mbsdk" + }, + "outputs": [], + "source": [ + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "source": [ + "#### Delete the dataset\n", + "\n", + "The method 'delete()' will delete the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dataset_delete:mbsdk" + }, + "outputs": [], + "source": [ + "dataset.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup" + }, + "source": [ + "# Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cleanup" + }, + "outputs": [], + "source": [ + "# Set this to true only if you'd like to delete your bucket\n", + "delete_bucket = False\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_automl_training.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/automl/sdk_automl_forecasting_hierarchical_batch.ipynb b/notebooks/official/automl/sdk_automl_forecasting_hierarchical_batch.ipynb new file mode 100644 index 000000000..0b26ce42c --- /dev/null +++ b/notebooks/official/automl/sdk_automl_forecasting_hierarchical_batch.ipynb @@ -0,0 +1,1119 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title" + }, + "source": [ + "# Vertex AI SDK for Python: AutoML training hierarchical forecasting for batch prediction\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + "\n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:automl" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to create hierarchical forecasting models using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users)and do batch prediction. Specifically, you predict a fictional store's sales based on historical sales data.\n", + "\n", + "Learn more about [Hierarchical forecasting for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/hierarchical)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:automl,training,online_prediction" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you create an AutoML hierarchical forecasting model and deploy it for batch prediction using the Vertex AI SDK for Python. You can alternatively create and deploy models using the `gcloud` command-line tool or batch using the Cloud Console.\n", + "The rationale for a hierarchical forecasting model is to minimize the error for a given group of sales data. In this tutorial, you will be minimizing the error for sale predictions at the \"product\" level.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML Training`\n", + "- `Vertex AI Datasets`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a Vertex AI `TimeSeriesDataset` resource.\n", + "- Train the model.\n", + "- View the model evaluation.\n", + "- Deploy the `Model` resource to a serving `Endpoint` resource.\n", + "- Make a prediction.\n", + "- Undeploy the `Model`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:gsod,lrg" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is a synthetically generated dataset of sales data for a fictional outdoor gear store. In this dataset, you predict a fictional store's sales based on historical sales data.\n", + "\n", + "This dataset is synthesized to mimic sales pattern for a fictional outdoor gear store. There is a hierarchy between product_category, product_type and product as shown below:\n", + "\n", + "- product_category: snow\n", + " - product_type: skis\n", + " - product: \n", + " \n", + "Additionally, this company has 3 store locations, each with their respective level of foot traffic.\n", + "- store: suburbs\n", + "- store: flagship\n", + "- store: downtown\n", + "\n", + "Additional season effects are present in the data.\n", + "\n", + "Link to data: gs://cloud-samples-data/vertex-ai/structured_data/forecasting/synthetic_sales_data.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "costs" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "install_aip" + }, + "source": [ + "## Installation\n", + "\n", + "Install the latest version of Cloud Storage, Bigquery and Vertex AI SDKs for Python." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1fd00fa70a2a" + }, + "outputs": [], + "source": [ + "# Install the packages\n", + "! pip3 install --upgrade google-cloud-aiplatform \\\n", + " google-cloud-storage \\\n", + " google-cloud-bigquery[pandas] \\\n", + " seaborn \\\n", + " scikit-learn" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "blGlVGFYW9Pt" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0JrvuK6LUYnQ" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a47846030fef" + }, + "source": [ + "## Before you begin" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "project_id" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3c8049930470" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a54f9d7c1876" + }, + "source": [ + "#### Region\n", + "\n", + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3aaadaaf9b30" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5c0404984792" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BaFKzJ_xXpvm" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_fV-KyGAX4Xl" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7uXB1HAPX6L_" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ab_TRMQIYCCX" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vx25htmYYExI" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uZdA0-jBYGqt" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:custom" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "Create a storage bucket to store intermediate artifacts such as datasets." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "outputs": [], + "source": [ + "BUCKET_URI = \"gs://your-bucket-name-unique\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Oz8J0vmSlugt" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "750d53e37094" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c9d3ac73dfbc" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform\n", + "\n", + "# Initialize the Vertex AI SDK\n", + "aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "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 aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk" + }, + "source": [ + "## Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and the corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tutorial_start:automl" + }, + "source": [ + "# Tutorial\n", + "\n", + "Now you are ready to start creating your own AutoML time-series forecasting model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "Use `TimeSeriesDataset.create()` to create a `TimeSeriesDataset` resource, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `gcs_source`: A list of one or more dataset index files to import the data items into the `Dataset` resource.\n", + "- `bq_source`: Alternatively, import data items from a BigQuery table into the `Dataset` resource.\n", + "\n", + "This operation may take several minutes." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e0234d188ed3" + }, + "source": [ + "### Download data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5e310c5f598f" + }, + "outputs": [], + "source": [ + "DATASET_URI = \"gs://cloud-samples-data/vertex-ai/structured_data/forecasting/synthetic_sales_data.csv\"\n", + "\n", + "# Download the dataset\n", + "! gsutil cp {DATASET_URI} dataset.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ee795ca660f9" + }, + "source": [ + "#### Split\n", + "\n", + "In this use case, you are predicting the sales volume per product per store. \n", + "Hence, you will need to create a new column called 'product_at_store', which is a concatenation of the 'product' and 'store' columns. This will be passed as the 'target_column' during training.\n", + "\n", + "Lastly, split the dataset into a train and test dataset.\n", + "The train dataset is saved to CSV but the test dataset needs further treatment such as removing the target column." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "219ff473f02c" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "DATASET_TRAIN_FILENAME = \"sales_forecasting_train.csv\"\n", + "DATASET_TEST_FILENAME = \"sales_forecasting_test.csv\"\n", + "DATASET_TRAIN_URI = f\"{BUCKET_URI}/{DATASET_TRAIN_FILENAME}\"\n", + "\n", + "# Load dataset\n", + "df = pd.read_csv(\"dataset.csv\")\n", + "\n", + "df[\"date\"] = df[\"date\"].astype(\"datetime64[ns]\")\n", + "\n", + "# Add a target column\n", + "df[\"product_at_store\"] = df[\"product\"] + \" (\" + df[\"store\"] + \")\"\n", + "\n", + "# Split dataset into train and test by taking the first 90% of data for training.\n", + "dates_unique = df[\"date\"].unique()\n", + "date_cutoff = sorted(dates_unique)[round(len(dates_unique) * 9 / 10)]\n", + "\n", + "# Save train dataset\n", + "df[df[\"date\"] < date_cutoff].to_csv(DATASET_TRAIN_FILENAME, index=False)\n", + "\n", + "# Create test dataset\n", + "df_test = df[df[\"date\"] >= date_cutoff]\n", + "\n", + "# Upload to GCS bucket\n", + "! gsutil cp {DATASET_TRAIN_FILENAME} {DATASET_TRAIN_URI}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2f031cc0274a" + }, + "source": [ + "#### Plot the dataset\n", + "\n", + "Plot the 'sales' vs 'product_at_store' to get a sense of the dataset.\n", + "\n", + "Note the peak in 'Snow' products during winter months and a peak in 'Water' products in the summer months." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "343a931623aa" + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "\n", + "sns.relplot(\n", + " data=df,\n", + " x=\"date\",\n", + " y=\"sales\",\n", + " hue=\"product_at_store\",\n", + " row=\"product_category\",\n", + " aspect=4,\n", + " kind=\"line\",\n", + " style=\"store\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "outputs": [], + "source": [ + "dataset_time_series = aiplatform.TimeSeriesDataset.create(gcs_source=DATASET_TRAIN_URI)\n", + "\n", + "print(dataset_time_series.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:tabular,lrg,transformations" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, create and run a training pipeline.\n", + "\n", + "#### Create training job\n", + "\n", + "Create an AutoML training pipeline using the `AutoMLForecastingTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `column_transformations`: (Optional): Transformations to apply to the input columns\n", + "- `optimization_objective`: The optimization objective (minimize or maximize).\n", + " - regression:\n", + " - `minimize-rmse`\n", + " - `minimize-mae`\n", + " - `minimize-rmsle`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_automl_pipeline:tabular,lrg,transformations" + }, + "outputs": [], + "source": [ + "training_job = aiplatform.AutoMLForecastingTrainingJob(\n", + " display_name=\"hierachical_sales_forecasting\",\n", + " optimization_objective=\"minimize-rmse\",\n", + " column_specs={\n", + " \"date\": \"timestamp\",\n", + " \"sales\": \"numeric\",\n", + " \"product_type\": \"categorical\",\n", + " \"product_category\": \"categorical\",\n", + " \"product\": \"categorical\",\n", + " \"store\": \"categorical\",\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42ce6f1f9633" + }, + "source": [ + "### Set context and horizon\n", + "\n", + "You need to the context window and forecast horizon when you train a forecasting model.\n", + "- The context window sets how far back the model looks during training (and for forecasts). In other words, for each training datapoint, the context window determines how far back the model looks for predictive patterns.\n", + "- The forecast horizon determines how far into the future the model forecasts the target value for each row of prediction data.\n", + "\n", + "See more here: [Considerations for setting the context window and forecast horizon](https://cloud.google.com/vertex-ai/docs/datasets/bp-tabular?hl=en#context-window)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8315876232af" + }, + "outputs": [], + "source": [ + "# Each row represents a day, so we set context and time horizon to 30 to represent 30 days.\n", + "\n", + "CONTEXT_WINDOW = 30\n", + "TIME_HORIZON = 30" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:tabular" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Run the training job by invoking the `run` method with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "- `validation_fraction_split`: The percentage of the dataset to use for validation.\n", + "- `target_column`: The name of the column to train as the label.\n", + "- `budget_milli_node_hours`: (optional) Maximum training time specified in unit of millihours (1000 = hour).\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "#### Setting the hierarchical parameters\n", + "We want to group by 'product' to minimize the error at this level.\n", + "Hence, you should set the group parameter to \"product\".\n", + "\n", + "Setting the `group_total_weight` to a non-zero weight means that you want to weigh the group aggregated loss relative to the individual loss. Set that to 10 for demonstration purposes.\n", + "\n", + "See more info at https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/hierarchical" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_automl_pipeline:tabular" + }, + "outputs": [], + "source": [ + "time_column = \"date\"\n", + "time_series_identifier_column = \"product_at_store\"\n", + "target_column = \"sales\"\n", + "\n", + "model = training_job.run(\n", + " dataset=dataset_time_series,\n", + " target_column=target_column,\n", + " time_column=time_column,\n", + " time_series_identifier_column=time_series_identifier_column,\n", + " available_at_forecast_columns=[time_column],\n", + " unavailable_at_forecast_columns=[target_column],\n", + " time_series_attribute_columns=[\n", + " \"product_type\",\n", + " \"product_category\",\n", + " \"store\",\n", + " \"product\",\n", + " ],\n", + " forecast_horizon=TIME_HORIZON,\n", + " data_granularity_unit=\"day\",\n", + " data_granularity_count=1,\n", + " model_display_name=\"hierarchical_sales_forecasting_model\",\n", + " weight_column=None,\n", + " hierarchy_group_columns=[\"product\"],\n", + " hierarchy_group_total_weight=10,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "source": [ + "## Review model evaluation scores\n", + "After your model has finished training, you can review its evaluation scores." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "evaluate_the_model:mbsdk" + }, + "outputs": [], + "source": [ + "# Get evaluations\n", + "model_evaluations = model.list_model_evaluations()\n", + "\n", + "model_evaluation = list(model_evaluations)[0]\n", + "print(model_evaluation)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "337625a4c33c" + }, + "source": [ + "## Send a batch prediction request\n", + "\n", + "Now you can make a batch prediction." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bff79eb475fa" + }, + "source": [ + "### Prepare the test dataset\n", + "\n", + "For forecasting, the test dataset needs to have context window rows which have information on the target column and subsequent time horizon rows where the target column is unknown. Construct these two sections and combine them into a single CSV file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cec4a813a6c4" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "# Store start and end dates for context and horizon\n", + "date_context_window_start = date_cutoff\n", + "date_context_window_end = date_cutoff + np.timedelta64(CONTEXT_WINDOW, \"D\")\n", + "time_horizon_end = date_context_window_end + np.timedelta64(TIME_HORIZON, \"D\")\n", + "\n", + "# Extract dataframes for context and horizon\n", + "df_test_context = df_test[\n", + " (df_test[\"date\"] >= date_context_window_start)\n", + " & (df_test[\"date\"] < date_context_window_end)\n", + "]\n", + "df_test_horizon = df_test[\n", + " (df_test[\"date\"] >= date_context_window_end) & (df_test[\"date\"] < time_horizon_end)\n", + "].copy()\n", + "\n", + "# Save a copy for validation of predictions\n", + "df_test_horizon_actual = df_test_horizon.copy()\n", + "\n", + "# Remove sales for horizon (i.e. future dates)\n", + "df_test_horizon[\"sales\"] = \"\"\n", + "\n", + "# Write test data to CSV\n", + "df_test = pd.concat([df_test_context, df_test_horizon])\n", + "df_test.to_csv(DATASET_TEST_FILENAME, index=False)\n", + "\n", + "# Save test dataset\n", + "DATASET_TEST_URI = f\"{BUCKET_URI}/{DATASET_TEST_FILENAME}\"\n", + "\n", + "# Upload to GCS bucket\n", + "! gsutil cp {DATASET_TEST_FILENAME} {DATASET_TEST_URI}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "69651b1d06da" + }, + "source": [ + "### Examine the context dataframe\n", + "\n", + "Note that the sales column is filled." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f002e35f78cb" + }, + "outputs": [], + "source": [ + "df_test_context.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fd04bb099daf" + }, + "source": [ + "### Examine the time horizon dataframe\n", + "\n", + "Note that the sales column is empty." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "da09515ce3dd" + }, + "outputs": [], + "source": [ + "df_test_horizon.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "93bc53cc960d" + }, + "source": [ + "### Create a results dataset\n", + "\n", + "Create a BigQuery dataset to store the prediction results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b6a0730cafb2" + }, + "outputs": [], + "source": [ + "from google.cloud import bigquery\n", + "\n", + "# Create client in default region\n", + "bigquery_client = bigquery.Client(\n", + " project=PROJECT_ID,\n", + " credentials=aiplatform.initializer.global_config.credentials,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9439d436c826" + }, + "outputs": [], + "source": [ + "def create_bigquery_dataset(name: str, region: str):\n", + " batch_predict_bq_output_uri_prefix = \"bq://{}.{}\".format(PROJECT_ID, name)\n", + "\n", + " bq_dataset = bigquery.Dataset(\"{}.{}\".format(PROJECT_ID, name))\n", + "\n", + " dataset_region = region\n", + " bq_dataset.location = dataset_region\n", + " bq_dataset = bigquery_client.create_dataset(bq_dataset)\n", + " print(\n", + " \"Created bigquery dataset {} in {}\".format(\n", + " batch_predict_bq_output_uri_prefix, dataset_region\n", + " )\n", + " )\n", + "\n", + " return batch_predict_bq_output_uri_prefix" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fb1fb03d6eae" + }, + "outputs": [], + "source": [ + "batch_predict_bq_output_uri_prefix = create_bigquery_dataset(\n", + " name=\"hierarchical_forecasting_unique\", region=REGION\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "36c070503d2f" + }, + "source": [ + "### Make the batch prediction request\n", + "\n", + "You can make a batch prediction by invoking the batch_predict() method, with the following parameters:\n", + "\n", + "- `job_display_name`: The human readable name for the batch prediction job.\n", + "- `gcs_source`: A list of one or more batch request input files.\n", + "- `bigquery_destination_prefix`: The BigQuery destiantion location for storing the batch prediction results.\n", + "- `instances_format`: The format for the input instances, either 'bigquery', 'csv' or 'jsonl'. Defaults to 'jsonl'.\n", + "- `predictions_format`: The format for the output predictions, either 'csv', 'jsonl' or 'bigquery'. Defaults to 'jsonl'.\n", + "- `machine_type`: The type of machine to use for training.\n", + "- `accelerator_type`: The hardware accelerator type.\n", + "- `accelerator_count`: The number of accelerators to attach to a worker replica.\n", + "- `sync`: If set to True, the call will block while waiting for the asynchronous batch job to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bbd40d78ea46" + }, + "outputs": [], + "source": [ + "batch_prediction_job = model.batch_predict(\n", + " job_display_name=\"hierarchical_forecasting_unique\",\n", + " gcs_source=DATASET_TEST_URI,\n", + " instances_format=\"csv\",\n", + " bigquery_destination_prefix=batch_predict_bq_output_uri_prefix,\n", + " predictions_format=\"bigquery\",\n", + " generate_explanation=True,\n", + " sync=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4fc95aae00b0" + }, + "source": [ + "### View the batch prediction results\n", + "\n", + "Use the BigQuery Python client to query the destination table and return results as a Pandas dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fafe1b0f654b" + }, + "outputs": [], + "source": [ + "# View the results as a dataframe\n", + "df_output = batch_prediction_job.iter_outputs(bq_max_results=1000).to_dataframe()\n", + "\n", + "# Convert the dates to the datetime64 datatype\n", + "df_output[\"date\"] = df_output[\"date\"].astype(\"datetime64[ns]\")\n", + "\n", + "# Extract the predicted sales and convert to floats\n", + "df_output[\"predicted_sales\"] = (\n", + " df_output[\"predicted_sales\"].apply(lambda x: x[\"value\"]).astype(float)\n", + ")\n", + "\n", + "df_output.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "305edda2bff8" + }, + "source": [ + "### Compare predictions vs ground truth\n", + "\n", + "Plot the predicted sales vs the ground truth" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "98679eff6973" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Create a shared dataframe to plot predictions vs ground truth\n", + "df_output[\"sales_comparison\"] = df_output[\"predicted_sales\"]\n", + "df_output[\"is_ground_truth\"] = False\n", + "df_test_horizon_actual[\"sales_comparison\"] = df_test_horizon_actual[\"sales\"]\n", + "df_test_horizon_actual[\"is_ground_truth\"] = True\n", + "df_prediction_comparison = pd.concat([df_output, df_test_horizon_actual])\n", + "\n", + "# Plot sales\n", + "fig = plt.gcf()\n", + "fig.set_size_inches(24, 12)\n", + "\n", + "sns.relplot(\n", + " data=df_prediction_comparison,\n", + " x=\"date\",\n", + " y=\"sales_comparison\",\n", + " hue=\"product_at_store\",\n", + " style=\"store\",\n", + " row=\"is_ground_truth\",\n", + " height=5,\n", + " aspect=4,\n", + " kind=\"line\",\n", + " ci=None,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup:mbsdk" + }, + "source": [ + "# Clean up\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:\n", + "\n", + "- Model\n", + "- AutoML Training Job\n", + "- Batch Job\n", + "- Cloud Storage Bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ec0171e4b4e8" + }, + "outputs": [], + "source": [ + "from google.cloud import bigquery\n", + "\n", + "# Create client in default region\n", + "bq_client = bigquery.Client(\n", + " project=PROJECT_ID,\n", + " credentials=aiplatform.initializer.global_config.credentials,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3be2c2bf9146" + }, + "outputs": [], + "source": [ + "# Delete BigQuery datasets\n", + "bq_client.delete_dataset(\n", + " f\"{PROJECT_ID}.hierarchical_forecasting_unique\",\n", + " delete_contents=True,\n", + " not_found_ok=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cleanup:mbsdk" + }, + "outputs": [], + "source": [ + "# Delete Vertex AI resources\n", + "dataset_time_series.delete()\n", + "model.delete()\n", + "training_job.delete()\n", + "batch_prediction_job.delete()" + ] + } + ], + "metadata": { + "colab": { + "name": "sdk_automl_forecasting_hierarchical_batch.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/automl/sdk_automl_image_object_detection_batch.ipynb b/notebooks/official/automl/sdk_automl_image_object_detection_batch.ipynb index 541d763ac..b8e63e1c2 100644 --- a/notebooks/official/automl/sdk_automl_image_object_detection_batch.ipynb +++ b/notebooks/official/automl/sdk_automl_image_object_detection_batch.ipynb @@ -45,8 +45,8 @@ " \n", "
\n", - " \n", - " \"Vertex\n", + " \n", + " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to create tabular regression models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to create tabular regression models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Regression for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { @@ -74,7 +76,7 @@ "\n", "In this tutorial, you learn how to create an AutoML tabular regression model and deploy it for batch prediction using the Vertex AI SDK for Python. You can alternatively create and deploy models using the `gcloud` command-line tool or batch using the Cloud Console.\n", "\n", - "This tutorial uses the following Google Cloud ML services and resources:\n", + "This tutorial uses the following Google Cloud ML services:\n", "\n", "- Vertex AI Datasets (Tabular)\n", "- Vertex AI Training (AutoML Tabular Training)\n", diff --git a/notebooks/official/automl/sdk_automl_tabular_regression_online_bq.ipynb b/notebooks/official/automl/sdk_automl_tabular_regression_online_bq.ipynb index 42b4e5f02..0dfe1ae8d 100644 --- a/notebooks/official/automl/sdk_automl_tabular_regression_online_bq.ipynb +++ b/notebooks/official/automl/sdk_automl_tabular_regression_online_bq.ipynb @@ -33,13 +33,13 @@ "\n", "\n", " \n", " \n", @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to create tabular regression models and do online prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to create tabular regression models and do online prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Regression for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { @@ -116,39 +118,6 @@ "to generate a cost estimate based on your projected usage." ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "setup_local" - }, - "source": [ - "### Set up your local development environment\n", - "\n", - "If you are using Colab or Google Cloud Notebooks, your environment already meets all the requirements to run this notebook. You can skip this step.\n", - "\n", - "Otherwise, make sure your environment meets this notebook's requirements. You need the following:\n", - "\n", - "- The Cloud Storage SDK\n", - "- Git\n", - "- Python 3\n", - "- virtualenv\n", - "- Jupyter notebook running in a virtual environment with Python 3\n", - "\n", - "The Cloud Storage guide to [Setting up a Python development environment](https://cloud.google.com/python/setup) and the [Jupyter installation guide](https://jupyter.org/install) provide detailed instructions for meeting these requirements. The following steps provide a condensed set of instructions:\n", - "\n", - "1. [Install and initialize the SDK](https://cloud.google.com/sdk/docs/).\n", - "\n", - "2. [Install Python 3](https://cloud.google.com/python/setup#installing_python).\n", - "\n", - "3. [Install virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv) and create a virtual environment that uses Python 3. Activate the virtual environment.\n", - "\n", - "4. To install Jupyter, run `pip3 install jupyter` on the command-line in a terminal shell.\n", - "\n", - "5. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", - "\n", - "6. Open this notebook in the Jupyter Notebook Dashboard.\n" - ] - }, { "cell_type": "markdown", "metadata": { @@ -168,35 +137,8 @@ }, "outputs": [], "source": [ - "import os\n", - "\n", - "# Google Cloud Notebook\n", - "if os.path.exists(\"/opt/deeplearning/metadata/env_version\"):\n", - " USER_FLAG = \"--user\"\n", - "else:\n", - " USER_FLAG = \"\"\n", - "\n", - "! pip3 install --upgrade google-cloud-aiplatform $USER_FLAG" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "install_storage" - }, - "source": [ - "Install the latest GA version of *google-cloud-storage* library as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "install_storage" - }, - "outputs": [], - "source": [ - "! pip3 install -U google-cloud-storage $USER_FLAG" + "! pip3 install --upgrade google-cloud-aiplatform \\\n", + " google-cloud-storage" ] }, { @@ -205,9 +147,7 @@ "id": "restart" }, "source": [ - "### Restart the kernel\n", - "\n", - "Once you've installed the additional packages, you need to restart the notebook kernel so it can find the packages." + "### Colab only: Uncomment the following cell to restart the kernel" ] }, { @@ -218,14 +158,11 @@ }, "outputs": [], "source": [ - "import os\n", + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\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)" + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" ] }, { @@ -242,20 +179,11 @@ "\n", "### Set up your Google Cloud project\n", "\n", - "**The following steps are required, regardless of your notebook environment.**\n", + "**If you dont know your project ID,** try the following\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=ml.googleapis.com,compute_component,storage-component.googleapis.com)\n", - "\n", - "4. If you are running this notebook locally, you will 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 `$`." + "- 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)\n" ] }, { @@ -266,33 +194,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}" ] }, { @@ -303,16 +208,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)" ] }, { @@ -326,30 +222,6 @@ "REGION = \"us-central1\" # @param {type: \"string\"}" ] }, - { - "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\")" - ] - }, { "cell_type": "markdown", "metadata": { @@ -358,53 +230,64 @@ "source": [ "### Authenticate your Google Cloud account\n", "\n", - "**If you are using Google Cloud Notebooks**, your environment is already authenticated. Skip this step.\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below.\n", "\n", - "**If you are using Colab**, run the cell below and follow the instructions when prompted to authenticate your account via oAuth.\n", + "**1. Vertex AI workbench** \n", + "- Do nothing as you are already authenticated.\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." + "**2. Local JupyterLab Instance, uncomment and run:**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "gcp_authenticate" + "id": "457c78b08293" }, "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 Google Cloud Notebook, then don't execute this code\n", - "if not os.path.exists(\"/opt/deeplearning/metadata/env_version\"):\n", - " if \"google.colab\" in sys.modules:\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 ''" + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d3e571ce6c56" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "984a0526fb68" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "764c0ac706e1" + }, + "source": [ + "**4. Service account or other**\n", + "- See all the authentication options here: [Google Cloud Platform Jupyter Notebook Authentication Guide](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/notebook_authentication_guide.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "276cfd2c6167" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "Create a storage bucket to store intermediate artifacts such as datasets" ] }, { @@ -415,20 +298,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_URI == \"\" or BUCKET_URI is None or BUCKET_URI == \"gs://[your-bucket-name]\":\n", - " BUCKET_URI = \"gs://\" + PROJECT_ID + \"aip-\" + TIMESTAMP" + "BUCKET_URI = \"gs://test-bucket-unique\" # @param {type:\"string\"}" ] }, { @@ -451,35 +321,12 @@ "! 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": { "id": "setup_vars" }, "source": [ - "### Set up variables\n", - "\n", - "Next, set up some variables used throughout the tutorial.\n", "### Import libraries and define constants" ] }, @@ -491,7 +338,11 @@ }, "outputs": [], "source": [ - "import google.cloud.aiplatform as aiplatform" + "import os\n", + "\n", + "import google.cloud.aiplatform as aiplatform\n", + "\n", + "display_name = \"gsod_unique\"" ] }, { @@ -574,7 +425,7 @@ "outputs": [], "source": [ "dataset = aiplatform.TabularDataset.create(\n", - " display_name=\"NOAA historical weather data\" + \"_\" + TIMESTAMP,\n", + " display_name=\"NOAA historical weather data_unique\",\n", " bq_source=[IMPORT_FILE],\n", ")\n", "\n", @@ -645,7 +496,7 @@ "outputs": [], "source": [ "job = aiplatform.AutoMLTabularTrainingJob(\n", - " display_name=\"gsod_\" + TIMESTAMP,\n", + " display_name=display_name,\n", " optimization_prediction_type=\"regression\",\n", " optimization_objective=\"minimize-rmse\",\n", " column_transformations=TRANSFORMATIONS,\n", @@ -688,7 +539,7 @@ "source": [ "model = job.run(\n", " dataset=dataset,\n", - " model_display_name=\"gsod_\" + TIMESTAMP,\n", + " model_display_name=display_name,\n", " training_fraction_split=0.6,\n", " validation_fraction_split=0.2,\n", " test_fraction_split=0.2,\n", @@ -705,33 +556,22 @@ }, "source": [ "## Review model evaluation scores\n", - "After your model has finished training, you can review the evaluation scores for it.\n", - "\n", - "First, you need to get a reference to the new model. As with datasets, you can either use the reference to the model variable you created when you deployed the model or you can list all of the models in your project." + "After your model training has finished, you can review the evaluation scores for it using the list_model_evaluations() method." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "id": "evaluate_the_model:mbsdk" + "id": "4f674dcea72c" }, "outputs": [], "source": [ - "# Get model resource ID\n", - "models = aiplatform.Model.list(filter=\"display_name=gsod_\" + TIMESTAMP)\n", - "\n", - "# Get a reference to the Model Service client\n", - "client_options = {\"api_endpoint\": f\"{REGION}-aiplatform.googleapis.com\"}\n", - "model_service_client = aiplatform.gapic.ModelServiceClient(\n", - " client_options=client_options\n", - ")\n", - "\n", - "model_evaluations = model_service_client.list_model_evaluations(\n", - " parent=models[0].resource_name\n", - ")\n", - "model_evaluation = list(model_evaluations)[0]\n", - "print(model_evaluation)" + "model_evaluations = model.list_model_evaluations()\n", + "if len(model_evaluations) > 0:\n", + " eval_res = model_evaluations[0].to_dict()\n", + " evaluation_metrics = eval_res[\"metrics\"]\n", + "print(evaluation_metrics)" ] }, { @@ -881,23 +721,22 @@ }, "outputs": [], "source": [ - "delete_all = True\n", + "# Delete the dataset using the Vertex dataset object\n", + "dataset.delete()\n", "\n", - "if delete_all:\n", - " # Delete the dataset using the Vertex dataset object\n", - " dataset.delete()\n", + "# Delete the model using the Vertex model object\n", + "model.delete()\n", "\n", - " # Delete the model using the Vertex model object\n", - " model.delete()\n", + "# Delete the endpoint using the Vertex endpoint object\n", + "endpoint.delete()\n", "\n", - " # Delete the endpoint using the Vertex endpoint object\n", - " endpoint.delete()\n", + "# Delete the AutoML trainig job\n", + "job.delete()\n", "\n", - " # Delete the AutoML trainig job\n", - " job.delete()\n", + "delete_bucket = False\n", "\n", - " if os.getenv(\"IS_TESTING\"):\n", - " ! gsutil rm -r $BUCKET_URI" + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -r $BUCKET_URI" ] } ], diff --git a/notebooks/official/automl/sdk_automl_text_entity_extraction_online.ipynb b/notebooks/official/automl/sdk_automl_text_entity_extraction_online.ipynb index 4492d2243..34362c2b5 100644 --- a/notebooks/official/automl/sdk_automl_text_entity_extraction_online.ipynb +++ b/notebooks/official/automl/sdk_automl_text_entity_extraction_online.ipynb @@ -44,8 +44,8 @@ " \n", " \n", " \n", @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to create text entity extraction models and do online prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to create text entity extraction models and do online prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Entity extraction for text data](https://cloud.google.com/vertex-ai/docs/training-overview#entity_extraction_for_text)." ] }, { @@ -73,7 +75,12 @@ "source": [ "### Objective\n", "\n", - "In this tutorial, you learn how to create an AutoML text entity extraction model and deploy for online prediction from a Python script using the Vertex SDK. You can alternatively create and deploy models using the `gcloud` command-line tool or online using the Cloud Console.\n", + "In this tutorial, you learn how to create an AutoML text entity extraction model and deploy for online prediction from a Python script using the Vertex AI SDK. You can alternatively create and deploy models using the `gcloud` command-line tool or online using the Cloud Console.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML Training`\n", + "- `Vertex AI Datasets`\n", "\n", "The steps performed include:\n", "\n", diff --git a/notebooks/official/automl/sdk_automl_text_sentiment_analysis_online.ipynb b/notebooks/official/automl/sdk_automl_text_sentiment_analysis_online.ipynb index 1b03b8f1f..3df0f2c0d 100644 --- a/notebooks/official/automl/sdk_automl_text_sentiment_analysis_online.ipynb +++ b/notebooks/official/automl/sdk_automl_text_sentiment_analysis_online.ipynb @@ -44,7 +44,7 @@ " \n", " \n", " \n", " \n", " \n", @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to create video classification models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK to create video classification models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Classification for video data](https://cloud.google.com/vertex-ai/docs/training-overview#classification_for_videos)." ] }, { diff --git a/notebooks/official/automl/sdk_automl_video_object_tracking_batch.ipynb b/notebooks/official/automl/sdk_automl_video_object_tracking_batch.ipynb index 359514eb2..9dc5c69b1 100644 --- a/notebooks/official/automl/sdk_automl_video_object_tracking_batch.ipynb +++ b/notebooks/official/automl/sdk_automl_video_object_tracking_batch.ipynb @@ -44,7 +44,7 @@ " \n", " \n", " \n", " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", - " \"GitHub\n", + " \n", + " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", - " \"Vertex\n", + " \n", + " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy an [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) text sentiment analysis model and get online predictions from it." + "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy an [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) text sentiment analysis model and get online predictions from it.\n", + "\n", + "Learn more about [Sentiment analysis for text data](https://cloud.google.com/vertex-ai/docs/training-overview#sentiment_analysis_for_text)." ] }, { diff --git a/notebooks/official/automl/sdk_automl_video_action_recognition_batch.ipynb b/notebooks/official/automl/sdk_automl_video_action_recognition_batch.ipynb index 36c269700..43001cbff 100644 --- a/notebooks/official/automl/sdk_automl_video_action_recognition_batch.ipynb +++ b/notebooks/official/automl/sdk_automl_video_action_recognition_batch.ipynb @@ -45,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -63,7 +63,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to create video action recognition models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK to create video action recognition models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Action recognition for video data](https://cloud.google.com/vertex-ai/docs/training-overview#action_recognition_for_videos)." ] }, { diff --git a/notebooks/official/automl/sdk_automl_video_classification_batch.ipynb b/notebooks/official/automl/sdk_automl_video_classification_batch.ipynb index 388cc9e0a..01ba482ff 100644 --- a/notebooks/official/automl/sdk_automl_video_classification_batch.ipynb +++ b/notebooks/official/automl/sdk_automl_video_classification_batch.ipynb @@ -44,8 +44,8 @@ " \n", " \n", - " \n", - " \"Vertex \n", + " \n", + " \"Vertex \n", "Open in Vertex AI Workbench \n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to create video object tracking models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to create video object tracking models and do batch prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Object tracking for video data](https://cloud.google.com/vertex-ai/docs/training-overview#object_tracking_for_videos)." ] }, { diff --git a/notebooks/official/bigquery_ml/README.md b/notebooks/official/bigquery_ml/README.md index f09a8207b..ee79973c5 100644 --- a/notebooks/official/bigquery_ml/README.md +++ b/notebooks/official/bigquery_ml/README.md @@ -1,6 +1,7 @@ [Online prediction with BigQuery ML](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/bigquery_ml/bqml-online-prediction.ipynb) +``` Learn how to train and deploy a churn prediction model for real-time inference, with the data in BigQuery and model trained using BigQuery ML, registered to Vertex AI Model Registry, and deployed to an endpoint on Vertex AI for online predictions. The steps performed include: @@ -12,3 +13,27 @@ The steps performed include: - Deploying the model to an endpoint on Vertex AI - Making sample online predictions to the model endpoint +``` + +   Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml). + + +[Get started with BigQuery ML Training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/bigquery_ml/get_started_with_bqml_training.ipynb) + +``` +Learn how to use `BigQueryML` for training with `Vertex AI`. + +The steps performed include: + +- Create a local BigQuery table in your project +- Train a BigQuery ML model +- Evaluate the BigQuery ML model +- Export the BigQuery ML model as a cloud model +- Upload the exported model as a `Vertex AI Model` resource +- Hyperparameter tune a BigQuery ML model with `Vertex AI Vizier` +- Automatically register a BigQuery ML model to `Vertex AI Model Registry` + +``` + +   Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml). + diff --git a/notebooks/official/bigquery_ml/bqml-online-prediction.ipynb b/notebooks/official/bigquery_ml/bqml-online-prediction.ipynb index 3f251aa2e..ff6adaa25 100644 --- a/notebooks/official/bigquery_ml/bqml-online-prediction.ipynb +++ b/notebooks/official/bigquery_ml/bqml-online-prediction.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook is aimed at data analysts and data scientists who have data in BigQuery, want to train a model using BigQuery ML, register the model to Vertex AI Model Registry, and deploy it to an endpoint for real-time prediction. " + "This notebook is aimed at data analysts and data scientists who have data in BigQuery, want to train a model using BigQuery ML, register the model to Vertex AI Model Registry, and deploy it to an endpoint for real-time prediction. \n", + "\n", + "Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml)." ] }, { diff --git a/notebooks/official/bigquery_ml/get_started_with_bqml_training.ipynb b/notebooks/official/bigquery_ml/get_started_with_bqml_training.ipynb new file mode 100644 index 000000000..1ad4957c4 --- /dev/null +++ b/notebooks/official/bigquery_ml/get_started_with_bqml_training.ipynb @@ -0,0 +1,1419 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Get started with BigQuery ML Training\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use Vertex AI in production. This tutorial covers get started with BigQuery ML training.\n", + "\n", + "Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage2,get_started_bqml_training" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `BigQueryML` for training with `Vertex AI`.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `BigQueryML Training`\n", + "- `Vertex AI Model resource`\n", + "- `Vertex AI Vizier`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a local BigQuery table in your project\n", + "- Train a BigQuery ML model\n", + "- Evaluate the BigQuery ML model\n", + "- Export the BigQuery ML model as a cloud model\n", + "- Upload the exported model as a `Vertex AI Model` resource\n", + "- Hyperparameter tune a BigQuery ML model with `Vertex AI Vizier`\n", + "- Automatically register a BigQuery ML model to `Vertex AI Model Registry`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:penguins,lcn,bq" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the Penguins dataset from [BigQuery public datasets](https://cloud.google.com/bigquery/public-data). This version of the dataset is used to predict the species of penguins from the available features like culmen-length, flipper-depth etc." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81c777b8ad32" + }, + "source": [ + "### Costs\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "- Vertex AI\n", + "- Cloud Storage\n", + "- BigQuery\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage pricing](https://cloud.google.com/storage/pricing) and [BigQuery pricing](https://cloud.google.com/bigquery/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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the following packages for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_mlops" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\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", + "# Install the packages\n", + "! pip3 install --upgrade pyarrow \\\n", + " google-cloud-aiplatform \\\n", + " google-cloud-bigquery \\\n", + " google-cloud-bigquery-storage \\\n", + " db-dtypes $USER_FLAG -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "project_id" + }, + "source": [ + "## Before you begin\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", + "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, BigQuery, Compute Engine and Cloud Storage APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,bigquery,compute_component,storage_component).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "56d591439df1" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "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\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3bd8c0d0469" + }, + "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", + "1. **Click Create service account**.\n", + "\n", + "2. In the **Service account name** field, enter a name, and click **Create**.\n", + "\n", + "3. In the **Grant this service account access to project** section, click the Role drop-down list. Type \"Vertex AI\" into the filter box, and select **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "4. Click Create. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "5. Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e0953a00668e" + }, + "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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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 = f\"gs://{BUCKET_NAME}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "set_service_account" + }, + "source": [ + "#### Service Account\n", + "\n", + "You use a service account to create Vertex AI Pipeline jobs. If you do not want to use your project's Compute Engine service account, set `SERVICE_ACCOUNT` to another service account ID." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_service_account" + }, + "outputs": [], + "source": [ + "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "autoset_service_account" + }, + "outputs": [], + "source": [ + "if (\n", + " SERVICE_ACCOUNT == \"\"\n", + " or SERVICE_ACCOUNT is None\n", + " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", + "):\n", + " # Get your service account from gcloud\n", + " if not IS_COLAB:\n", + " shell_output = !gcloud auth list 2>/dev/null\n", + " SERVICE_ACCOUNT = shell_output[2].replace(\"*\", \"\").strip()\n", + "\n", + " if IS_COLAB:\n", + " shell_output = ! gcloud projects describe $PROJECT_ID\n", + " project_number = shell_output[-1].split(\":\")[1].strip().replace(\"'\", \"\")\n", + " SERVICE_ACCOUNT = f\"{project_number}-compute@developer.gserviceaccount.com\"\n", + "\n", + " print(\"Service Account:\", SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "source": [ + "### Import libraries and define constants" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_aip:mbsdk" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "from google.cloud import bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk" + }, + "source": [ + "### Initialize Vertex AI and BigQuery SDKs for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "Create the BigQuery client." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "accelerators:prediction,mbsdk" + }, + "source": [ + "### Set hardware accelerators\n", + "\n", + "You can set hardware accelerators for prediction.\n", + "\n", + "Set the variable `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Telsa K80 GPUs allocated to each VM, you would specify:\n", + "\n", + " (aiplatform.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "Otherwise specify `(None, None)` to use a container image to run on a CPU.\n", + "\n", + "Learn more [here](https://cloud.google.com/vertex-ai/docs/general/locations#accelerators) hardware accelerator support for your region." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "accelerators:prediction,mbsdk" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "if os.getenv(\"IS_TESTING_DEPLOY_GPU\"):\n", + " DEPLOY_GPU, DEPLOY_NGPU = (\n", + " aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80,\n", + " int(os.getenv(\"IS_TESTING_DEPLOY_GPU\")),\n", + " )\n", + "else:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:prediction" + }, + "source": [ + "### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for prediction.\n", + "\n", + "- Set the variable `TF` to the TensorFlow version of the container image. For example, `2-1` would be version 2.1, and `1-15` would be version 1.15. The following list shows some of the pre-built images available:\n", + "\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "container:prediction" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TF\"):\n", + " TF = os.getenv(\"IS_TESTING_TF\")\n", + "else:\n", + " TF = \"2.5\".replace(\".\", \"-\")\n", + "\n", + "if TF[0] == \"2\":\n", + " if DEPLOY_GPU:\n", + " DEPLOY_VERSION = \"tf2-gpu.{}\".format(TF)\n", + " else:\n", + " DEPLOY_VERSION = \"tf2-cpu.{}\".format(TF)\n", + "else:\n", + " if DEPLOY_GPU:\n", + " DEPLOY_VERSION = \"tf-gpu.{}\".format(TF)\n", + " else:\n", + " DEPLOY_VERSION = \"tf-cpu.{}\".format(TF)\n", + "\n", + "DEPLOY_IMAGE = \"{}-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(\n", + " REGION.split(\"-\")[0], DEPLOY_VERSION\n", + ")\n", + "\n", + "print(\"Deployment:\", DEPLOY_IMAGE, DEPLOY_GPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:prediction" + }, + "source": [ + "### Set machine type\n", + "\n", + "Next, set the machine type to use for prediction.\n", + "\n", + "- Set the variable `DEPLOY_COMPUTE` to configure the compute resources for the VM which is used for prediction.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU.\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "machine:prediction" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_DEPLOY_MACHINE\"):\n", + " MACHINE_TYPE = os.getenv(\"IS_TESTING_DEPLOY_MACHINE\")\n", + "else:\n", + " MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "DEPLOY_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Deploy machine type\", DEPLOY_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_intro" + }, + "source": [ + "## BigQuery ML introduction\n", + "\n", + "BigQuery ML (BQML) provides the capability to train ML tabular models, such as classification and regression, in BigQuery using SQL syntax.\n", + "\n", + "Learn more about [BigQuery ML documentation](https://cloud.google.com/bigquery-ml/docs)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:penguins,bq,lcn" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = \"bq://bigquery-public-data.ml_datasets.penguins\"\n", + "BQ_TABLE = \"bigquery-public-data.ml_datasets.penguins\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_create_dataset" + }, + "source": [ + "### Create BQ dataset resource\n", + "\n", + "First, you create an empty dataset resource in your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bqml_create_dataset" + }, + "outputs": [], + "source": [ + "BQ_DATASET_NAME = \"penguins\"\n", + "DATASET_QUERY = f\"\"\"CREATE SCHEMA {BQ_DATASET_NAME}\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(DATASET_QUERY)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_create_model" + }, + "source": [ + "### Train BigQuery ML model\n", + "\n", + "Next, you create and train a BigQuery ML tabular classification model from the public dataset penguins and store the model in your project using the `CREATE MODEL` statement. The model configuration is specified in the `OPTIONS` statement as follows:\n", + "\n", + "- `model_type`: The type and archictecture of tabular model to train, e.g., DNN classification.\n", + "- `labels`: The column which are the labels.\n", + "\n", + "Learn more about [The CREATE MODEL statement](https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-create)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bqml_create_model" + }, + "outputs": [], + "source": [ + "MODEL_NAME = \"penguins\"\n", + "MODEL_QUERY = f\"\"\"\n", + "CREATE OR REPLACE MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "OPTIONS(\n", + " model_type='DNN_CLASSIFIER',\n", + " labels = ['species']\n", + " )\n", + "AS\n", + "SELECT *\n", + "FROM `{BQ_TABLE}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)\n", + "print(job.errors, job.state)\n", + "\n", + "while job.running():\n", + " from time import sleep\n", + "\n", + " sleep(30)\n", + " print(\"Running ...\")\n", + "print(job.errors, job.state)\n", + "\n", + "tblname = job.ddl_target_table\n", + "tblname = \"{}.{}\".format(tblname.dataset_id, tblname.table_id)\n", + "print(\"{} created in {}\".format(tblname, job.ended - job.started))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_eval_model" + }, + "source": [ + "### Evaluate the trained BigQuery ML model\n", + "\n", + "Next, retrieve the model evaluation for the trained BigQuery ML model.\n", + "\n", + "Learn more about [The ML.EVALUATE function](https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-evaluate)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bqml_eval_model" + }, + "outputs": [], + "source": [ + "EVAL_QUERY = f\"\"\"\n", + "SELECT *\n", + "FROM\n", + " ML.EVALUATE(MODEL {BQ_DATASET_NAME}.{MODEL_NAME})\n", + "ORDER BY roc_auc desc\n", + "LIMIT 1\"\"\"\n", + "\n", + "job = bqclient.query(EVAL_QUERY)\n", + "results = job.result().to_dataframe()\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_export_model" + }, + "source": [ + "### Export the model from BigQuery ML\n", + "\n", + "The model you trained in BigQuery ML is a TensorFlow model. Next, you export the TensorFlow model artifacts in TF.SavedModel format." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bqml_export_model" + }, + "outputs": [], + "source": [ + "param = f\"{PROJECT_ID}:{BQ_DATASET_NAME}.{MODEL_NAME} {BUCKET_URI}/{MODEL_NAME}\"\n", + "! bq extract -m $param\n", + "\n", + "MODEL_DIR = f\"{BUCKET_URI}/{BQ_DATASET_NAME}\"\n", + "! gsutil ls $MODEL_DIR" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "upload_bqml_model" + }, + "source": [ + "## Upload the BigQuery ML model to a Vertex AI Model resource\n", + "\n", + "Finally, now that you have the BigQuery ML model exported, you upload the model artifacts to Vertex AI Model resource, in the same way as if you were uploading a custom trained model.\n", + "\n", + "Below is a partial list of mapping BigQuery ML model types to their corresponding exported model format:\n", + "\n", + "'LINEAR_REG'
\n", + "'LOGISTIC_REG' --> TensorFlow SavedFormat\n", + "\n", + "'AUTOML_CLASSIFIER'
\n", + "'AUTOML_REGRESSOR' --> TensorFlow SavedFormat\n", + "\n", + "'BOOSTED_TREE_CLASSIFIER'
\n", + "'BOOSTED_TREE_REGRESSOR' --> XGBoost format\n", + "\n", + "'DNN_CLASSIFIER'
\n", + "'DNN_REGRESSOR'
\n", + "'DNN_LINEAR_COMBINED_CLASSIFIER'
\n", + "'DNN_LINEAR_COMBINED_REGRESSOR' --> TensorFlow Estimator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "upload_bqml_model" + }, + "outputs": [], + "source": [ + "model = aiplatform.Model.upload(\n", + " display_name=\"penguins_\" + TIMESTAMP,\n", + " artifact_uri=MODEL_DIR,\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + " sync=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "deploy_model:mbsdk,all" + }, + "source": [ + "## Deploy the model\n", + "\n", + "Next, deploy your model for online prediction. To deploy the model, you invoke the `deploy` method, with the following parameters:\n", + "\n", + "- `deployed_model_display_name`: A human readable name for the deployed model.\n", + "- `traffic_split`: Percent of traffic at the endpoint that goes to this model, which is specified as a dictionary of one or more key/value pairs.\n", + "If only one model, then specify as { \"0\": 100 }, where \"0\" refers to this model being uploaded and 100 means 100% of the traffic.\n", + "If there are existing models on the endpoint, for which the traffic needs to be split, then use model_id to specify as { \"0\": percent, model_id: percent, ... }, where model_id is the model id of an existing model to the deployed endpoint. The percents must add up to 100.\n", + "- `machine_type`: The type of machine to use for training.\n", + "- `accelerator_type`: The hardware accelerator type.\n", + "- `accelerator_count`: The number of accelerators to attach to a worker replica.\n", + "- `starting_replica_count`: The number of compute instances to initially provision.\n", + "- `max_replica_count`: The maximum number of compute instances to scale to. In this tutorial, only one instance is provisioned." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "deploy_model:mbsdk,all" + }, + "outputs": [], + "source": [ + "DEPLOYED_NAME = \"penguins-\" + TIMESTAMP\n", + "\n", + "TRAFFIC_SPLIT = {\"0\": 100}\n", + "\n", + "MIN_NODES = 1\n", + "MAX_NODES = 1\n", + "\n", + "if DEPLOY_GPU:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=DEPLOYED_NAME,\n", + " traffic_split=TRAFFIC_SPLIT,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " accelerator_type=DEPLOY_GPU.name,\n", + " accelerator_count=DEPLOY_NGPU,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " )\n", + "else:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=DEPLOYED_NAME,\n", + " traffic_split=TRAFFIC_SPLIT,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "source": [ + "#### Undeploy the model\n", + "\n", + "When you are done doing predictions, you undeploy the model from the `Endpoint` resouce. This deprovisions all compute resources and ends billing for the deployed model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "model_delete:mbsdk" + }, + "source": [ + "#### Delete the `Vertex AI Model` resource\n", + "\n", + "The method 'delete()' deletes the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "model_delete:mbsdk" + }, + "outputs": [], + "source": [ + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7890ae6f6410" + }, + "source": [ + "### Delete the `BigQuery ML` model\n", + "\n", + "Next, delete the `BigQuery ML` instance of the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f0b6163e70c0" + }, + "outputs": [], + "source": [ + "MODEL_QUERY = f\"\"\"\n", + "DROP MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_create_model:vizier" + }, + "source": [ + "### Hyperparameter Tune and train a BigQuery ML model\n", + "\n", + "Next, you train a BigQuery ML tabular classification model with hyperparameter tuning using the `Vertex AI Vizier` service. The hyperparameter settings are specified in the `OPTIONS` statement as follows:\n", + "\n", + "- `HPARAM_TUNING_ALGORITHM`: The algorithm for selecting the next trial parameters.\n", + "- `num_trials`: The number of trials.\n", + "- `max_parallel_trials`: The number of trials to do in parallel.\n", + "\n", + "Learn more about [Hyperparameter tuning for CREATE MODEL statements](https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-hyperparameter-tuning)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bqml_create_model:vizier" + }, + "outputs": [], + "source": [ + "MODEL_NAME = \"penguins\"\n", + "MODEL_QUERY = f\"\"\"\n", + "CREATE OR REPLACE MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "OPTIONS(\n", + " model_type='DNN_CLASSIFIER',\n", + " labels = ['species'],\n", + " num_trials=10,\n", + " max_parallel_trials=2,\n", + " HPARAM_TUNING_ALGORITHM = 'VIZIER_DEFAULT'\n", + " )\n", + "AS\n", + "SELECT *\n", + "FROM `{BQ_TABLE}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)\n", + "print(job.errors, job.state)\n", + "\n", + "while job.running():\n", + " from time import sleep\n", + "\n", + " sleep(30)\n", + " print(\"Running ...\")\n", + "print(job.errors, job.state)\n", + "\n", + "tblname = job.ddl_target_table\n", + "tblname = \"{}.{}\".format(tblname.dataset_id, tblname.table_id)\n", + "print(\"{} created in {}\".format(tblname, job.ended - job.started))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_eval_model" + }, + "source": [ + "### Evaluate the BigQuery ML trained model\n", + "\n", + "Next, retrieve the model evaluation results for the trained BigQuery ML model.\n", + "\n", + "Learn more about [The ML.EVALUATE function](https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-evaluate)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bqml_eval_model" + }, + "outputs": [], + "source": [ + "EVAL_QUERY = f\"\"\"\n", + "SELECT *\n", + "FROM\n", + " ML.EVALUATE(MODEL {BQ_DATASET_NAME}.{MODEL_NAME})\n", + "ORDER BY roc_auc desc\n", + "LIMIT 1\"\"\"\n", + "\n", + "job = bqclient.query(EVAL_QUERY)\n", + "results = job.result().to_dataframe()\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3f3cee1236b1" + }, + "source": [ + "### Delete the `BigQuery ML` model\n", + "\n", + "Next, delete the `BigQuery ML` instance of the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "957b7d841502" + }, + "outputs": [], + "source": [ + "MODEL_QUERY = f\"\"\"\n", + "DROP MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bqml_create_model:xai" + }, + "source": [ + "### Train a BigQuery ML model with Explainability\n", + "\n", + "Next, you train the same BigQuery ML model, but this time you enable Vertex AI Explainability on the model predictions by adding the option:\n", + "\n", + "- `ENABLE_GLOBAL_EXPLAIN`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bqml_create_model:xai" + }, + "outputs": [], + "source": [ + "MODEL_NAME = \"penguins\"\n", + "MODEL_QUERY = f\"\"\"\n", + "CREATE OR REPLACE MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "OPTIONS(\n", + " model_type='DNN_CLASSIFIER',\n", + " labels = ['species'],\n", + " ENABLE_GLOBAL_EXPLAIN = True\n", + " )\n", + "AS\n", + "SELECT *\n", + "FROM `{BQ_TABLE}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)\n", + "print(job.errors, job.state)\n", + "\n", + "while job.running():\n", + " from time import sleep\n", + "\n", + " sleep(30)\n", + " print(\"Running ...\")\n", + "print(job.errors, job.state)\n", + "\n", + "tblname = job.ddl_target_table\n", + "tblname = \"{}.{}\".format(tblname.dataset_id, tblname.table_id)\n", + "print(\"{} created in {}\".format(tblname, job.ended - job.started))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4def8aaf3398" + }, + "source": [ + "### Delete the `BigQuery ML` model\n", + "\n", + "Next, delete the `BigQuery ML` instance of the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ff5b32618018" + }, + "outputs": [], + "source": [ + "MODEL_QUERY = f\"\"\"\n", + "DROP MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2b4498ca6fea" + }, + "source": [ + "## Model Registry\n", + "\n", + "Alternatively, you can implicitly upload your BigQuery ML model as a `Vertex AI Model` resource with exporting and importing the model artifacts. In this method, you add additional options when training the model that tells BigQuery ML to automatically upload and register the trained model as a `Model` resource.\n", + "\n", + "### Setting permissions to automatically register the model\n", + "\n", + "You need to set some additional IAM permissions for BigQuery ML to automatically upload and register the model after training. Depending on your service account, the setting of the permissions below may fail. In this case, we recommend executing the permissions in a Cloud Shell.\n", + "\n", + "Learn more about [Setting permissions for Model Registry](https://cloud.google.com/bigquery-ml/docs/managing-models-vertex)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "29229f72d13d" + }, + "outputs": [], + "source": [ + "! gcloud projects add-iam-policy-binding $PROJECT_ID \\\n", + " --member=serviceAccount:$SERVICE_ACCOUNT --role=roles/aiplatform.admin --condition=None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6c390ee7c11a" + }, + "source": [ + "### Training and registering the model\n", + "\n", + "Next, you train the model and automatically register the model to the `Vertex AI Model Registry`, by adding the following parameters as options:\n", + "\n", + "- `model_registry`: Set to \"vertex_ai\" to indicate automatic registation to `Vertex AI Model Registry`.\n", + "- `vertex_ai_model_id`: The human readable display name for the registered model.\n", + "- `vertex_ai_model_version_aliases`: Alternate names for the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "57db464f4c42" + }, + "outputs": [], + "source": [ + "MODEL_NAME = \"penguins\"\n", + "MODEL_QUERY = f\"\"\"\n", + "CREATE OR REPLACE MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "OPTIONS(\n", + " model_type='DNN_CLASSIFIER',\n", + " labels = ['species'],\n", + " model_registry=\"vertex_ai\",\n", + " vertex_ai_model_id=\"bqml_model_{TIMESTAMP}\", \n", + " vertex_ai_model_version_aliases=[\"1\"]\n", + " )\n", + "AS\n", + "SELECT *\n", + "FROM `{BQ_TABLE}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)\n", + "print(job.errors, job.state)\n", + "\n", + "while job.running():\n", + " from time import sleep\n", + "\n", + " sleep(30)\n", + " print(\"Running ...\")\n", + "print(job.errors, job.state)\n", + "\n", + "tblname = job.ddl_target_table\n", + "tblname = \"{}.{}\".format(tblname.dataset_id, tblname.table_id)\n", + "print(\"{} created in {}\".format(tblname, job.ended - job.started))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5b4970272040" + }, + "source": [ + "### Find the model in the `Vertex Model Registry`\n", + "\n", + "Finally, you can use the `Vertex AI Model` list() method with a filter query to find the automatically registered model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "76c22674ba99" + }, + "outputs": [], + "source": [ + "models = aiplatform.Model.list(filter=\"display_name=bqml_model_\" + TIMESTAMP)\n", + "model = models[0]\n", + "\n", + "print(model.gca_resource)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "48e6ef5d5ffa" + }, + "outputs": [], + "source": [ + "models = aiplatform.Model.list()\n", + "for model in models:\n", + " if model.gca_resource.display_name.startswith(\"bqml\"):\n", + " print(model.gca_resource.display_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ef61354b1a5f" + }, + "source": [ + "### Delete the `BigQuery ML` model\n", + "\n", + "Next, delete the `BigQuery ML` instance of the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f6004d1ce59d" + }, + "outputs": [], + "source": [ + "MODEL_QUERY = f\"\"\"\n", + "DROP MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "\"\"\"\n", + "\n", + "job = bqclient.query(MODEL_QUERY)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup:mbsdk" + }, + "source": [ + "# Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial.\n", + "\n", + "Set `delete_storage` to `True` to delete the Cloud Storage bucket used in this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cleanup:mbsdk" + }, + "outputs": [], + "source": [ + "# Delete the endpoint using the Vertex endpoint object\n", + "endpoint.undeploy_all()\n", + "endpoint.delete()\n", + "\n", + "# Delete the model using the Vertex model object\n", + "try:\n", + " model.delete()\n", + "except Exception as e:\n", + " print(e)\n", + "\n", + "# Delete the created BigQuery dataset\n", + "! bq rm -r -f $PROJECT_ID:$BQ_DATASET_NAME\n", + "\n", + "delete_storage = False\n", + "if delete_storage or os.getenv(\"IS_TESTING\"):\n", + " # Delete the created GCS bucket\n", + " ! gsutil rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_with_bqml_training.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/custom/README.md b/notebooks/official/custom/README.md index 9fe8596b3..04bbb8013 100644 --- a/notebooks/official/custom/README.md +++ b/notebooks/official/custom/README.md @@ -1,28 +1,50 @@ -[Custom training and batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/sdk-custom-image-classification-batch.ipynb) +[Deploying Iris-detection model using FastAPI and Vertex AI custom container serving](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/SDK_Custom_Container_Prediction.ipynb) -Learn to use `Vertex AI Training` to create a custom trained model and use `Vertex AI Batch Prediction` to do a batch prediction on the trained model. +``` +Learn how to create, deploy and serve a custom classification model on Vertex AI. The steps performed include: -- Create a `Vertex AI` custom job for training a TensorFlow model. -- Upload the trained model artifacts as a `Model` resource. -- Make a batch prediction. +- Train a model that uses flower's measurements as input to predict the class of iris. +- Save the model and its serialized pre-processor. +- Build a FastAPI server to handle predictions and health checks. +- Build a custom container with model artifacts. +- Upload and deploy custom container to Vertex AI Endpoints. -[Profile model training performance using Profiler](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/custom_training_tensorboard_profiler.ipynb) +``` -Learn how to enable Vertex AI TensorBoard Profiler for custom training jobs. +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + +   Learn more about [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions). + + +[Training and deploying a sales forecasting model using FBProphet and Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/SDK_FBProphet_Forecasting_Online.ipynb) + +``` +The objective of this notebook is to create, deploy and serve a custom forecasting model on Vertex AI. The steps performed include: +- Train a model locally that forecasts sales for the given number of days. +- Train another model that uses both sales and weather data for sales prediction. +- Save both the models. +- Build a FastAPI server to handle the predictions for the chosen model. +- Build a custom container image of the serving application with the model artifacts. +- Upload the model to Vertex AI Model Registry. +- Deploy the model to a Vertex AI Endpoint. +- Send online prediction requests to the deployed model. +- Clean up the resources created in this session. -- Setup a service account and a Cloud Storage bucket -- Create a TensorBoard instance -- Create and run a custom training job -- View the TensorBoard Profiler dashboard +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + +   Learn more about [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions). [Training a TensorFlow model on BigQuery data](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/custom-tabular-bq-managed-dataset.ipynb) +``` Learn how to create a custom-trained model from a Python script in a Docker container using the Vertex AI SDK for Python, and then get a prediction from the deployed model by sending data. The steps performed include: @@ -33,8 +55,49 @@ The steps performed include: - Make a prediction. - Undeploy the `Model` resource. +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Profile model training performance using Profiler](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/custom_training_tensorboard_profiler.ipynb) + +``` +Learn how to enable Vertex AI TensorBoard Profiler for custom training jobs. + +The steps performed include: + +- Setup a service account and a Cloud Storage bucket +- Create a TensorBoard instance +- Create and run a custom training job +- View the TensorBoard Profiler dashboard + +``` + +   Learn more about [Vertex AI TensorBoard Profiler](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-profiler). + + +[Custom training and batch prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/sdk-custom-image-classification-batch.ipynb) + +``` +Learn to use `Vertex AI Training` to create a custom trained model and use `Vertex AI Batch Prediction` to do a batch prediction on the trained model. + +The steps performed include: + +- Create a `Vertex AI` custom job for training a TensorFlow model. +- Upload the trained model artifacts as a `Model` resource. +- Make a batch prediction. + +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + +   Learn more about [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions). + + [Custom training and online prediction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/sdk-custom-image-classification-online.ipynb) +``` Learn to use `Vertex AI Training` to create a custom-trained model from a Python script in a Docker container, and learn to use `Vertex AI Prediction` to do a prediction on the deployed model by sending data. The steps performed include: @@ -46,14 +109,9 @@ The steps performed include: - Make a prediction. - Undeploy the `Model` resource. -[Deploying Iris-detection model using FastAPI and Vertex AI custom container serving](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/custom/SDK_Custom_Container_Prediction.ipynb) +``` -Learn how to create, deploy and serve a custom classification model on Vertex AI. +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). -The steps performed include: +   Learn more about [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions). -- Train a model that uses flower's measurements as input to predict the class of iris. -- Save the model and its serialized pre-processor. -- Build a FastAPI server to handle predictions and health checks. -- Build a custom container with model artifacts. -- Upload and deploy custom container to Vertex AI Endpoints. diff --git a/notebooks/official/custom/SDK_Custom_Container_Prediction.ipynb b/notebooks/official/custom/SDK_Custom_Container_Prediction.ipynb index d2b6cfbff..6eb16551a 100644 --- a/notebooks/official/custom/SDK_Custom_Container_Prediction.ipynb +++ b/notebooks/official/custom/SDK_Custom_Container_Prediction.ipynb @@ -1,1327 +1,1310 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ur8xi4C7S06n" - }, - "outputs": [], - "source": [ - "# Copyright 2021 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": "JAPoU8Sm5E6e" - }, - "source": [ - "# Deploying Iris-detection model using FastAPI and Vertex AI custom container serving\n", - "\n", - "\n", - " \n", - " \n", - "
\n", - " \n", - " \"Colab Run in Colab\n", - " \n", - " \n", - " \n", - " \"GitHub\n", - " View on GitHub\n", - " \n", - " \n", - " \"Vertex\n", - " Open in Vertex AI Workbench\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tvgnzT1CKxrO" - }, - "source": [ - "## Overview\n", - "\n", - "This tutorial walks you through building a custom container to serve a scikit-learn model on Vertex AI. You use the FastAPI Python web server framework to create a prediction and health endpoint. You also incorporate a pre-processor from training pipeline into your online serving application." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cbd99f7bfc8e" - }, - "source": [ - "### Objective\n", - "\n", - "In this notebook, you learn how to create, deploy and serve a custom classification model on Vertex AI. This notebook focuses more on deploying the model than on the design of the model itself. \n", - "\n", - "\n", - "This tutorial uses the following Google Cloud ML services and resources:\n", - "\n", - "- Vertex AI Models\n", - "- Vertex AI Endpoints\n", - "\n", - "The steps performed include:\n", - "\n", - "- Train a model that uses flower's measurements as input to predict the class of iris.\n", - "- Save the model and its serialized pre-processor.\n", - "- Build a FastAPI server to handle predictions and health checks.\n", - "- Build a custom container with model artifacts.\n", - "- Upload and deploy custom container to Vertex AI Endpoints." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0fe0bb78c9ce" - }, - "source": [ - "### Dataset\n", - "\n", - "This tutorial uses R.A. Fisher's Iris dataset, a small dataset that is a popular choice for trying out machine learning techniques. Each instance has four numerical features, which are different measurements of a flower, and a target label that\n", - "marks it as one of three types of iris: Iris setosa, Iris versicolour, or Iris virginica.\n", - "\n", - "This tutorial uses [the copy of the Iris dataset included in the\n", - "scikit-learn library](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html#sklearn.datasets.load_iris)." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "c681f532cf64" - }, - "source": [ - "### Costs \n", - "\n", - "This tutorial uses billable components of Google Cloud:\n", - "\n", - "* Vertex AI\n", - "* Cloud Storage\n", - "* Artifact Registry\n", - "* Cloud Build\n", - "\n", - "Learn about [Vertex AI\n", - "pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage\n", - "pricing](https://cloud.google.com/storage/pricing), [Artifact Registry pricing](https://cloud.google.com/artifact-registry/pricing) and [Cloud Build pricing](https://cloud.google.com/build/pricing) and use the [Pricing\n", - "Calculator](https://cloud.google.com/products/calculator/)\n", - "to generate a cost estimate based on your projected usage." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ze4-nDLfK4pw" - }, - "source": [ - "### Set up your local development environment\n", - "\n", - "**If you are using Colab or Vertex AI Workbench notebooks**, your environment already meets\n", - "all the requirements to run this notebook.\n", - "\n", - "**If you are using Colab**, docker related steps are skipped as Colab doesn't fully support docker yet." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gCuSR8GkAgzl" - }, - "source": [ - "**Otherwise**, make sure your environment meets this notebook's requirements.\n", - "You need the following:\n", - "\n", - "* Docker\n", - "* Git\n", - "* Google Cloud SDK (gcloud)\n", - "* Python 3\n", - "* virtualenv\n", - "* Jupyter notebook running in a virtual environment with Python 3\n", - "\n", - "The Google Cloud guide to [Setting up a Python development\n", - "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", - "installation guide](https://jupyter.org/install) provide detailed instructions\n", - "for meeting these requirements. The following steps provide a condensed set of\n", - "instructions:\n", - "\n", - "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", - "\n", - "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", - "\n", - "1. [Install\n", - " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", - " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", - "\n", - "1. To install Jupyter, run `pip install jupyter` on the\n", - "command-line in a terminal shell.\n", - "\n", - "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", - "\n", - "1. Open this notebook in the Jupyter Notebook Dashboard." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "i7EUnXsZhAGF" - }, - "source": [ - "## Install additional packages\n", - "\n", - "Install additional package dependencies not installed in your notebook environment, such as NumPy, Scikit-learn, FastAPI, Uvicorn, and joblib. Use the latest major GA version of each package." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "747f59abb3a5" - }, - "outputs": [], - "source": [ - "%%writefile requirements.txt\n", - "joblib~=1.0\n", - "numpy~=1.20\n", - "scikit-learn~=0.24\n", - "google-cloud-storage>=1.26.0,<2.0.0dev" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1fd00fa70a2a" - }, - "outputs": [], - "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", - "\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", - "# Required in Docker serving container\n", - "! pip3 install -U {USER_FLAG} -r requirements.txt -q\n", - "\n", - "# For local FastAPI development and running\n", - "! pip3 install -U {USER_FLAG} \"uvicorn[standard]>=0.12.0,<0.14.0\" fastapi~=0.63 -q\n", - "\n", - "# Vertex SDK for Python\n", - "! pip3 install -U {USER_FLAG} google-cloud-aiplatform -q" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hhq5zEbGg0XX" - }, - "source": [ - "### Restart the kernel\n", - "\n", - "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EzrelQZ22IZj" - }, - "outputs": [], - "source": [ - "# Automatically restart kernel after installs\n", - "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": "lWEdiXsJg0XY" - }, - "source": [ - "## Before you begin" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BF1j6f9HApxa" - }, - "source": [ - "### 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", - "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 APIs for Vertex AI, Compute Engine and Artifact Registry](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute.googleapis.com,artifactregistry.googleapis.com).\n", - "\n", - "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", - "\n", - "1. 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 `$` into these commands." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WReHDGG5g0XY" - }, - "source": [ - "#### 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`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "cde8e0876d62" - }, - "outputs": [], - "source": [ - "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "oM1iC_MfAts1" - }, - "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": "riG_qUokg0XZ" - }, - "outputs": [], - "source": [ - "! gcloud config set project $PROJECT_ID" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "becb6514d26a" - }, - "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. It is recommended 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)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "959545da671a" - }, - "outputs": [], - "source": [ - "REGION = \"[your-region]\" # @param {type: \"string\"}\n", - "\n", - "if REGION == \"[your-region]\":\n", - " REGION = \"us-central1\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "e663bd062c6f" - }, - "source": [ - "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "953fa6e5ddda" - }, - "outputs": [], - "source": [ - "import random\n", - "import string\n", - "\n", - "\n", - "# Generate a uuid of a specifed length(default=8)\n", - "def generate_uuid(length: int = 8) -> str:\n", - " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", - "\n", - "\n", - "UUID = generate_uuid()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "40206eb20b53" - }, - "source": [ - "### Authenticate your Google Cloud account\n", - "\n", - "**If you are using Vertex AI Workbench notebooks**, your environment is already\n", - "authenticated.\n", - "\n", - "**If you are using Colab**, run the cell below and follow the instructions\n", - "when prompted to authenticate your account via oAuth.\n", - "\n", - "**Otherwise**, follow these steps:\n", - "\n", - "1. In the Cloud Console, go to the [**Create service account key**\n", - " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", - "\n", - "2. Click **Create service account**.\n", - "\n", - "3. In the **Service account name** field, enter a name, and\n", - " click **Create**.\n", - "\n", - "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", - "into the filter box, and select\n", - " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", - "\n", - "5. Click *Create*. A JSON file that contains your key downloads to your\n", - "local environment.\n", - "\n", - "6. Enter the path to your service account key as the\n", - "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "4dd67f16eff2" - }, - "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 = \"google.colab\" in sys.modules\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", - " 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 ''" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "62f861b68b50" - }, - "source": [ - "### Create a Cloud Storage bucket\n", - "\n", - "**The following steps are required, regardless of your notebook environment.**\n", - "\n", - "To update your model artifacts without re-building the container, you upload your model\n", - "artifacts and any custom code to Cloud Storage bucket.\n", - "\n", - "Set the name of your Cloud Storage bucket below. It must be unique across all\n", - "Cloud Storage buckets. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9724b00aeead" - }, - "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": "db3de5b7b0a4" - }, - "outputs": [], - "source": [ - "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"[your-bucket-name]\":\n", - " BUCKET_NAME = PROJECT_ID + \"aip-\" + UUID\n", - " BUCKET_URI = f\"gs://{BUCKET_NAME}\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "58cb4f5895f0" - }, - "source": [ - "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2d2208676cee" - }, - "outputs": [], - "source": [ - "! gsutil mb -l $REGION $BUCKET_URI" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "c664a5abc11a" - }, - "source": [ - "Finally, validate access to your Cloud Storage bucket by examining its contents:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2c1b1c29f5f6" - }, - "outputs": [], - "source": [ - "! gsutil ls -al $BUCKET_URI" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "d3938f6d37a1" - }, - "source": [ - "## Import libraries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "e95ca1e5e07c" - }, - "outputs": [], - "source": [ - "from google.cloud import aiplatform" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "750d53e37094" - }, - "source": [ - "### Initialize Vertex AI SDK for Python\n", - "\n", - "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1a3aa2d4a74f" - }, - "outputs": [], - "source": [ - "aiplatform.init(project=PROJECT_ID, location=REGION)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "XoEqT2Y4DJmf" - }, - "source": [ - "### Configure resource names\n", - "\n", - "Set a name for the following resources:\n", - "\n", - "`MODEL_ARTIFACT_DIR` - Folder directory path to your model artifacts within a Cloud Storage bucket, for example: \"my-models/fraud-detection/trial-4\"\n", - "\n", - "`REPOSITORY` - Name of the Artifact Repository to create or use.\n", - "\n", - "`IMAGE` - Name of the container image that is pushed to the repository.\n", - "\n", - "`MODEL_DISPLAY_NAME` - Display name of Vertex AI Model resource." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "MzGDU7TWdts_" - }, - "outputs": [], - "source": [ - "MODEL_ARTIFACT_DIR = \"[your-artifact-directory]\" # @param {type:\"string\"}\n", - "REPOSITORY = \"[your-repository-name]\" # @param {type:\"string\"}\n", - "IMAGE = \"[your-image-name]\" # @param {type:\"string\"}\n", - "MODEL_DISPLAY_NAME = \"[your-model-display-name]\" # @param {type:\"string\"}\n", - "\n", - "# Set the defaults if no names were specified\n", - "if MODEL_ARTIFACT_DIR == \"[your-artifact-directory]\":\n", - " MODEL_ARTIFACT_DIR = \"custom-container-prediction-model\"\n", - "\n", - "if REPOSITORY == \"[your-repository-name]\":\n", - " REPOSITORY = \"custom-container-prediction\"\n", - "\n", - "if IMAGE == \"[your-image-name]\":\n", - " IMAGE = \"sklearn-fastapi-server\"\n", - "\n", - "if MODEL_DISPLAY_NAME == \"[your-model-display-name]\":\n", - " MODEL_DISPLAY_NAME = \"sklearn-custom-container\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3c2d091d9e73" - }, - "source": [ - "## Write your pre-processor\n", - "Standardize the training data so each numerical feature column has a mean of 0 and a standard deviation of 1 [can improve your model](https://developers.google.com/machine-learning/crash-course/representation/cleaning-data).\n", - "\n", - "Define a `app` folder and create `preprocess.py`, which contains a class to perform standardization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "6e74556ea0b4" - }, - "outputs": [], - "source": [ - "%mkdir app" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "58d843d21fa8" - }, - "outputs": [], - "source": [ - "%%writefile app/preprocess.py\n", - "import numpy as np\n", - "\n", - "class MySimpleScaler(object):\n", - " def __init__(self):\n", - " self._means = None\n", - " self._stds = None\n", - "\n", - " def preprocess(self, data):\n", - " if self._means is None: # during training only\n", - " self._means = np.mean(data, axis=0)\n", - "\n", - " if self._stds is None: # during training only\n", - " self._stds = np.std(data, axis=0)\n", - " if not self._stds.all():\n", - " raise ValueError(\"At least one column has standard deviation of 0.\")\n", - "\n", - " return (data - self._means) / self._stds\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4b816cd52f4b" - }, - "source": [ - "## Train and store model with pre-processor\n", - "Next, use `preprocess.MySimpleScaler` to preprocess the iris data, then train a model using scikit-learn.\n", - "\n", - "At the end, export your trained model as a joblib (`.joblib`) file and export your `MySimpleScaler` instance as a pickle (`.pkl`) file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "43e47249f736" - }, - "outputs": [], - "source": [ - "%cd app/\n", - "\n", - "import pickle\n", - "\n", - "import joblib\n", - "from preprocess import MySimpleScaler\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "\n", - "iris = load_iris()\n", - "scaler = MySimpleScaler()\n", - "\n", - "X = scaler.preprocess(iris.data)\n", - "y = iris.target\n", - "\n", - "model = RandomForestClassifier()\n", - "model.fit(X, y)\n", - "\n", - "joblib.dump(model, \"model.joblib\")\n", - "with open(\"preprocessor.pkl\", \"wb\") as f:\n", - " pickle.dump(scaler, f)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3849066a33bd" - }, - "source": [ - "### Upload model artifacts and custom code to Cloud Storage\n", - "\n", - "Before you can deploy your model for serving, Vertex AI needs access to the following files in Cloud Storage:\n", - "\n", - "* `model.joblib` (model artifact)\n", - "* `preprocessor.pkl` (model artifact)\n", - "\n", - "Run the following commands to upload your files:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ca67ee52d4d9" - }, - "outputs": [], - "source": [ - "!gsutil cp model.joblib preprocessor.pkl {BUCKET_URI}/{MODEL_ARTIFACT_DIR}/\n", - "%cd .." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "480a1d88ecdb" - }, - "source": [ - "## Build a FastAPI server\n", - "\n", - "To serve predictions from the classification model, build a FastAPI server application." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "94af0ba5eadd" - }, - "outputs": [], - "source": [ - "%%writefile app/main.py\n", - "from fastapi import FastAPI, Request\n", - "\n", - "import joblib\n", - "import json\n", - "import numpy as np\n", - "import pickle\n", - "import os\n", - "\n", - "from google.cloud import storage\n", - "from preprocess import MySimpleScaler\n", - "from sklearn.datasets import load_iris\n", - "\n", - "\n", - "app = FastAPI()\n", - "gcs_client = storage.Client()\n", - "\n", - "with open(\"preprocessor.pkl\", 'wb') as preprocessor_f, open(\"model.joblib\", 'wb') as model_f:\n", - " gcs_client.download_blob_to_file(\n", - " f\"{os.environ['AIP_STORAGE_URI']}/preprocessor.pkl\", preprocessor_f\n", - " )\n", - " gcs_client.download_blob_to_file(\n", - " f\"{os.environ['AIP_STORAGE_URI']}/model.joblib\", model_f\n", - " )\n", - "\n", - "with open(\"preprocessor.pkl\", \"rb\") as f:\n", - " preprocessor = pickle.load(f)\n", - "\n", - "_class_names = load_iris().target_names\n", - "_model = joblib.load(\"model.joblib\")\n", - "_preprocessor = preprocessor\n", - "\n", - "\n", - "@app.get(os.environ['AIP_HEALTH_ROUTE'], status_code=200)\n", - "def health():\n", - " return {}\n", - "\n", - "\n", - "@app.post(os.environ['AIP_PREDICT_ROUTE'])\n", - "async def predict(request: Request):\n", - " body = await request.json()\n", - "\n", - " instances = body[\"instances\"]\n", - " inputs = np.asarray(instances)\n", - " preprocessed_inputs = _preprocessor.preprocess(inputs)\n", - " outputs = _model.predict(preprocessed_inputs)\n", - "\n", - " return {\"predictions\": [_class_names[class_num] for class_num in outputs]}\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "469f55daf250" - }, - "source": [ - "### Add pre-start script\n", - "FastAPI executes the following script before starting up the server. The `PORT` environment variable is set to equal to `AIP_HTTP_PORT` in order to run FastAPI on the same port expected by Vertex AI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "69f438aca35b" - }, - "outputs": [], - "source": [ - "%%writefile app/prestart.sh\n", - "#!/bin/bash\n", - "export PORT=$AIP_HTTP_PORT" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "8b62ddf1def3" - }, - "source": [ - "### Create test instances\n", - "To learn more about formatting input instances in JSON, [read the documentation.](https://cloud.google.com/vertex-ai/docs/predictions/online-predictions-custom-models#request-body-details)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "b6605e9e6186" - }, - "outputs": [], - "source": [ - "%%writefile instances.json\n", - "{\n", - " \"instances\": [\n", - " [6.7, 3.1, 4.7, 1.5],\n", - " [4.6, 3.1, 1.5, 0.2]\n", - " ]\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "51e149fdec1b" - }, - "source": [ - "## Build and push container to Artifact Registry" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "240578ec9efe" - }, - "source": [ - "Write the `Dockerfile`, using `tiangolo/uvicorn-gunicorn-fastapi` as a base image. This automatically runs FastAPI for you using Gunicorn and Uvicorn. Visit [the FastAPI docs to read more about deploying FastAPI with Docker](https://fastapi.tiangolo.com/deployment/docker/) to learn more." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3d3a6b9ed22b" - }, - "outputs": [], - "source": [ - "%%writefile Dockerfile\n", - "\n", - "FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9\n", - "\n", - "COPY ./app /app\n", - "COPY requirements.txt requirements.txt\n", - "\n", - "RUN pip install -r requirements.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "04c988201499" - }, - "source": [ - "### Build the image locally (optional)\n", - "\n", - "Build the image using docker to test it locally.\n", - "\n", - "**Note:** Docker is only being used to test the container locally. For deployment to Artifact registry, Cloud-Build is used." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "f1e7d639b9cc" - }, - "outputs": [], - "source": [ - "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", - " ! sudo docker build \\\n", - " --tag=\"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\" \\\n", - " ." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "147a555f6c93" - }, - "source": [ - "### Run and test the container locally (optional)\n", - "\n", - "Test running the container locally in detached mode and provide the environment variables that the container requires. These variables are provided to the container by Vertex AI once deployed. Test the `/health` and `/predict` routes and then stop the running image." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "62ed2d334d0f" - }, - "outputs": [], - "source": [ - "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", - " ! sudo docker stop local-iris\n", - " ! sudo docker rm local-iris\n", - " ! sudo docker run -d -p 80:8080 \\\n", - " --name=local-iris \\\n", - " -e AIP_HTTP_PORT=8080 \\\n", - " -e AIP_HEALTH_ROUTE=/health \\\n", - " -e AIP_PREDICT_ROUTE=/predict \\\n", - " -e AIP_STORAGE_URI={BUCKET_URI}/{MODEL_ARTIFACT_DIR} \\\n", - " \"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "248f481e8e90" - }, - "source": [ - "Ping the health route." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ce629eea32fd" - }, - "outputs": [], - "source": [ - "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", - " ! curl localhost/health" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "2d6821fb2b7d" - }, - "source": [ - "Pass the `instances.json` and test the predict route." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "56986f93438e" - }, - "outputs": [], - "source": [ - "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", - " ! curl -X POST \\\n", - " -d @instances.json \\\n", - " -H \"Content-Type: application/json; charset=utf-8\" \\\n", - " localhost/predict" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "d1d6ee697180" - }, - "source": [ - "Stop and delete the container locally." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "a29fcbbe0188" - }, - "outputs": [], - "source": [ - "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", - " ! sudo docker stop local-iris\n", - " ! sudo docker rm local-iris" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "212b2935ea12" - }, - "source": [ - "### Push the container to artifact registry\n", - "\n", - "Create your repository in the Artifact registry and push your container image to the repository.\n", - "Run this below cell once to create the artifact repository." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "5f98a42332e5" - }, - "outputs": [], - "source": [ - "!gcloud artifacts repositories create {REPOSITORY} \\\n", - " --repository-format=docker \\\n", - " --location=$REGION" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "d2e0b8b700aa" - }, - "source": [ - "Push the image to the created artifact repository using Cloud-Build.\n", - "\n", - "**Note:** The following command automatically considers the Dockerfile from the directory it is being run from." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1dd7448f4703" - }, - "outputs": [], - "source": [ - "!gcloud builds submit --region={REGION} --tag={REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "b438bfa2129f" - }, - "source": [ - "## Deploy to Vertex AI" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4ae19df6a33e" - }, - "source": [ - "### Create Vertex AI model using artifact uri\n", - "Use the Python SDK to upload and deploy your model from the artifact registry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2738154345d5" - }, - "outputs": [], - "source": [ - "model = aiplatform.Model.upload(\n", - " display_name=MODEL_DISPLAY_NAME,\n", - " artifact_uri=f\"{BUCKET_URI}/{MODEL_ARTIFACT_DIR}\",\n", - " serving_container_image_uri=f\"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bd1b85afc7df" - }, - "source": [ - "### Deploy the model to Vertex AI Endpoints\n", - "\n", - "Deploy the model to a Vertex AI Endpoint. After this step completes, the model is deployed and ready for online predictions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "62cf66498a28" - }, - "outputs": [], - "source": [ - "endpoint = model.deploy(machine_type=\"n1-standard-4\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6883e7b07143" - }, - "source": [ - "## Request predictions\n", - "\n", - "Send online requests to the model deployed to the endpoint and get predictions.\n", - "\n", - "### Using Python SDK\n", - "\n", - "Get predictions from the endpoint for a sample input using python SDK." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "d69ed411c2d3" - }, - "outputs": [], - "source": [ - "endpoint.predict(instances=[[6.7, 3.1, 4.7, 1.5], [4.6, 3.1, 1.5, 0.2]])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "370d22f53427" - }, - "source": [ - "### Using REST\n", - "\n", - "Get predictions from the endpoint using curl request." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ba55bc560d58" - }, - "outputs": [], - "source": [ - "ENDPOINT_ID = endpoint.name" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "95c562b4e98b" - }, - "outputs": [], - "source": [ - "! curl \\\n", - "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", - "-H \"Content-Type: application/json\" \\\n", - "-d @instances.json \\\n", - "https://{REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}:predict" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "fa71174a7dd0" - }, - "source": [ - "### Using gcloud CLI\n", - "\n", - "Get predictions from the endpoint using gcloud CLI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "23b8e807b02c" - }, - "outputs": [], - "source": [ - "!gcloud ai endpoints predict $ENDPOINT_ID \\\n", - " --region=$REGION \\\n", - " --json-request=instances.json" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TpV-iwP9qw9c" - }, - "source": [ - "## Cleaning up\n", - "\n", - "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", - "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", - "\n", - "Otherwise, you can delete the individual resources you created in this tutorial:\n", - "\n", - "- Model\n", - "- Endpoint\n", - "- Artifact Registry Image\n", - "- Artifact Repository: Set `delete_art_repo` to **True** to delete the repository created in this tutorial.\n", - "- Cloud Storage bucket: Set `delete_bucket` to **True** to delete the Cloud Storage bucket used in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "sx_vKniMq9ZX" - }, - "outputs": [], - "source": [ - "delete_bucket = False\n", - "delete_art_repo = False\n", - " \n", - "# Undeploy model and delete endpoint\n", - "endpoint.undeploy_all()\n", - "endpoint.delete()\n", - "\n", - "#Delete the model resource\n", - "model.delete()\n", - "\n", - "# Delete the container image from Artifact Registry\n", - "!gcloud artifacts docker images delete \\\n", - " --quiet \\\n", - " --delete-tags \\\n", - " {REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\n", - "\n", - "# Delete the artifact registry\n", - "if delete_art_repo or os.getenv(\"IS_TESTING\"):\n", - " ! gcloud artifacts repositories delete {REPOSITORY} --location=$REGION -q\n", - " \n", - "# Delete the Cloud Storage bucket\n", - "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", - " ! gsutil -m rm -r $BUCKET_URI" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "name": "SDK_Custom_Container_Prediction.ipynb", - "toc_visible": true - }, - "environment": { - "kernel": "python3", - "name": "common-cpu.m95", - "type": "gcloud", - "uri": "gcr.io/deeplearning-platform-release/base-cpu:m95" - }, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2021 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Deploying Iris-detection model using FastAPI and Vertex AI custom container serving\n", + "\n", + "\n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + "\n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial walks you through building a custom container to serve a scikit-learn model on Vertex AI. You use the FastAPI Python web server framework to create a prediction and health endpoint. You also incorporate a pre-processor from training pipeline into your online serving application.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training) and [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cbd99f7bfc8e" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn how to create, deploy and serve a custom classification model on Vertex AI. This notebook focuses more on deploying the model than on the design of the model itself. \n", + "\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Models\n", + "- Vertex AI Endpoints\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train a model that uses flower's measurements as input to predict the class of iris.\n", + "- Save the model and its serialized pre-processor.\n", + "- Build a FastAPI server to handle predictions and health checks.\n", + "- Build a custom container with model artifacts.\n", + "- Upload and deploy custom container to Vertex AI Endpoints." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0fe0bb78c9ce" + }, + "source": [ + "### Dataset\n", + "\n", + "This tutorial uses R.A. Fisher's Iris dataset, a small dataset that is a popular choice for trying out machine learning techniques. Each instance has four numerical features, which are different measurements of a flower, and a target label that\n", + "marks it as one of three types of iris: Iris setosa, Iris versicolour, or Iris virginica.\n", + "\n", + "This tutorial uses [the copy of the Iris dataset included in the\n", + "scikit-learn library](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html#sklearn.datasets.load_iris)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c681f532cf64" + }, + "source": [ + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "* Artifact Registry\n", + "* Cloud Build\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), [Artifact Registry pricing](https://cloud.google.com/artifact-registry/pricing) and [Cloud Build pricing](https://cloud.google.com/build/pricing) and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ze4-nDLfK4pw" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench notebooks**, your environment already meets\n", + "all the requirements to run this notebook.\n", + "\n", + "**If you are using Colab**, docker related steps are skipped as Colab doesn't fully support docker yet." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gCuSR8GkAgzl" + }, + "source": [ + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* Docker\n", + "* Git\n", + "* Google Cloud SDK (gcloud)\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [Setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook Dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "## Install additional packages\n", + "\n", + "Install additional package dependencies not installed in your notebook environment, such as NumPy, Scikit-learn, FastAPI, Uvicorn, and joblib. Use the latest major GA version of each package." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "747f59abb3a5" + }, + "outputs": [], + "source": [ + "%%writefile requirements.txt\n", + "joblib~=1.0\n", + "numpy~=1.20\n", + "scikit-learn~=0.24\n", + "google-cloud-storage>=1.26.0,<2.0.0dev" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1fd00fa70a2a" + }, + "outputs": [], + "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", + "\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", + "# Required in Docker serving container\n", + "! pip3 install -U {USER_FLAG} -r requirements.txt -q\n", + "\n", + "# For local FastAPI development and running\n", + "! pip3 install -U {USER_FLAG} \"uvicorn[standard]>=0.12.0,<0.14.0\" fastapi~=0.63 -q\n", + "\n", + "# Vertex SDK for Python\n", + "! pip3 install -U {USER_FLAG} google-cloud-aiplatform -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "lWEdiXsJg0XY" + }, + "source": [ + "## Before you begin" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "### 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", + "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 APIs for Vertex AI, Compute Engine and Artifact Registry](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute.googleapis.com,artifactregistry.googleapis.com).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cde8e0876d62" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "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": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "becb6514d26a" + }, + "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. It is recommended 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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "959545da671a" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e663bd062c6f" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "953fa6e5ddda" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "40206eb20b53" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench notebooks**, your environment is already\n", + "authenticated.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4dd67f16eff2" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "62f861b68b50" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "To update your model artifacts without re-building the container, you upload your model\n", + "artifacts and any custom code to Cloud Storage bucket.\n", + "\n", + "Set the name of your Cloud Storage bucket below. It must be unique across all\n", + "Cloud Storage buckets. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9724b00aeead" + }, + "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": "db3de5b7b0a4" + }, + "outputs": [], + "source": [ + "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"[your-bucket-name]\":\n", + " BUCKET_NAME = PROJECT_ID + \"aip-\" + UUID\n", + " BUCKET_URI = f\"gs://{BUCKET_NAME}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58cb4f5895f0" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2d2208676cee" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c664a5abc11a" + }, + "source": [ + "Finally, validate access to your Cloud Storage bucket by examining its contents:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2c1b1c29f5f6" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d3938f6d37a1" + }, + "source": [ + "## Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e95ca1e5e07c" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "750d53e37094" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1a3aa2d4a74f" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Configure resource names\n", + "\n", + "Set a name for the following resources:\n", + "\n", + "`MODEL_ARTIFACT_DIR` - Folder directory path to your model artifacts within a Cloud Storage bucket, for example: \"my-models/fraud-detection/trial-4\"\n", + "\n", + "`REPOSITORY` - Name of the Artifact Repository to create or use.\n", + "\n", + "`IMAGE` - Name of the container image that is pushed to the repository.\n", + "\n", + "`MODEL_DISPLAY_NAME` - Display name of Vertex AI Model resource." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MzGDU7TWdts_" + }, + "outputs": [], + "source": [ + "MODEL_ARTIFACT_DIR = \"[your-artifact-directory]\" # @param {type:\"string\"}\n", + "REPOSITORY = \"[your-repository-name]\" # @param {type:\"string\"}\n", + "IMAGE = \"[your-image-name]\" # @param {type:\"string\"}\n", + "MODEL_DISPLAY_NAME = \"[your-model-display-name]\" # @param {type:\"string\"}\n", + "\n", + "# Set the defaults if no names were specified\n", + "if MODEL_ARTIFACT_DIR == \"[your-artifact-directory]\":\n", + " MODEL_ARTIFACT_DIR = \"custom-container-prediction-model\"\n", + "\n", + "if REPOSITORY == \"[your-repository-name]\":\n", + " REPOSITORY = \"custom-container-prediction\"\n", + "\n", + "if IMAGE == \"[your-image-name]\":\n", + " IMAGE = \"sklearn-fastapi-server\"\n", + "\n", + "if MODEL_DISPLAY_NAME == \"[your-model-display-name]\":\n", + " MODEL_DISPLAY_NAME = \"sklearn-custom-container\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3c2d091d9e73" + }, + "source": [ + "## Write your pre-processor\n", + "Standardize the training data so each numerical feature column has a mean of 0 and a standard deviation of 1 [can improve your model](https://developers.google.com/machine-learning/crash-course/representation/cleaning-data).\n", + "\n", + "Define a `app` folder and create `preprocess.py`, which contains a class to perform standardization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6e74556ea0b4" + }, + "outputs": [], + "source": [ + "%mkdir app" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "58d843d21fa8" + }, + "outputs": [], + "source": [ + "%%writefile app/preprocess.py\n", + "import numpy as np\n", + "\n", + "class MySimpleScaler(object):\n", + " def __init__(self):\n", + " self._means = None\n", + " self._stds = None\n", + "\n", + " def preprocess(self, data):\n", + " if self._means is None: # during training only\n", + " self._means = np.mean(data, axis=0)\n", + "\n", + " if self._stds is None: # during training only\n", + " self._stds = np.std(data, axis=0)\n", + " if not self._stds.all():\n", + " raise ValueError(\"At least one column has standard deviation of 0.\")\n", + "\n", + " return (data - self._means) / self._stds\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4b816cd52f4b" + }, + "source": [ + "## Train and store model with pre-processor\n", + "Next, use `preprocess.MySimpleScaler` to preprocess the iris data, then train a model using scikit-learn.\n", + "\n", + "At the end, export your trained model as a joblib (`.joblib`) file and export your `MySimpleScaler` instance as a pickle (`.pkl`) file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "43e47249f736" + }, + "outputs": [], + "source": [ + "%cd app/\n", + "\n", + "import pickle\n", + "\n", + "import joblib\n", + "from preprocess import MySimpleScaler\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "iris = load_iris()\n", + "scaler = MySimpleScaler()\n", + "\n", + "X = scaler.preprocess(iris.data)\n", + "y = iris.target\n", + "\n", + "model = RandomForestClassifier()\n", + "model.fit(X, y)\n", + "\n", + "joblib.dump(model, \"model.joblib\")\n", + "with open(\"preprocessor.pkl\", \"wb\") as f:\n", + " pickle.dump(scaler, f)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3849066a33bd" + }, + "source": [ + "### Upload model artifacts and custom code to Cloud Storage\n", + "\n", + "Before you can deploy your model for serving, Vertex AI needs access to the following files in Cloud Storage:\n", + "\n", + "* `model.joblib` (model artifact)\n", + "* `preprocessor.pkl` (model artifact)\n", + "\n", + "Run the following commands to upload your files:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ca67ee52d4d9" + }, + "outputs": [], + "source": [ + "!gsutil cp model.joblib preprocessor.pkl {BUCKET_URI}/{MODEL_ARTIFACT_DIR}/\n", + "%cd .." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "480a1d88ecdb" + }, + "source": [ + "## Build a FastAPI server\n", + "\n", + "To serve predictions from the classification model, build a FastAPI server application." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "94af0ba5eadd" + }, + "outputs": [], + "source": [ + "%%writefile app/main.py\n", + "from fastapi import FastAPI, Request\n", + "\n", + "import joblib\n", + "import json\n", + "import numpy as np\n", + "import pickle\n", + "import os\n", + "\n", + "from google.cloud import storage\n", + "from preprocess import MySimpleScaler\n", + "from sklearn.datasets import load_iris\n", + "\n", + "\n", + "app = FastAPI()\n", + "gcs_client = storage.Client()\n", + "\n", + "with open(\"preprocessor.pkl\", 'wb') as preprocessor_f, open(\"model.joblib\", 'wb') as model_f:\n", + " gcs_client.download_blob_to_file(\n", + " f\"{os.environ['AIP_STORAGE_URI']}/preprocessor.pkl\", preprocessor_f\n", + " )\n", + " gcs_client.download_blob_to_file(\n", + " f\"{os.environ['AIP_STORAGE_URI']}/model.joblib\", model_f\n", + " )\n", + "\n", + "with open(\"preprocessor.pkl\", \"rb\") as f:\n", + " preprocessor = pickle.load(f)\n", + "\n", + "_class_names = load_iris().target_names\n", + "_model = joblib.load(\"model.joblib\")\n", + "_preprocessor = preprocessor\n", + "\n", + "\n", + "@app.get(os.environ['AIP_HEALTH_ROUTE'], status_code=200)\n", + "def health():\n", + " return {}\n", + "\n", + "\n", + "@app.post(os.environ['AIP_PREDICT_ROUTE'])\n", + "async def predict(request: Request):\n", + " body = await request.json()\n", + "\n", + " instances = body[\"instances\"]\n", + " inputs = np.asarray(instances)\n", + " preprocessed_inputs = _preprocessor.preprocess(inputs)\n", + " outputs = _model.predict(preprocessed_inputs)\n", + "\n", + " return {\"predictions\": [_class_names[class_num] for class_num in outputs]}\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "469f55daf250" + }, + "source": [ + "### Add pre-start script\n", + "FastAPI executes the following script before starting up the server. The `PORT` environment variable is set to equal to `AIP_HTTP_PORT` in order to run FastAPI on the same port expected by Vertex AI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "69f438aca35b" + }, + "outputs": [], + "source": [ + "%%writefile app/prestart.sh\n", + "#!/bin/bash\n", + "export PORT=$AIP_HTTP_PORT" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8b62ddf1def3" + }, + "source": [ + "### Create test instances\n", + "To learn more about formatting input instances in JSON, [read the documentation.](https://cloud.google.com/vertex-ai/docs/predictions/online-predictions-custom-models#request-body-details)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b6605e9e6186" + }, + "outputs": [], + "source": [ + "%%writefile instances.json\n", + "{\n", + " \"instances\": [\n", + " [6.7, 3.1, 4.7, 1.5],\n", + " [4.6, 3.1, 1.5, 0.2]\n", + " ]\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "51e149fdec1b" + }, + "source": [ + "## Build and push container to Artifact Registry" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "240578ec9efe" + }, + "source": [ + "Write the `Dockerfile`, using `tiangolo/uvicorn-gunicorn-fastapi` as a base image. This automatically runs FastAPI for you using Gunicorn and Uvicorn. Visit [the FastAPI docs to read more about deploying FastAPI with Docker](https://fastapi.tiangolo.com/deployment/docker/) to learn more." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3d3a6b9ed22b" + }, + "outputs": [], + "source": [ + "%%writefile Dockerfile\n", + "\n", + "FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9\n", + "\n", + "COPY ./app /app\n", + "COPY requirements.txt requirements.txt\n", + "\n", + "RUN pip install -r requirements.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "04c988201499" + }, + "source": [ + "### Build the image locally (optional)\n", + "\n", + "Build the image using docker to test it locally.\n", + "\n", + "**Note:** Docker is only being used to test the container locally. For deployment to Artifact registry, Cloud-Build is used." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f1e7d639b9cc" + }, + "outputs": [], + "source": [ + "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", + " ! sudo docker build \\\n", + " --tag=\"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\" \\\n", + " ." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "147a555f6c93" + }, + "source": [ + "### Run and test the container locally (optional)\n", + "\n", + "Test running the container locally in detached mode and provide the environment variables that the container requires. These variables are provided to the container by Vertex AI once deployed. Test the `/health` and `/predict` routes and then stop the running image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "62ed2d334d0f" + }, + "outputs": [], + "source": [ + "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", + " ! sudo docker stop local-iris\n", + " ! sudo docker rm local-iris\n", + " ! sudo docker run -d -p 80:8080 \\\n", + " --name=local-iris \\\n", + " -e AIP_HTTP_PORT=8080 \\\n", + " -e AIP_HEALTH_ROUTE=/health \\\n", + " -e AIP_PREDICT_ROUTE=/predict \\\n", + " -e AIP_STORAGE_URI={BUCKET_URI}/{MODEL_ARTIFACT_DIR} \\\n", + " \"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "248f481e8e90" + }, + "source": [ + "Ping the health route." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce629eea32fd" + }, + "outputs": [], + "source": [ + "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", + " ! curl localhost/health" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2d6821fb2b7d" + }, + "source": [ + "Pass the `instances.json` and test the predict route." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "56986f93438e" + }, + "outputs": [], + "source": [ + "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", + " ! curl -X POST \\\n", + " -d @instances.json \\\n", + " -H \"Content-Type: application/json; charset=utf-8\" \\\n", + " localhost/predict" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d1d6ee697180" + }, + "source": [ + "Stop and delete the container locally." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a29fcbbe0188" + }, + "outputs": [], + "source": [ + "if not IS_COLAB and not os.getenv(\"IS_TESTING\"):\n", + " ! sudo docker stop local-iris\n", + " ! sudo docker rm local-iris" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "212b2935ea12" + }, + "source": [ + "### Push the container to artifact registry\n", + "\n", + "Create your repository in the Artifact registry and push your container image to the repository.\n", + "Run this below cell once to create the artifact repository." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5f98a42332e5" + }, + "outputs": [], + "source": [ + "!gcloud artifacts repositories create {REPOSITORY} \\\n", + " --repository-format=docker \\\n", + " --location=$REGION" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d2e0b8b700aa" + }, + "source": [ + "Push the image to the created artifact repository using Cloud-Build.\n", + "\n", + "**Note:** The following command automatically considers the Dockerfile from the directory it is being run from." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1dd7448f4703" + }, + "outputs": [], + "source": [ + "!gcloud builds submit --region={REGION} --tag={REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b438bfa2129f" + }, + "source": [ + "## Deploy to Vertex AI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4ae19df6a33e" + }, + "source": [ + "### Create Vertex AI model using artifact uri\n", + "Use the Python SDK to upload and deploy your model from the artifact registry." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2738154345d5" + }, + "outputs": [], + "source": [ + "model = aiplatform.Model.upload(\n", + " display_name=MODEL_DISPLAY_NAME,\n", + " artifact_uri=f\"{BUCKET_URI}/{MODEL_ARTIFACT_DIR}\",\n", + " serving_container_image_uri=f\"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bd1b85afc7df" + }, + "source": [ + "### Deploy the model to Vertex AI Endpoints\n", + "\n", + "Deploy the model to a Vertex AI Endpoint. After this step completes, the model is deployed and ready for online predictions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "62cf66498a28" + }, + "outputs": [], + "source": [ + "endpoint = model.deploy(machine_type=\"n1-standard-4\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6883e7b07143" + }, + "source": [ + "## Request predictions\n", + "\n", + "Send online requests to the model deployed to the endpoint and get predictions.\n", + "\n", + "### Using Python SDK\n", + "\n", + "Get predictions from the endpoint for a sample input using python SDK." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d69ed411c2d3" + }, + "outputs": [], + "source": [ + "endpoint.predict(instances=[[6.7, 3.1, 4.7, 1.5], [4.6, 3.1, 1.5, 0.2]])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "370d22f53427" + }, + "source": [ + "### Using REST\n", + "\n", + "Get predictions from the endpoint using curl request." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ba55bc560d58" + }, + "outputs": [], + "source": [ + "ENDPOINT_ID = endpoint.name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "95c562b4e98b" + }, + "outputs": [], + "source": [ + "! curl \\\n", + "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + "-H \"Content-Type: application/json\" \\\n", + "-d @instances.json \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}:predict" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fa71174a7dd0" + }, + "source": [ + "### Using gcloud CLI\n", + "\n", + "Get predictions from the endpoint using gcloud CLI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "23b8e807b02c" + }, + "outputs": [], + "source": [ + "!gcloud ai endpoints predict $ENDPOINT_ID \\\n", + " --region=$REGION \\\n", + " --json-request=instances.json" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:\n", + "\n", + "- Model\n", + "- Endpoint\n", + "- Artifact Registry Image\n", + "- Artifact Repository: Set `delete_art_repo` to **True** to delete the repository created in this tutorial.\n", + "- Cloud Storage bucket: Set `delete_bucket` to **True** to delete the Cloud Storage bucket used in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "delete_bucket = False\n", + "delete_art_repo = False\n", + " \n", + "# Undeploy model and delete endpoint\n", + "endpoint.undeploy_all()\n", + "endpoint.delete()\n", + "\n", + "#Delete the model resource\n", + "model.delete()\n", + "\n", + "# Delete the container image from Artifact Registry\n", + "!gcloud artifacts docker images delete \\\n", + " --quiet \\\n", + " --delete-tags \\\n", + " {REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}\n", + "\n", + "# Delete the artifact registry\n", + "if delete_art_repo or os.getenv(\"IS_TESTING\"):\n", + " ! gcloud artifacts repositories delete {REPOSITORY} --location=$REGION -q\n", + " \n", + "# Delete the Cloud Storage bucket\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil -m rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "SDK_Custom_Container_Prediction.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/notebooks/official/custom/SDK_FBProphet_Forecasting_Online.ipynb b/notebooks/official/custom/SDK_FBProphet_Forecasting_Online.ipynb index b648b5b70..2e20736cd 100644 --- a/notebooks/official/custom/SDK_FBProphet_Forecasting_Online.ipynb +++ b/notebooks/official/custom/SDK_FBProphet_Forecasting_Online.ipynb @@ -44,7 +44,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -62,7 +62,9 @@ "\n", "This tutorial walks you through building a custom container to serve a facebook prophet model on Vertex AI. You use the FastAPI Python web server framework to create a prediction endpoint. This notebook is a modified version of an example on [serving a scikit-learn model on Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/sdk/SDK_Custom_Container_Prediction.ipynb).\n", "\n", - "Learn more about serving an FBProphet model from this [article on testdriven.io: Deploying and Hosting a Machine Learning Model with FastAPI and Heroku](https://testdriven.io/blog/fastapi-machine-learning/).\n" + "Learn more about serving an FBProphet model from this [article on testdriven.io: Deploying and Hosting a Machine Learning Model with FastAPI and Heroku](https://testdriven.io/blog/fastapi-machine-learning/).\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training) and [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions).\n" ] }, { diff --git a/notebooks/official/custom/custom-tabular-bq-managed-dataset.ipynb b/notebooks/official/custom/custom-tabular-bq-managed-dataset.ipynb index 3fb088626..c8c3b36c1 100644 --- a/notebooks/official/custom/custom-tabular-bq-managed-dataset.ipynb +++ b/notebooks/official/custom/custom-tabular-bq-managed-dataset.ipynb @@ -61,7 +61,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom tabular classification model for online prediction." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom tabular classification model for online prediction.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { @@ -413,18 +415,6 @@ "- Split train and test data" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "b5dfe6890137" - }, - "outputs": [], - "source": [ - "# Define the BigQuery source dataset\n", - "BQ_SOURCE = \"bigquery-public-data.ml_datasets.penguins\"" - ] - }, { "cell_type": "code", "execution_count": null, @@ -451,10 +441,6 @@ "# Drop unusable rows\n", "df = df.replace(to_replace=NA_VALUES, value=np.NaN).dropna()\n", "\n", - "df_numeric = df.select_dtypes(include=\"number\").astype(\"float32\")\n", - "df_numeric = (df_numeric - df_numeric.mean()) / df_numeric.std()\n", - "df[df_numeric.columns] = df_numeric\n", - "\n", "# Convert categorical columns to numeric\n", "df[\"island\"], _ = pd.factorize(df[\"island\"])\n", "df[\"species\"], _ = pd.factorize(df[\"species\"])\n", @@ -465,45 +451,6 @@ "df_holdout = df[~df.index.isin(df_train.index)]" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "4e6a4fd28bab" - }, - "source": [ - "### Write the training dataset to BigQuery\n", - "Use the BigQuery SDK to create a dataset and write your training dataframe to it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8b41bbd2380a" - }, - "outputs": [], - "source": [ - "# Write training dataset to BigQuery\n", - "\n", - "# Create BigQuery dataset\n", - "dataset_id = \"dataset_id_unique\"\n", - "bq_dataset = bigquery.Dataset(f\"{PROJECT_ID}.{dataset_id}\")\n", - "bq_dataset = bq_client.create_dataset(bq_dataset, exists_ok=True)\n", - "\n", - "# Reference: https://cloud.google.com/bigquery/docs/samples/bigquery-load-table-dataframe\n", - "table_id = \"table_id_unique\"\n", - "job = bq_client.load_table_from_dataframe(\n", - " dataframe=df_train,\n", - " destination=f\"{PROJECT_ID}.{dataset_id}.{table_id}\",\n", - ")\n", - "\n", - "job.result()\n", - "\n", - "BQ_TRAIN_URI = str(job.destination)\n", - "\n", - "BQ_TRAIN_URI" - ] - }, { "cell_type": "markdown", "metadata": { @@ -517,6 +464,20 @@ "See more info here: https://cloud.google.com/vertex-ai/docs/training/using-managed-datasets" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7fa452ee5c75" + }, + "outputs": [], + "source": [ + "# Create BigQuery dataset\n", + "bq_dataset_id = f\"{PROJECT_ID}.dataset_id_unique\"\n", + "bq_dataset = bigquery.Dataset(bq_dataset_id)\n", + "bq_client.create_dataset(bq_dataset, exists_ok=True)" + ] + }, { "cell_type": "code", "execution_count": null, @@ -525,8 +486,10 @@ }, "outputs": [], "source": [ - "dataset = aiplatform.TabularDataset.create(\n", - " display_name=\"sample-penguins\", bq_source=f\"bq://{BQ_TRAIN_URI}\"\n", + "dataset = aiplatform.TabularDataset.create_from_dataframe(\n", + " df_source=df_train,\n", + " staging_path=f\"bq://{bq_dataset_id}.table-unique\",\n", + " display_name=\"sample-penguins\",\n", ")" ] }, @@ -542,7 +505,9 @@ "\n", "- **Use a Vertex AI pre-built container**. If you use a pre-built training container, you must additionally specify a Python package to install into the container image. This Python package contains your training code.\n", "\n", - "- **Use your own custom container image**. If you use your own container, the container image must contain your training code." + "- **Use your own custom container image**. If you use your own container, the container image must contain your training code.\n", + "\n", + "You will use a pre-built container for this demo." ] }, { @@ -591,7 +556,6 @@ "In the next cell, write the contents of the training script, `task.py`. In summary, the script does the following:\n", "\n", "- Loads the data from the BigQuery table using the BigQuery Python client library.\n", - "- Loads the pre-calculated mean and standard deviation from the Cloud Storage bucket.\n", "- Builds a model using TF.Keras model API.\n", "- Compiles the model (`compile()`).\n", "- Sets a training distribution strategy according to the argument `args.distribute`.\n", @@ -631,15 +595,9 @@ "\n", "# Read args\n", "parser = argparse.ArgumentParser()\n", - "parser.add_argument('--label_column', dest='label_column',\n", - " required=True, type=str,\n", - " help='Label column.')\n", - "parser.add_argument('--epochs', dest='epochs',\n", - " default=10, type=int,\n", - " help='Number of epochs.')\n", - "parser.add_argument('--batch_size', dest='batch_size',\n", - " default=10, type=int,\n", - " help='Batch size.')\n", + "parser.add_argument('--label_column', required=True, type=str)\n", + "parser.add_argument('--epochs', default=10, type=int)\n", + "parser.add_argument('--batch_size', default=10, type=int)\n", "args = parser.parse_args()\n", "\n", "# Set up training variables\n", @@ -904,8 +862,7 @@ "\n", "You can then run a quick evaluation on the prediction results:\n", "1. `np.argmax`: Convert each list of confidence levels to a label\n", - "2. Compare the predicted labels to the actual labels\n", - "3. Calculate `accuracy` as `correct/total`" + "2. Print predictions" ] }, { @@ -919,11 +876,7 @@ "predictions = endpoint.predict(instances=holdout_x)\n", "y_predicted = np.argmax(predictions.predictions, axis=1)\n", "\n", - "correct = sum(y_predicted == np.array(holdout_y))\n", - "accuracy = len(y_predicted)\n", - "print(\n", - " f\"Correct predictions = {correct}, Total predictions = {accuracy}, Accuracy = {correct/accuracy}\"\n", - ")" + "y_predicted" ] }, { diff --git a/notebooks/official/custom/custom_training_tensorboard_profiler.ipynb b/notebooks/official/custom/custom_training_tensorboard_profiler.ipynb index e9a2518c6..ff52144c1 100644 --- a/notebooks/official/custom/custom_training_tensorboard_profiler.ipynb +++ b/notebooks/official/custom/custom_training_tensorboard_profiler.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "Vertex AI TensorBoard Profiler lets you monitor and optimize your model training performance by helping you understand the resource consumption of training operations. This tutorial demonstrates how to enable Vertex AI TensorBoard Profiler so you can debug model training performance for your custom training jobs.\n" + "Vertex AI TensorBoard Profiler lets you monitor and optimize your model training performance by helping you understand the resource consumption of training operations. This tutorial demonstrates how to enable Vertex AI TensorBoard Profiler so you can debug model training performance for your custom training jobs.\n", + "\n", + "Learn more about [Vertex AI TensorBoard Profiler](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-profiler)." ] }, { diff --git a/notebooks/official/custom/get_started_with_vertex_endpoint_and_shared_vm.ipynb b/notebooks/official/custom/get_started_with_vertex_endpoint_and_shared_vm.ipynb new file mode 100644 index 000000000..3f94e7bc4 --- /dev/null +++ b/notebooks/official/custom/get_started_with_vertex_endpoint_and_shared_vm.ipynb @@ -0,0 +1,1612 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Get started with Endpoint and shared VM\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use Vertex AI for E2E MLOps on Google Cloud in production. This tutorial covers: get started with Endpoints and shared VM for co-hosting models." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:flowers,icn" + }, + "source": [ + "### Pre-trained Models\n", + "\n", + "The pre-trained models used for this tutorial are from the [TensorFlow Hub](https://tfhub.dev/) repository:\n", + "\n", + "- [image classification](https://tfhub.dev/google/imagenet/inception_v3/classification/5): trained with ImageNet.\n", + "- [text sentence encoder](https://tfhub.dev/google/universal-sentence-encoder/4): Google's universal sentence encoder" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage2,get_started_automl_training" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use deployment resource pools for deploying models. A deployment resouce pool provides one with the ability to co-host more than one model on the same (shared) VM.\n", + "\n", + "A deployment resource pool groups together model deployments to share resources within a VM. Multiple endpoints can be deployed on the same VM within a Deployment Resource Pool. Each of these endpoints can have one or more deployed models. The deployed models for a given endpoint can be grouped under the same or different deployment resource pools.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Training`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Upload a pre-trained image classification model as a `Model` resource (model A).\n", + "- Upload a pre-trained text sentence encoder model as a `Model` resource (model B).\n", + "- Create a shared VM deployment resource pool.\n", + "- List shared VM deployment resource pools.\n", + "- Create two `Endpoint` resources.\n", + "- Deploy first model (model A) to first `Endpoint` resource using deployment resource pool.\n", + "- Deploy second model (model B) to second `Endpoint` resource using deployment resource pool.\n", + "- Make a prediction request with first deployed model (model A).\n", + "- Make a prediction request with second deployed model (model B)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fb3451ce8e47" + }, + "source": [ + "### Costs\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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_mlops" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install the packages\n", + "\n", + "! pip3 install --upgrade google-cloud-aiplatform $USER_FLAG -q\n", + "! pip3 install --upgrade tensorflow $USER_FLAG -q\n", + "! pip3 install --upgrade tensorflow-hub $USER_FLAG -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "project_id" + }, + "source": [ + "### 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", + "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, Compute Engine and Cloud Storage APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,storage_component).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands.\n", + "\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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "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\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3ffa6b6c7cdb" + }, + "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", + "1. **Click Create service account**.\n", + "\n", + "2. In the **Service account name** field, enter a name, and click **Create**.\n", + "\n", + "3. In the **Grant this service account access to project** section, click the Role drop-down list. Type \"Vertex AI\" into the filter box, and select **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "4. Click Create. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "5. Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b72272258fc" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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_URI == \"\" or BUCKET_URI is None or BUCKET_URI == \"gs://[your-bucket-name]\":\n", + " BUCKET_NAME = PROJECT_ID + \"aip-\" + TIMESTAMP\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "setup_vars" + }, + "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 aiplatform\n", + "import google.cloud.aiplatform_v1beta1 as aip_beta\n", + "import tensorflow as tf\n", + "import tensorflow_hub as hub" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aip_constants:fs" + }, + "source": [ + "#### Vertex AI constants\n", + "\n", + "Setup up the following constants for Vertex AI:\n", + "\n", + "- `API_ENDPOINT`: The Vertex AI API service endpoint for `Endpoint` services." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aip_constants:fs" + }, + "outputs": [], + "source": [ + "# API service endpoint\n", + "API_ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", + "\n", + "# Vertex location root path for your dataset, model and endpoint resources\n", + "PARENT = \"projects/\" + PROJECT_ID + \"/locations/\" + REGION" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "clients:metadata" + }, + "source": [ + "## Set up clients\n", + "\n", + "The Vertex works as a client/server model. On your side (the Python script) you will create a client that sends requests and receives responses from the Vertex AI server.\n", + "\n", + "You will use different clients in this tutorial for different steps in the workflow. So set them all up upfront.\n", + "\n", + "- Endpoint Service for creating endpoints, and deploying models to endpoints." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "clients:metadata" + }, + "outputs": [], + "source": [ + "# client options same for all services\n", + "client_options = {\"api_endpoint\": API_ENDPOINT}\n", + "\n", + "\n", + "def create_endpoint_client():\n", + " client = aip_beta.EndpointServiceClient(client_options=client_options)\n", + " return client\n", + "\n", + "\n", + "clients = {}\n", + "clients[\"endpoint\"] = create_endpoint_client()\n", + "\n", + "for client in clients.items():\n", + " print(client)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "accelerators:training,cpu,prediction,cpu,mbsdk" + }, + "source": [ + "#### Set hardware accelerators\n", + "\n", + "You can set hardware accelerators for training and prediction.\n", + "\n", + "Set the variables `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Telsa K80 GPUs allocated to each VM, you would specify:\n", + "\n", + " (aip.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "\n", + "Otherwise specify `(None, None)` to use a container image to run on a CPU.\n", + "\n", + "Learn more about [hardware accelerator support for your region](https://cloud.google.com/vertex-ai/docs/general/locations#accelerators).\n", + "\n", + "*Note*: TF releases before 2.3 for GPU support will fail to load the custom model in this tutorial. It is a known issue and fixed in TF 2.3. This is caused by static graph ops that are generated in the serving function. If you encounter this issue on your own custom models, use a container image for TF 2.3 with GPU support." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "accelerators:training,cpu,prediction,cpu,mbsdk" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_DEPLOY_GPU\"):\n", + " DEPLOY_GPU, DEPLOY_NGPU = (\n", + " aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80,\n", + " int(os.getenv(\"IS_TESTING_DEPLOY_GPU\")),\n", + " )\n", + "else:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (None, None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for prediction.\n", + "\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "container:training,prediction" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TF\"):\n", + " TF = os.getenv(\"IS_TESTING_TF\")\n", + "else:\n", + " TF = \"2.5\".replace(\".\", \"-\")\n", + "\n", + "if TF[0] == \"2\":\n", + " if DEPLOY_GPU:\n", + " DEPLOY_VERSION = \"tf2-gpu.{}\".format(TF)\n", + " else:\n", + " DEPLOY_VERSION = \"tf2-cpu.{}\".format(TF)\n", + "else:\n", + " if DEPLOY_GPU:\n", + " DEPLOY_VERSION = \"tf-gpu.{}\".format(TF)\n", + " else:\n", + " DEPLOY_VERSION = \"tf-cpu.{}\".format(TF)\n", + "\n", + "DEPLOY_IMAGE = \"{}-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(\n", + " REGION.split(\"-\")[0], DEPLOY_VERSION\n", + ")\n", + "\n", + "print(\"Deployment:\", DEPLOY_IMAGE, DEPLOY_GPU, DEPLOY_NGPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training" + }, + "source": [ + "#### Set machine type\n", + "\n", + "Next, set the machine type to use for prediction.\n", + "\n", + "- Set the variable `DEPLOY_COMPUTE` to configure the compute resources for the VMs you will use for for prediction.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU.\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "machine:training" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_DEPLOY_MACHINE\"):\n", + " MACHINE_TYPE = os.getenv(\"IS_TESTING_DEPLOY_MACHINE\")\n", + "else:\n", + " MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "DEPLOY_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", DEPLOY_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d8128b8ff025" + }, + "source": [ + "## Get pretrained model from TensorFlow Hub\n", + "\n", + "For demonstration purposes, this tutorial uses a pretrained models from TensorFlow Hub (TFHub), which is then uploaded to a `Vertex AI Model` resource. Once you have a `Vertex AI Model` resource, the model can be deployed to a `Vertex AI Endpoint` resource.\n", + "\n", + "### Download the pretrained image classification model\n", + "\n", + "First, you download the pretrained image classification model from TensorFlow Hub. The model gets downloaded as a TF.Keras layer. To finalize the model, in this example, you create a `Sequential()` model with the downloaded TFHub model as a layer, and specify the input shape to the model. The download model is pretrained on ImageNet." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "249bd746def6" + }, + "outputs": [], + "source": [ + "tfhub_model_icn = tf.keras.Sequential(\n", + " [hub.KerasLayer(\"https://tfhub.dev/google/imagenet/inception_v3/classification/5\")]\n", + ")\n", + "tfhub_model_icn.build([None, 224, 224, 3])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "63de49055083" + }, + "source": [ + "### Save the model artifacts\n", + "\n", + "At this point, the model is in memory. Next, you save the model artifacts to a Cloud Storage location." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "64618c713db9" + }, + "outputs": [], + "source": [ + "MODEL_ICN_DIR = BUCKET_URI + \"/model_icn\"\n", + "tfhub_model_icn.save(MODEL_ICN_DIR)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "how_serving_function_works" + }, + "source": [ + "## Upload the model for serving\n", + "\n", + "Next, you will upload your TFHub image classification model to Vertex AI `Model` service, which will create a Vertex AI `Model` resource for your model. During upload, you need to define a serving function to convert data to the format your model expects. If you send encoded data to Vertex AI, your serving function ensures that the data is decoded on the model server before it is passed as input to your model.\n", + "\n", + "### How does the serving function work\n", + "\n", + "When you send a request to an online prediction server, the request is received by a HTTP server. The HTTP server extracts the prediction request from the HTTP request content body. The extracted prediction request is forwarded to the serving function. For Google pre-built prediction containers, the request content is passed to the serving function as a `tf.string`.\n", + "\n", + "The serving function consists of two parts:\n", + "\n", + "- `preprocessing function`:\n", + " - Converts the input (`tf.string`) to the input shape and data type of the underlying model (dynamic graph).\n", + " - Performs the same preprocessing of the data that was done during training the underlying model -- e.g., normalizing, scaling, etc.\n", + "- `post-processing function`:\n", + " - Converts the model output to format expected by the receiving application -- e.q., compresses the output.\n", + " - Packages the output for the the receiving application -- e.g., add headings, make JSON object, etc.\n", + "\n", + "Both the preprocessing and post-processing functions are converted to static graphs which are fused to the model. The output from the underlying model is passed to the post-processing function. The post-processing function passes the converted/packaged output back to the HTTP server. The HTTP server returns the output as the HTTP response content.\n", + "\n", + "One consideration you need to consider when building serving functions for TF.Keras models is that they run as static graphs. That means, you cannot use TF graph operations that require a dynamic graph. If you do, you will get an error during the compile of the serving function which will indicate that you are using an EagerTensor which is not supported." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "serving_function_image:post" + }, + "source": [ + "### Serving function for image data\n", + "\n", + "#### Preprocessing\n", + "\n", + "To pass images to the prediction service, you encode the compressed (e.g., JPEG) image bytes into base 64 -- which makes the content safe from modification while transmitting binary data over the network. Since this deployed model expects input data as raw (uncompressed) bytes, you need to ensure that the base 64 encoded data gets converted back to raw bytes, and then preprocessed to match the model input requirements, before it is passed as input to the deployed model.\n", + "\n", + "To resolve this, you define a serving function (`serving_fn`) and attach it to the model as a preprocessing step. Add a `@tf.function` decorator so the serving function is fused to the underlying model (instead of upstream on a CPU).\n", + "\n", + "When you send a prediction or explanation request, the content of the request is base 64 decoded into a Tensorflow string (`tf.string`), which is passed to the serving function (`serving_fn`). The serving function preprocesses the `tf.string` into raw (uncompressed) numpy bytes (`preprocess_fn`) to match the input requirements of the model:\n", + "\n", + "- `io.decode_jpeg`- Decompresses the JPG image which is returned as a Tensorflow tensor with three channels (RGB).\n", + "- `image.convert_image_dtype` - Changes integer pixel values to float 32, and rescales pixel data between 0 and 1.\n", + "- `image.resize` - Resizes the image to match the input shape for the model.\n", + "\n", + "At this point, the data can be passed to the model (`m_call`), via a concrete function. The serving function is a static graph, while the model is a dynamic graph. The concrete function performs the tasks of marshalling the input data from the serving function to the model, and marshalling the prediction result from the model back to the serving function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "serving_function_image" + }, + "outputs": [], + "source": [ + "CONCRETE_INPUT = \"numpy_inputs\"\n", + "\n", + "\n", + "def _preprocess(bytes_input):\n", + " decoded = tf.io.decode_jpeg(bytes_input, channels=3)\n", + " decoded = tf.image.convert_image_dtype(decoded, tf.float32)\n", + " resized = tf.image.resize(decoded, size=(224, 224))\n", + " return resized\n", + "\n", + "\n", + "@tf.function(input_signature=[tf.TensorSpec([None], tf.string)])\n", + "def preprocess_fn(bytes_inputs):\n", + " decoded_images = tf.map_fn(\n", + " _preprocess, bytes_inputs, dtype=tf.float32, back_prop=False\n", + " )\n", + " return {\n", + " CONCRETE_INPUT: decoded_images\n", + " } # User needs to make sure the key matches model's input\n", + "\n", + "\n", + "@tf.function(input_signature=[tf.TensorSpec([None], tf.string)])\n", + "def serving_fn(bytes_inputs):\n", + " images = preprocess_fn(bytes_inputs)\n", + " prob = m_call(**images)\n", + " return prob\n", + "\n", + "\n", + "m_call = tf.function(tfhub_model_icn.call).get_concrete_function(\n", + " [tf.TensorSpec(shape=[None, 224, 224, 3], dtype=tf.float32, name=CONCRETE_INPUT)]\n", + ")\n", + "\n", + "tf.saved_model.save(\n", + " tfhub_model_icn, MODEL_ICN_DIR, signatures={\"serving_default\": serving_fn}\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "serving_function_signature:image" + }, + "source": [ + "### Get the serving function signature\n", + "\n", + "You can get the signatures of your model's input and output layers by reloading the model into memory, and querying it for the signatures corresponding to each layer.\n", + "\n", + "For your purpose, you need the signature of the serving function. Why? Well, when we send our data for prediction as a HTTP request packet, the image data is base64 encoded, and our TF.Keras model takes numpy input. Your serving function will do the conversion from base64 to a numpy array.\n", + "\n", + "When making a prediction request, you need to route the request to the serving function instead of the model, so you need to know the input layer name of the serving function -- which you will use later when you make a prediction request." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "serving_function_signature:image" + }, + "outputs": [], + "source": [ + "loaded = tf.saved_model.load(MODEL_ICN_DIR)\n", + "\n", + "serving_input_icn = list(\n", + " loaded.signatures[\"serving_default\"].structured_input_signature[1].keys()\n", + ")[0]\n", + "print(\"Serving function input:\", serving_input_icn)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e8ce91147c93" + }, + "source": [ + "### Upload the TensorFlow Hub model to a `Vertex AI Model` resource\n", + "\n", + "Finally, you upload the model artifacts from the TFHub model and serving function into a `Vertex AI Model` resource.\n", + "\n", + "*Note:* When you upload the model artifacts to a `Vertex AI Model` resource, you specify the corresponding deployment container image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ad61e1429512" + }, + "outputs": [], + "source": [ + "model_icn = aiplatform.Model.upload(\n", + " display_name=\"icn_\" + TIMESTAMP,\n", + " artifact_uri=MODEL_ICN_DIR,\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + ")\n", + "\n", + "print(model_icn)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1e893c95868b" + }, + "source": [ + "### Download the pretrained sentence encoder model\n", + "\n", + "Next, you download the pretrained text sentence encoder model from TensorFlow Hub. The model gets downloaded as a TF.Keras layer. To finalize the model, in this example, you create a `Sequential()` model with the downloaded TFHub model as a layer, and specify the input shape to the model. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a3760344b764" + }, + "outputs": [], + "source": [ + "tfhub_model_use = tf.keras.Sequential(\n", + " [hub.KerasLayer(\"https://tfhub.dev/google/universal-sentence-encoder/4\")]\n", + ")\n", + "\n", + "# force the model to build\n", + "tfhub_model_use.predict([\"foo\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "63de49055083" + }, + "source": [ + "### Save the model artifacts\n", + "\n", + "At this point, the model is in memory. Next, you save the model artifacts to a Cloud Storage location." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "64618c713db9" + }, + "outputs": [], + "source": [ + "MODEL_USE_DIR = BUCKET_URI + \"/model_use\"\n", + "tfhub_model_use.save(MODEL_USE_DIR)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "serving_function_signature:image" + }, + "source": [ + "## Get the serving function signature\n", + "\n", + "You can get the signatures of your model's input and output layers by reloading the model into memory, and querying it for the signatures corresponding to each layer.\n", + "\n", + "For your purpose, you need the signature of the serving function. \n", + "\n", + "When making a prediction request, you need to route the request to the serving function instead of the model, so you need to know the input layer name of the serving function -- which you will use later when you make a prediction request." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "serving_function_signature:image" + }, + "outputs": [], + "source": [ + "loaded = tf.saved_model.load(MODEL_USE_DIR)\n", + "\n", + "serving_input_use = list(\n", + " loaded.signatures[\"serving_default\"].structured_input_signature[1].keys()\n", + ")[0]\n", + "print(\"Serving function input:\", serving_input_use)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e8ce91147c93" + }, + "source": [ + "### Upload the TensorFlow Hub model to a `Vertex AI Model` resource\n", + "\n", + "Finally, you upload the model artifacts from the TFHub model and serving function into a `Vertex AI Model` resource.\n", + "\n", + "*Note:* When you upload the model artifacts to a `Vertex AI Model` resource, you specify the corresponding deployment container image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ad61e1429512" + }, + "outputs": [], + "source": [ + "model_use = aiplatform.Model.upload(\n", + " display_name=\"icn_\" + TIMESTAMP,\n", + " artifact_uri=MODEL_USE_DIR,\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + ")\n", + "\n", + "print(model_use)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Gk9tr92tSh-f" + }, + "source": [ + "## Creating a deployment resource pool\n", + "\n", + "Currently, creating deploynent resource pools is only supported via the REST-based API (e.g., CURL).\n", + "\n", + "Use `CreateDeploymentResourcePool` API to create a resource pool, with the following configuration:\n", + "\n", + "- `dedicated_resources`: Compute (HW) resources to allocate for the shared vm.\n", + "- `min_replica_count`: Auto-scaling, the minimum number of compute nodes.\n", + "- `max_replica_count`: Auto-scaling, the maximum number of compute nodes.\n", + "\n", + "Learn more about [Deployment Resource Pools]()." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YiBmoiWYcMQt" + }, + "outputs": [], + "source": [ + "DEPLOYMENT_RESOURCE_POOL_ID = \"shared-vm\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0CHPJ4h-Slgs" + }, + "outputs": [], + "source": [ + "import json\n", + "import pprint\n", + "pp = pprint.PrettyPrinter(indent=4)\n", + "\n", + "MIN_NODES = 1\n", + "MAX_NODES = 2\n", + "\n", + "CREATE_RP_PAYLOAD = {\n", + " \"deployment_resource_pool\":{\n", + " \"dedicated_resources\":{\n", + " \"machine_spec\":{\n", + " \"machine_type\": DEPLOY_COMPUTE\n", + " },\n", + " \"min_replica_count\": MIN_NODES, \n", + " \"max_replica_count\": MAX_NODES\n", + " }\n", + " },\n", + " \"deployment_resource_pool_id\":DEPLOYMENT_RESOURCE_POOL_ID\n", + "}\n", + "CREATE_RP_REQUEST=json.dumps(CREATE_RP_PAYLOAD)\n", + "pp.pprint(\"CREATE_RP_REQUEST: \" + CREATE_RP_REQUEST)\n", + "\n", + "! curl \\\n", + "-X POST \\\n", + "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + "-H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools \\\n", + "-d '{CREATE_RP_REQUEST}'" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3WP4WV_bZzDh" + }, + "source": [ + "## Get a deployment resource pool\n", + "\n", + "Use `GetDeploymentResourcePool` API to check out the deploynent resource pool that you created. \n", + "\n", + "Learn more about [Get Deployment Resource Pool](https://source.corp.google.com/piper///depot/google3/google/cloud/aiplatform/master/deployment_resource_pool_service.proto;l=75?q=deployment_resource_pool&sq=package:piper%20file:%2F%2Fdepot%2Fgoogle3%20-file:google3%2Fexperimental)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6wTLyhPraFah" + }, + "outputs": [], + "source": [ + "! curl -X GET \\\n", + "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + "-H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools/{DEPLOYMENT_RESOURCE_POOL_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gBQyGl-7aaZC" + }, + "source": [ + "## List all deployment resource pools\n", + "\n", + "Use `ListDeploymentResourcePools` API to list all the deployment resource pools. \n", + "\n", + "Learn more about [Listing Deployment Resource Pools](https://source.corp.google.com/piper///depot/google3/google/cloud/aiplatform/master/deployment_resource_pool_service.proto;l=101?q=deployment_resource_pool&sq=package:piper%20file:%2F%2Fdepot%2Fgoogle3%20-file:google3%2Fexperimental)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Pxls4sNnaltU" + }, + "outputs": [], + "source": [ + "! curl -X GET \\\n", + "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + "-H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "628de0914ba1" + }, + "source": [ + "## Creating two `Endpoint` resource\n", + "\n", + "Next, you create two `Endpoint` resources using the `Endpoint.create()` method. At a minimum, you specify the display name for the endpoint. Optionally, you can specify the project and location (region); otherwise the settings are inherited by the values you set when you initialized the Vertex AI SDK with the `init()` method.\n", + "\n", + "In this example, the following parameters are specified:\n", + "\n", + "- `display_name`: A human readable name for the `Endpoint` resource.\n", + "\n", + "This method returns an `Endpoint` object.\n", + "\n", + "Learn more about [Vertex AI Endpoints](https://cloud.google.com/vertex-ai/docs/predictions/deploy-model-api)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0ea443f9593b" + }, + "outputs": [], + "source": [ + "endpoint_icn = aiplatform.Endpoint.create(display_name=\"icn_\" + TIMESTAMP)\n", + "\n", + "print(endpoint_icn)\n", + "\n", + "endpoint_use = aiplatform.Endpoint.create(display_name=\"use_\" + TIMESTAMP)\n", + "\n", + "print(endpoint_use)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "azXkQSkjb3tv" + }, + "source": [ + "## Deploy Model in a Deployment Resource Pool\n", + "\n", + "After you have created a Model and an Endpoint, you are ready to deploy using the DeployModel API. See an example of the CURL command below. Notice how you specified the `shared_resources` of DeployedModel with the deployment resource name of the resource pool that was created. \n", + "\n", + "Model deployments for the same deployment resource pool can be started concurrently.\n", + "\n", + "### Deploy the image classification model\n", + "\n", + "Next, you deploy the image classification model to an `Endpoint` using your deployment resource pool." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bEcQp8eUdHok" + }, + "outputs": [], + "source": [ + "SHARED_RESOURCE = \"projects/{project_id}/locations/{region}/deploymentResourcePools/{deployment_resource_pool_id}\".format(\n", + " project_id=PROJECT_ID,\n", + " region=REGION,\n", + " deployment_resource_pool_id=DEPLOYMENT_RESOURCE_POOL_ID,\n", + ")\n", + "\n", + "DEPLOY_MODEL_PAYLOAD = {\n", + " \"deployedModel\": {\n", + " \"model\": model_icn.resource_name,\n", + " \"shared_resources\": SHARED_RESOURCE,\n", + " },\n", + " \"trafficSplit\": {\"0\": 100},\n", + "}\n", + "DEPLOY_MODEL_REQUEST = json.dumps(DEPLOY_MODEL_PAYLOAD)\n", + "pp.pprint(\"DEPLOY_MODEL_REQUEST: \" + DEPLOY_MODEL_REQUEST)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "92c2036684b3" + }, + "outputs": [], + "source": [ + "ENDPOINT_ID = endpoint_icn.name\n", + "\n", + "output = ! curl -X POST \\\n", + " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + " -H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}:deployModel \\\n", + "-d '{DEPLOY_MODEL_REQUEST}'\n", + "\n", + "for line in output:\n", + " if '\"name\"' in line:\n", + " operation_id = line.split(\":\")[-1].strip()[:-1]\n", + " break\n", + "print(operation_id)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a5053c9db02a" + }, + "source": [ + "### Wait for deployment to complete\n", + "\n", + "Next, you will query the status of the operation, waiting for the operation state `done` to be set to `true`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "563db25caa5c" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "done = False\n", + "while done != '\"done\": true':\n", + " status = ! curl -X GET \\\n", + " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + " -H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/{operation_id}\n", + " for line in status:\n", + " if '\"done\"' in line.strip():\n", + " done = line.strip()[0:-1]\n", + " print(\"DONE status:\", done)\n", + " time.sleep(30)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "68ceccf7a8a7" + }, + "source": [ + "### Deploy the text sentence encoder model\n", + "\n", + "Next, you deploy the text sentence encoder model to an `Endpoint` using your deployment resource pool." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bEcQp8eUdHok" + }, + "outputs": [], + "source": [ + "DEPLOY_MODEL_PAYLOAD = {\n", + " \"deployedModel\": {\n", + " \"model\": model_use.resource_name,\n", + " \"shared_resources\": SHARED_RESOURCE,\n", + " },\n", + " \"trafficSplit\": {\"0\": 100},\n", + "}\n", + "DEPLOY_MODEL_REQUEST = json.dumps(DEPLOY_MODEL_PAYLOAD)\n", + "pp.pprint(\"DEPLOY_MODEL_REQUEST: \" + DEPLOY_MODEL_REQUEST)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "288acc79c173" + }, + "outputs": [], + "source": [ + "ENDPOINT_ID = endpoint_use.name\n", + "\n", + "output = ! curl -X POST \\\n", + " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + " -H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}:deployModel \\\n", + "-d '{DEPLOY_MODEL_REQUEST}'\n", + "\n", + "for line in output:\n", + " if '\"name\"' in line:\n", + " operation_id = line.split(\":\")[-1].strip()[:-1]\n", + " break\n", + "print(operation_id)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "87ba1aa4e0b0" + }, + "source": [ + "### Wait for deployment to complete\n", + "\n", + "Next, you will query the status of the operation, waiting for the operation state `done` to be set to `true`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5b075d6ec099" + }, + "outputs": [], + "source": [ + "done = False\n", + "while done != '\"done\": true':\n", + " status = ! curl -X GET \\\n", + " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + " -H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/{operation_id}\n", + " for line in status:\n", + " if '\"done\"' in line.strip():\n", + " done = line.strip()[0:-1]\n", + " print(\"DONE status:\", done)\n", + " time.sleep(30)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "86a659bf60f0" + }, + "outputs": [], + "source": [ + "! curl -X GET \\\n", + " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + " -H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1/projects/759209241365/locations/us-central1/endpoints/2259566763823857664" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "033a5bfb969c" + }, + "source": [ + "### Create test example the image classification model\n", + "\n", + "Next, you test your deployed image classification model. First, you encode your test data for the serving function, which is in the format:\n", + "\n", + "`{ serving_input: { 'b64': base64_encoded_bytes } }`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "54947579cdf7" + }, + "outputs": [], + "source": [ + "! gsutil cp gs://cloud-ml-data/img/flower_photos/daisy/100080576_f52e8ee070_n.jpg test.jpg\n", + "\n", + "import base64\n", + "\n", + "with open(\"test.jpg\", \"rb\") as f:\n", + " data = f.read()\n", + "b64str = base64.b64encode(data).decode(\"utf-8\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fdf3dd237d32" + }, + "source": [ + "### Make the prediction request for the image classification model\n", + "\n", + "Finally, you make a prediction request. Since the model was trained on ImageNet, the prediction will return the probabilities for the corresponding 1000 classes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "predict_request:mbsdk,custom,icn" + }, + "outputs": [], + "source": [ + "# The format of each instance should conform to the deployed model's prediction input schema.\n", + "instances = [{serving_input_icn: {\"b64\": b64str}}]\n", + "\n", + "prediction = endpoint_icn.predict(instances=instances)\n", + "\n", + "print(prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "033a5bfb969c" + }, + "source": [ + "### Create test example the text sentence encoder model\n", + "\n", + "Next, you test your deployed text sentence encoder model. First, you encode your test data for the serving function, which is in the format:\n", + "\n", + "`\"word1 word2 ... wordN\"`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3dd85e9ce024" + }, + "outputs": [], + "source": [ + "instance = \"the brown fox jumped over the laxy dog\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e3185c34f59c" + }, + "source": [ + "### Make the prediction request for the text sentence encoder model\n", + "\n", + "Finally, you make a prediction request. The prediction will return an embedding which is a 500 element vector." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "96877270ec07" + }, + "outputs": [], + "source": [ + "endpoint_use.predict([instance])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "source": [ + "#### Undeploy the models\n", + "\n", + "When you are done doing predictions, you undeploy the model from the `Endpoint` resouce. This deprovisions all compute resources and ends billing for the deployed model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "undeploy_model:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint_icn.undeploy_all()\n", + "endpoint_use.undeploy_all()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "model_delete:mbsdk" + }, + "source": [ + "#### Delete the `Model` resources\n", + "\n", + "The method 'delete()' will delete the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "model_delete:mbsdk" + }, + "outputs": [], + "source": [ + "model_icn.delete()\n", + "model_use.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "source": [ + "#### Delete the `Endpoint` resources\n", + "\n", + "The method 'delete()' will delete the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "endpoint_delete:mbsdk" + }, + "outputs": [], + "source": [ + "endpoint_icn.delete()\n", + "endpoint_use.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c3baa3a7496e" + }, + "source": [ + "#### Delete the `DeploymentResourcePool`\n", + "\n", + "The method 'delete()' will delete your deployment resource pool." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ac40cc1d594a" + }, + "outputs": [], + "source": [ + "! curl -X DELETE \\\n", + "-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + "-H \"Content-Type: application/json\" \\\n", + "https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools/{DEPLOYMENT_RESOURCE_POOL_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup" + }, + "source": [ + "# Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cleanup" + }, + "outputs": [], + "source": [ + "# Set this to true only if you'd like to delete your bucket\n", + "delete_bucket = False\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -r $BUCKET_URI\n", + "\n", + "!rm -f test.jpg" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_with_vertex_endpoint_and_shared_vm.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/custom/sdk-custom-image-classification-batch.ipynb b/notebooks/official/custom/sdk-custom-image-classification-batch.ipynb index 317e9100f..3c71021ae 100644 --- a/notebooks/official/custom/sdk-custom-image-classification-batch.ipynb +++ b/notebooks/official/custom/sdk-custom-image-classification-batch.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom image classification model for batch prediction." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom image classification model for batch prediction.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training) and [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions)." ] }, { diff --git a/notebooks/official/custom/sdk-custom-image-classification-online.ipynb b/notebooks/official/custom/sdk-custom-image-classification-online.ipynb index 69d765e43..29f7a9f55 100644 --- a/notebooks/official/custom/sdk-custom-image-classification-online.ipynb +++ b/notebooks/official/custom/sdk-custom-image-classification-online.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom image classification model for online prediction." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom image classification model for online prediction.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training) and [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions)." ] }, { diff --git a/notebooks/official/datasets/README.md b/notebooks/official/datasets/README.md new file mode 100644 index 000000000..6f68ac3ea --- /dev/null +++ b/notebooks/official/datasets/README.md @@ -0,0 +1,38 @@ + +[Get started with BigQuery datasets](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/datasets/get_started_bq_datasets.ipynb) + +``` +Learn how to use `BigQuery` as a dataset for training with `Vertex AI`. + +The steps performed include: + +- Create a Vertex AI `Dataset` resource from `BigQuery` table -- compatible for `AutoML` training. +- Extract a copy of the dataset from `BigQuery` to a CSV file in Cloud Storage -- compatible for `AutoML` or custom training. +- Select rows from a `BigQuery` dataset into a `pandas` dataframe -- compatible for custom training. +- Select rows from a `BigQuery` dataset into a `tf.data.Dataset` -- compatible for custom training `TensorFlow` models. +- Select rows from extracted CSV files into a `tf.data.Dataset` -- compatible for custom training `TensorFlow` models. +- Create a `BigQuery` dataset from CSV files. +- Extract data from `BigQuery` table into a `DMatrix` -- compatible for custom training `XGBoost` models. + +``` + +   Learn more about [BigQuery Datasets](https://cloud.google.com/bigquery/docs/datasets-intro). + + +[Get started with Vertex AI Data Labeling](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/datasets/get_started_with_data_labeling.ipynb) + +``` +Learn how to use the `Vertex AI Data Labeling` service. + +The steps performed include: + +- Create a Specialist Pool for data labelers. +- Create a data labeling job. +- Submit the data labeling job. +- List data labeling jobs. +- Cancel a data labeling job. + +``` + +   Learn more about [Vertex AI Data Labeling](https://cloud.google.com/vertex-ai/docs/datasets/data-labeling-job). + diff --git a/notebooks/official/datasets/get_started_bq_datasets.ipynb b/notebooks/official/datasets/get_started_bq_datasets.ipynb new file mode 100644 index 000000000..beeacc430 --- /dev/null +++ b/notebooks/official/datasets/get_started_bq_datasets.ipynb @@ -0,0 +1,1253 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Get started with BigQuery datasets\n", + "\n", + "\n", + " \n", + " \n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use Vertex AI in production. This tutorial covers data management: get started with BigQuery datasets.\n", + "\n", + "Learn more about [BigQuery Datasets](https://cloud.google.com/bigquery/docs/datasets-intro)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage1,get_started_bq" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `BigQuery` as a dataset for training with `Vertex AI`.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Datasets`\n", + "- `BigQuery Datasets`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a Vertex AI `Dataset` resource from `BigQuery` table -- compatible for `AutoML` training.\n", + "- Extract a copy of the dataset from `BigQuery` to a CSV file in Cloud Storage -- compatible for `AutoML` or custom training.\n", + "- Select rows from a `BigQuery` dataset into a `pandas` dataframe -- compatible for custom training.\n", + "- Select rows from a `BigQuery` dataset into a `tf.data.Dataset` -- compatible for custom training `TensorFlow` models.\n", + "- Select rows from extracted CSV files into a `tf.data.Dataset` -- compatible for custom training `TensorFlow` models.\n", + "- Create a `BigQuery` dataset from CSV files.\n", + "- Extract data from `BigQuery` table into a `DMatrix` -- compatible for custom training `XGBoost` models." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "recommendation:mlops,stage1,tabular,bq" + }, + "source": [ + "### Recommendations\n", + "\n", + "When doing E2E MLOps on Google Cloud, following are the best practices when dealing with structured (tabular) data in BigQuery:\n", + "\n", + "- For AutoML training:\n", + " - Create a managed dataset with Vertex AI `TabularDataset`.\n", + " - Use the BigQuery table as the input to the dataset.\n", + " - Specify columns and columns transformations when running the AutoML training pipeline job.\n", + "\n", + "\n", + "- For custom training:\n", + " - For small datasets:\n", + " - Extract the BigQuery to a pandas dataframe.\n", + " - Preprocess the data in the dataframe.\n", + " - For large datasets:\n", + " - TensorFlow model training:\n", + " - Create a tf.data.Dataset generator from the BigQuery table.\n", + " - Specify the columns for the custrom training.\n", + " - Preprocess the data either:\n", + " - Within the generator (upstream)\n", + " - Within the model (downstream)\n", + " - XGBoost model training:\n", + " - Use BigQuery ML built-in XGBoost training.\n", + " - Alternatively, create a DMatrix generator from CSV files extracted from BigQuery table.\n", + " - PyTorch model training:\n", + " - Extract the BigQuery to a pandas dataframe.\n", + " - Preprocess the data in the dataframe.\n", + " - Create a DataLoader generator from the pandas dataframe.\n", + "\n", + "\n", + "- Alternatively:\n", + " - Extract the BigQuery table to CSV files.\n", + " - Preprocess the CSV files.\n", + " - Create a tf.data.Dataset generator from the CSV files." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:gsod,lrg" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the GSOD dataset from [BigQuery public datasets](https://cloud.google.com/bigquery/public-data). In this version of the dataset you consider the fields year, month and day to predict the value of mean daily temperature (mean_temp)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9e483012a752" + }, + "source": [ + "### Costs\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "- Vertex AI\n", + "- Cloud Storage\n", + "- BigQuery\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage pricing](https://cloud.google.com/storage/pricing) and [BigQuery pricing](https://cloud.google.com/bigquery/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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the following packages to execute this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_mlops" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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 --quiet {USER_FLAG} google-cloud-aiplatform \\\n", + " google-cloud-bigquery \\\n", + " tensorflow \\\n", + " tensorflow-io==0.18 \\\n", + " xgboost \\\n", + " numpy \\\n", + " pandas \\\n", + " pyarrow" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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 sys\n", + "\n", + "if \"google.colab\" in sys.modules:\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": "BF1j6f9HApxa" + }, + "source": [ + "### 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. 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.\n", + "\n", + "1. Enable the Vertex AI API.\n", + "\n", + "1. If you are running this notebook locally, you will need to install the Cloud SDK.\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3c8049930470" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "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": "markdown", + "metadata": { + "id": "qJYoRfYng0XZ" + }, + "source": [ + "Otherwise, set your project ID here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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 might not be able to 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "697568e92bd6" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", + "authenticated. \n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the **Create service account key** page.\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "62f861b68b50" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "To update your model artifacts without re-building the container, you upload your model\n", + "artifacts and any custom code to a Cloud Storage bucket. You also provide a Cloud Storage bucket to serve as a default staging location for your Vertex AI SDK.\n", + "\n", + "Set the name of your Cloud Storage bucket below. It must be unique across all\n", + "Cloud Storage buckets. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2232344edb11" + }, + "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": "6749c55b3f6f" + }, + "outputs": [], + "source": [ + "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"[your-bucket-name]\":\n", + " BUCKET_NAME = PROJECT_ID + \"aip-\" + UUID\n", + " BUCKET_URI = f\"gs://{BUCKET_NAME}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58cb4f5895f0" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2d2208676cee" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c664a5abc11a" + }, + "source": [ + "Finally, validate access to your Cloud Storage bucket by examining its contents:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2c1b1c29f5f6" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "source": [ + "### Import libraries and define constants" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_aip:mbsdk" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "import pandas as pd\n", + "import xgboost as xgb\n", + "from google.cloud import bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,region" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,region" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "### Create BigQuery client\n", + "\n", + "Create the BigQuery client." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,bq" + }, + "source": [ + "#### Location of BigQuery training data.\n", + "\n", + "Now, set the variable `IMPORT_FILE` to the location of the data table in BigQuery and `BQ_TABLE` with the table id." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:gsod,bq,lrg" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = \"bq://bigquery-public-data.samples.gsod\"\n", + "BQ_TABLE = \"bigquery-public-data.samples.gsod\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "#### BigQuery input data\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `TabularDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `bq_source`: Import data items from a BigQuery table into the `Dataset` resource.\n", + "- `labels`: User defined metadata. In this example, you store the location of the Cloud Storage bucket containing the user defined data.\n", + "\n", + "Learn more about [TabularDataset from BigQuery table](https://cloud.google.com/vertex-ai/docs/datasets/create-dataset-api#aiplatform_create_dataset_tabular_bigquery_sample-python)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.TabularDataset.create(\n", + " display_name=\"NOAA historical weather data\" + \"_\" + UUID,\n", + " bq_source=[IMPORT_FILE],\n", + " labels={\"user_metadata\": BUCKET_URI[5:]},\n", + ")\n", + "\n", + "label_column = \"mean_temp\"\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bq_extract" + }, + "source": [ + "### Copy the dataset to Cloud Storage\n", + "\n", + "Next, you make a copy of the BigQuery table as a CSV file, to Cloud Storage using the BigQuery extract command.\n", + "\n", + "Learn more about [BigQuery command line interface](https://cloud.google.com/bigquery/docs/reference/bq-cli-reference)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bq_extract" + }, + "outputs": [], + "source": [ + "comps = BQ_TABLE.split(\".\")\n", + "BQ_PROJECT_DATASET_TABLE = comps[0] + \":\" + comps[1] + \".\" + comps[2]\n", + "\n", + "! bq --location=us extract --destination_format CSV $BQ_PROJECT_DATASET_TABLE $BUCKET_URI/mydata*.csv\n", + "\n", + "IMPORT_FILES = ! gsutil ls $BUCKET_URI/mydata*.csv\n", + "\n", + "print(IMPORT_FILES)\n", + "\n", + "EXAMPLE_FILE = IMPORT_FILES[0]\n", + "\n", + "! gsutil cat $EXAMPLE_FILE | head" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:tabular,lrg" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "#### CSV input data\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `TabularDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `gcs_source`: A list of one or more dataset index files to import the data items into the `Dataset` resource.\n", + "- `labels`: User defined metadata. In this example, you store the location of the Cloud Storage bucket containing the user defined data.\n", + "\n", + "Learn more about [TabularDataset from CSV files](https://cloud.google.com/vertex-ai/docs/datasets/create-dataset-api#aiplatform_create_dataset_tabular_gcs_sample-python)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:tabular,lrg" + }, + "outputs": [], + "source": [ + "gcs_source = IMPORT_FILES\n", + "\n", + "dataset = aiplatform.TabularDataset.create(\n", + " display_name=\"NOAA historical weather data\" + \"_\" + UUID,\n", + " gcs_source=gcs_source,\n", + " labels={\"user_metadata\": BUCKET_URI[5:]},\n", + ")\n", + "\n", + "\n", + "label_column = \"mean_temp\"\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bq_view" + }, + "source": [ + "### Create a view of the BigQuery dataset\n", + "\n", + "Alternatively, you can create a logical view of a BigQuery dataset that has a subset of the fields.\n", + "\n", + "Learn more about [Creating BigQuery views](https://cloud.google.com/bigquery/docs/views)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7dc142433e50" + }, + "outputs": [], + "source": [ + "# Set dataset name and view name in BigQuery\n", + "BQ_MY_DATASET = \"[your-dataset-name]\"\n", + "BQ_MY_TABLE = \"[your-view-name]\"\n", + "\n", + "# Otherwise, use the default names\n", + "if (\n", + " BQ_MY_DATASET == \"\"\n", + " or BQ_MY_DATASET is None\n", + " or BQ_MY_DATASET == \"[your-dataset-name]\"\n", + "):\n", + " BQ_MY_DATASET = \"mlops_dataset_\" + UUID\n", + "\n", + "if BQ_MY_TABLE == \"\" or BQ_MY_TABLE is None or BQ_MY_TABLE == \"[your-view-name]\":\n", + " BQ_MY_TABLE = \"mlops_view_\" + UUID" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bq_view" + }, + "outputs": [], + "source": [ + "# Create the resources\n", + "! bq --location=US mk -d \\\n", + "$PROJECT_ID:$BQ_MY_DATASET\n", + "\n", + "sql_script = f'''\n", + "CREATE OR REPLACE VIEW `{PROJECT_ID}.{BQ_MY_DATASET}.{BQ_MY_TABLE}`\n", + "AS SELECT station_number,year,month,day,mean_temp FROM `{BQ_TABLE}`\n", + "'''\n", + "print(sql_script)\n", + "\n", + "query = bqclient.query(sql_script)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bq_to_dataframe:gsod" + }, + "source": [ + "### Read the BigQuery dataset into a pandas dataframe\n", + "\n", + "Next, you read a sample of the dataset into a pandas dataframe using BigQuery `list_rows()` and `to_dataframe()` method, as follows:\n", + "\n", + "- `list_rows()`: Performs a query on the specified table and returns a row iterator to the query results. Optionally specify:\n", + " - `selected_fields`: Subset of fields (columns) to return.\n", + " - `max_results`: The maximum number of rows to return. Same as SQL LIMIT command.\n", + "\n", + "\n", + "- `rows.to_dataframe()`: Invokes the row iterator and reads in the data into a pandas dataframe.\n", + "\n", + "Learn more about [Loading BigQuery table into a dataframe](https://cloud.google.com/bigquery/docs/bigquery-storage-python-pandas)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bq_to_dataframe:gsod" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(BQ_TABLE)\n", + "\n", + "rows = bqclient.list_rows(\n", + " table,\n", + " max_results=500,\n", + " selected_fields=[\n", + " bigquery.SchemaField(\"station_number\", \"STRING\"),\n", + " bigquery.SchemaField(\"year\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"month\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"day\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_temp\", \"FLOAT\"),\n", + " ],\n", + ")\n", + "\n", + "dataframe = rows.to_dataframe()\n", + "print(dataframe.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bq_to_dataset:gsod" + }, + "source": [ + "### Read the BigQuery dataset into a tf.data.Dataset\n", + "\n", + "Next, you read a sample of the dataset into a tf.data.Dataset using TensorFlow IO `BigQueryClient()` and `read_session()` method, with the following parameters:\n", + "\n", + "- `parent`: Your project ID.\n", + "- `project_id`: The project ID of the BigQuery table.\n", + "- `dataset_id`: The ID of the BigQuery dataset.\n", + "- `table_id`. The ID of the table within the corresponding BigQuery dataset.\n", + "- `selected_fields`: Subset of fields (columns) to return.\n", + "- `output_types`: The output types of the corresponding fields.\n", + "- `requested_streams`: The number of parallel readers.\n", + "\n", + "Learn more about [BigQuery TensorFlow reader](https://www.tensorflow.org/io/tutorials/bigquery).\n", + "\n", + "Learn more about [tf.data.Dataset](https://www.tensorflow.org/api_docs/python/tf/data/Dataset)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bq_to_dataset:gsod" + }, + "outputs": [], + "source": [ + "from tensorflow.python.framework import dtypes\n", + "from tensorflow_io.bigquery import BigQueryClient\n", + "\n", + "feature_names = \"station_number,year,month,day\".split(\",\")\n", + "\n", + "target_name = \"mean_temp\"\n", + "\n", + "\n", + "def read_bigquery(project, dataset, table):\n", + " tensorflow_io_bigquery_client = BigQueryClient()\n", + " read_session = tensorflow_io_bigquery_client.read_session(\n", + " parent=\"projects/\" + PROJECT_ID,\n", + " project_id=project,\n", + " dataset_id=dataset,\n", + " table_id=table,\n", + " selected_fields=feature_names + [target_name],\n", + " output_types=[dtypes.string] + [dtypes.int32] * 3 + [dtypes.float32],\n", + " requested_streams=2,\n", + " )\n", + "\n", + " dataset = read_session.parallel_read_rows()\n", + " return dataset\n", + "\n", + "\n", + "PROJECT, DATASET, TABLE = IMPORT_FILE.split(\"/\")[-1].split(\".\")\n", + "tf_dataset = read_bigquery(PROJECT, DATASET, TABLE)\n", + "\n", + "print(tf_dataset.take(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "csv_to_dataset:gsod" + }, + "source": [ + "### Read CSV files into a tf.data.Dataset\n", + "\n", + "Alternatively, when your data is in CSV files, you can load the dataset into a tf.data.Dataset using `tf.data.experimental.CsvDataset`, with the following parameters:\n", + "\n", + "- `filenames`: A list of one or more CSV files.\n", + "- `header`: Whether CSV file(s) contain a header.\n", + "- `select_cols`: Subset of fields (columns) to return.\n", + "- `record_defaults`: The output types of the corresponding fields.\n", + "\n", + "Learn more about [tf.data CsvDataset](https://www.tensorflow.org/api_docs/python/tf/data/experimental/CsvDataset)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "csv_to_dataset:gsod" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "\n", + "feature_names = [\"station_number,year,month,day\".split(\",\")]\n", + "\n", + "target_name = \"mean_temp\"\n", + "\n", + "tf_dataset = tf.data.experimental.CsvDataset(\n", + " filenames=IMPORT_FILES,\n", + " header=True,\n", + " select_cols=feature_names.append(target_name),\n", + " record_defaults=[dtypes.string] + [dtypes.int32] * 3 + [dtypes.float32],\n", + ")\n", + "\n", + "print(tf_dataset.take(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataframe_to_bq" + }, + "source": [ + "### Create a BigQuery dataset from a pandas dataframe\n", + "\n", + "You can create a BigQuery dataset from a pandas dataframe using the BigQuery `create_dataset()` and `load_table_from_dataframe()` methods, as follows:\n", + "\n", + "- `create_dataset()`: Creates an empty BigQuery dataset, with the following parameters:\n", + " - `dataset_ref`: The `DatasetReference` created from the dataset_id -- e.g., samples.\n", + "- `load_table_from_dataframe()`: Loads one or more CSV files into a table within the corresponding dataset, with the following parameters:\n", + " - `dataframe`: The dataframe.\n", + " - `table`: The `TableReference` for the table.\n", + " - `job_config`: Specifications on how to load the dataframe data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dataframe_to_bq" + }, + "outputs": [], + "source": [ + "LOCATION = \"us\"\n", + "\n", + "SCHEMA = [\n", + " bigquery.SchemaField(\"station_number\", \"STRING\"),\n", + " bigquery.SchemaField(\"year\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"month\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"day\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_temp\", \"FLOAT\"),\n", + "]\n", + "\n", + "\n", + "DATASET_ID = \"samples\"\n", + "TABLE_ID = \"gsod\"\n", + "\n", + "\n", + "def create_bigquery_dataset(dataset_id):\n", + " dataset = bigquery.Dataset(\n", + " bigquery.dataset.DatasetReference(PROJECT_ID, dataset_id)\n", + " )\n", + " dataset.location = \"us\"\n", + "\n", + " try:\n", + " dataset = bqclient.create_dataset(dataset) # API request\n", + " return True\n", + " except Exception as err:\n", + " print(err)\n", + " if err.code != 409: # http_client.CONFLICT\n", + " raise\n", + " return False\n", + "\n", + "\n", + "def load_data_into_bigquery(dataframe, dataset_id, table_id):\n", + " create_bigquery_dataset(dataset_id)\n", + " dataset = bqclient.dataset(dataset_id)\n", + " table = dataset.table(table_id)\n", + "\n", + " job_config = bigquery.LoadJobConfig(\n", + " # Specify a (partial) schema. All columns are always written to the\n", + " # table. The schema is used to assist in data type definitions.\n", + " schema=[\n", + " bigquery.SchemaField(\"station_number\", \"STRING\"),\n", + " bigquery.SchemaField(\"year\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"month\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"day\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_temp\", \"FLOAT\"),\n", + " ],\n", + " # Optionally, set the write disposition. BigQuery appends loaded rows\n", + " # to an existing table by default, but with WRITE_TRUNCATE write\n", + " # disposition it replaces the table with the loaded data.\n", + " write_disposition=\"WRITE_TRUNCATE\",\n", + " )\n", + "\n", + " NEW_BQ_TABLE = f\"{PROJECT_ID}.{dataset_id}.{table_id}\"\n", + "\n", + " job = bqclient.load_table_from_dataframe(\n", + " dataframe, NEW_BQ_TABLE, job_config=job_config\n", + " ) # Make an API request.\n", + " job.result() # Wait for the job to complete.\n", + "\n", + " table = bqclient.get_table(NEW_BQ_TABLE) # Make an API request.\n", + " print(\n", + " \"Loaded {} rows and {} columns to {}\".format(\n", + " table.num_rows, len(table.schema), NEW_BQ_TABLE\n", + " )\n", + " )\n", + "\n", + "\n", + "load_data_into_bigquery(dataframe, DATASET_ID, TABLE_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "csv_to_bq" + }, + "source": [ + "### Create a BigQuery dataset from CSV files\n", + "\n", + "You can create a BigQuery dataset from CSV files using the BigQuery `create_dataset()` and `load_table_from_uri()` methods, as follows:\n", + "\n", + "- `create_dataset()`: Creates an empty BigQuery dataset, with the following parameters:\n", + " - `dataset_ref`: The `DatasetReference` created from the dataset_id -- e.g., samples.\n", + "- `load_table_from_uri()`: Loads one or more CSV files into a table within the corresponding dataset, with the following parameters:\n", + " - `url`: A set of one or more CVS files in Cloud Storage storage.\n", + " - `table`: The `TableReference` for the table.\n", + " - `job_config`: Specifications on how to load the CSV data.\n", + "\n", + "Learn more about [Importing CSV data into BigQuery](https://www.tensorflow.org/io/tutorials/bigquery#import_census_data_into_bigquery)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "csv_to_bq" + }, + "outputs": [], + "source": [ + "LOCATION = \"us\"\n", + "\n", + "CSV_SCHEMA = [\n", + " bigquery.SchemaField(\"station_number\", \"STRING\"),\n", + " bigquery.SchemaField(\"wban_number\", \"STRING\"),\n", + " bigquery.SchemaField(\"year\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"month\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"day\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_temp\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"num_mean_temp_samples\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_dew_point\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"num_mean_dew_point_samples\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_sealevel_pressure\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"num_mean_sealevel_pressure_samples\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_station_pressure\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"num_mean_station_pressure_samples\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_visibility\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"num_mean_visibility_samples\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"mean_wind_speed\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"num_mean_wind_speed_samples\", \"INTEGER\"),\n", + " bigquery.SchemaField(\"max_sustained_wind_speed\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"max_gust_wind_speed\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"max_temperature\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"max_temperature_explicit\", \"BOOLEAN\"),\n", + " bigquery.SchemaField(\"min_temperature\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"min_temperature_explicit\", \"BOOLEAN\"),\n", + " bigquery.SchemaField(\"total_percipitation\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"snow_depth\", \"FLOAT\"),\n", + " bigquery.SchemaField(\"fog\", \"BOOLEAN\"),\n", + " bigquery.SchemaField(\"rain\", \"BOOLEAN\"),\n", + " bigquery.SchemaField(\"snow\", \"BOOLEAN\"),\n", + " bigquery.SchemaField(\"hail\", \"BOOLEAN\"),\n", + " bigquery.SchemaField(\"thunder\", \"BOOLEAN\"),\n", + " bigquery.SchemaField(\"tornado\", \"BOOLEAN\"),\n", + "]\n", + "\n", + "\n", + "DATASET_ID = \"samples\"\n", + "TABLE_ID = \"gsod\"\n", + "\n", + "\n", + "def load_data_into_bigquery(url, dataset_id, table_id):\n", + " create_bigquery_dataset(dataset_id)\n", + " dataset = bqclient.dataset(dataset_id)\n", + " table = dataset.table(table_id)\n", + "\n", + " job_config = bigquery.LoadJobConfig()\n", + " job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE\n", + " job_config.source_format = bigquery.SourceFormat.CSV\n", + " job_config.schema = CSV_SCHEMA\n", + " job_config.skip_leading_rows = 1 # heading\n", + "\n", + " load_job = bqclient.load_table_from_uri(url, table, job_config=job_config)\n", + " print(\"Starting job {}\".format(load_job.job_id))\n", + "\n", + " load_job.result() # Waits for table load to complete.\n", + " print(\"Job finished.\")\n", + "\n", + " destination_table = bqclient.get_table(table)\n", + " print(\"Loaded {} rows.\".format(destination_table.num_rows))\n", + "\n", + "\n", + "load_data_into_bigquery(IMPORT_FILES, DATASET_ID, TABLE_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bq_to_xgboost" + }, + "source": [ + "### Read BigQuery table into XGboost DMatrix\n", + "\n", + "Currently, there is no direct data feeding connector between BigQuery and the open source XGBoost. The BigQuery ML service has a built-in XGBoost training module.\n", + "\n", + "Alernatively, you extract the data either as a pandas dataframe or as CSV files. The extracted data is then given as an input to a `DMatrix` object when training the model.\n", + "\n", + "Learn more about [Getting started with built-in XGBoost](https://cloud.google.com/ai-platform/training/docs/algorithms/xgboost-start)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pandas_to_xgboost:gsod" + }, + "source": [ + "### Read pandas table into XGboost DMatrix\n", + "\n", + "Next, you load the pandas dataframe into a `DMatrix` object. XGBoost does not support non-numeric inputs. Any column that is categorical need to be one-hot encoded prior to loading the dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pandas_to_xgboost:gsod" + }, + "outputs": [], + "source": [ + "dataframe[\"station_number\"] = pd.to_numeric(dataframe[\"station_number\"])\n", + "labels = dataframe[\"mean_temp\"]\n", + "data = dataframe.drop([\"mean_temp\"], axis=1)\n", + "\n", + "dtrain = xgb.DMatrix(data, label=labels)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "csv_to_xgboost:gsod" + }, + "source": [ + "### Read CSV files into XGboost DMatrix\n", + "\n", + "Currently, there is no Cloud Storage support in XGBoost. If you use CSV files for input, you need to download them locally." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "csv_to_xgboost:gsod" + }, + "outputs": [], + "source": [ + "! gsutil cp $EXAMPLE_FILE data.csv\n", + "\n", + "dtrain = xgb.DMatrix(\"data.csv?format=csv&label_column=4\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup:mbsdk" + }, + "source": [ + "# Clean up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:\n", + "\n", + "- Vertex AI Dataset resource\n", + "- Cloud Storage Bucket\n", + "- BigQuery Dataset\n", + "\n", + "Set `delete_storage` to _True_ to delete the storage resources used in this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "47ad926d84e8" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Delete the dataset using the Vertex dataset object\n", + "dataset.delete()\n", + "\n", + "# Delete the temporary BigQuery dataset\n", + "! bq rm -r -f $PROJECT_ID:$DATASET_ID\n", + "\n", + "delete_storage = False\n", + "if delete_storage or os.getenv(\"IS_TESTING\"):\n", + " # Delete the created GCS bucket\n", + " ! gsutil rm -r $BUCKET_URI\n", + " # Delete the created BigQuery datasets\n", + " ! bq rm -r -f $PROJECT_ID:$BQ_MY_DATASET" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_bq_datasets.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/datasets/get_started_with_data_labeling.ipynb b/notebooks/official/datasets/get_started_with_data_labeling.ipynb new file mode 100644 index 000000000..1cf6bf577 --- /dev/null +++ b/notebooks/official/datasets/get_started_with_data_labeling.ipynb @@ -0,0 +1,1084 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Get started with Vertex AI Data Labeling\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use Vertex AI in production. This tutorial covers data management: get started with Vertex AI Data Labeling service.\n", + "\n", + "Learn more about [Vertex AI Data Labeling](https://cloud.google.com/vertex-ai/docs/datasets/data-labeling-job)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage3,get_started_automl_pipeline_components" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use the `Vertex AI Data Labeling` service.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Data Labeling`\n", + "- `Vertex AI Dataset`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a Specialist Pool for data labelers.\n", + "- Create a data labeling job.\n", + "- Submit the data labeling job.\n", + "- List data labeling jobs.\n", + "- Cancel a data labeling job.\n", + "\n", + "Learn more about [Request a Vertex AI Data Labeling job](https://cloud.google.com/vertex-ai/docs/datasets/data-labeling-job)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:flowers,icn" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the [Flowers dataset](https://www.tensorflow.org/datasets/catalog/tf_flowers) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview). The version of the dataset you use in this tutorial is stored in a public Cloud Storage bucket. The trained model predicts the type of flower an image is from a class of five flowers: daisy, dandelion, rose, sunflower, or tulip." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0c997d8d92ce" + }, + "source": [ + "### Costs \n", + "\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "install_aip" + }, + "source": [ + "## Installation\n", + "\n", + "Install the following packages to execute this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_mlops" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install the packages\n", + "! pip3 install --upgrade google-cloud-aiplatform \\\n", + " google-cloud-storage $USER_FLAG -q\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " ! pip3 install --upgrade google-api-core==2.10 $USER_FLAG -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "Once you've installed the Vertex AI SDK and Google *cloud-storage*, you need to restart the notebook kernel so it can find the packages.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GIwKc4pk_i_t" + }, + "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 run-time\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 GCP project\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "1. [Select or create a GCP 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 Vertex AI APIs and Compute Engine APIs.](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component)\n", + "\n", + "4. [Google Cloud SDK](https://cloud.google.com/sdk) is already installed in Vertex AI Workbench Notebooks.\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 `$` into these commands.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6Xtp5tvK_i_y" + }, + "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 onto the name of resources which will be created in this tutorial.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d70An-Mg_i_2" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d29f41c6619e" + }, + "source": [ + "#### Email\n", + "\n", + "You need an email address to send labeling job request to. This is the email address will be the manager of the data labeling specialist pool.\n", + "\n", + "In this tutorial, if you don't specify an email address, the email address associated with your project ID will be used." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e443c02540c" + }, + "outputs": [], + "source": [ + "EMAIL = \"[your-email-address]\" # @param {type: \"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ca885f17d6ac" + }, + "outputs": [], + "source": [ + "if EMAIL == \"[your-email-address]\":\n", + " shell_output = ! gcloud auth list 2>/dev/null\n", + " EMAIL = shell_output[2].replace(\"*\", \"\").strip()\n", + "\n", + "print(EMAIL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gcp_authenticate" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", + "authenticated. \n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "chybg3Ap_i_2" + }, + "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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:batch_prediction" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "This tutorial is designed to use training data that is in a public Cloud Storage bucket and a local Cloud Storage bucket for your batch predictions. You may alternatively use your own training data that you have stored in a local Cloud Storage bucket.\n", + "\n", + "Set the name of your Cloud Storage bucket below. It must be unique across all Cloud Storage buckets.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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_URI == \"\" or BUCKET_URI is None or BUCKET_URI == \"gs://[your-bucket-name]\":\n", + " BUCKET_NAME = PROJECT_ID + \"aip-\" + TIMESTAMP\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qPPrwWpO_i_6" + }, + "outputs": [], + "source": [ + "! 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:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fn744B7x_i_7" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "source": [ + "### Set up variables\n", + "\n", + "Next, set up some variables used throughout the tutorial.\n", + "### Import libraries and define constants\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_aip" + }, + "source": [ + "#### Import Vertex AI SDK\n", + "\n", + "Import the Vertex AI SDK into our Python environment.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "97-XQPkv_i_7" + }, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "import time\n", + "\n", + "import google.cloud.aiplatform as aip\n", + "from google.cloud import storage\n", + "from google.cloud.aiplatform import gapic\n", + "from google.protobuf.json_format import ParseDict\n", + "from google.protobuf.struct_pb2 import Value" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "750d53e37094" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "adcc964aaaa1" + }, + "outputs": [], + "source": [ + "aip.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aip_constants" + }, + "source": [ + "#### Vertex AI constants\n", + "\n", + "Setup up the following constants for Vertex AI:\n", + "\n", + "- `API_ENDPOINT`: The Vertex AI API service endpoint for dataset, model, job, pipeline and endpoint services.\n", + "- `PARENT`: The Vertex AI location root path for dataset, model and endpoint resources." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kBBYqHEd_i_8" + }, + "outputs": [], + "source": [ + "# API Endpoint\n", + "API_ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", + "\n", + "# Vertex AI location root path for your dataset, model and endpoint resources\n", + "PARENT = \"projects/\" + PROJECT_ID + \"/locations/\" + REGION" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "automl_constants:automl" + }, + "source": [ + "#### Schema constants\n", + "\n", + "Next, setup constants for schemas related image classification datasets:\n", + "\n", + "- Data Labeling (Annotations) Schemas: Tells the managed dataset service how the data is labeled (annotated)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "automl_constants:automl,icn" + }, + "outputs": [], + "source": [ + "# Image labeling task\n", + "LABELING_SCHEMA_IMAGE = \"gs://google-cloud-aiplatform/schema/datalabelingjob/inputs/image_classification_1.0.0.yaml\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "clients" + }, + "source": [ + "## Create clients\n", + "\n", + "The Vertex AI SDK works as a client/server model. On your side (the Python script) you create a client that sends requests and receives responses from the server (Vertex AI).\n", + "\n", + "You use several clients in this tutorial, so set them all up upfront.\n", + "\n", + "- Specialist pool service for specialist pools\n", + "- Job Service for data labeling\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "i2p2VYUz_i_-" + }, + "outputs": [], + "source": [ + "# client options same for all services\n", + "client_options = {\"api_endpoint\": API_ENDPOINT}\n", + "\n", + "clients = {}\n", + "clients[\"job\"] = gapic.JobServiceClient(client_options=client_options)\n", + "\n", + "# add client for specialist pool\n", + "clients[\"specialist_pool\"] = gapic.SpecialistPoolServiceClient(\n", + " client_options=client_options\n", + ")\n", + "\n", + "for client in clients.items():\n", + " print(client)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1d4b33eb3c71" + }, + "source": [ + "### Create a CSV file for examples to label\n", + "\n", + "Next, you will create a CSV file for the examples you are requesting to be labeled. \n", + "\n", + "In this example, the examples to label are images. For each row in the CSV file, you specify the Cloud Storage location of the image to label." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:flowers,csv,icn" + }, + "outputs": [], + "source": [ + "test_filename = \"labeling.csv\"\n", + "LABELING_FILES = [\n", + " \"gs://cloud-samples-data/vision/automl_classification/flowers/daisy/100080576_f52e8ee070_n.jpg\",\n", + " \"gs://cloud-samples-data/vision/automl_classification/flowers/daisy/102841525_bd6628ae3c.jpg\",\n", + "]\n", + "\n", + "IMPORT_FILE = BUCKET_URI + \"/labeling.csv\"\n", + "\n", + "bucket = storage.Client(project=PROJECT_ID).bucket(BUCKET_URI.replace(\"gs://\", \"\"))\n", + "\n", + "# creating a blob\n", + "blob = bucket.blob(blob_name=test_filename)\n", + "\n", + "# creating data variable\n", + "data = LABELING_FILES[0] + \"\\n\" + LABELING_FILES[1] + \"\\n\"\n", + "\n", + "# uploading data variable content to bucket\n", + "blob.upload_from_string(data, content_type=\"text/csv\")\n", + "\n", + "# printing path of uploaded file\n", + "print(IMPORT_FILE)\n", + "\n", + "# printing content of uploaded file\n", + "! gsutil cat $IMPORT_FILE" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_a_dataset:migration" + }, + "source": [ + "## Create a unlabeled dataset\n", + "\n", + "Next, you create a dataset for the data to be labeled." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9af8aed4e3ab" + }, + "outputs": [], + "source": [ + "dataset = aip.ImageDataset.create(\"labeling_\" + TIMESTAMP)\n", + "print(dataset)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "92909927fe7e" + }, + "source": [ + "## Import the unlabeled data\n", + "\n", + "Now, import the unlabeled data to the dataset, i.e., the examples to be labeled." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c137a55b822e" + }, + "outputs": [], + "source": [ + "dataset.import_data(\n", + " gcs_source=[IMPORT_FILE],\n", + " import_schema_uri=aip.schema.dataset.ioformat.image.single_label_classification,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "trainingpipelines_create:migration,new" + }, + "source": [ + "## Create a new data specialist pool\n", + "\n", + "Your data labeling job will be sent to a data specialist pool. You may have one or more multiple specialist pools. \n", + "\n", + "In this next step, you create a new specialist pool with the method `create_specialist_pool()`. The request includes the parameters:\n", + "\n", + "- `name`: The resource name of the specialist pool.\n", + "- `display_name`: A human readable name for the specialist pool.\n", + "- `specialist_manager_emails`: A list of the email addresses of the manager(s) for the specialist pool.\n", + "\n", + "*Note:* You can use an existing specialist pool if one already existed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wsXOMVOMq3jO" + }, + "outputs": [], + "source": [ + "specialist_pool = {\n", + " \"name\": \"labeling_\" + TIMESTAMP,\n", + " \"display_name\": \"labeling_\" + TIMESTAMP,\n", + " \"specialist_manager_emails\": [EMAIL],\n", + "}\n", + "\n", + "request = clients[\"specialist_pool\"].create_specialist_pool(\n", + " parent=PARENT, specialist_pool=specialist_pool\n", + ")\n", + "\n", + "result = request.result()\n", + "print(result)\n", + "\n", + "specialist_name = result.name\n", + "\n", + "specialist_id = specialist_name.split(\"/\")[-1]\n", + "\n", + "print(specialist_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "train_a_model:migration" + }, + "source": [ + "## Create data labeling job\n", + "\n", + "Now that you have a specialist pool, you can send a data labeling request using the `create_data_labeling_job()` method.\n", + "\n", + "Your request will consist of the following:\n", + "\n", + "- The Vertex AI Dataset with the unlabeled data.\n", + "- Instructions for labeling." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5AY3SJjQq3jQ" + }, + "outputs": [], + "source": [ + "# create placeholder file for instructions for data labeling\n", + "! echo \"this is instruction\" >> instruction.txt | gsutil cp instruction.txt $BUCKET_URI" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "trainingpipelines_create:migration,new,request,icn" + }, + "outputs": [], + "source": [ + "LABLEING_SCHEMA = LABELING_SCHEMA_IMAGE\n", + "INSTRUCTION_FILE = BUCKET_URI + \"/instruction.txt\"\n", + "\n", + "inputs = ParseDict({\"annotation_specs\": [\"rose\"]}, Value())\n", + "\n", + "data_labeling_job = {\n", + " \"display_name\": \"labeling_\" + TIMESTAMP,\n", + " \"datasets\": [dataset.resource_name],\n", + " \"labeler_count\": 1,\n", + " \"instruction_uri\": INSTRUCTION_FILE,\n", + " \"inputs_schema_uri\": LABLEING_SCHEMA,\n", + " \"inputs\": inputs,\n", + " \"annotation_labels\": {\n", + " \"aiplatform.googleapis.com/annotation_set_name\": \"data_labeling_job_specialist_pool\"\n", + " },\n", + " \"specialist_pools\": [specialist_name],\n", + "}\n", + "\n", + "print(data_labeling_job)\n", + "\n", + "request = clients[\"job\"].create_data_labeling_job(\n", + " parent=PARENT, data_labeling_job=data_labeling_job\n", + ")\n", + "\n", + "print(request)\n", + "\n", + "labeling_task_name = request.name\n", + "\n", + "print(labeling_task_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "A3jRv70o_jAN" + }, + "source": [ + "### Get a data labeling job\n", + "\n", + "You can get information on your data labeling job using the `get_data_labeling_job()` method, with the following parameters:\n", + "\n", + "- `name`: The name of the labeling task." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rPnMOftyq3jS" + }, + "outputs": [], + "source": [ + "request = clients[\"job\"].get_data_labeling_job(name=labeling_task_name)\n", + "print(request)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fQ0TVlokq3jS" + }, + "source": [ + "### Cancel a data labeling task\n", + "\n", + "You can cancel a data labeling request using the `cancel_data_labeling_job()` method, with the following parameters:\n", + "\n", + "- `name`: The name of the labeling task." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FZ3dlKJjq3jT" + }, + "outputs": [], + "source": [ + "request = clients[\"job\"].cancel_data_labeling_job(name=labeling_task_name)\n", + "print(request)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d37f8ede2327" + }, + "source": [ + "### Wait for labeling job to be canceled\n", + "\n", + "The cancel request is asyncrhonous. The code below polls on the labeling job status until the status is CANCELED." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "trainingpipelines_get:migration,new,wait" + }, + "outputs": [], + "source": [ + "while True:\n", + " response = clients[\"job\"].get_data_labeling_job(name=labeling_task_name)\n", + " if response.state == gapic.JobState.JOB_STATE_CANCELLED:\n", + " print(\"Labeling job CANCELED\")\n", + " break\n", + " else:\n", + " print(\"Canceling labeling job:\", response.state)\n", + " time.sleep(60)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup:migration,new" + }, + "source": [ + "# Cleaning up\n", + "\n", + "To clean up all GCP resources used in this project, you can [delete the GCP\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aoJ18d8Y_jAy" + }, + "outputs": [], + "source": [ + "# Set this to true only if you'd like to delete your bucket\n", + "delete_bucket = False\n", + "\n", + "# Delete the dataset using the Vertex AI fully qualified identifier for the dataset\n", + "dataset.delete()\n", + "\n", + "# Delete the labeling job using the Vertex AI fully qualified identifier for the dataset\n", + "request = clients[\"job\"].delete_data_labeling_job(name=labeling_task_name)\n", + "\n", + "# Delete the specialist pool using the Vertex AI fully qualified identifier for the dataset\n", + "clients[\"specialist_pool\"].delete_specialist_pool(name=specialist_name)\n", + "\n", + "# Delete the bucket created\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "timestamp", + "gcp_authenticate", + "bucket:batch_prediction", + "setup_vars", + "import_aip", + "aip_constants", + "automl_constants:automl", + "datasets_create:migration,new", + "request:migration", + "call:migration", + "response:migration", + "datasets_import:migration,new", + "oJtL08_Q_jAF", + "rnhDF5vW_jAG", + "zQoFJ2K0_jAH", + "trainingpipelines_create:migration,new", + "m5igPySU_jAJ", + "xhuR86RL_jAK", + "S8zP7wju_jAL", + "trainingpipelines_get:migration,new", + "A3jRv70o_jAN", + "XC5I2xxt_jAN", + "models_evaluations_list:migration,new", + "Ngn6qqVy_jAQ", + "F0ryqI3F_jAQ", + "models_evaluations_get:migration,new", + "_NXujm2U_jAR", + "0RLTdCfj_jAS", + "make_batch_prediction_file:migration,new", + "make_batch_file:automl,image", + "batchpredictionjobs_create:migration,new", + "htIpycBi_jAX", + "8QO3y-36_jAY", + "DmClxRYK_jAY", + "batchpredictionjobs_get:migration,new", + "aSE_wqES_jAa", + "LUy0NIF__jAa", + "endpoints_create:migration,new", + "Ph5S0j4v_jAc", + "yjsSo1cM_jAd", + "ijvF_HGd_jAe", + "endpoints_deploymodel:migration,new", + "NFIRI0XT_jAf", + "c3_4BVyW_jAh", + "7NmySa8R_jAh", + "endpoints_predict:migration,new", + "6fb84nKh_jAk", + "h6IskqWe_jAo", + "KHf2BSMR_jAo", + "endpoints_undeploymodel:migration,new", + "KrVZz6Uw_jAp", + "wvFK-kir_jAq", + "5bwEQMKT_jAr", + "LOsxiKj4_jAs", + "PWMEUCbF_jAt", + "OalQ6m9P_jAu", + "models_export:migration,new", + "lqJoqYMI_jAv", + "v6isqzPQ_jAw", + "ZCyd1qAb_jAx" + ], + "name": "get_started_with_data_labeling.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/experiments/README.md b/notebooks/official/experiments/README.md index 5abc608dd..4bc3ee21a 100644 --- a/notebooks/official/experiments/README.md +++ b/notebooks/official/experiments/README.md @@ -1,12 +1,29 @@ -[Compare pipeline runs with Vertex AI Experiments](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/experiments/comparing_pipeline_runs.ipynb) +[Build Vertex AI Experiment lineage for custom training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/experiments/build_model_experimentation_lineage_with_prebuild_code.ipynb) -Learn how to use `Vertex AI Experiments` to log a pipeline job and compare different pipeline jobs. +``` +Learn how to integrate preprocessing code in a Vertex AI experiments. +The steps performed include: + +- Execute module for preprocessing data + - Create a dataset artifact + - Log parameters +- Execute module for training the model + - Log parameters + - Create model artifact + - Assign tracking lineage to dataset, model and parameters + +``` + +   Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments). + +   Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata). [Track parameters and metrics for locally trained models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/experiments/comparing_local_trained_models.ipynb) +``` Learn how to use Vertex AI Experiments to compare and evaluate model experiments. The steps performed include: @@ -15,9 +32,59 @@ The steps performed include: - log the loss and metrics on every epoch to TensorBoard - log the evaluation metrics +``` -[Build Vertex AI Experiment lineage for custom training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/experiments/build_model_experimentation_lineage_with_prebuild_code.ipynb) - -Learn how to integrate preprocessing code in a Vertex AI experiments. +   Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments). +[Compare pipeline runs with Vertex AI Experiments](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/experiments/comparing_pipeline_runs.ipynb) + +``` +Learn how to use `Vertex AI Experiments` to log a pipeline job and compare different pipeline jobs. + +The steps performed include: + +* Formalize a training component +* Build a training pipeline +* Run several Pipeline jobs and log their results +* Compare different Pipeline jobs + +``` + +   Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments). + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + + +[Get started with Vertex AI Experiments](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/experiments/get_started_with_vertex_experiments.ipynb) + +``` +Learn how to use `Vertex AI Experiments` when training with `Vertex AI`. + +The steps performed include: + +- Local (notebook) Training + - Create an experiment + - Create a first run in the experiment + - Log parameters and metrics + - Create artifact lineage + - Visualize the experiment results + - Execute a second run + - Compare the two runs in the experiment +- Cloud (`Vertex AI`) Training + - Within the training script: + - Create an experiment + - Log parameters and metrics + - Create artifact lineage + - Create a `Vertex AI Training` custom job + - Execute the custom job + - Visualize the experiment results + +``` + +   Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments). + +   Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + diff --git a/notebooks/official/experiments/build_model_experimentation_lineage_with_prebuild_code.ipynb b/notebooks/official/experiments/build_model_experimentation_lineage_with_prebuild_code.ipynb index 93f1e4579..b7db45ac0 100644 --- a/notebooks/official/experiments/build_model_experimentation_lineage_with_prebuild_code.ipynb +++ b/notebooks/official/experiments/build_model_experimentation_lineage_with_prebuild_code.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "As a Data Scientist, you want to be able to reuse code path (data preprocessing, feature engineering etc...) that others within your team have written to simplify and standardize all the complex data wrangling. " + "As a Data Scientist, you want to be able to reuse code path (data preprocessing, feature engineering etc...) that others within your team have written to simplify and standardize all the complex data wrangling. \n", + "\n", + "Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments) and [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata)." ] }, { @@ -72,7 +74,22 @@ "source": [ "### Objective\n", "\n", - "In this notebook, you learn how to integrate preprocessing code in a Vertex AI experiments. Also you build the experiment lineage lets you record, analyze, debug, and audit metadata and artifacts produced along your ML journey." + "In this notebook, you learn how to integrate preprocessing code in a Vertex AI experiments. Also you build the experiment lineage lets you record, analyze, debug, and audit metadata and artifacts produced along your ML journey.\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex ML Metadata\n", + "- Vertex AI Experiments\n", + "\n", + "The steps performed include:\n", + "\n", + "- Execute module for preprocessing data\n", + " - Create a dataset artifact\n", + " - Log parameters\n", + "- Execute module for training the model\n", + " - Log parameters\n", + " - Create model artifact\n", + " - Assign tracking lineage to dataset, model and parameters" ] }, { diff --git a/notebooks/official/experiments/comparing_local_trained_models.ipynb b/notebooks/official/experiments/comparing_local_trained_models.ipynb index ff6603f50..30388b688 100644 --- a/notebooks/official/experiments/comparing_local_trained_models.ipynb +++ b/notebooks/official/experiments/comparing_local_trained_models.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "As a Data Scientist, you probably start running model experiments locally on your notebook. Depending on the framework you use, you would need to track parameters, training time series and evaluation metrics. In this way, you would be able to explain the modelling approach you would choose. \n" + "As a Data Scientist, you probably start running model experiments locally on your notebook. Depending on the framework you use, you would need to track parameters, training time series and evaluation metrics. In this way, you would be able to explain the modelling approach you would choose. \n", + "\n", + "Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments)." ] }, { diff --git a/notebooks/official/experiments/comparing_pipeline_runs.ipynb b/notebooks/official/experiments/comparing_pipeline_runs.ipynb index ede652c99..11c01a0b6 100644 --- a/notebooks/official/experiments/comparing_pipeline_runs.ipynb +++ b/notebooks/official/experiments/comparing_pipeline_runs.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "Depending on the model life cycle of your data science team, you would like to experiment and track training Pipeline runs and its associated parameters. Then, you would to compare runs of these Pipelines to each others in order to figure out which is the best configuration generates the model you will register in the Vertex AI Model Registry." + "Depending on the model life cycle of your data science team, you would like to experiment and track training pipeline runs and its associated parameters. Then, you would to compare runs of these Pipelines to each others in order to figure out which is the best configuration generates the model you will register in the Vertex AI Model Registry.\n", + "\n", + "Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments) and [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction)." ] }, { @@ -74,7 +76,12 @@ "\n", "In this notebook, you learn how to use `Vertex AI Experiments` to log a pipeline job and compare different pipeline jobs.\n", "\n", - "The steps covered include:\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Pipelines\n", + "- Vertex AI Experiments\n", + "\n", + "The steps performed include:\n", "\n", "* Formalize a training component\n", "* Build a training pipeline\n", diff --git a/notebooks/official/experiments/get_started_with_vertex_experiments.ipynb b/notebooks/official/experiments/get_started_with_vertex_experiments.ipynb new file mode 100644 index 000000000..d5a51ffcd --- /dev/null +++ b/notebooks/official/experiments/get_started_with_vertex_experiments.ipynb @@ -0,0 +1,1636 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "ee9d87d8ec00" + }, + "source": [ + "This notebook was authored with assistance from [Ivan Nardini](https://github.com/inardini)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "title:generic,gcp" + }, + "source": [ + "# Get started with Vertex AI Experiments\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use Vertex AI in production. This tutorial covers get started with Vertex AI Experiments.\n", + "\n", + "Learn more about [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments), [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage2,get_started_vertex_experiments" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `Vertex AI Experiments` when training with `Vertex AI`.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Experiments`\n", + "- `Vertex ML Metadata`\n", + "- `Vertex AI Training`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Local (notebook) Training\n", + " - Create an experiment\n", + " - Create a first run in the experiment\n", + " - Log parameters and metrics\n", + " - Create artifact lineage\n", + " - Visualize the experiment results\n", + " - Execute a second run\n", + " - Compare the two runs in the experiment\n", + "- Cloud (`Vertex AI`) Training\n", + " - Within the training script:\n", + " - Create an experiment\n", + " - Log parameters and metrics\n", + " - Create artifact lineage\n", + " - Create a `Vertex AI Training` custom job\n", + " - Execute the custom job\n", + " - Visualize the experiment results" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "recommendation:mlops,stage2,logging" + }, + "source": [ + "### Recommendations\n", + "\n", + "When doing E2E MLOps on Google Cloud, the following are some of the best practices for logging data when experimenting or formally training a model.\n", + "\n", + "#### Python Logging\n", + "\n", + "Use Python's logging package when doing ad-hoc training locally.\n", + "\n", + "#### Cloud Logging\n", + "\n", + "Use `Google Cloud Logging` when doing training on the cloud.\n", + "\n", + "#### Experiments\n", + "\n", + "Use Vertex AI Experiments in conjunction with logging when performing experiments to compare results for different experiment configurations." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "313c25f2f514" + }, + "source": [ + "### Dataset\n", + "\n", + "This tutorial does not use a dataset. References to example datasets is for demonstration purposes." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bd73a4bd07ef" + }, + "source": [ + "### Costs\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "- Vertex AI\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the following packages for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_mlops" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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 {USER_FLAG} -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "project_id" + }, + "source": [ + "## Before you begin\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", + "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, Compute Engine, Cloud Storage and Cloud Logging APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,storage_component,logging).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1460fd744366" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3bd8c0d0469" + }, + "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", + "1. **Click Create service account**.\n", + "\n", + "2. In the **Service account name** field, enter a name, and click **Create**.\n", + "\n", + "3. In the **Grant this service account access to project** section, click the Role drop-down list. Type \"Vertex AI\" into the filter box, and select **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "4. Click Create. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "5. Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e0953a00668e" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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 AI 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = f\"gs://{BUCKET_NAME}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aO4sKJfFox9R" + }, + "outputs": [], + "source": [ + "! 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": "yWnghzKFox9S" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "set_service_account" + }, + "source": [ + "#### Service Account\n", + "\n", + "**If you don't know your service account**, try to get your service account using `gcloud` command by executing the second cell below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_service_account" + }, + "outputs": [], + "source": [ + "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "autoset_service_account" + }, + "outputs": [], + "source": [ + "if (\n", + " SERVICE_ACCOUNT == \"\"\n", + " or SERVICE_ACCOUNT is None\n", + " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", + "):\n", + " # Get your service account from gcloud\n", + " if not IS_COLAB:\n", + " shell_output = !gcloud auth list 2>/dev/null\n", + " SERVICE_ACCOUNT = shell_output[2].replace(\"*\", \"\").strip()\n", + "\n", + " if IS_COLAB:\n", + " shell_output = ! gcloud projects describe $PROJECT_ID\n", + " # print(\"shell_output=\", shell_output)\n", + " project_number = shell_output[-1].split(\":\")[1].strip().replace(\"'\", \"\")\n", + " SERVICE_ACCOUNT = f\"{project_number}-compute@developer.gserviceaccount.com\"\n", + "\n", + " print(\"Service Account:\", SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "source": [ + "### Set up variables\n", + "\n", + "Next, set up some variables used throughout the tutorial.\n", + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_aip:mbsdk" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,region" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,region" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "accelerators:training,cpu,prediction,cpu,mbsdk" + }, + "source": [ + "#### Set hardware accelerators\n", + "\n", + "You can set hardware accelerators for training.\n", + "\n", + "Set the variables `TRAIN_GPU/TRAIN_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Telsa K80 GPUs allocated to each VM, you would specify:\n", + "\n", + " (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "\n", + "Otherwise specify `(None, None)` to use a container image to run on a CPU.\n", + "\n", + "Learn more about [hardware accelerator support for your region](https://cloud.google.com/vertex-ai/docs/general/locations#accelerators)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "accelerators:training,cpu,prediction,cpu,mbsdk" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TRAIN_GPU\"):\n", + " TRAIN_GPU, TRAIN_NGPU = (\n", + " aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80,\n", + " int(os.getenv(\"IS_TESTING_TRAIN_GPU\")),\n", + " )\n", + "else:\n", + " TRAIN_GPU, TRAIN_NGPU = (None, None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for training.\n", + "\n", + "\n", + "For the latest list, see [Pre-built containers for training](https://cloud.google.com/ai-platform-unified/docs/training/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "container:training,prediction" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TF\"):\n", + " TF = os.getenv(\"IS_TESTING_TF\")\n", + "else:\n", + " TF = \"2.5\".replace(\".\", \"-\")\n", + "\n", + "if TF[0] == \"2\":\n", + " if TRAIN_GPU:\n", + " TRAIN_VERSION = \"tf-gpu.{}\".format(TF)\n", + " else:\n", + " TRAIN_VERSION = \"tf-cpu.{}\".format(TF)\n", + "else:\n", + " if TRAIN_GPU:\n", + " TRAIN_VERSION = \"tf-gpu.{}\".format(TF)\n", + " else:\n", + " TRAIN_VERSION = \"tf-cpu.{}\".format(TF)\n", + "\n", + "\n", + "TRAIN_IMAGE = \"{}-docker.pkg.dev/vertex-ai/training/{}:latest\".format(\n", + " REGION.split(\"-\")[0], TRAIN_VERSION\n", + ")\n", + "\n", + "print(\"Training:\", TRAIN_IMAGE, TRAIN_GPU, TRAIN_NGPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training" + }, + "source": [ + "#### Set machine type\n", + "\n", + "Next, set the machine type to use for training.\n", + "\n", + "- Set the variable `TRAIN_COMPUTE` to configure the compute resources for the VMs you will use for for training.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU.\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: The following is not supported for training:*\n", + "\n", + " - `standard`: 2 vCPUs\n", + " - `highcpu`: 2, 4 and 8 vCPUs\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "machine:training" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TRAIN_MACHINE\"):\n", + " MACHINE_TYPE = os.getenv(\"IS_TESTING_TRAIN_MACHINE\")\n", + "else:\n", + " MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "TRAIN_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", TRAIN_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "83f8f98ae12d" + }, + "source": [ + "## Introduction to `Vertex AI Experiments`\n", + "\n", + "With `Vertex AI Experiments` you can log and track the following when experimenting/developing your model architecture and model training:\n", + "\n", + "- Log the metaparameters for the model architecture.\n", + "- Log the hyperparameters for training.\n", + "- Log the evaluation metrics.\n", + "- Create an artifact lineage of the dataset, model and evaluation.\n", + "- Group one or more training runs under an experiment.\n", + "- Compare experiments.\n", + "\n", + "`Vertex AI Experiments` can be integrated with the following development process flows:\n", + "\n", + "- Local development in a notebook\n", + "- Cloud development in `Vertex AI Training`\n", + "- Operationalizing development in `Vertex AI Pipelines`\n", + "\n", + "Learn more about [Experiments]( https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments).\n", + "\n", + "Learn more about [Introduction to Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata/introduction)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fb84b57b9e74" + }, + "source": [ + "### Local development in a notebook\n", + "\n", + "You can track an experiment in your local development, such as in a Vertex AI Workbench notebook, by:\n", + "\n", + "- Wrap (preamble) the creation of an experiment.\n", + "- Instantiate a run per training run in the experiment.\n", + "- Within the local training run, log the corresponding parameters and results.\n", + "- Create lineage to the artifacts and experiment data.\n", + "- Retrieve the experiment data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "start_experiment" + }, + "source": [ + "#### Create experiment for tracking training related metadata\n", + "\n", + "First, you create an experiment using the `init()` method and then initialize a run within the experiment using `start_run()`.\n", + "\n", + "- `aiplatform.init()` - Create an experiment instance\n", + "- `aiplatform.start_run()` - Track a specific run within the experiment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1ed46e349cf2" + }, + "outputs": [], + "source": [ + "# Specify a name for the experiment\n", + "EXPERIMENT_NAME = \"[your-experiment-name]\"\n", + "\n", + "if EXPERIMENT_NAME == \"[your-experiment-name]\":\n", + " EXPERIMENT_NAME = \"example-\" + UUID" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "start_experiment" + }, + "outputs": [], + "source": [ + "# Create experiment\n", + "aiplatform.init(experiment=EXPERIMENT_NAME)\n", + "aiplatform.start_run(\"run-1\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "experiment_log_params" + }, + "source": [ + "#### Log parameters for the experiment\n", + "\n", + "Typically, an experiment is associated with a specific dataset and a model architecture. Within an experiment, you may have multiple training runs, where each run tries a different configuration. For example:\n", + "\n", + "- Data feeding, such as:\n", + " - Dataset split\n", + " - Dataset sampling and boosting\n", + "- Metaparameters, such as:\n", + " - Depth and width of layers\n", + "- Hyperparameters, such as:\n", + " - batch size\n", + " - learning rate\n", + "\n", + "These configuration settings are referred to as parameters, which you store as key-value pairs using the method `log_params()`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "experiment_log_params" + }, + "outputs": [], + "source": [ + "metaparams = {}\n", + "metaparams[\"units\"] = 128\n", + "aiplatform.log_params(metaparams)\n", + "\n", + "hyperparams = {}\n", + "hyperparams[\"epochs\"] = 100\n", + "hyperparams[\"batch_size\"] = 32\n", + "hyperparams[\"learning_rate\"] = 0.01\n", + "aiplatform.log_params(hyperparams)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "experiment_log_metrics" + }, + "source": [ + "#### Log metrics for the experiment\n", + "\n", + "At the completion or termination of a run within an experiment, you can log results that you use to compare runs. For example:\n", + "\n", + "- Evaluation metrics\n", + "- Hyperparameter search selection\n", + "- Time to train the model\n", + "- Early stop trigger\n", + "\n", + "These results are referred to as metrics, which you store as key-value pairs using the method `log_metrics()`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "experiment_log_metrics" + }, + "outputs": [], + "source": [ + "metrics = {}\n", + "metrics[\"test_acc\"] = 98.7\n", + "metrics[\"train_acc\"] = 99.3\n", + "aiplatform.log_metrics(metrics)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "get_experiment" + }, + "source": [ + "#### Get the experiment results\n", + "\n", + "When you are finished with a run within an experiment, you call `end_run()` method to complete the logging for that run.\n", + "\n", + "Next, you use the experiment name as a parameter to the method `get_experiment_df()` to get the results of the experiment as a pandas dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "get_experiment" + }, + "outputs": [], + "source": [ + "aiplatform.end_run()\n", + "\n", + "experiment_df = aiplatform.get_experiment_df()\n", + "experiment_df = experiment_df[experiment_df.experiment_name == EXPERIMENT_NAME]\n", + "experiment_df.T" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2bcaf3e3ddff" + }, + "source": [ + "#### Start subsequent run in an experiment\n", + "\n", + "Next, you create a second run for the same experiment. In this example, you change the metaparameter for `units` from 126 to 256, and log different metric results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d7c1a839683b" + }, + "outputs": [], + "source": [ + "aiplatform.start_run(\"run-2\")\n", + "\n", + "metaparams = {}\n", + "metaparams[\"units\"] = 256 # changed the value\n", + "aiplatform.log_params(metaparams)\n", + "\n", + "hyperparams = {}\n", + "hyperparams[\"epochs\"] = 100\n", + "hyperparams[\"batch_size\"] = 32\n", + "hyperparams[\"learning_rate\"] = 0.01\n", + "aiplatform.log_params(hyperparams)\n", + "\n", + "metrics = {}\n", + "metrics[\"test_acc\"] = 98.8 # value changed\n", + "metrics[\"train_acc\"] = 99.5 # value changed\n", + "aiplatform.log_metrics(metrics)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0d2619bbc04a" + }, + "source": [ + "#### Comparing runs in the same experiment\n", + "\n", + "Finally, you use the experiment name as a parameter to the method `get_experiment_df()` to get the results of all the runs within the experiment as a pandas dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7ddb4e17fe92" + }, + "outputs": [], + "source": [ + "aiplatform.end_run()\n", + "\n", + "experiment_df = aiplatform.get_experiment_df()\n", + "experiment_df = experiment_df[experiment_df.experiment_name == EXPERIMENT_NAME]\n", + "experiment_df.T" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5328eb24f6a6" + }, + "source": [ + "#### Delete the experiment\n", + "\n", + "Next, you delete the experiment using the `delete()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cleanup:mbsdk" + }, + "outputs": [], + "source": [ + "exp = aiplatform.Experiment(EXPERIMENT_NAME)\n", + "exp.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a07fb4c47af4" + }, + "source": [ + "### Create artifact lineage in experiment runs\n", + "\n", + "In this example, you add artifact lineage to your experiment run. First, you create an experiment and then start a run within the experiment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b7aea23dafbc" + }, + "outputs": [], + "source": [ + "# Create experiment\n", + "aiplatform.init(experiment=EXPERIMENT_NAME)\n", + "aiplatform.start_run(\"run-1\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "355fed1a7b6d" + }, + "source": [ + "#### Create a dataset and model artifacts\n", + "\n", + "Next, you create synthetic artifacts in the Vertex ML Metadata to associated with this run in the experiment, as lineage. You will create:\n", + "\n", + "- `dataset_artifact`: A dataset that is the input to the experiment run.\n", + "- `model_artifact`: A model that is the output from the experiment run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4c1faeec89bb" + }, + "outputs": [], + "source": [ + "DATASET_URI = \"gs://example/dataset.csv\"\n", + "MODEL_URI = \"gs://example/saved_model.pb\"\n", + "\n", + "dataset_artifact = aiplatform.Artifact.create(\n", + " schema_title=\"system.Dataset\", display_name=\"example_dataset\", uri=DATASET_URI\n", + ")\n", + "\n", + "model_artifact = aiplatform.Artifact.create(\n", + " schema_title=\"system.Model\", display_name=\"example_modl\", uri=MODEL_URI\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7f6cc9dbaa2e" + }, + "source": [ + "#### Create the artifact lineage\n", + "\n", + "Next, to create artifact lineage for an experiment run, you instantiate an execution using the method `start_execution()`. You then attach input artifacts using the method `assign_input_artifacts()` and attach output artifacts using the method `assign_output_artifacts()`.\n", + "\n", + "In this example, to find the lineage for the experiment, you add a synthetic (metadata) entry `lineage` to the execution run, and set the value to the console uri for the lineage, which you can get from the method `get_output_artifacts()` and the property `lineage_console_uri`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9170906b09f9" + }, + "outputs": [], + "source": [ + "with aiplatform.start_execution(\n", + " schema_title=\"system.ContainerExecution\", display_name=\"example_training\"\n", + ") as execution:\n", + " execution.assign_input_artifacts([dataset_artifact])\n", + "\n", + " aiplatform.log_params({\"units\": 256})\n", + " aiplatform.log_metrics({\"acc\": 96.8})\n", + "\n", + " execution.assign_output_artifacts([model_artifact])\n", + "\n", + " aiplatform.log_metrics(\n", + " {\"lineage\": execution.get_output_artifacts()[0].lineage_console_uri}\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "15f847929914" + }, + "source": [ + "#### Get the experiment results\n", + "\n", + "Next, you use the experiment name as a parameter to the method `get_experiment_df()` to get the results of the experiment as a pandas dataframe.\n", + "\n", + "In this example, you stored the resource URI to the lineage as a metric value `lineage` in the execution run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0cfa26496ea9" + }, + "outputs": [], + "source": [ + "aiplatform.end_run()\n", + "\n", + "experiment_df = aiplatform.get_experiment_df()\n", + "experiment_df = experiment_df[experiment_df.experiment_name == EXPERIMENT_NAME]\n", + "experiment_df.T" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "994b3dab8769" + }, + "source": [ + "#### Visualize the artifact lineage\n", + "\n", + "Next, open the link below to visualize the artifact lineage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b85013ec6f11" + }, + "outputs": [], + "source": [ + "print(\n", + " \"Open the following link:\", execution.get_output_artifacts()[0].lineage_console_uri\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "80f8e272bf3f" + }, + "source": [ + "#### Delete the artifact lineage\n", + "\n", + "Next, use the delete() method to delete the artifact lineage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ae66f78a233f" + }, + "outputs": [], + "source": [ + "try:\n", + " dataset_artifact.delete()\n", + "except Exception as e:\n", + " print(e)\n", + "try:\n", + " model_artifact.delete()\n", + "except Exception as e:\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "35b899773315" + }, + "source": [ + "#### Delete the experiment\n", + "\n", + "Next, you delete the experiment using the `delete()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f1020119d742" + }, + "outputs": [], + "source": [ + "exp.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3cd64a48e0f4" + }, + "source": [ + "### Cloud development in `Vertex AI Training`\n", + "\n", + "You can track an experiment in your cloud development using `Vertex AI Training`, by:\n", + "\n", + "In your Python training script, repeat the same steps as in local development:\n", + "\n", + "- Wrap (preamble) the creation of an experiment.\n", + "- Instantiate a run per training run in the experiment.\n", + "- Within the local training run, log the corresponding parameters and results.\n", + "- Create lineage to the artifacts and experiment data.\n", + "- Retreive the experiment data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "examine_training_package" + }, + "source": [ + "#### Package layout\n", + "\n", + "Before you start the training, you will look at how a Python package is assembled for a custom training job. When unarchived, the package contains the following directory/file layout.\n", + "\n", + "- PKG-INFO\n", + "- README.md\n", + "- setup.cfg\n", + "- setup.py\n", + "- trainer\n", + " - \\_\\_init\\_\\_.py\n", + " - task.py\n", + "\n", + "The files `setup.cfg` and `setup.py` are the instructions for installing the package into the operating environment of the Docker image.\n", + "\n", + "The file `trainer/task.py` is the Python script for executing the custom training job. *Note*, when we referred to it in the worker pool specification, we replace the directory slash with a dot (`trainer.task`) and dropped the file suffix (`.py`).\n", + "\n", + "#### Package Assembly\n", + "\n", + "In the following cells, you will assemble the training package." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "examine_training_package" + }, + "outputs": [], + "source": [ + "# Make folder for Python training script\n", + "! rm -rf custom\n", + "! mkdir custom\n", + "\n", + "# Add package information\n", + "! touch custom/README.md\n", + "\n", + "setup_cfg = \"[egg_info]\\n\\ntag_build =\\n\\ntag_date = 0\"\n", + "! echo \"$setup_cfg\" > custom/setup.cfg\n", + "\n", + "setup_py = \"import setuptools\\n\\nsetuptools.setup(\\n\\n install_requires=[\\n\\n 'google-cloud-aiplatform',\\n\\n ],\\n\\n packages=setuptools.find_packages())\"\n", + "! echo \"$setup_py\" > custom/setup.py\n", + "\n", + "pkg_info = \"Metadata-Version: 1.0\\n\\nName: Synethic Training Script for Experiments\\n\\nVersion: 0.0.0\\n\\nSummary: Demostration training script\\n\\nHome-page: www.google.com\\n\\nAuthor: Google\\n\\nAuthor-email: aferlitsch@google.com\\n\\nLicense: Public\\n\\nDescription: Demo\\n\\nPlatform: Vertex\"\n", + "! echo \"$pkg_info\" > custom/PKG-INFO\n", + "\n", + "# Make the training subfolder\n", + "! mkdir custom/trainer\n", + "! touch custom/trainer/__init__.py" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "50c0e24489df" + }, + "source": [ + "#### Create synthetic training script\n", + "\n", + "First, you write a synthetic training script. It won't actually train a model, but instead mimics the training of the model:\n", + "\n", + "- Argument parsing\n", + " - `experiment`: The name of the experiment.\n", + " - `run`: The name of the run within the experiment.\n", + " - `epochs`: The number of epochs.\n", + " - `dataset-uri`: The Cloud Storage location of the training data.\n", + " - `model-dir`: The Cloud Storage location to save the trained model artifacts.\n", + "- Training functions\n", + " - `get_data()`: \n", + " - Get the training data. \n", + " - Create the input dataset artifact.\n", + " - Attach dataset artifact as input to execution context.\n", + " - `get_model()`:\n", + " - Get the model architecture.\n", + " - `train_model()`:\n", + " - Train the model\n", + " - `save_model()`:\n", + " - Save the model\n", + " - Create the output model artifact.\n", + " - Attach model artifact as output to execution context.\n", + "- Initialize the experiment (`init()`) and start a run (`start_run()`) within the experiment\n", + "- Wrap the training with a `start_execution()`.\n", + "- Log the lineage to the experiment parameters (`log_metrics({\"lineage\"...)`)\n", + "- End the experiment run (`end_run()`)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aed1431dccaf" + }, + "outputs": [], + "source": [ + "%%writefile custom/trainer/task.py\n", + "\n", + "import argparse\n", + "import os\n", + "\n", + "import google.cloud.aiplatform as aiplatform\n", + "\n", + "parser = argparse.ArgumentParser()\n", + "# Args for experiment\n", + "parser.add_argument('--experiment', dest='experiment',\n", + " required=True, type=str,\n", + " help='Name of experiment')\n", + "parser.add_argument('--run', dest='run',\n", + " required=True, type=str,\n", + " help='Name of run within the experiment')\n", + "\n", + "# Hyperparameters for experiment\n", + "parser.add_argument('--epochs', dest='epochs',\n", + " default=10, type=int,\n", + " help='Number of epochs.')\n", + "\n", + "parser.add_argument('--dataset-uri', dest='dataset_uri',\n", + " required=True, type=str,\n", + " help='Location of the dataset')\n", + "\n", + "parser.add_argument('--model-dir', dest='model_dir',\n", + " default=os.getenv(\"AIP_MODEL_DIR\"), type=str,\n", + " help='Storage location for the model')\n", + "args = parser.parse_args()\n", + "\n", + "def get_data(dataset_uri, execution):\n", + " # get the training data\n", + " \n", + " dataset_artifact = aiplatform.Artifact.create(\n", + " schema_title=\"system.Dataset\", display_name=\"example_dataset\", uri=dataset_uri\n", + " )\n", + " \n", + " execution.assign_input_artifacts([dataset_artifact])\n", + "\n", + " return None\n", + "\n", + "def get_model():\n", + " # get or create the model architecture\n", + " return None\n", + "\n", + "def train_model(dataset, model, epochs):\n", + " aiplatform.log_params({\"epochs\": epochs})\n", + " # train the model\n", + " return model\n", + "\n", + "def save_model(model, model_dir, execution):\n", + " # save the model\n", + " \n", + " model_artifact = aiplatform.Artifact.create(\n", + " schema_title=\"system.Model\", display_name=\"example_model\", uri=model_dir\n", + " )\n", + " execution.assign_output_artifacts([model_artifact])\n", + "\n", + "# Create a run within the experiment\n", + "aiplatform.init(experiment=args.experiment)\n", + "aiplatform.start_run(args.run)\n", + "\n", + "with aiplatform.start_execution(\n", + " schema_title=\"system.ContainerExecution\", display_name=\"example_training\"\n", + ") as execution:\n", + " dataset = get_data(args.dataset_uri, execution)\n", + " model = get_model()\n", + " model = train_model(dataset, model, args.epochs)\n", + " save_model(model, args.model_dir, execution)\n", + " \n", + " # Store the lineage link in the experiment\n", + " aiplatform.log_metrics({\"lineage\": execution.get_output_artifacts()[0].lineage_console_uri})\n", + "\n", + "aiplatform.end_run()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tarball_training_script" + }, + "source": [ + "#### Store training script on your Cloud Storage bucket\n", + "\n", + "Next, you package the training folder into a compressed tar ball, and then store it in your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "tarball_training_script" + }, + "outputs": [], + "source": [ + "! rm -f custom.tar custom.tar.gz\n", + "! tar cvf custom.tar custom\n", + "! gzip custom.tar\n", + "! gsutil cp custom.tar.gz $BUCKET_URI/trainer.tar.gz" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_custom_pp_training_job:mbsdk,no_model" + }, + "source": [ + "#### Create custom training job\n", + "\n", + "A custom training job is created with the `CustomTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the custom training job.\n", + "- `container_uri`: The training container image.\n", + "\n", + "- `python_package_gcs_uri`: The location of the Python training package as a tarball.\n", + "- `python_module_name`: The relative path to the training script in the Python package.\n", + "\n", + "*Note:* There is no requirements parameter. You specify any requirements in the `setup.py` script in your Python package." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_custom_pp_training_job:mbsdk,no_model" + }, + "outputs": [], + "source": [ + "DISPLAY_NAME = \"example_\" + UUID\n", + "\n", + "job = aiplatform.CustomPythonPackageTrainingJob(\n", + " display_name=DISPLAY_NAME,\n", + " python_package_gcs_uri=f\"{BUCKET_URI}/trainer.tar.gz\",\n", + " python_module_name=\"trainer.task\",\n", + " container_uri=TRAIN_IMAGE,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_custom_container_training_job:no_model" + }, + "source": [ + "#### Run the custom training job\n", + "\n", + "Next, you run the custom training job to start the training job by invoking the method `run()`, with the following parameters:\n", + "\n", + "- `args`: The arguments to pass to the training script\n", + " - `model_dir`: The Cloud Storage location to store the model.\n", + " - `dataset_uri`: The Cloud Storage location of the dataset.\n", + " - `epochs`: The number of epochs (hyperparameter).\n", + " - `experiment`: The name of the experiment.\n", + " - `run`: The name of the run within the experiment.\n", + "- `replica_count`: The number of VM instances.\n", + "- `machine_type`: The machine type for each VM instance." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "260f972398e5" + }, + "outputs": [], + "source": [ + "CMDARGS = [\n", + " \"--model-dir=\" + BUCKET_URI,\n", + " \"--dataset-uri=gs://example/foo.csv\",\n", + " \"--epochs=5\",\n", + " f\"--experiment={EXPERIMENT_NAME}\",\n", + " \"--run=run-1\",\n", + "]\n", + "\n", + "job.run(\n", + " args=CMDARGS,\n", + " replica_count=1,\n", + " machine_type=TRAIN_COMPUTE,\n", + " service_account=SERVICE_ACCOUNT,\n", + " sync=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5f40912e6500" + }, + "source": [ + "#### Get the experiment results\n", + "\n", + "Next, you use the experiment name as a parameter to the method `get_experiment_df()` to get the results of the experiment as a pandas dataframe.\n", + "\n", + "In this example, you stored the resource URI to the lineage as a metric value `lineage` in the execution run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7e9671712230" + }, + "outputs": [], + "source": [ + "experiment_df = aiplatform.get_experiment_df()\n", + "experiment_df = experiment_df[experiment_df.experiment_name == EXPERIMENT_NAME]\n", + "experiment_df.T" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "65a65f847332" + }, + "source": [ + "#### Visualize the artifact lineage\n", + "\n", + "Next, open the link below to visualize the artifact lineage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f5a02e7d92c7" + }, + "outputs": [], + "source": [ + "print(\"Open the following link\", experiment_df[\"metric.lineage\"][0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d4ba591be8ec" + }, + "source": [ + "#### Delete the custom training job\n", + "\n", + "You can delete your custom training job using the `delete()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5436ab06482a" + }, + "outputs": [], + "source": [ + "job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e508c159d712" + }, + "source": [ + "#### Delete the experiment\n", + "\n", + "Since the experiment was created within `Vertex AI Training`, to delete the experiment you use the `list()` method to obtain all the experiments for the project, and then filter on the experiment name." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1a1b5fcbfde0" + }, + "outputs": [], + "source": [ + "experiments = aiplatform.Experiment.list()\n", + "for experiment in experiments:\n", + " if experiment.name == EXPERIMENT_NAME:\n", + " experiment.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup:mbsdk" + }, + "source": [ + "# Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e89f43b3df49" + }, + "outputs": [], + "source": [ + "! rm -rf custom\n", + "\n", + "delete_bucket = False\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -rf {BUCKET_URI}" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_with_vertex_experiments.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/explainable_ai/README.md b/notebooks/official/explainable_ai/README.md index 1cff73274..89503c633 100644 --- a/notebooks/official/explainable_ai/README.md +++ b/notebooks/official/explainable_ai/README.md @@ -1,18 +1,7 @@ -[Custom training tabular regression model for batch prediction with explainabilty](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_custom_tabular_regression_batch_explain.ipynb) - -Learn how to use `Vertex AI Training and Explainable AI` to create a custom image classification model with explanations, and then you learn to use `Vertex AI Batch Prediction` to make a batch prediction request with explanations. - -The steps performed include: - -- Create a `Vertex AI` custom job for training a TensorFlow model. -- View the model evaluation for the trained model. -- Set explanation parameters for when the model is deployed. -- Upload the trained model artifacts and explanations as a `Model` resource. -- Make a batch prediction with explanations. - [AutoML training tabular binary classification model for batch explanation](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_automl_tabular_binary_classification_batch_explain.ipynb) +``` Learn to use `AutoML` to create a tabular binary classification model from a Python script, and then learn to use `Vertex AI Batch Prediction` to make predictions with explanations. The steps performed include: @@ -22,13 +11,16 @@ The steps performed include: - View the model evaluation metrics for the trained model. - Make a batch prediction request with explainability. +``` -* Prediction Service: Does an on-demand prediction for the entire set of instances (i.e., one or more data items) and returns the results in real-time. +   Learn more about [AutoML Tabular](https://cloud.google.com/vertex-ai/docs/tabular-data/overview). + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). -* Batch Prediction Service: Does a queued (batch) prediction for the entire set of instances in the background and stores the results in a Cloud Storage bucket when ready. [AutoML training tabular classification model for online explanation](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_automl_tabular_classification_online_explain.ipynb) +``` Learn how to use `AutoML` to create a tabular binary classification model from a Python script, and then learn to use `Vertex AI Online Prediction` to make online predictions with explanations. The steps performed include: @@ -41,8 +33,36 @@ The steps performed include: - Make an online prediction request with explainability. - Undeploy the `Model` resource. +``` + +   Learn more about [AutoML Tabular](https://cloud.google.com/vertex-ai/docs/tabular-data/overview). + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). + + +[Custom training image classification model for batch prediction with explainabilty](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_custom_image_classification_batch_explain.ipynb) + +``` +Learn to use `Vertex AI Training and Explainable AI` to create a custom image classification model with explanations, and then you learn to use `Vertex AI Batch Prediction` to make a batch prediction request with explanations. + +The steps performed include: + +- Create a `Vertex AI` custom job for training a TensorFlow model. +- View the model evaluation for the trained model. +- Set explanation parameters for when the model is deployed. +- Upload the trained model artifacts and explanation parameters as a `Model` resource. +- Make a batch prediction with explanations. + +``` + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). + +   Learn more about [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions). + + [Custom training image classification model for online prediction with explainabilty](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_custom_image_classification_online_explain.ipynb) +``` Learn how to use `Vertex AI Training and Explainable AI` to create a custom image classification model with explanations, and then you learn to use `Vertex AI Prediction` to make an online prediction request with explanations. The steps performed include: @@ -56,9 +76,60 @@ The steps performed include: - Make a prediction with explanation. - Undeploy the `Model` resource. +``` + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). + +   Learn more about [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions). + + +[Custom training tabular regression model for batch prediction with explainabilty](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_custom_tabular_regression_batch_explain.ipynb) + +``` +Learn how to use `Vertex AI Training and Explainable AI` to create a custom image classification model with explanations, and then you learn to use `Vertex AI Batch Prediction` to make a batch prediction request with explanations. + +The steps performed include: + +- Create a `Vertex AI` custom job for training a TensorFlow model. +- View the model evaluation for the trained model. +- Set explanation parameters for when the model is deployed. +- Upload the trained model artifacts and explanations as a `Model` resource. +- Make a batch prediction with explanations. + +``` + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). + +   Learn more about [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions). + + +[Custom training tabular regression model for online prediction with explainabilty](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain.ipynb) + +``` +Learn how to use `Vertex AI Training and Explainable AI` to create a custom image classification model with explanations, and then you learn to use `Vertex AI Prediction` to make an online prediction request with explanations. + +The steps performed include: + +- Create a `Vertex AI` custom job for training a TensorFlow model. +- View the model evaluation for the trained model. +- Set explanation parameters for when the model is deployed. +- Upload the trained model artifacts and explanations as a `Model` resource. +- Create a serving `Endpoint` resource. +- Deploy the `Model` resource to a serving `Endpoint` resource. +- Make a prediction with explanation. +- Undeploy the `Model` resource. + +``` + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). + +   Learn more about [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions). + + [Custom training tabular regression model for online prediction with explainabilty using get_metadata](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain_get_metadata.ipynb) -Learn how to create a custom model from a Python script in a Google prebuilt Docker container using the Vertex SDK, and then do a prediction with explanations on the deployed model by sending data. +``` +Learn how to create a custom model from a Python script in a Google prebuilt Docker container using the Vertex AI SDK, and then do a prediction with explanations on the deployed model by sending data. The steps performed include: @@ -72,14 +143,9 @@ The steps performed include: - Make a prediction with explanation. - Undeploy the `Model` resource. -[Custom training image classification model for batch prediction with explainabilty](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/explainable_ai/sdk_custom_image_classification_batch_explain.ipynb) +``` -Learn to use `Vertex AI Training and Explainable AI` to create a custom image classification model with explanations, and then you learn to use `Vertex AI Batch Prediction` to make a batch prediction request with explanations. +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). -The steps performed include: +   Learn more about [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions). -- Create a `Vertex AI` custom job for training a TensorFlow model. -- View the model evaluation for the trained model. -- Set explanation parameters for when the model is deployed. -- Upload the trained model artifacts and explanation parameters as a `Model` resource. -- Make a batch prediction with explanations. diff --git a/notebooks/official/explainable_ai/sdk_automl_tabular_binary_classification_batch_explain.ipynb b/notebooks/official/explainable_ai/sdk_automl_tabular_binary_classification_batch_explain.ipynb index bd1dafef1..06609e9d9 100644 --- a/notebooks/official/explainable_ai/sdk_automl_tabular_binary_classification_batch_explain.ipynb +++ b/notebooks/official/explainable_ai/sdk_automl_tabular_binary_classification_batch_explain.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to create tabular binary classification models and do batch prediction with explanation using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK to create tabular binary classification models and do batch prediction with explanation using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Classification for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview). Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview)." ] }, { diff --git a/notebooks/official/explainable_ai/sdk_automl_tabular_classification_online_explain.ipynb b/notebooks/official/explainable_ai/sdk_automl_tabular_classification_online_explain.ipynb index a8c1be532..ffc424327 100644 --- a/notebooks/official/explainable_ai/sdk_automl_tabular_classification_online_explain.ipynb +++ b/notebooks/official/explainable_ai/sdk_automl_tabular_classification_online_explain.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to create tabular classification models and do online prediction with explanation using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK to create tabular classification models and do online prediction with explanation using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [AutoML Tabular](https://cloud.google.com/vertex-ai/docs/tabular-data/overview) and [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview)." ] }, { diff --git a/notebooks/official/explainable_ai/sdk_custom_image_classification_batch_explain.ipynb b/notebooks/official/explainable_ai/sdk_custom_image_classification_batch_explain.ipynb index e6cc1c5f4..b8f19cbc6 100644 --- a/notebooks/official/explainable_ai/sdk_custom_image_classification_batch_explain.ipynb +++ b/notebooks/official/explainable_ai/sdk_custom_image_classification_batch_explain.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom image classification model for batch prediction with explanation." + "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom image classification model for batch prediction with explanation.\n", + "\n", + "Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview) and [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions)." ] }, { diff --git a/notebooks/official/explainable_ai/sdk_custom_image_classification_online_explain.ipynb b/notebooks/official/explainable_ai/sdk_custom_image_classification_online_explain.ipynb index 79c6ffa7c..516c5194a 100644 --- a/notebooks/official/explainable_ai/sdk_custom_image_classification_online_explain.ipynb +++ b/notebooks/official/explainable_ai/sdk_custom_image_classification_online_explain.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom image classification model for online prediction with explanation." + "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom image classification model for online prediction with explanation.\n", + "\n", + "Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview) and [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions)." ] }, { diff --git a/notebooks/official/explainable_ai/sdk_custom_tabular_regression_batch_explain.ipynb b/notebooks/official/explainable_ai/sdk_custom_tabular_regression_batch_explain.ipynb index 5491c69c4..bfc50f851 100644 --- a/notebooks/official/explainable_ai/sdk_custom_tabular_regression_batch_explain.ipynb +++ b/notebooks/official/explainable_ai/sdk_custom_tabular_regression_batch_explain.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom tabular regression model for batch prediction with explanation." + "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom tabular regression model for batch prediction with explanation.\n", + "\n", + "Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview) and [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions)." ] }, { diff --git a/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain.ipynb b/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain.ipynb index 8aa7fe772..688388f34 100644 --- a/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain.ipynb +++ b/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom tabular regression model for online prediction with explanation." + "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom tabular regression model for online prediction with explanation.\n", + "\n", + "Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview) and [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions)." ] }, { diff --git a/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain_get_metadata.ipynb b/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain_get_metadata.ipynb index f2d77e98e..bec72ba98 100644 --- a/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain_get_metadata.ipynb +++ b/notebooks/official/explainable_ai/sdk_custom_tabular_regression_online_explain_get_metadata.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex SDK to train and deploy a custom tabular regression model for online prediction with explanation." + "This tutorial demonstrates how to use the Vertex AI SDK to train and deploy a custom tabular regression model for online prediction with explanation.\n", + "\n", + "Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview) and [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions)." ] }, { @@ -73,7 +75,16 @@ "source": [ "### Objective\n", "\n", - "In this tutorial, you learn how to create a custom model from a Python script in a Google prebuilt Docker container using the Vertex SDK, and then do a prediction with explanations on the deployed model by sending data. You can alternatively create custom models using `gcloud` command-line tool or online using Cloud Console.\n", + "In this tutorial, you learn how to create a custom model from a Python script in a Google prebuilt Docker container using the Vertex AI SDK, and then do a prediction with explanations on the deployed model by sending data. You can alternatively create custom models using `gcloud` command-line tool or online using Cloud Console.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Training`\n", + "- `Vertex AI Online Prediction`\n", + "- `Vertex Explainable AI`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", "\n", "The steps performed include:\n", "\n", diff --git a/notebooks/official/explainable_ai/xai_image_classification_feature_attributions.ipynb b/notebooks/official/explainable_ai/xai_image_classification_feature_attributions.ipynb new file mode 100644 index 000000000..c2723efb2 --- /dev/null +++ b/notebooks/official/explainable_ai/xai_image_classification_feature_attributions.ipynb @@ -0,0 +1,1045 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Explaining image classification with Vertex Explainable AI\n", + "\n", + "---\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "24743cf4a1e1" + }, + "source": [ + "**_NOTE_**: This notebook has been tested in the following environment:\n", + "\n", + "* Python version = 3.9" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "Vertex Explainable AI offers feature-based and example-based explanations to provide better understanding of model decision making. For feature-based explanations, Vertex Explainable AI integrates feature attributions into Vertex AI. Feature attributions indicate how much each feature in your model contributed to the predictions for each given instance. For an image classification model, when you request explanations, you get the predicted class along with an overlay for the image, showing which areas in the image contributed most strongly to the resulting prediction.\n", + "\n", + "To use Vertex Explainable AI on a pre-trained or custom-trained model, you must configure certain options when you create the `Model` resource that you plan to request explanations from, when you deploy the model, or when you submit a batch explanation job. This tutorial demonstrates how to configure these options, and get and visualize explanations for online and batch predictions.\n", + "\n", + "Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview) and [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d975e698c9a4" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to configure feature-based explanations on a pre-trained image classification model and make online and batch predictions with explanations.\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex Explainable AI\n", + "- Vertex AI Prediction\n", + "\n", + "The steps performed include:\n", + "\n", + "- Download pretrained model from TensorFlow Hub\n", + "- Upload model for deployment\n", + "- Deploy model for online prediction\n", + "- Make online prediction with explanations\n", + "- Make batch predictions with explanations\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "08d289fa873f" + }, + "source": [ + "### Dataset\n", + "\n", + "In this example, you use the TensorFlow [flowers](http://download.tensorflow.org/example_images/flower_photos.tgz) dataset. The dataset contains about 3,700 photos of flowers in five sub-directories, one per class." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aed92deeb4a0" + }, + "source": [ + "### 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),\n", + "and [Cloud Storage pricing](https://cloud.google.com/storage/pricing),\n", + "and use the [Pricing Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "## Installation\n", + "\n", + "Install the following packages required to execute this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "source": [ + "# Install the packages\n", + "! pip3 install --upgrade -q google-cloud-aiplatform \\\n", + " tensorflow \\\n", + " tensorflow-hub" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58707a750154" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "id": "f200f10a1da3" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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 Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "id": "LxQmrc_AARaD" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sBCra4QMA2wR" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "74ccc9e52986" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de775a3773ba" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "id": "254614fa0c46" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ef21552ccea8" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "id": "603adbbf0532" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f6b2ccc891ed" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zgPO1eR3CYjk" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "Create a storage bucket to store intermediate artifacts such as datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "id": "MzGDU7TWdts_" + }, + "outputs": [], + "source": [ + "BUCKET_URI = \"gs://your-bucket-name-unique\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-EcIXiGsCePi" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NIq7R4HZCfIc" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "960505627ddf" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import tensorflow as tf\n", + "import tensorflow_hub as hub\n", + "from google.cloud import aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "id": "utUNuq2aARaE" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SqI_MEPvWVI5" + }, + "source": [ + "## Download pre-trained model from TensorFlow Hub\n", + "\n", + "Feature attribution is supported for all types of models (both AutoML and custom-trained), frameworks (TensorFlow, scikit, XGBoost), and modalities (images, text, tabular, video).\n", + "\n", + "For demonstration purposes, this tutorial uses an image model [Inception_v3](https://tfhub.dev/google/imagenet/inception_v3/classification/5) from the TensorFlow Hub. This model was pre-trained on the ImageNet benchmark dataset.\n", + "First, you download the model from the TensorFlow Hub, wrap it as a Keras layer with `hub.KerasLayer` and save the model artifacts to your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3_JDDMUjFfXO" + }, + "outputs": [], + "source": [ + "classifier_model = \"https://tfhub.dev/google/imagenet/inception_v3/classification/5\"\n", + "\n", + "classifier = tf.keras.Sequential([hub.KerasLayer(classifier_model)])\n", + "\n", + "classifier.build([None, 224, 224, 3])\n", + "\n", + "MODEL_DIR = f\"{BUCKET_URI}/model\"\n", + "classifier.save(MODEL_DIR)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ySldGR7eKdY0" + }, + "source": [ + "## Upload model for deployment\n", + "\n", + "Next, you upload the model to `Vertex AI` Model Registry, which will create a `Vertex AI Model` resource for your model. Prior to uploading, you need to define a serving function to convert data to the format your model expects." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p6wXBlaeZs3j" + }, + "source": [ + "### Define a serving function for image data\n", + "\n", + "You define a serving function to convert image data to the format your model expects. When you send encoded data to `Vertex AI`, your serving function ensures that the data is decoded on the model server before it is passed as input to your model.\n", + "\n", + "To enable `Vertex Explainable AI` in your custom models, you need to set two additional signatures from the serving function:\n", + "\n", + "- `xai_preprocess`: The preprocessing function in the serving function.\n", + "- `xai_model`: The concrete function for calling the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qzA0aHeLFfeq" + }, + "outputs": [], + "source": [ + "CONCRETE_INPUT = \"numpy_inputs\"\n", + "\n", + "\n", + "def _preprocess(bytes_input):\n", + " decoded = tf.io.decode_jpeg(bytes_input, channels=3)\n", + " decoded = tf.image.convert_image_dtype(decoded, tf.float32)\n", + " resized = tf.image.resize(decoded, size=(224, 224))\n", + " return resized\n", + "\n", + "\n", + "@tf.function(input_signature=[tf.TensorSpec([None], tf.string)])\n", + "def preprocess_fn(bytes_inputs):\n", + " decoded_images = tf.map_fn(\n", + " _preprocess, bytes_inputs, dtype=tf.float32, back_prop=False\n", + " )\n", + " return {\n", + " CONCRETE_INPUT: decoded_images\n", + " } # User needs to make sure the key matches model's input\n", + "\n", + "\n", + "@tf.function(input_signature=[tf.TensorSpec([None], tf.string)])\n", + "def serving_fn(bytes_inputs):\n", + " images = preprocess_fn(bytes_inputs)\n", + " prob = m_call(**images)\n", + " return prob\n", + "\n", + "\n", + "m_call = tf.function(classifier.call).get_concrete_function(\n", + " [tf.TensorSpec(shape=[None, 224, 224, 3], dtype=tf.float32, name=CONCRETE_INPUT)]\n", + ")\n", + "\n", + "tf.saved_model.save(\n", + " classifier,\n", + " MODEL_DIR,\n", + " signatures={\n", + " \"serving_default\": serving_fn,\n", + " \"xai_preprocess\": preprocess_fn, # Required for XAI\n", + " \"xai_model\": m_call, # Required for XAI\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YOOXywwNZBN1" + }, + "source": [ + "### Get the serving function signature\n", + "\n", + "You get the signatures of your model's input and output layers by reloading the model into memory, and querying it for the signatures corresponding to each layer. The input layer name of the serving function will be used later when you make a prediction request." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vVdSjoBSQaEA" + }, + "outputs": [], + "source": [ + "loaded = tf.saved_model.load(MODEL_DIR)\n", + "\n", + "serving_input = list(\n", + " loaded.signatures[\"serving_default\"].structured_input_signature[1].keys()\n", + ")[0]\n", + "print(\"Serving function input:\", serving_input)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wnefcZK1ba4b" + }, + "source": [ + "### Configure explanation settings\n", + "\n", + "To use `Vertex Explainable AI` with a custom-trained model, you must configure explanation settings when uploading the model. These settings include:\n", + "\n", + "- `parameters`: The feature attribution method. Available methods include `shapley`, `ig`, `xrai`.\n", + "- `metadata`: The model's input and output for explanation. **This field is optional for TensorFlow 2 models. If omitted, Vertex AI automatically infers the inputs and outputs from the model**. You don't need to configure this field in this tutorial.\n", + "\n", + "Learn more about [configuring feature-based explanations](https://cloud.google.com/vertex-ai/docs/explainable-ai/configuring-explanations-feature-based)." + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "id": "_wDTAJoJHx5p" + }, + "outputs": [], + "source": [ + "XAI = \"ig\" # [ shapley, ig, xrai ]\n", + "\n", + "if XAI == \"shapley\":\n", + " PARAMETERS = {\"sampled_shapley_attribution\": {\"path_count\": 10}}\n", + "elif XAI == \"ig\":\n", + " PARAMETERS = {\"integrated_gradients_attribution\": {\"step_count\": 50}}\n", + "elif XAI == \"xrai\":\n", + " PARAMETERS = {\"xrai_attribution\": {\"step_count\": 50}}\n", + "\n", + "parameters = aiplatform.explain.ExplanationParameters(PARAMETERS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aLslkKlneNyX" + }, + "source": [ + "### Upload the model to a `Vertex AI Model` resource\n", + "\n", + "Next, upload your model to a `Vertex AI Model` resource with the explanation configuration. Vertex AI provides [Docker container images](https://cloud.google.com/vertex-ai/docs/predictions/pre-built-containers) that you run as pre-built containers for serving predictions and explanations from trained model artifacts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MQ_oIG11ID1o" + }, + "outputs": [], + "source": [ + "MODEL_DISPLAY_NAME = \"inception_v3_model_unique\"\n", + "DEPLOY_IMAGE = \"us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-5:latest\"\n", + "\n", + "model = aiplatform.Model.upload(\n", + " display_name=MODEL_DISPLAY_NAME,\n", + " artifact_uri=MODEL_DIR,\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + " explanation_parameters=parameters,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KfL8qvYlLOo6" + }, + "source": [ + "## Deploy model for online prediction\n", + "\n", + "Next, deploy your model for online prediction. You set the variable `DEPLOY_COMPUTE` to configure the machine type for the [compute resources](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute) you will use for prediction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IOkThfvqJlk6" + }, + "outputs": [], + "source": [ + "DEPLOY_DISPLAY_NAME = \"inception_v3_deploy_unique\"\n", + "DEPLOY_COMPUTE = \"n1-standard-4\"\n", + "\n", + "endpoint = model.deploy(\n", + " deployed_model_display_name=DEPLOY_DISPLAY_NAME,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " accelerator_type=None,\n", + " accelerator_count=0,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bHCXBWAYNx3h" + }, + "source": [ + "## Make online prediction with explanations\n", + "\n", + "\n", + "### Download an image dataset and labels\n", + "In this example, you use the TensorFlow flowers dataset for the input data for predictions. The dataset contains about 3,700 photos of flowers in five sub-directories, one per class. You also fetch the ImageNet dataset labels to decode the predictions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": { + "id": "e3caSDUXReNo" + }, + "outputs": [], + "source": [ + "import pathlib\n", + "\n", + "data_dir = tf.keras.utils.get_file(\n", + " \"flower_photos\",\n", + " origin=\"https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz\",\n", + " untar=True,\n", + ")\n", + "\n", + "data_dir = pathlib.Path(data_dir)\n", + "images_files = list(data_dir.glob(\"daisy/*\"))\n", + "\n", + "labels_path = tf.keras.utils.get_file(\n", + " \"ImageNetLabels.txt\",\n", + " \"https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt\",\n", + ")\n", + "\n", + "imagenet_labels = np.array(open(labels_path).read().splitlines())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2OcVOWLuv6TQ" + }, + "source": [ + "### Prepare image processing functions\n", + "\n", + "You define some reusable functions for image processing and visualization." + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "id": "DQz4T3h8iU2M" + }, + "outputs": [], + "source": [ + "import base64\n", + "import io\n", + "import json\n", + "\n", + "import matplotlib.image as mpimg\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "def encode_image_in_b64(image_file):\n", + " bytes = tf.io.read_file(image_file)\n", + " b64str = base64.b64encode(bytes.numpy()).decode(\"utf-8\")\n", + " return b64str\n", + "\n", + "\n", + "def decode_b64_image(b64_image_str):\n", + " image = base64.b64decode(b64_image_str)\n", + " image = io.BytesIO(image)\n", + " image = mpimg.imread(image, format=\"JPG\")\n", + " return image\n", + "\n", + "\n", + "def decode_numpy_image(numpy_inputs):\n", + " numpy_inputs_json = json.loads(str(numpy_inputs))\n", + " image = np.array(numpy_inputs_json)\n", + " return image\n", + "\n", + "\n", + "def show_explanation(encoded_image, prediction, feature_attributions):\n", + " fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(16, 4))\n", + "\n", + " label_index = np.argmax(prediction)\n", + " class_name = imagenet_labels[label_index]\n", + " confidence_score = prediction[label_index]\n", + " axs[0].set_title(\n", + " \"Prediction:[\" + class_name + \"] (\" + str(round(confidence_score, 1)) + \"%)\"\n", + " )\n", + " original_image = decode_b64_image(encoded_image)\n", + " axs[0].imshow(original_image, interpolation=\"nearest\", aspect=\"auto\")\n", + " axs[0].axis(\"off\")\n", + "\n", + " numpy_inputs = feature_attributions[\"numpy_inputs\"]\n", + " attribution_image = decode_numpy_image(numpy_inputs)\n", + " axs[1].set_title(\"Feature attributions\")\n", + " axs[1].imshow(attribution_image, interpolation=\"nearest\", aspect=\"auto\")\n", + " axs[1].axis(\"off\")\n", + "\n", + " processed_image = attribution_image.max(axis=2)\n", + " axs[2].imshow(processed_image, cmap=\"coolwarm\", aspect=\"auto\")\n", + " axs[2].set_title(\"Feature attribution heatmap\")\n", + " axs[2].axis(\"off\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NaO8nWWQxuKw" + }, + "source": [ + "### Get online explanations\n", + "\n", + "You send an `explain` request with encoded input image data to the `endpoint` and get predictions with explanations." + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": { + "id": "N_BeaaCy5M1H" + }, + "outputs": [], + "source": [ + "TEST_IMAGE_SIZE = 2\n", + "\n", + "test_image_list = []\n", + "for i in range(TEST_IMAGE_SIZE):\n", + " test_image_list.append(str(images_files[i]))\n", + "\n", + "instances_list = []\n", + "for test_image in test_image_list:\n", + " b64str = encode_image_in_b64(test_image)\n", + " instances_list.append({serving_input: {\"b64\": b64str}})\n", + "\n", + "response = endpoint.explain(instances_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CTegf0H-1M3M" + }, + "source": [ + "### Visualize online explanations\n", + "\n", + "As you request explanations on an image classification model, you get the predicted class along with an image overlay showing which pixels (integrated gradients) or regions (integrated gradients or XRAI) contributed to the prediction." + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": { + "id": "A69Sxd3D0On0" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:matplotlib.image:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n", + "WARNING:matplotlib.image:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for i, test_image in enumerate(test_image_list):\n", + " encoded_image = encode_image_in_b64(test_image)\n", + " prediction = response.predictions[i]\n", + " explanation = response.explanations[i]\n", + " feature_attributions = dict(explanation.attributions[0].feature_attributions)\n", + "\n", + " show_explanation(encoded_image, prediction, feature_attributions)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KoJiAyLOM2tr" + }, + "source": [ + "## Make batch predictions with explanations\n", + "\n", + "### Create the batch input file\n", + "\n", + "You create a batch input file in JSONL format and store the input file in your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "id": "5LgFY93u0PVf" + }, + "outputs": [], + "source": [ + "gcs_input_uri = f\"{BUCKET_URI}/test_images.json\"\n", + "\n", + "with tf.io.gfile.GFile(gcs_input_uri, \"w\") as f:\n", + " for test_image in test_image_list:\n", + " b64str = encode_image_in_b64(test_image)\n", + " data = {serving_input: {\"b64\": b64str}}\n", + " f.write(json.dumps(data) + \"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cgxVGYmX2Onc" + }, + "source": [ + "### Submit a batch prediction job\n", + "\n", + "You make a batch prediction by submitting a batch prediction job with the `generate_explanation` parameter set to `True`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gaB_dz3h0PYe" + }, + "outputs": [], + "source": [ + "JOB_DISPLAY_NAME = \"inception_v3_job_unique\"\n", + "\n", + "batch_predict_job = model.batch_predict(\n", + " job_display_name=JOB_DISPLAY_NAME,\n", + " gcs_source=gcs_input_uri,\n", + " gcs_destination_prefix=BUCKET_URI,\n", + " instances_format=\"jsonl\",\n", + " model_parameters=None,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " generate_explanation=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RVxOqx-P4nma" + }, + "source": [ + "### Get batch explanations\n", + "\n", + "Next, you get the explanations from the completed batch prediction job. The results are written to the Cloud Storage output bucket you specified in the batch prediction request. You call the method `iter_outputs()` to get a list of each Cloud Storage file generated with the results." + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "id": "pD7kCit00Pbg" + }, + "outputs": [], + "source": [ + "bp_iter_outputs = batch_predict_job.iter_outputs()\n", + "\n", + "explanation_results = list()\n", + "for blob in bp_iter_outputs:\n", + " if blob.name.split(\"/\")[-1].startswith(\"explanation.results\"):\n", + " explanation_results.append(blob.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JSdO0Dx444Ir" + }, + "source": [ + "### Visualize explanations\n", + "\n", + "You take one explanation result as an example and visualize the explanations. For an image classification model, you get the predicted class along with an image overlay showing which pixels (integrated gradients) or regions (integrated gradients or XRAI) contributed to the prediction." + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "id": "SJpLkjc7Fb9T" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:matplotlib.image:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "explanation_result = explanation_results[0]\n", + "\n", + "gfile_name = f\"{BUCKET_URI}/{explanation_result}\"\n", + "with tf.io.gfile.GFile(name=gfile_name, mode=\"r\") as gfile:\n", + " result = json.loads(gfile.read())\n", + "\n", + "encoded_image = result[\"instance\"][\"bytes_inputs\"][\"b64\"]\n", + "prediction = result[\"prediction\"]\n", + "attributions = result[\"explanation\"][\"attributions\"][0]\n", + "feature_attributions = attributions[\"featureAttributions\"]\n", + "\n", + "show_explanation(encoded_image, prediction, feature_attributions)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "endpoint.undeploy_all()\n", + "endpoint.delete()\n", + "model.delete()\n", + "batch_predict_job.delete()\n", + "\n", + "delete_bucket = False\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil -m rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "xai_image_classification_feature_attributions.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/feature_store/README.md b/notebooks/official/feature_store/README.md index fc654f95b..62781b1f7 100644 --- a/notebooks/official/feature_store/README.md +++ b/notebooks/official/feature_store/README.md @@ -1,20 +1,43 @@ -[Using Vertex AI Feature Store with pandas DataFrame](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/feature_store/sdk-feature-store-pandas.ipynb) +[Streaming ingestion SDK](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/feature_store/feature_store_streaming_ingestion_sdk.ipynb) -Learn how to use `Vertex AI Feature Store` with pandas DataFrame. +``` +Learn how to ingest features from a `Pandas DataFrame` into your Vertex AI Feature Store using `write_feature_values` method from the Vertex AI SDK. + +The steps performed include: + +- Create `Feature Store` +- Create new `Entity Type` for your `Feature Store` +- Ingest feature values from `Pandas DataFrame` into `Feature Store`'s `Entity Types`. + +``` + +   Learn more about [Vertex AI Feature Store](https://cloud.google.com/vertex-ai/docs/featurestore). + + +[Using Vertex AI Feature Store with Pandas Dataframe](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/feature_store/sdk-feature-store-pandas.ipynb) + +``` +Learn how to use `Vertex AI Feature Store` with pandas Dataframe. The steps performed include: - Ingest Feature values from Pandas DataFrame into Feature Store's Entity types. -- Read Entity Feature values from Online Feature Store into Pandas DataFrame. -- Batch serve Feature values from your Feature Store into Pandas DataFrame. +- Read Entity feature values from Online Feature Store into Pandas DataFrame. +- Batch serve feature values from your Feature Store into Pandas DataFrame. - Online serving with updated feature values. - Point-in-time correctness to fetch feature values for training. +``` + +   Learn more about [Vertex AI Feature Store](https://cloud.google.com/vertex-ai/docs/featurestore). + + [Online and Batch predictions using Vertex AI Feature Store](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/feature_store/sdk-feature-store.ipynb) +``` Learn how to use `Vertex AI Feature Store` to import feature data, and to access the feature data for both online serving and offline tasks, such as training. The steps performed include: @@ -23,3 +46,9 @@ The steps performed include: - Import feature data into `Vertex AI Feature Store` resource. - Serve online prediction requests using the imported features. - Access imported features in offline jobs, such as training jobs. +- Use streaming ingestion to ingest small amount of data. + +``` + +   Learn more about [Vertex AI Feature Store](https://cloud.google.com/vertex-ai/docs/featurestore). + diff --git a/notebooks/official/feature_store/feature_store_streaming_ingestion_sdk.ipynb b/notebooks/official/feature_store/feature_store_streaming_ingestion_sdk.ipynb new file mode 100644 index 000000000..40a5c7ab1 --- /dev/null +++ b/notebooks/official/feature_store/feature_store_streaming_ingestion_sdk.ipynb @@ -0,0 +1,776 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Feature Store: Streaming ingestion SDK\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "24743cf4a1e1" + }, + "source": [ + "**_NOTE_**: This notebook has been tested in the following environment:\n", + "\n", + "* Python version = 3.9" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "This notebook demonstrates how to use Vertex AI Feature Store's streaming ingestion at the SDK layer.\n", + "\n", + "Learn more about [Vertex AI Feature Store](https://cloud.google.com/vertex-ai/docs/featurestore)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d975e698c9a4" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to ingest features from a `Pandas DataFrame` into your Vertex AI Feature Store using `write_feature_values` method from the Vertex AI SDK.\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Feature Store\n", + "\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create `Feature Store`\n", + "- Create new `Entity Type` for your `Feature Store`\n", + "- Ingest feature values from `Pandas DataFrame` into `Feature Store`'s `Entity Types`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "08d289fa873f" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this notebook is the penguins dataset from [BigQuery public datasets](https://cloud.google.com/bigquery/public-data). This dataset has the following features: `culmen_length_mm`, `culmen_depth_mm`, `flipper_length_mm`, `body_mass_g`, `species`, and `sex`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aed92deeb4a0" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "## Installation\n", + "\n", + "Install the following packages required to execute this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "source": [ + "# Install the packages\n", + "! pip3 install --upgrade google-cloud-aiplatform\\\n", + " google-cloud-bigquery\\\n", + " numpy\\\n", + " pandas\\\n", + " pyarrow -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58707a750154" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f200f10a1da3" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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 Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kljmKgilI_de" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sBCra4QMA2wR" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "74ccc9e52986" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de775a3773ba" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "254614fa0c46" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ef21552ccea8" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "603adbbf0532" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f6b2ccc891ed" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EsCYkJ4IU-z4" + }, + "source": [ + "### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4jWj2DSTU9my" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "960505627ddf" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from google.cloud import aiplatform, bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0ep8KuQhI_df" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k5XsEiAuEWUJ" + }, + "source": [ + "## Download and prepare the data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rOd7Ixa1pqBY" + }, + "outputs": [], + "source": [ + "def download_bq_table(bq_table_uri: str) -> pd.DataFrame:\n", + " # Remove bq:// prefix if present\n", + " prefix = \"bq://\"\n", + " if bq_table_uri.startswith(prefix):\n", + " bq_table_uri = bq_table_uri[len(prefix) :]\n", + "\n", + " table = bigquery.TableReference.from_string(bq_table_uri)\n", + "\n", + " # Create a BigQuery client\n", + " bqclient = bigquery.Client(project=PROJECT_ID)\n", + "\n", + " # Download the table rows\n", + " rows = bqclient.list_rows(\n", + " table,\n", + " )\n", + " return rows.to_dataframe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SdX_m1Uppkfu" + }, + "outputs": [], + "source": [ + "BQ_SOURCE = \"bq://bigquery-public-data.ml_datasets.penguins\"\n", + "\n", + "# Download penguins BigQuery table\n", + "penguins_df = download_bq_table(BQ_SOURCE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QuQe6mSbFbhm" + }, + "source": [ + "### Prepare the data\n", + "\n", + "Feature values to be written to the Feature Store can take the form of a list of `WriteFeatureValuesPayload` objects, a Python `dict` of the form\n", + "\n", + "`{entity_id : {feature_id : feature_value}, ...},`\n", + "\n", + "or a pandas `Dataframe`, where the `index` column holds the unique entity ID strings and each remaining column represents a feature. In this notebook, since you use a pandas `DataFrame` for ingesting features we convert the index column data type to `string` to be used as `Entity ID`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cljxzJ3bqDer" + }, + "outputs": [], + "source": [ + "# Prepare the data\n", + "penguins_df.index = penguins_df.index.map(str)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GSxrSdSY2ovn" + }, + "outputs": [], + "source": [ + "# Remove null values\n", + "NA_VALUES = [\"NA\", \".\"]\n", + "penguins_df = penguins_df.replace(to_replace=NA_VALUES, value=np.NaN).dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vgn4oQmSqdKI" + }, + "source": [ + "## Create Feature Store and define schemas\n", + "\n", + "Vertex AI Feature Store organizes resources hierarchically in the following order:\n", + "\n", + "`Featurestore -> EntityType -> Feature`\n", + "\n", + "You must create these resources before you can ingest data into Vertex AI Feature Store.\n", + "\n", + "Learn more about [Vertex AI Feature Store](https://cloud.google.com/vertex-ai/docs/featurestore)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yaHwdbGjZWTq" + }, + "source": [ + "### Create a Feature Store\n", + "\n", + "You create a Feature Store using `aiplatform.Featurestore.create` with the following parameters:\n", + "\n", + "* `featurestore_id (str)`: The ID to use for this Featurestore, which will become the final component of the Featurestore's resource name. The value must be unique within the project and location.\n", + "* `online_store_fixed_node_count`: Configuration for online serving resources.\n", + "* `project`: Project to create EntityType in. If not set, project set in `aiplatform.init` is used.\n", + "* `location`: Location to create EntityType in. If not set, location set in `aiplatform.init` is used.\n", + "* `sync`: Whether to execute this creation synchronously." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cImsONglqfxO" + }, + "outputs": [], + "source": [ + "FEATURESTORE_ID = f\"penguins_{UUID}\"\n", + "\n", + "penguins_feature_store = aiplatform.Featurestore.create(\n", + " featurestore_id=FEATURESTORE_ID,\n", + " online_store_fixed_node_count=1,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " sync=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UfXgSD1VdzKb" + }, + "source": [ + "##### Verify that the Feature Store is created\n", + "Check if the Feature Store was successfully created by running the following code block." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oud1OdfQd52r" + }, + "outputs": [], + "source": [ + "fs = aiplatform.Featurestore(\n", + " featurestore_name=FEATURESTORE_ID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + ")\n", + "print(fs.gca_resource)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ep74rSlJWF3c" + }, + "source": [ + "### Create an EntityType\n", + "\n", + "An entity type is a collection of semantically related features. You define your own entity types, based on the concepts that are relevant to your use case. For example, a movie service might have the entity types `movie` and `user`, which group related features that correspond to movies or users.\n", + "\n", + "Here, you create an entity type entity type named `penguin_entity_type` using `create_entity_type` with the following parameters:\n", + "* `entity_type_id (str)`: The ID to use for the EntityType, which will become the final component of the EntityType's resource name. The value must be unique within a Feature Store.\n", + "* `description`: Description of the EntityType." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zNzr-FlEr3tI" + }, + "outputs": [], + "source": [ + "ENTITY_TYPE_ID = f\"penguin_entity_type_{UUID}\"\n", + "\n", + "# Create penguin entity type\n", + "penguins_entity_type = penguins_feature_store.create_entity_type(\n", + " entity_type_id=ENTITY_TYPE_ID,\n", + " description=\"Penguins entity type\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CquSdTp7duVw" + }, + "source": [ + "##### Verify that the EntityType is created\n", + "Check if the Entity Type was successfully created by running the following code block." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "76ocr_hJsG-t" + }, + "outputs": [], + "source": [ + "entity_type = penguins_feature_store.get_entity_type(entity_type_id=ENTITY_TYPE_ID)\n", + "\n", + "print(entity_type.gca_resource)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2vYV2UUFehwZ" + }, + "source": [ + "### Create Features\n", + "A feature is a measurable property or attribute of an entity type. For example, `penguin` entity type has features such as `flipper_length_mm`, and `body_mass_g`. Features can be created within each entity type.\n", + "\n", + "When you create a feature, you specify its value type such as `DOUBLE`, and `STRING`. This value determines what value types you can ingest for a particular feature.\n", + "\n", + "Learn more about [Feature Value Types](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores.entityTypes.features)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WQ5EsPPbsSuE" + }, + "outputs": [], + "source": [ + "penguins_feature_configs = {\n", + " \"species\": {\n", + " \"value_type\": \"STRING\",\n", + " },\n", + " \"island\": {\n", + " \"value_type\": \"STRING\",\n", + " },\n", + " \"culmen_length_mm\": {\n", + " \"value_type\": \"DOUBLE\",\n", + " },\n", + " \"culmen_depth_mm\": {\n", + " \"value_type\": \"DOUBLE\",\n", + " },\n", + " \"flipper_length_mm\": {\n", + " \"value_type\": \"DOUBLE\",\n", + " },\n", + " \"body_mass_g\": {\"value_type\": \"DOUBLE\"},\n", + " \"sex\": {\"value_type\": \"STRING\"},\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AKRXJCPijM8w" + }, + "source": [ + "You can create features either using `create_feature` or `batch_create_features`. Here, for convinience, you have added all feature configs in one variabel, so we use `batch_create_features`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "tXOI1Onhs46x" + }, + "outputs": [], + "source": [ + "penguin_features = penguins_entity_type.batch_create_features(\n", + " feature_configs=penguins_feature_configs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WBx26pZItUN4" + }, + "source": [ + "### Write features to the Feature Store\n", + "Use the `write_feature_values` API to write a feature to the Feature Store with the following parameter:\n", + "\n", + "* `instances`: Feature values to be written to the Feature Store that can take the form of a list of WriteFeatureValuesPayload objects, a Python dict, or a pandas Dataframe.\n", + "\n", + "This streaming ingestion feature has been introduced to the Vertex AI SDK under the **preview** namespace. Here, you pass the pandas `Dataframe` you created from penguins dataset as `instances` parameter.\n", + "\n", + "Learn more about [Streaming ingestion API](https://github.com/googleapis/python-aiplatform/blob/e6933503d2d3a0f8a8f7ef8c178ed50a69ac2268/google/cloud/aiplatform/preview/featurestore/entity_type.py#L36)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "iUGI-ftltXqE" + }, + "outputs": [], + "source": [ + "penguins_entity_type.preview.write_feature_values(instances=penguins_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "STq67KHO3q_e" + }, + "source": [ + "## Read back written features\n", + "\n", + "Wait a few seconds for the write to propagate, then do an online read to confirm the write was successful." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lwoMnze43r9G" + }, + "outputs": [], + "source": [ + "ENTITY_IDS = [str(x) for x in range(100)]\n", + "penguins_entity_type.read(entity_ids=ENTITY_IDS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "penguins_feature_store.delete(force=True)" + ] + } + ], + "metadata": { + "colab": { + "name": "feature_store_streaming_ingestion_sdk.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/feature_store/sdk-feature-store-pandas.ipynb b/notebooks/official/feature_store/sdk-feature-store-pandas.ipynb index 8bcde4974..7da896577 100644 --- a/notebooks/official/feature_store/sdk-feature-store-pandas.ipynb +++ b/notebooks/official/feature_store/sdk-feature-store-pandas.ipynb @@ -62,7 +62,9 @@ "source": [ "## Overview\n", "\n", - "This notebook introduces Pandas support for Feature Store using Vertex AI SDK. For pre-requisites and introduction on Vertex AI SDK and Feature Store native support, please go through this [Colab notebook](https://colab.sandbox.google.com/github/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/feature_store/sdk-feature-store.ipynb). " + "This notebook introduces Pandas support for Feature Store using Vertex AI SDK. For pre-requisites and introduction on Vertex AI SDK and Feature Store native support, please go through this [Colab notebook](https://colab.sandbox.google.com/github/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/feature_store/sdk-feature-store.ipynb). \n", + "\n", + "Learn more about [Vertex AI Feature Store](https://cloud.google.com/vertex-ai/docs/featurestore)." ] }, { diff --git a/notebooks/official/feature_store/sdk-feature-store.ipynb b/notebooks/official/feature_store/sdk-feature-store.ipynb index 8ddef9b09..a43927536 100644 --- a/notebooks/official/feature_store/sdk-feature-store.ipynb +++ b/notebooks/official/feature_store/sdk-feature-store.ipynb @@ -62,7 +62,9 @@ "\n", "This notebook introduces Vertex AI Feature Store, a managed cloud service for machine learning engineers and data scientists to store, serve, manage and share machine learning features at a large scale.\n", "\n", - "This notebook assumes that you understand basic Google Cloud concepts such as [Project](https://cloud.google.com/storage/docs/projects), [Storage](https://cloud.google.com/storage) and [Vertex AI](https://cloud.google.com/vertex-ai/docs). Some machine learning knowledge is also helpful but not required.\n" + "This notebook assumes that you understand basic Google Cloud concepts such as [Project](https://cloud.google.com/storage/docs/projects), [Storage](https://cloud.google.com/storage) and [Vertex AI](https://cloud.google.com/vertex-ai/docs). Some machine learning knowledge is also helpful but not required.\n", + "\n", + "Learn more about [Vertex AI Feature Store](https://cloud.google.com/vertex-ai/docs/featurestore)." ] }, { @@ -84,7 +86,8 @@ "- Create featurestore, entity type, and feature resources.\n", "- Import feature data into `Vertex AI Feature Store` resource.\n", "- Serve online prediction requests using the imported features.\n", - "- Access imported features in offline jobs, such as training jobs." + "- Access imported features in offline jobs, such as training jobs.\n", + "- Use streaming ingestion to ingest small amount of data." ] }, { @@ -185,7 +188,7 @@ "source": [ "## Installation\n", "\n", - "Install the packages required for executing this notebook." + "Install the packages required to execute this notebook." ] }, { @@ -220,7 +223,7 @@ "source": [ "### Restart the kernel\n", "\n", - "After you install the SDK, you need to restart the notebook kernel so it can find the packages. You can restart kernel from *Kernel -> Restart Kernel*, or running the following:" + "After you install the SDK, you need to restart the notebook kernel so it can find the packages. You can restart kernel from *Kernel -> Restart Kernel*, or by running the following:" ] }, { @@ -256,14 +259,14 @@ "\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", + "1. [Enable the Vertex AI API and the Compute Engine API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component).\n", "\n", - "1. If you are running this notebook locally, you will need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", "\n", - "1. Enter your project ID in the cell below. Then run the cell to make sure the\n", + "1. Enter your project ID in the cell below, and 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 `$` into these commands." + "**Note**: Jupyter runs lines prefixed with `!` as shell commands, and interpolates Python variables prefixed with `$` into these commands." ] }, { @@ -274,7 +277,7 @@ "source": [ "#### 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**, you can get your project ID using `gcloud`." ] }, { @@ -329,7 +332,7 @@ "#### 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", + "throughout the rest of this notebook. The following regions are supported for Vertex AI. We recommend that you choose the region closest to you.\n", "\n", "- Americas: `us-central1`\n", "- Europe: `europe-west4`\n", @@ -361,7 +364,7 @@ "source": [ "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + "If you are in a live tutorial session, you might be using a shared test account or project. To avoid name conflicts between users on resources created, you create a UUID for each instance session, and append it onto the name of resources you create in this tutorial." ] }, { @@ -376,7 +379,7 @@ "import string\n", "\n", "\n", - "# Generate a uuid of a specifed length(default=8)\n", + "# Generate a UUID of a specifed length(default=8)\n", "def generate_uuid(length: int = 8) -> str:\n", " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", "\n", @@ -452,7 +455,7 @@ "\n", " google_auth.authenticate_user()\n", "\n", - " # If you are running this notebook locally, replace the string below with the\n", + " # If you are running this notebook locally, replace the following string 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", @@ -489,19 +492,19 @@ "id": "h_HmF24mBHv9" }, "source": [ - "## Terminology and Concept\n", + "## Terminology and concept\n", "\n", - "### Featurestore Data model\n", + "### Featurestore data model\n", "\n", "Vertex AI Feature Store organizes data with the following 3 important hierarchical concepts:\n", "```\n", "Featurestore -> Entity type -> Feature\n", "```\n", - "* **Featurestore**: the place to store your features\n", - "* **Entity type**: under a Featurestore, an Entity type describes an object to be modeled, real one or virtual one.\n", - "* **Feature**: under an Entity type, a Feature describes an attribute of the Entity type\n", + "* **Featurestore**: The place to store your features\n", + "* **Entity type**: Under a featurestore, an entity type describes an object to be modeled, real one or virtual one.\n", + "* **Feature**: Under an entity type, a feature describes an attribute of the entity type\n", "\n", - "In the movie prediction example, you will create a featurestore called `movie_prediction`. This store has 2 entity types: `users` and `movies`. The `users` entity type has the `age`, `gender`, and `liked_genres` features. The `movies` entity type has the `titles`, `genres`, and `average rating` features.\n" + "The movie prediction example lets you create a featurestore called `movie_prediction`. This store has 2 entity types. `users` and `movies`. The `users` entity type has the `age`, `gender`, and `liked_genres` features. The `movies` entity type has the `titles`, `genres`, and `average rating` features.\n" ] }, { @@ -510,7 +513,7 @@ "id": "9UvxYyGUimKw" }, "source": [ - "## Create Featurestore and Define Schemas" + "## Create featurestore and define schemas" ] }, { @@ -519,11 +522,11 @@ "id": "buQBIv3ZL3A0" }, "source": [ - "### Create Featurestore\n", + "### Create featurestore\n", "\n", - "The method to create a Featurestore returns a\n", + "The method to create a featurestore returns a\n", "[long-running operation](https://google.aip.dev/151) (LRO). An LRO starts an asynchronous job. LROs are returned for other API\n", - "methods too, such as updating or deleting a featurestore. Running the code cell will create a featurestore and print the process log." + "methods too, such as updating or deleting a featurestore. Running the code cell creates a featurestore and print the process log." ] }, { @@ -549,7 +552,7 @@ "id": "ag8pCQ7rNjVf" }, "source": [ - "Use the function call below to retrieve a Featurestore and check that it has been created.\n" + "Use the following function call to retrieve a featurestore and check that it has been created.\n" ] }, { @@ -574,9 +577,9 @@ "id": "EpmJq75zXjmT" }, "source": [ - "### Create Entity Type\n", + "### Create entity Type\n", "\n", - "Entity types can be created within the Featurestore class. Below, create the Users entity type and Movies entity type. A process log will be printed out." + "Entity types can be created within the `Featurestore` class. Below, create the `users` and `movies` entity types. A process log is printed out." ] }, { @@ -587,7 +590,7 @@ }, "outputs": [], "source": [ - "# Create users entity type\n", + "# Create the `users` entity type\n", "users_entity_type = fs.create_entity_type(\n", " entity_type_id=\"users\",\n", " description=\"Users entity\",\n", @@ -602,7 +605,7 @@ }, "outputs": [], "source": [ - "# Create movies entity type\n", + "# Create the `movies` entity type\n", "movies_entity_type = fs.create_entity_type(\n", " entity_type_id=\"movies\",\n", " description=\"Movies entity\",\n", @@ -649,8 +652,8 @@ "id": "FJW4q-0jO2Xf" }, "source": [ - "### Create Feature\n", - "Features can be created within each entity type. Add defining features to the Users entity type and Movies entity type by using the `create_feature` method." + "### Create feature\n", + "You can create features within each entity type. Use the `create_feature` method to add features to the `users` and `movies` entity types." ] }, { @@ -661,7 +664,7 @@ }, "outputs": [], "source": [ - "# to create features one at a time use\n", + "# To create one feature at a time, use:\n", "users_feature_age = users_entity_type.create_feature(\n", " feature_id=\"age\",\n", " value_type=\"INT64\",\n", @@ -687,7 +690,7 @@ "id": "RQ9-AyFYBvcX" }, "source": [ - "Use the [list_features](https://github.com/googleapis/python-aiplatform/blob/main/google/cloud/aiplatform/featurestore/entity_type.py#L349) method to list all the features of a given entity type." + "Use the [`list_features`](https://github.com/googleapis/python-aiplatform/blob/main/google/cloud/aiplatform/featurestore/entity_type.py#L349) method to list all the features of a given entity type." ] }, { @@ -746,12 +749,14 @@ "source": [ "## Search created features\n", "\n", - "While the `list_features` method allows you to easily view all features of a single\n", - "entity type, the [search](https://github.com/googleapis/python-aiplatform/blob/main/google/cloud/aiplatform/featurestore/feature.py#L352) method in the Feature class searches across all featurestores and entity types in a given location (such as `us-central1`), and returns a list of features. This can help you discover features that were created by someone else.\n", + "While the `list_features` method lets you view all features for the same entity type,\n", + "the [`search`](https://github.com/googleapis/python-aiplatform/blob/main/google/cloud/aiplatform/featurestore/feature.py#L352) method in the `Feature` class searches across all featurestores and entity types in a given location (such as `us-central1`) and returns a list of features. This lets you discover features created by someone else.\n", "\n", - "You can query based on feature properties including feature ID, entity type ID, and feature description. You can also limit results by filtering on a specific featurestore, feature value type, and/or labels. Some search examples are shown below. \n", + "You can query based on feature properties including feature ID, entity type ID, and feature description. You can also limit results by filtering based on a specific featurestore, feature value type, and/or label. Some search examples are shown below. \n", "\n", - "Search for all features within a featurestore with the code snippet below." + "**Example of using the `search` method**\n", + "\n", + "Use the following code snippet to search for all features within a feature store:\n" ] }, { @@ -820,9 +825,9 @@ "id": "K3n5XdK8Xjmw" }, "source": [ - "## Import Feature Values\n", + "## Import feature values\n", "\n", - "You need to import feature values before you can use them for online/offline serving. In this step, you learn how to import feature values by ingesting the values from Cloud Storage. You can also import feature values from BigQuery or a Pandas dataframe.\n" + "You need to import feature values before you can use them for online or offline serving. In this step, you learn how to import feature values by ingesting the values from GCS (Google Cloud Storage). You can also import feature values from BigQuery or a pandas dataFrame.\n" ] }, { @@ -831,11 +836,11 @@ "id": "BlqJ-QdTcs6W" }, "source": [ - "### Source Data Format and Layout\n", + "### Source data format and layout\n", "\n", - "BigQuery table/Avro/CSV are supported as input data types. No matter what format you are using, each imported entity *must* have an ID; also, each entity can *optionally* have a timestamp, specifying when the feature values are generated. This notebook uses Avro as an input, located at this public [bucket](https://console.cloud.google.com/storage/browser/cloud-samples-data-us-central1/vertex-ai/feature-store/datasets). The Avro schemas are as follows:\n", + "BigQuery table/Avro/CSV are supported as input data types. No matter what format you are using, each imported entity *must* have an ID. Each entity can *optionally* have a timestamp, specifying when the feature values are generated. This notebook uses Avro as an input, located at this public [bucket](https://console.cloud.google.com/storage/browser/cloud-samples-data-us-central1/vertex-ai/feature-store/datasets). The Avro schemas are as follows:\n", "\n", - "**For the Users entity**:\n", + "**For the `users` entity**:\n", "```\n", "schema = {\n", " \"type\": \"record\",\n", @@ -865,7 +870,7 @@ " }\n", "```\n", "\n", - "**For the Movies entity**:\n", + "**For the `movies` entity**:\n", "```\n", "schema = {\n", " \"type\": \"record\",\n", @@ -902,7 +907,7 @@ "id": "m7DyDa6chbJx" }, "source": [ - "### Import feature values for Users entity type\n", + "### Import feature values for `users` entity type\n", "\n", "When importing, specify the following in your request:\n", "\n", @@ -955,9 +960,9 @@ "id": "laXdJPIqkLJO" }, "source": [ - "### Import feature values for Movies entity type\n", + "### Import feature values for `movies` entity type\n", "\n", - "Similarly, import feature values for the Movies entity type into the featurestore.\n" + "Similarly, import feature values for the `movies` entity type into the featurestore.\n" ] }, { @@ -1014,7 +1019,7 @@ }, "source": [ "[Online serving](https://cloud.google.com/vertex-ai/docs/featurestore/serving-online)\n", - "lets you serve feature values for small batches of entities. It's designed for latency-sensitive service, such as online model prediction. For example, for a movie service, you might want to quickly show movies that the current user would most likely watch." + "lets you serve feature values for small batches of entities. It's designed for latency-sensitive services, such as online model prediction. For example, for a movie service, you might want to quickly show movies that the current user would most likely watch." ] }, { @@ -1025,9 +1030,9 @@ "source": [ "### Read one entity per request\n", "\n", - "With the Vertex AI SDK, it is easy to read feature values of one entity. By default, the SDK will return the latest value of each feature, meaning the feature values with the most recent timestamp.\n", + "With the Python SDK, it's easy to read feature values of one entity. By default, the SDK returns the latest value of each feature, that is, the feature values with the most recent timestamps.\n", "\n", - "To read feature values, specify the entity type ID and features to read. By default all the features of an entity type will be selected. The response will output and display the selected entity type ID and the selected feature values as a Pandas dataframe." + "To read feature values, specify the entity type ID and features to read. By default all the features of an entity type are selected. The output response displays the selected entity type ID and the selected feature values as a Pandas dataframe." ] }, { @@ -1060,7 +1065,7 @@ "source": [ "### Read multiple entities per request\n", "\n", - "To read feature values from multiple entities, specify the different entity type IDs. By default all the features of an entity type will be selected. Note that fetching only a small number of entities is recommended when using this SDK due to its latency-sensitive nature." + "To read feature values from multiple entities, specify the different entity type IDs. By default, all the features of an entity type are selected. Note that fetching only a small number of entities is recommended when using this SDK due to its latency-sensitive nature." ] }, { @@ -1115,16 +1120,16 @@ "source": [ "### Use case\n", "\n", - "**The task** is to prepare a training dataset to train a model, which predicts if a given user will watch a given movie. To achieve this, you need 2 sets of input:\n", + "**The task** is to prepare a training dataset to train a model, which predicts if a given user is going to watch a movie. To achieve this, you need 2 sets of input:\n", "\n", "* Features: you already imported into the featurestore.\n", "* Labels: the ground-truth data recorded that user X has watched movie Y.\n", "\n", "\n", "To be more specific, the ground-truth observation is described in Table 1 and the desired training dataset is described in Table 2. Each row in Table 2 is a result of joining the imported feature values from Vertex AI Feature Store according to the entity IDs and timestamps in Table 1. In this example, the `age`, `gender` and `liked_genres` features from `users` and\n", - "the `titles`, `genres` and `average_rating` features from `movies` are chosen to train the model. Note that only positive examples are shown in these 2 tables, i.e., you can imagine there is a label column whose values are all `True`.\n", + "the `titles`, `genres` and `average_rating` features from `movies` are chosen to train the model. Note that only positive examples are shown in these 2 tables, that is, you can imagine there is a label column whose values are all `True`.\n", "\n", - "[batch_serve_to_bq](https://github.com/googleapis/python-aiplatform/blob/main/google/cloud/aiplatform/featurestore/featurestore.py#L770) takes Table 1 as\n", + "[`batch_serve_to_bq`](https://github.com/googleapis/python-aiplatform/blob/main/google/cloud/aiplatform/featurestore/featurestore.py#L770) takes Table 1 as\n", "input, joins all required feature values from the featurestore, and returns Table 2 for training.\n", "\n", "

Table 1. Ground-truth data

\n", @@ -1154,7 +1159,7 @@ "source": [ "#### Why timestamp?\n", "\n", - "Note that there is a `timestamp` column in Table 2. This indicates the time when the ground-truth was observed. This is to avoid data inconsistency.\n", + "Note that there is a `timestamp` column in Table 2 to indicate the time when the ground-truth was observed. This is to avoid data inconsistency.\n", "\n", "For example, the 2nd row of Table 2 indicates that user `alice` watched movie `Cinema Paradiso` on `2019-11-01T00:00:00Z`. The featurestore keeps feature values for all timestamps but fetches feature values *only* at the given timestamp during batch serving. On that day, Alice might have been 54 years old, but now Alice might be 56; featurestore returns `age=54` as Alice's age, instead of `age=56`, because that is the value of the feature at the observation time. Similarly, other features might be time-variant as well, such as `liked_genres`." ] @@ -1167,7 +1172,7 @@ "source": [ "### Create BigQuery dataset for output\n", "\n", - "You need a BigQuery dataset to host the output data in `us-central1`. Input the name of the dataset you want to create and specify the name of the table you want to store the output created later. These will be used in the next section.\n", + "You need a BigQuery dataset to host the output data in `us-central1`. Input the name of the dataset you want to create and specify the name of the table you want to store the output created later. These are used in the next section.\n", "\n", "**Make sure that the table name does NOT already exist**.\n" ] @@ -1232,9 +1237,9 @@ "id": "W8dLJ9nuDFgI" }, "source": [ - "### Batch Read Feature Values\n", + "### Batch read feature values\n", "\n", - "Assemble the request which specify the following info:\n", + "Assemble the request which specifies the following info:\n", "\n", "* Where is the label data, i.e., Table 1.\n", "* Which features are read, i.e., the column names in Table 2.\n", @@ -1281,6 +1286,96 @@ "After the LRO finishes, you should be able to see the result in the [BigQuery console](https://console.cloud.google.com/bigquery), as a new table under the BigQuery dataset created earlier." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7190f3c8b625" + }, + "source": [ + "## Streaming ingestion\n", + "\n", + "Streaming ingestion is currently public preview. \n", + "\n", + "Streaming ingestion lets you make real-time updates to feature values. While batch import is suitable for importing a large volume of data with high latency, streaming ingestion is suitable for ingesting small amount of data with low latency. The written data becomes available to read using batch export and online serving." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "560e835c93db" + }, + "outputs": [], + "source": [ + "# Since streaming ingestion is public preview, the feature is available in aiplatform_v1beta1.\n", + "from google.cloud.aiplatform_v1beta1 import (\n", + " FeaturestoreOnlineServingServiceClient, FeaturestoreServiceClient)\n", + "from google.cloud.aiplatform_v1beta1.types import \\\n", + " featurestore_online_service as featurestore_online_service_pb2\n", + "from google.cloud.aiplatform_v1beta1.types import types as types_pb2\n", + "\n", + "API_ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", + "# Create client connection\n", + "admin_client = FeaturestoreServiceClient(client_options={\"api_endpoint\": API_ENDPOINT})\n", + "data_client = FeaturestoreOnlineServingServiceClient(\n", + " client_options={\"api_endpoint\": API_ENDPOINT}\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f53a06c9ab5c" + }, + "outputs": [], + "source": [ + "# Call `write_feature_values` to ingest data to `users` entity type.\n", + "data_client.write_feature_values(\n", + " entity_type=admin_client.entity_type_path(\n", + " PROJECT_ID, REGION, FEATURESTORE_ID, \"users\"\n", + " ),\n", + " payloads=[\n", + " featurestore_online_service_pb2.WriteFeatureValuesPayload(\n", + " entity_id=\"1305\",\n", + " feature_values={\n", + " \"age\": featurestore_online_service_pb2.FeatureValue(int64_value=34),\n", + " \"gender\": featurestore_online_service_pb2.FeatureValue(\n", + " string_value=\"female\"\n", + " ),\n", + " \"liked_genres\": featurestore_online_service_pb2.FeatureValue(\n", + " string_array_value=types_pb2.StringArray(values=[\"drama\", \"action\"])\n", + " ),\n", + " },\n", + " ),\n", + " featurestore_online_service_pb2.WriteFeatureValuesPayload(\n", + " entity_id=\"1306\",\n", + " feature_values={\n", + " \"age\": featurestore_online_service_pb2.FeatureValue(int64_value=50),\n", + " \"gender\": featurestore_online_service_pb2.FeatureValue(\n", + " string_value=\"male\"\n", + " ),\n", + " \"liked_genres\": featurestore_online_service_pb2.FeatureValue(\n", + " string_array_value=types_pb2.StringArray(\n", + " values=[\"suspense\", \"comedy\"]\n", + " )\n", + " ),\n", + " },\n", + " ),\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "700a9f1ebd19" + }, + "source": [ + "Upon successful completion, the `write_feature_values` API returns an empty response.\n", + "Similarly, ingest data to the `movies` entity type" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1292,7 +1387,7 @@ "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", "\n", - "You can also keep the project but delete the featurestore and the BigQuery dataset by running the code below:" + "You can also keep the project, but delete the featurestore and the BigQuery dataset by running the following code:" ] }, { diff --git a/notebooks/official/matching_engine/README.md b/notebooks/official/matching_engine/README.md index 35a229d5a..493b05d44 100644 --- a/notebooks/official/matching_engine/README.md +++ b/notebooks/official/matching_engine/README.md @@ -1,7 +1,26 @@ -## Vertex-AI: Matching Engine Notebook -[Create Vertex AI Matching Engine index](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/matching_engine/sdk_matching_engine_for_indexing.ipynb) +[Introduction to builtin Swivel embedding algorithm](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/matching_engine/intro-swivel.ipynb) +``` +Learn how to train custom embeddings using Vertex AI Pipelines and deploy the model for serving. + +The steps performed include: + +1. **Setup**: Importing the required libraries and setting your global variables. +2. **Configure parameters**: Setting the appropriate parameter values for the pipeline job. +3. **Train on Vertex AI Pipelines**: Create a Swivel job to Vertex Pipelines using pipeline template. +4. **Deploy on Vertex AI Prediction**: Importing and deploying the trained model to a callable endpoint. +5. **Predict**: Calling the deployed endpoint using online prediction. +6. **Cleaning up**: Deleting resources created by this tutorial. + +``` + +   Learn more about [Vertex AI Matching Engine](https://cloud.google.com/vertex-ai/docs/matching-engine/overview). + + +[Create Vertex AI Matching Engine index](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/matching_engine/sdk_matching_engine_for_indexing.ipynb) + +``` Learn how to create Approximate Nearest Neighbor (ANN) Index, query against indexes, and validate the performance of the index. The steps performed include: @@ -12,20 +31,26 @@ The steps performed include: * Perform online query * Compute recall -
- Example code snippet from the Notebook: - - * Create an IndexEndpoint with VPC Network - ```python - # [START aiplatform_sdk_matching_engine_for_indexing] - VPC_NETWORK = "[your-network-name]" - VPC_NETWORK_FULL = "projects/{}/global/networks/{}".format(PROJECT_NUMBER, VPC_NETWORK) - my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create( - display_name="index_endpoint_for_demo", - description="index endpoint description", - network=VPC_NETWORK_FULL, - ) - # [END aiplatform_sdk_matching_engine_for_indexing] - ``` - [:notebook: sdk_matching_engine_for_indexing.ipynb](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/matching_engine/sdk_matching_engine_for_indexing.ipynb) -
+``` + +   Learn more about [Vertex AI Matching Engine](https://cloud.google.com/vertex-ai/docs/matching-engine/overview). + + +[Introduction to builtin Two-Towers embedding algorithm](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/matching_engine/two-tower-model-introduction.ipynb) + +``` +Learn how to run the Two-Tower model. + +The steps performed include: +1. **Setup**: Importing the required libraries and setting your global variables. +2. **Configure parameters**: Setting the appropriate parameter values for the training job. +3. **Train on Vertex AI Training**: Submitting a training job. +4. **Deploy on Vertex AI Prediction**: Importing and deploying the trained model to a callable endpoint. +5. **Predict**: Calling the deployed endpoint using online or batch prediction. +6. **Hyperparameter tuning**: Running a hyperparameter tuning job. +7. **Cleaning up**: Deleting resources created by this tutorial. + +``` + +   Learn more about [Vertex AI Matching Engine](https://cloud.google.com/vertex-ai/docs/matching-engine/overview). + diff --git a/notebooks/official/matching_engine/intro-swivel.ipynb b/notebooks/official/matching_engine/intro-swivel.ipynb deleted file mode 100644 index 5d4a16085..000000000 --- a/notebooks/official/matching_engine/intro-swivel.ipynb +++ /dev/null @@ -1,1327 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ur8xi4C7S06n" - }, - "outputs": [], - "source": [ - "# Copyright 2021 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": "JAPoU8Sm5E6e" - }, - "source": [ - "# Introduction to builtin Swivel embedding algorithm\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \"Colab Run in Colab\n", - " \n", - " \n", - " \n", - " \"GitHub\n", - " View on GitHub\n", - " \n", - " \n", - " \n", - " \"Vertex\n", - " Open in Vertex AI Workbench\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0f2a285ac113" - }, - "source": [ - "## Overview\n", - "\n", - "This notebook demonstrate how to train an embedding with Submatrix-wise Vector Embedding Learner ([Swivel](https://arxiv.org/abs/1602.02215)) using Vertex Pipelines. The purpose of the embedding learner is to compute cooccurrences between tokens in a given dataset and to use the cooccurrences to generate embeddings.\n", - "\n", - "Vertex AI provides a pipeline template\n", - "for training with Swivel, so you don't need to design your own pipeline or write\n", - "your own training code.\n", - "\n", - "It will require you provide a bucket where the dataset will be stored.\n", - "\n", - "Note: you may incur charges for training, storage or usage of other GCP products (Dataflow) in connection with testing this SDK.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tvgnzT1CKxrO" - }, - "source": [ - "### Objective\n", - "\n", - "In this notebook, you learn how to train custom embeddings using Vertex AI Pipelines and deploy the model for serving. \n", - "\n", - "The steps performed include:\n", - "\n", - "1. **Setup**: Importing the required libraries and setting your global variables.\n", - "2. **Configure parameters**: Setting the appropriate parameter values for the pipeline job.\n", - "3. **Train on Vertex AI Pipelines**: Create a Swivel job to Vertex Pipelines using pipeline template.\n", - "4. **Deploy on Vertex AI Prediction**: Importing and deploying the trained model to a callable endpoint.\n", - "5. **Predict**: Calling the deployed endpoint using online prediction.\n", - "6. **Cleaning up**: Deleting resources created by this tutorial." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "fdba765f512d" - }, - "source": [ - "### Dataset\n", - "\n", - "You will use the following sample datasets in the public bucket **gs://cloud-samples-data/vertex-ai/matching-engine/swivel**:\n", - "\n", - "1. **movielens_25m**: A [movie rating dataset](https://grouplens.org/datasets/movielens/25m/) for the items input type that you can use to create embeddings for movies. This dataset is processed so that each line contains the movies that have same rating by the same user. The directory also includes `movies.csv`, which maps the movie ids to their names.\n", - "2. **wikipedia**: A text corpus dataset created from a [Wikipedia dump](https://dumps.wikimedia.org/enwiki/) that you can use to create word embeddings." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "f0c48754d30e" - }, - "source": [ - "### Costs \n", - "\n", - "This tutorial uses billable components of Google Cloud:\n", - "\n", - "* Vertex AI\n", - "* Dataflow\n", - "* Cloud Storage\n", - "\n", - "Learn about [Vertex AI\n", - "pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage\n", - "pricing](https://cloud.google.com/storage/pricing), and [Dataflow pricing](https://cloud.google.com/dataflow/pricing), and use the [Pricing\n", - "Calculator](https://cloud.google.com/products/calculator/)\n", - "to generate a cost estimate based on your projected usage." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ze4-nDLfK4pw" - }, - "source": [ - "### Set up your local development environment\n", - "\n", - "**If you are using Colab or Google Cloud Notebooks**, your environment already meets\n", - "all the requirements to run this notebook. You can skip this step." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gCuSR8GkAgzl" - }, - "source": [ - "**Otherwise**, make sure your environment meets this notebook's requirements.\n", - "You need the following:\n", - "\n", - "* The Google Cloud SDK\n", - "* Git\n", - "* Python 3\n", - "* virtualenv\n", - "* Jupyter notebook running in a virtual environment with Python 3\n", - "\n", - "The Google Cloud guide to [Setting up a Python development\n", - "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", - "installation guide](https://jupyter.org/install) provide detailed instructions\n", - "for meeting these requirements. The following steps provide a condensed set of\n", - "instructions:\n", - "\n", - "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", - "\n", - "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", - "\n", - "1. [Install\n", - " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", - " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", - "\n", - "1. To install Jupyter, run `pip3 install jupyter` on the\n", - "command-line in a terminal shell.\n", - "\n", - "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", - "\n", - "1. Open this notebook in the Jupyter Notebook Dashboard." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "i7EUnXsZhAGF" - }, - "source": [ - "### Install additional packages\n", - "\n", - "Install additional package dependencies not installed in your notebook environment, such as google-cloud-aiplatform, tensorboard-plugin-profile. Use the latest major GA version of each package." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2b4ef9b72d43" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "# The Google Cloud Notebook product has specific requirements\n", - "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", - "\n", - "# Google Cloud Notebook requires dependencies to be installed with '--user'\n", - "USER_FLAG = \"\"\n", - "if IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " USER_FLAG = \"--user\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "wyy5Lbnzg5fi" - }, - "outputs": [], - "source": [ - "!pip3 install {USER_FLAG} --upgrade pip\n", - "!pip3 install {USER_FLAG} --upgrade scikit-learn\n", - "!pip3 install {USER_FLAG} --upgrade google-cloud-aiplatform tensorboard-plugin-profile\n", - "!pip3 install {USER_FLAG} --upgrade tensorflow" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hhq5zEbGg0XX" - }, - "source": [ - "### Restart the kernel\n", - "\n", - "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EzrelQZ22IZj" - }, - "outputs": [], - "source": [ - "# Automatically restart kernel after installs\n", - "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": "lWEdiXsJg0XY" - }, - "source": [ - "## Before you begin" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BF1j6f9HApxa" - }, - "source": [ - "### 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", - "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 Dataflow API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,dataflow.googleapis.com).\n", - "\n", - "1. If you are running this notebook locally, you will need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", - "\n", - "1. 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 `$` into these commands." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WReHDGG5g0XY" - }, - "source": [ - "#### 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`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "oM1iC_MfAts1" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "PROJECT_ID = \"\"\n", - "\n", - "# Get your Google Cloud project ID and project number from gcloud\n", - "if not os.getenv(\"IS_TESTING\"):\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)\n", - " shell_output = !gcloud projects list --filter=\"$(gcloud config get-value project)\" --format=\"value(PROJECT_NUMBER)\" 2>/dev/null\n", - " PROJECT_NUMBER = shell_output[0]\n", - " print(\"Project number: \", PROJECT_NUMBER)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "qJYoRfYng0XZ" - }, - "source": [ - "Otherwise, set your project ID here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "riG_qUokg0XZ" - }, - "outputs": [], - "source": [ - "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", - " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0CweX_c7eVSH" - }, - "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 it onto the name of resources you create in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "aK4XnlYSeVSI" - }, - "outputs": [], - "source": [ - "from datetime import datetime\n", - "\n", - "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dr--iN2kAylZ" - }, - "source": [ - "### Authenticate your Google Cloud account\n", - "\n", - "**If you are using Google Cloud Notebooks**, your environment is already\n", - "authenticated. Skip this step." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "sBCra4QMA2wR" - }, - "source": [ - "**If you are using Colab**, run the cell below and follow the instructions\n", - "when prompted to authenticate your account via oAuth.\n", - "\n", - "**Otherwise**, follow these steps:\n", - "\n", - "1. In the Cloud Console, go to the [**Create service account key**\n", - " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", - "\n", - "2. Click **Create service account**.\n", - "\n", - "3. In the **Service account name** field, enter a name, and\n", - " click **Create**.\n", - "\n", - "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", - "into the filter box, and select\n", - " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", - "\n", - "5. Click *Create*. A JSON file that contains your key downloads to your\n", - "local environment.\n", - "\n", - "6. Enter the path to your service account key as the\n", - "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "PyQmSRbKA8r-" - }, - "outputs": [], - "source": [ - "import os\n", - "import sys\n", - "\n", - "# 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", - "# The Google Cloud Notebook product has specific requirements\n", - "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", - "\n", - "# If on Google Cloud Notebooks, then don't execute this code\n", - "if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " if \"google.colab\" in sys.modules:\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 ''" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zgPO1eR3CYjk" - }, - "source": [ - "### Create a Cloud Storage bucket\n", - "\n", - "**The following steps are required, regardless of your notebook environment.**\n", - "\n", - "When you submit a built-in Swivel job using the Cloud SDK, you need a Cloud Storage bucket for storing the input dataset and pipeline artifacts (the trained model).\n", - "\n", - "Set the name of your Cloud Storage bucket below. It must be unique across all Cloud Storage buckets.\n", - "\n", - "You may also change the `REGION` variable, which is used for operations\n", - "throughout the rest of this notebook. Make sure to [choose a region where Vertex AI services are\n", - "available](https://cloud.google.com/vertex-ai/docs/general/locations#available_regions). You may\n", - "not use a Multi-Regional Storage bucket for training with Vertex AI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "MzGDU7TWdts_" - }, - "outputs": [], - "source": [ - "BUCKET_NAME = \"gs://[your-bucket-name]\" # @param {type:\"string\"}\n", - "REGION = \"us-central1\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "cf221059d072" - }, - "outputs": [], - "source": [ - "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"gs://[your-bucket-name]\":\n", - " BUCKET_NAME = \"gs://\" + PROJECT_ID + \"aip-\" + TIMESTAMP" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "-EcIXiGsCePi" - }, - "source": [ - "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "NIq7R4HZCfIc" - }, - "outputs": [], - "source": [ - "! gsutil mb -l $REGION $BUCKET_NAME" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ucvCsknMCims" - }, - "source": [ - "Finally, validate access to your Cloud Storage bucket by examining its contents:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "vhOb7YnwClBb" - }, - "outputs": [], - "source": [ - "! gsutil ls -al $BUCKET_NAME" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "d612cd762261" - }, - "source": [ - "### Service Account\n", - "\n", - "**If you don't know your service account**, try to get your service account using gcloud command by executing the second cell below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "801acfa0ffbc" - }, - "outputs": [], - "source": [ - "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "e7864c293f9e" - }, - "outputs": [], - "source": [ - "if (\n", - " SERVICE_ACCOUNT == \"\"\n", - " or SERVICE_ACCOUNT is None\n", - " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", - "):\n", - " # Get your GCP project id from gcloud\n", - " shell_output = !gcloud auth list 2>/dev/null\n", - " SERVICE_ACCOUNT = shell_output[2].split()[1]\n", - " print(\"Service Account:\", SERVICE_ACCOUNT)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "1390d2890e4e" - }, - "source": [ - "#### Set service account access for Vertex AI Pipelines\n", - "\n", - "Run the following commands to grant your service account access to read and write pipeline artifacts in the bucket that you created in the previous step -- you only need to run these once per service account." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "0f5ef291f226" - }, - "outputs": [], - "source": [ - "!gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator $BUCKET_NAME\n", - "\n", - "!gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer $BUCKET_NAME" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "I3pGuwT7eVSJ" - }, - "source": [ - "### Import libraries and define constants\n", - "Define constants used in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pARPYnT2eVSJ" - }, - "outputs": [], - "source": [ - "SOURCE_DATA_PATH = \"{}/swivel\".format(BUCKET_NAME)\n", - "PIPELINE_ROOT = \"{}/pipeline_root\".format(BUCKET_NAME)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Vg6BigD5eVSJ" - }, - "source": [ - "Import packages used in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "fiimME4YeVSJ" - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import tensorflow as tf\n", - "from google.cloud import aiplatform\n", - "from sklearn.metrics.pairwise import cosine_similarity" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Y9Uo3tifg1kx" - }, - "source": [ - "## Copy and configure the Swivel template\n", - "\n", - "Download the Swivel template and configuration script." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pRUOFELefqf1" - }, - "outputs": [], - "source": [ - "!gsutil cp gs://cloud-samples-data/vertex-ai/matching-engine/swivel/pipeline/* ." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3ElFBL6BeVSK" - }, - "source": [ - "Change your pipeline configurations: \n", - "\n", - "* pipeline_suffix: Suffix of your pipeline name (lowercase and hyphen are allowed).\n", - "* machine_type: e.g. n1-standard-16.\n", - "* accelerator_count: Number of GPUs in each machine.\n", - "* accelerator_type: e.g. NVIDIA_TESLA_P100, NVIDIA_TESLA_V100.\n", - "* region: e.g. us-east1 (optional, default is us-central1)\n", - "* network_name: e.g., my_network_name (optional, otherwise it uses \"default\" network)." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "712fffac0757" - }, - "source": [ - "### VPC Network peering, subnetwork and private IP address configuration\n", - "\n", - "Executing the following cell will generate two files:\n", - "1. `swivel_pipeline_basic.json`: The basic template allows public IPs and default network for the Dataflow job, and doesn't require setting up VPC Network peering for Vertex AI and **you will use it in this notebook sample**.\n", - "1. `swivel_pipeline.json`: This template enables private IPs and subnet configuration for the Dataflow job, also requires setting up VPC Network peering for the Vertex custom training. This template includes the following args:\n", - "* \"--subnetwork=regions/%REGION%/subnetworks/%NETWORK_NAME%\",\n", - "* \"--no_use_public_ips\",\n", - "* \\\"network\\\": \\\"projects/%PROJECT_NUMBER%/global/networks/%NETWORK_NAME%\\\"\n", - "\n", - "**WARNING** In order to specify private IPs and configure VPC network, you need to [set up VPC Network peering for Vertex AI](https://cloud.google.com/vertex-ai/docs/general/vpc-peering#overview) for your subnetwork (e.g. \"default\" network on \"us-central1\") before submitting the following job. This is required for using private IP addresses for DataFlow and Vertex AI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "190tiY-neVSK" - }, - "outputs": [], - "source": [ - "YOUR_PIPELINE_SUFFIX = \"swivel-pipeline-movie\" # @param {type:\"string\"}\n", - "MACHINE_TYPE = \"n1-standard-16\" # @param {type:\"string\"}\n", - "ACCELERATOR_COUNT = 2 # @param {type:\"integer\"}\n", - "ACCELERATOR_TYPE = \"NVIDIA_TESLA_V100\" # @param {type:\"string\"}\n", - "BUCKET = BUCKET_NAME[5:] # remove \"gs://\" for the following command.\n", - "\n", - "!chmod +x swivel_template_configuration*\n", - "\n", - "!./swivel_template_configuration_basic.sh -pipeline_suffix {YOUR_PIPELINE_SUFFIX} -project_number {PROJECT_NUMBER} -project_id {PROJECT_ID} -machine_type {MACHINE_TYPE} -accelerator_count {ACCELERATOR_COUNT} -accelerator_type {ACCELERATOR_TYPE} -pipeline_root {BUCKET}\n", - "!./swivel_template_configuration.sh -pipeline_suffix {YOUR_PIPELINE_SUFFIX} -project_number {PROJECT_NUMBER} -project_id {PROJECT_ID} -machine_type {MACHINE_TYPE} -accelerator_count {ACCELERATOR_COUNT} -accelerator_type {ACCELERATOR_TYPE} -pipeline_root {BUCKET}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1cacea95d68c" - }, - "outputs": [], - "source": [ - "! sed \"s:\\t: :g\" swivel_pipeline_basic.json >tmp.json\n", - "! mv tmp.json swivel_pipeline_basic.json" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3f12048abec2" - }, - "source": [ - "Both `swivel_pipeline_basic.json` and `swivel_pipeline.json` are generated." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "fcM5q2wfeVSK" - }, - "source": [ - "## Create the Swivel job for MovieLens items embeddings\n", - "\n", - "You will submit the pipeline job by passing the compiled spec to the `create_run_from_job_spec()` method. Note that you are passing a `parameter_values` dict that specifies the pipeline input parameters to use." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "af31EtxxeVSK" - }, - "source": [ - "The following table shows the runtime parameters required by the Swivel job:\n", - "\n", - "| Parameter |Data type | Description | Required |\n", - "|----------------------------|----------|--------------------------------------------------------------------|------------------------|\n", - "| `embedding_dim` | int | Dimensions of the embeddings to train. | No - Default is 100 |\n", - "| `input_base` | string | Cloud Storage path where the input data is stored. | Yes |\n", - "| `input_type` | string | Type of the input data. Can be either 'text' (for wikipedia sample) or 'items'(for movielens sample). | Yes |\n", - "| `max_vocab_size` | int | Maximum vocabulary size to generate embeddings for. | No - Default is 409600 |\n", - "|`num_epochs` | int | Number of epochs for training. | No - Default is 20 |\n", - "\n", - "In short, the **items** input type means that each line of your input data should be space-separated item ids. Each line is tokenized by splitting on whitespace. The **text** input type means that each line of your input data should be equivalent to a sentence. Each line is tokenized by lowercasing, and splitting on whitespace.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8cd9e3db9bff" - }, - "outputs": [], - "source": [ - "# Copy the MovieLens sample dataset\n", - "! gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/movielens_25m/train/* {SOURCE_DATA_PATH}/movielens_25m" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "i9SnVxxleVSK" - }, - "outputs": [], - "source": [ - "# MovieLens items embedding sample\n", - "\n", - "PARAMETER_VALUES = {\n", - " \"embedding_dim\": 100, # <---CHANGE THIS (OPTIONAL)\n", - " \"input_base\": \"{}/movielens_25m/train\".format(SOURCE_DATA_PATH),\n", - " \"input_type\": \"items\", # For movielens sample\n", - " \"max_vocab_size\": 409600, # <---CHANGE THIS (OPTIONAL)\n", - " \"num_epochs\": 5, # <---CHANGE THIS (OPTIONAL)\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "9f1cae770338" - }, - "source": [ - "Submit the pipeline to Vertex AI:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "kUV5aYtPeVSK" - }, - "outputs": [], - "source": [ - "# Instantiate PipelineJob object\n", - "pl = aiplatform.PipelineJob(\n", - " display_name=YOUR_PIPELINE_SUFFIX,\n", - " # Whether or not to enable caching\n", - " # True = always cache pipeline step result\n", - " # False = never cache pipeline step result\n", - " # None = defer to cache option for each pipeline component in the pipeline definition\n", - " enable_caching=False,\n", - " # Local or GCS path to a compiled pipeline definition\n", - " template_path=\"swivel_pipeline_basic.json\",\n", - " # Dictionary containing input parameters for your pipeline\n", - " parameter_values=PARAMETER_VALUES,\n", - " # GCS path to act as the pipeline root\n", - " pipeline_root=PIPELINE_ROOT,\n", - ")\n", - "\n", - "# Submit the Pipeline to Vertex AI\n", - "# Optionally you may specify the service account below: submit(service_account=SERVICE_ACCOUNT)\n", - "# You must have iam.serviceAccounts.actAs permission on the service account to use it\n", - "pl.submit()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "xhznZuWceVSL" - }, - "source": [ - "After the job is submitted successfully, you can view its details (including run name that you'll need below) and logs.\n", - "\n", - "### Use TensorBoard to check the model\n", - "\n", - "You may use the TensorBoard to check the model training process. In order to do that, you need to find the path to the trained model artifact. After the job finishes successfully (~ a few hours), you can view the trained model output path in the [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata/introduction) browser. It is going to have the following format:\n", - "\n", - "* {BUCKET_NAME}/pipeline_root/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/\n", - "\n", - "You may copy this path for the MODELOUTPUT_DIR below.\n", - "\n", - "Alternatively, you can download a pretrained model to `{SOURCE_DATA_PATH}/movielens_model` and proceed. This pretrained model is for demo purpose and not optimized for production usage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "cc20afaf0e8a" - }, - "outputs": [], - "source": [ - "! gsutil -m cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/models/movielens/model {SOURCE_DATA_PATH}/movielens_model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "c1Na-orVeVSL" - }, - "outputs": [], - "source": [ - "SAVEDMODEL_DIR = os.path.join(SOURCE_DATA_PATH, \"movielens_model/model\")\n", - "LOGS_DIR = os.path.join(SOURCE_DATA_PATH, \"movielens_model/tensorboard\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "PY5ipT0feVSL" - }, - "source": [ - "When the training starts, you can view the logs in TensorBoard:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "zcswl8-OeVSL" - }, - "outputs": [], - "source": [ - "# If on Google Cloud Notebooks, then don't execute this code.\n", - "if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " if \"google.colab\" in sys.modules:\n", - " # Load the TensorBoard notebook extension.\n", - " %load_ext tensorboard" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "sjOzNEQseVSL" - }, - "outputs": [], - "source": [ - "# If on Google Cloud Notebooks, then don't execute this code.\n", - "if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " if \"google.colab\" in sys.modules:\n", - " %tensorboard --logdir $LOGS_DIR" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "o3PbqO2IeVSL" - }, - "source": [ - "For **Google Cloud Notebooks**, you can do the following:\n", - "\n", - "1. Open Cloud Shell from the Google Cloud Console.\n", - "2. Install dependencies: `pip3 install tensorflow tensorboard-plugin-profile`\n", - "3. Run the following command: `tensorboard --logdir {LOGS_DIR}`. You will see a message \"TensorBoard 2.x.0 at http://localhost:/ (Press CTRL+C to quit)\" as the output. Take note of the port number.\n", - "4. You can click on the Web Preview button and view the TensorBoard dashboard and profiling results. You need to configure Web Preview's port to be the same port as you receive from step 3." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "KE7pltkVeVSM" - }, - "source": [ - "## Deploy the embedding model for online serving\n", - "\n", - "To deploy the trained model, you will perform the following steps:\n", - "* Create a model endpoint (if needed).\n", - "* Upload the trained model to Model resource.\n", - "* Deploy the Model to the endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9-rHi00XeVSM" - }, - "outputs": [], - "source": [ - "ENDPOINT_NAME = \"swivel_embedding\" # <---CHANGE THIS (OPTIONAL)\n", - "MODEL_VERSION_NAME = \"movie-tf2-cpu-2.4\" # <---CHANGE THIS (OPTIONAL)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "udJ7mBk-eVSM" - }, - "outputs": [], - "source": [ - "aiplatform.init(project=PROJECT_ID, location=REGION)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "P16dMukCeVSM" - }, - "outputs": [], - "source": [ - "# Create a model endpoint\n", - "endpoint = aiplatform.Endpoint.create(display_name=ENDPOINT_NAME)\n", - "\n", - "# Upload the trained model to Model resource\n", - "model = aiplatform.Model.upload(\n", - " display_name=MODEL_VERSION_NAME,\n", - " artifact_uri=SAVEDMODEL_DIR,\n", - " serving_container_image_uri=\"us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-4:latest\",\n", - ")\n", - "\n", - "# Deploy the Model to the Endpoint\n", - "model.deploy(\n", - " endpoint=endpoint,\n", - " machine_type=\"n1-standard-2\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "9360794f914f" - }, - "source": [ - "### Load the movie ids and titles for querying embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "14fd3ab852a1" - }, - "outputs": [], - "source": [ - "!gsutil cp gs://cloud-samples-data/vertex-ai/matching-engine/swivel/movielens_25m/movies.csv ./movies.csv" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "24af0e015685" - }, - "outputs": [], - "source": [ - "movies = pd.read_csv(\"movies.csv\")\n", - "print(f\"Movie count: {len(movies.index)}\")\n", - "movies.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8aefb986c6c8" - }, - "outputs": [], - "source": [ - "# Change to your favourite movies.\n", - "query_movies = [\n", - " \"Lion King, The (1994)\",\n", - " \"Aladdin (1992)\",\n", - " \"Star Wars: Episode IV - A New Hope (1977)\",\n", - " \"Star Wars: Episode VI - Return of the Jedi (1983)\",\n", - " \"Terminator 2: Judgment Day (1991)\",\n", - " \"Aliens (1986)\",\n", - " \"Godfather, The (1972)\",\n", - " \"Goodfellas (1990)\",\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "f5aedea722d0" - }, - "outputs": [], - "source": [ - "def get_movie_id(title):\n", - " return list(movies[movies.title == title].movieId)[0]\n", - "\n", - "\n", - "input_items = [str(get_movie_id(title)) for title in query_movies]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "LDaCXinreVSM" - }, - "source": [ - "### Look up embedding by making an online prediction request" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3JTz0i_ieVSM" - }, - "outputs": [], - "source": [ - "predictions = endpoint.predict(instances=input_items)\n", - "embeddings = predictions.predictions\n", - "print(len(embeddings))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "a1c5f572dec7" - }, - "source": [ - "Explore movie embedding similarities:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8c81e656816a" - }, - "outputs": [], - "source": [ - "for idx1 in range(0, len(input_items) - 1, 2):\n", - " item1 = input_items[idx1]\n", - " title1 = query_movies[idx1]\n", - " print(title1)\n", - " print(\"==================\")\n", - " embedding1 = embeddings[idx1]\n", - " for idx2 in range(0, len(input_items)):\n", - " item2 = input_items[idx2]\n", - " embedding2 = embeddings[idx2]\n", - " similarity = round(cosine_similarity([embedding1], [embedding2])[0][0], 5)\n", - " title1 = query_movies[idx1]\n", - " title2 = query_movies[idx2]\n", - " print(f\" - Similarity to '{title2}' = {similarity}\")\n", - " print()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "G8pgaNbveVSM" - }, - "source": [ - "## Create the Swivel job for Wikipedia text embedding (Optional)\n", - "\n", - "This section shows you how to create embeddings for the movies in the wikipedia dataset using Swivel. You need to do the following steps:\n", - "1. Configure the swivel template (using the **text** input_type) and create a pipeline job.\n", - "2. Run the following item embedding exploration code.\n", - "\n", - "The following cell overwrites `swivel_pipeline_template.json`; the new pipeline template file is almost identical, but it's labeled with your new pipeline suffix to distinguish it. This job will take **a few hours**." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "02054a96f564" - }, - "outputs": [], - "source": [ - "# Copy the wikipedia sample dataset\n", - "! gsutil -m cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/wikipedia/* {SOURCE_DATA_PATH}/wikipedia" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "haz9gXnjeVSM" - }, - "outputs": [], - "source": [ - "YOUR_PIPELINE_SUFFIX = \"my-first-pipeline-wiki\" # @param {type:\"string\"}\n", - "\n", - "!./swivel_template_configuration.sh -pipeline_suffix {YOUR_PIPELINE_SUFFIX} -project_id {PROJECT_ID} -machine_type {MACHINE_TYPE} -accelerator_count {ACCELERATOR_COUNT} -accelerator_type {ACCELERATOR_TYPE} -pipeline_root {BUCKET}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2guNOxgjeVSN" - }, - "outputs": [], - "source": [ - "# wikipedia text embedding sample\n", - "\n", - "PARAMETER_VALUES = {\n", - " \"embedding_dim\": 100, # <---CHANGE THIS (OPTIONAL)\n", - " \"input_base\": \"{}/wikipedia\".format(SOURCE_DATA_PATH),\n", - " \"input_type\": \"text\", # For wikipedia sample\n", - " \"max_vocab_size\": 409600, # <---CHANGE THIS (OPTIONAL)\n", - " \"num_epochs\": 20, # <---CHANGE THIS (OPTIONAL)\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wmcx4EADeVSN" - }, - "source": [ - "**Submit the pipeline job through `aiplatform.PipelineJob` object.**\n", - "\n", - "After the job finishes successfully (~**a few hours**), you can view the trained model in your CLoud Storage browser. It is going to have the following format:\n", - "\n", - "* {BUCKET_NAME}/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/\n", - "\n", - "You may copy this path for the MODELOUTPUT_DIR below. For demo purpose, you can download a pretrained model to `{SOURCE_DATA_PATH}/wikipedia_model` and proceed. This pretrained model is for demo purpose and not optimized for production usage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ed94bd036502" - }, - "outputs": [], - "source": [ - "! gsutil -m cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/models/wikipedia/model {SOURCE_DATA_PATH}/wikipedia_model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "eALPe9CAeVSN" - }, - "outputs": [], - "source": [ - "SAVEDMODEL_DIR = os.path.join(SOURCE_DATA_PATH, \"wikipedia_model/model\")\n", - "embedding_model = tf.saved_model.load(SAVEDMODEL_DIR)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "995NzGSAeVSN" - }, - "source": [ - "### Explore the trained text embeddings\n", - "\n", - "Load the SavedModel to lookup embeddings for items. Note the following:\n", - "* The SavedModel expects a list of string inputs.\n", - "* Each string input is treated as a list of space-separated tokens.\n", - "* If the input is text, the string input is lowercased with punctuation removed.\n", - "* An embedding is generated for each input by looking up the embedding of each token in the input and computing the average embedding per string input.\n", - "* The embedding of an out-of-vocabulary (OOV) token is a vector of zeros.\n", - "\n", - "For example, if the input is ['horror', 'film', 'HORROR! Film'], the output will be three embedding vectors, where the third is the average of the first two." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1oyMaSvFeVSN" - }, - "outputs": [], - "source": [ - "input_items = [\"horror\", \"film\", '\"HORROR! Film\"', \"horror-film\"]\n", - "output_embeddings = embedding_model(input_items)\n", - "horror_film_embedding = tf.math.reduce_mean(output_embeddings[:2], axis=0)\n", - "\n", - "# Average of embeddings for 'horror' and 'film' equals that for '\"HORROR! Film\"'\n", - "# since preprocessing cleans punctuation and lowercases.\n", - "assert tf.math.reduce_all(tf.equal(horror_film_embedding, output_embeddings[2])).numpy()\n", - "# Embedding for '\"HORROR! Film\"' equal that for 'horror-film' since the\n", - "# latter contains a hyphenation and thus is a separate token.\n", - "assert not tf.math.reduce_all(\n", - " tf.equal(output_embeddings[2], output_embeddings[3])\n", - ").numpy()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "XMF_iHuFeVSN" - }, - "outputs": [], - "source": [ - "# Change input_items with your own item tokens\n", - "\n", - "input_items = [\"apple\", \"orange\", \"hammer\", \"nails\"]\n", - "\n", - "output_embeddings = embedding_model(input_items)\n", - "\n", - "for idx1 in range(len(input_items)):\n", - " item1 = input_items[idx1]\n", - " embedding1 = output_embeddings[idx1].numpy()\n", - " for idx2 in range(idx1 + 1, len(input_items)):\n", - " item2 = input_items[idx2]\n", - " embedding2 = output_embeddings[idx2].numpy()\n", - " similarity = round(cosine_similarity([embedding1], [embedding2])[0][0], 5)\n", - " print(f\"Similarity between '{item1}' and '{item2}' = {similarity}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "71mBtTJ2eVSN" - }, - "source": [ - "You can use the [TensorBoard Embedding Projector](https://www.tensorflow.org/tensorboard/tensorboard_projector_plugin) to graphically represent high dimensional embeddings, which can be helpful in examining and understanding your embeddings." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TpV-iwP9qw9c" - }, - "source": [ - "## Cleaning up\n", - "\n", - "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", - "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", - "\n", - "Otherwise, you can delete the individual resources you created in this tutorial:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "5GBb7X1reVSN" - }, - "outputs": [], - "source": [ - "# Delete endpoint resource\n", - "# If force is set to True, all deployed models on this Endpoint will be undeployed first.\n", - "endpoint.delete(force=True)\n", - "\n", - "# Delete model resource\n", - "MODEL_RESOURCE_NAME = model.resource_name\n", - "! gcloud ai models delete $MODEL_RESOURCE_NAME --region $REGION --quiet\n", - "\n", - "# Delete Cloud Storage objects that were created\n", - "! gsutil -m rm -r $SOURCE_DATA_PATH" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "name": "intro-swivel.ipynb", - "toc_visible": true - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/notebooks/official/matching_engine/sdk_matching_engine_for_indexing.ipynb b/notebooks/official/matching_engine/sdk_matching_engine_for_indexing.ipynb index 1a82c8833..6721a7749 100644 --- a/notebooks/official/matching_engine/sdk_matching_engine_for_indexing.ipynb +++ b/notebooks/official/matching_engine/sdk_matching_engine_for_indexing.ipynb @@ -60,7 +60,9 @@ "source": [ "## Overview\n", "\n", - "This example demonstrates how to use the GCP ANN Service. It is a high scale, low latency solution, to find similar vectors (or more specifically \"embeddings\") for a large corpus. Moreover, it is a fully managed offering, further reducing operational overhead. It is built upon [Approximate Nearest Neighbor (ANN) technology](https://ai.googleblog.com/2020/07/announcing-scann-efficient-vector.html) developed by Google Research." + "This example demonstrates how to use the Vertex AI ANN Service. It is a high scale, low latency solution, to find similar vectors (or more specifically \"embeddings\") for a large corpus. Moreover, it is a fully managed offering, further reducing operational overhead. It is built upon [Approximate Nearest Neighbor (ANN) technology](https://ai.googleblog.com/2020/07/announcing-scann-efficient-vector.html) developed by Google Research.\n", + "\n", + "Learn more about [Vertex AI Matching Engine](https://cloud.google.com/vertex-ai/docs/matching-engine/overview)." ] }, { @@ -73,6 +75,10 @@ "\n", "In this notebook, you learn how to create Approximate Nearest Neighbor (ANN) Index, query against indexes, and validate the performance of the index. \n", "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Matching Engine`\n", + "\n", "The steps performed include:\n", "\n", "* Create ANN Index and Brute Force Index\n", diff --git a/notebooks/official/matching_engine/two-tower-model-introduction.ipynb b/notebooks/official/matching_engine/two-tower-model-introduction.ipynb deleted file mode 100644 index 6c444a0af..000000000 --- a/notebooks/official/matching_engine/two-tower-model-introduction.ipynb +++ /dev/null @@ -1,1297 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ur8xi4C7S06n" - }, - "outputs": [], - "source": [ - "# Copyright 2022 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": "JAPoU8Sm5E6e" - }, - "source": [ - "# Introduction to builtin Two-towers embedding algorithm\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \"Colab Run in Colab\n", - " \n", - " \n", - " \n", - " \"GitHub\n", - " View on GitHub\n", - " \n", - " \n", - " \n", - " \"Vertex\n", - " Open in Vertex AI Workbench\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "2b352e8fb437" - }, - "source": [ - "## Overview\n", - "\n", - "This tutorial demonstrates how to use the Two-Tower built-in algorithm on the Vertex AI platform.\n", - "\n", - "Two-tower models learn to represent two items of various types (such as user profiles, search queries, web documents, answer passages, or images) in the same vector space, so that similar or related items are close to each other. These two items are referred to as the query and candidate object, since when paired with a nearest neighbor search service such as Vertex Matching Engine, the two-tower model can retrieve candidate objects related to an input query object. These objects are encoded by a query and candidate encoder (the two \"towers\") respectively, which are trained on pairs of relevant items. This built-in algorithm exports trained query and candidate encoders as model artifacts, which can be deployed in Vertex Prediction for usage in a recommendation system.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tvgnzT1CKxrO" - }, - "source": [ - "### Objective\n", - "\n", - "In this notebook, you learn how to run the two-tower model.\n", - "\n", - "The steps performed include:\n", - "1. **Setup**: Importing the required libraries and setting your global variables.\n", - "2. **Configure parameters**: Setting the appropriate parameter values for the training job.\n", - "3. **Train on Vertex AI Training**: Submitting a training job.\n", - "4. **Deploy on Vertex AI Prediction**: Importing and deploying the trained model to a callable endpoint.\n", - "5. **Predict**: Calling the deployed endpoint using online or batch prediction.\n", - "6. **Hyperparameter tuning**: Running a hyperparameter tuning job.\n", - "7. **Cleaning up**: Deleting resources created by this tutorial." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "812ec4e27d66" - }, - "source": [ - "### Dataset\n", - "\n", - "This tutorial uses the `movielens_100k sample dataset` in the public bucket `gs://cloud-samples-data/vertex-ai/matching-engine/two-tower`, which was generated from the [MovieLens movie rating dataset](https://grouplens.org/datasets/movielens/100k/). For simplicity, the data for this tutorial only includes the user id feature for users, and the movie id and movie title features for movies. In this example, the user is the query object and the movie is the candidate object, and each training example in the dataset contains a user and a movie they rated (we only include positive ratings in the dataset). The two-tower model will embed the user and the movie in the same embedding space, so that given a user, the model will recommend movies it thinks the user will like." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0c997d8d92ce" - }, - "source": [ - "### Costs \n", - "\n", - "\n", - "This tutorial uses billable components of Google Cloud:\n", - "\n", - "* Vertex AI\n", - "* Cloud Storage\n", - "\n", - "\n", - "Learn about [Vertex AI\n", - "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", - "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", - "Calculator](https://cloud.google.com/products/calculator/)\n", - "to generate a cost estimate based on your projected usage." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ze4-nDLfK4pw" - }, - "source": [ - "### Set up your local development environment\n", - "\n", - "**If you are using Colab or Google Cloud Notebooks**, your environment already meets\n", - "all the requirements to run this notebook. You can skip this step." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gCuSR8GkAgzl" - }, - "source": [ - "**Otherwise**, make sure your environment meets this notebook's requirements.\n", - "You need the following:\n", - "\n", - "* The Google Cloud SDK\n", - "* Git\n", - "* Python 3\n", - "* virtualenv\n", - "* Jupyter notebook running in a virtual environment with Python 3\n", - "\n", - "The Google Cloud guide to [Setting up a Python development\n", - "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", - "installation guide](https://jupyter.org/install) provide detailed instructions\n", - "for meeting these requirements. The following steps provide a condensed set of\n", - "instructions:\n", - "\n", - "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", - "\n", - "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", - "\n", - "1. [Install\n", - " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", - " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", - "\n", - "1. To install Jupyter, run `pip3 install jupyter` on the\n", - "command-line in a terminal shell.\n", - "\n", - "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", - "\n", - "1. Open this notebook in the Jupyter Notebook Dashboard." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "i7EUnXsZhAGF" - }, - "source": [ - "### Install additional packages\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2b4ef9b72d43" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "# The Google Cloud Notebook product has specific requirements\n", - "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", - "\n", - "# Google Cloud Notebook requires dependencies to be installed with '--user'\n", - "USER_FLAG = \"\"\n", - "if IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " USER_FLAG = \"--user\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "wyy5Lbnzg5fi" - }, - "outputs": [], - "source": [ - "! pip3 install {USER_FLAG} --upgrade tensorflow\n", - "! pip3 install {USER_FLAG} --upgrade google-cloud-aiplatform tensorboard-plugin-profile\n", - "! gcloud components update --quiet" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hhq5zEbGg0XX" - }, - "source": [ - "### Restart the kernel\n", - "\n", - "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EzrelQZ22IZj" - }, - "outputs": [], - "source": [ - "# Automatically restart kernel after installs\n", - "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": "lWEdiXsJg0XY" - }, - "source": [ - "## Before you begin" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BF1j6f9HApxa" - }, - "source": [ - "### 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", - "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](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", - "\n", - "1. If you are running this notebook locally, you will need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", - "\n", - "1. 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 `$` into these commands." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WReHDGG5g0XY" - }, - "source": [ - "#### Set your project ID\n", - "\n", - "**If you do not know your project ID**, you may be able to get your project ID using `gcloud`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "oM1iC_MfAts1" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "PROJECT_ID = \"\"\n", - "\n", - "# Get your Google Cloud project ID from gcloud\n", - "if not os.getenv(\"IS_TESTING\"):\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": "markdown", - "metadata": { - "id": "qJYoRfYng0XZ" - }, - "source": [ - "Otherwise, set your project ID here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "riG_qUokg0XZ" - }, - "outputs": [], - "source": [ - "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", - " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", - "\n", - "! gcloud config set project {PROJECT_ID}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "06571eb4063b" - }, - "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 it onto the name of resources you create in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "697568e92bd6" - }, - "outputs": [], - "source": [ - "from datetime import datetime\n", - "\n", - "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dr--iN2kAylZ" - }, - "source": [ - "### Authenticate your Google Cloud account\n", - "\n", - "**If you are using Google Cloud Notebooks**, your environment is already\n", - "authenticated. Skip this step." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "sBCra4QMA2wR" - }, - "source": [ - "**If you are using Colab**, run the cell below and follow the instructions\n", - "when prompted to authenticate your account via oAuth.\n", - "\n", - "**Otherwise**, follow these steps:\n", - "\n", - "1. In the Cloud Console, go to the [**Create service account key**\n", - " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", - "\n", - "2. Click **Create service account**.\n", - "\n", - "3. In the **Service account name** field, enter a name, and\n", - " click **Create**.\n", - "\n", - "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", - "into the filter box, and select\n", - " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", - "\n", - "5. Click *Create*. A JSON file that contains your key downloads to your\n", - "local environment.\n", - "\n", - "6. Enter the path to your service account key as the\n", - "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "PyQmSRbKA8r-" - }, - "outputs": [], - "source": [ - "import os\n", - "import sys\n", - "\n", - "# 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", - "# The Google Cloud Notebook product has specific requirements\n", - "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", - "\n", - "# If on Google Cloud Notebooks, then don't execute this code\n", - "if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " if \"google.colab\" in sys.modules:\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 ''" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zgPO1eR3CYjk" - }, - "source": [ - "### Create a Cloud Storage bucket\n", - "\n", - "**The following steps are required, regardless of your notebook environment.**\n", - "\n", - "Before you submit a training job for the two-tower model, you need to upload your training data and schema to Cloud Storage. Vertex AI trains the model using this input data. In this tutorial, the Two-Tower built-in algorithm also saves the trained model that results from your job in the same bucket. Using this model artifact, you can then create Vertex AI model and endpoint resources in order to serve online predictions.\n", - "\n", - "Set the name of your Cloud Storage bucket below. It must be unique across all\n", - "Cloud Storage buckets.\n", - "\n", - "You may also change the `REGION` variable, which is used for operations\n", - "throughout the rest of this notebook. Make sure to [choose a region where Vertex AI services are\n", - "available](https://cloud.google.com/vertex-ai/docs/general/locations#available_regions). You may\n", - "not use a Multi-Regional Storage bucket for training with Vertex AI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "MzGDU7TWdts_" - }, - "outputs": [], - "source": [ - "BUCKET_NAME = \"gs://[your-bucket-name]\" # @param {type:\"string\"}\n", - "REGION = \"us-central1\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "cf221059d072" - }, - "outputs": [], - "source": [ - "if BUCKET_NAME == \"\" or BUCKET_NAME is None or BUCKET_NAME == \"gs://[your-bucket-name]\":\n", - " BUCKET_NAME = \"gs://\" + PROJECT_ID + \"aip-\" + TIMESTAMP" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "-EcIXiGsCePi" - }, - "source": [ - "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "NIq7R4HZCfIc" - }, - "outputs": [], - "source": [ - "! gsutil mb -l $REGION $BUCKET_NAME" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ucvCsknMCims" - }, - "source": [ - "Finally, validate access to your Cloud Storage bucket by examining its contents:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "vhOb7YnwClBb" - }, - "outputs": [], - "source": [ - "! gsutil ls -al $BUCKET_NAME" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "XoEqT2Y4DJmf" - }, - "source": [ - "### Import libraries and define constants" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pRUOFELefqf1" - }, - "outputs": [], - "source": [ - "import os\n", - "import re\n", - "import time\n", - "\n", - "from google.cloud import aiplatform\n", - "\n", - "%load_ext tensorboard" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ixC92jeHQMxk" - }, - "source": [ - "## Configure parameters" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "GgsNm8aim0Ym" - }, - "source": [ - "The following table shows parameters that are common to all Vertex Training jobs created using the `gcloud ai custom-jobs create` command. See the [official documentation](https://cloud.google.com/sdk/gcloud/reference/ai/custom-jobs/create) for all the possible arguments.\n", - "\n", - "| Parameter | Data type | Description | Required |\n", - "|--|--|--|--|\n", - "| `display-name` | string | Name of the job. | Yes |\n", - "| `worker-pool-spec` | string | Comma-separated list of arguments specifying a worker pool configuration (see below). | Yes |\n", - "| `region` | string | Region to submit the job to. | No |\n", - "\n", - "The `worker-pool-spec` flag can be specified multiple times, one for each worker pool. The following table shows the arguments used to specify a worker pool.\n", - "\n", - "| Parameter | Data type | Description | Required |\n", - "|--|--|--|--|\n", - "| `machine-type` | string | Machine type for the pool. See the [official documentation](https://cloud.google.com/vertex-ai/docs/training/configure-compute) for supported machines. | Yes |\n", - "| `replica-count` | int | The number of replicas of the machine in the pool. | No |\n", - "| `container-image-uri` | string | Docker image to run on each worker. | No |" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0MvQ22Sbm8lh" - }, - "source": [ - "The following table shows the parameters for the two-tower model training job:\n", - "\n", - "| Parameter | Data type | Description | Required |\n", - "|--|--|--|--|\n", - "| `training_data_path` | string | Cloud Storage pattern where training data is stored. | Yes |\n", - "| `input_schema_path` | string | Cloud Storage path where the JSON input schema is stored. | Yes |\n", - "| `input_file_format` | string | The file format of input. Currently supports `jsonl` and `tfrecord`. | No - default is `jsonl`. |\n", - "| `job_dir` | string | Cloud Storage directory where the model output files will be stored. | Yes |\n", - "| `eval_data_path` | string | Cloud Storage pattern where eval data is stored. | No |\n", - "| `candidate_data_path` | string | Cloud Storage pattern where candidate data is stored. Only used for top_k_categorical_accuracy metrics. If not set, it's generated from training/eval data. | No |\n", - "| `train_batch_size` | int | Batch size for training. | No - Default is 100. |\n", - "| `eval_batch_size` | int | Batch size for evaluation. | No - Default is 100. |\n", - "| `eval_split` | float | Split fraction to use for the evaluation dataset, if `eval_data_path` is not provided. | No - Default is 0.2 |\n", - "| `optimizer` | string | Training optimizer. Lowercase string name of any TF2.3 Keras optimizer is supported ('sgd', 'nadam', 'ftrl', etc.). See [TensorFlow documentation](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers). | No - Default is 'adagrad'. |\n", - "| `learning_rate` | float | Learning rate for training. | No - Default is the default learning rate of the specified optimizer. |\n", - "| `momentum` | float | Momentum for optimizer, if specified. | No - Default is the default momentum value for the specified optimizer. |\n", - "| `metrics` | string | Metrics used to evaluate the model. Can be either `auc`, `top_k_categorical_accuracy` or `precision_at_1`. | No - Default is `auc`. |\n", - "| `num_epochs` | int | Number of epochs for training. | No - Default is 10. |\n", - "| `num_hidden_layers` | int | Number of hidden layers. | No |\n", - "| `num_nodes_hidden_layer{index}` | int | Num of nodes in hidden layer {index}. The range of index is 1 to 20. | No |\n", - "| `output_dim` | int | The output embedding dimension for each encoder tower of the two-tower model. | No - Default is 64. |\n", - "| `training_steps_per_epoch` | int | Number of steps per epoch to run the training for. Only needed if you are using more than 1 machine or using a master machine with more than 1 gpu. | No - Default is None. |\n", - "| `eval_steps_per_epoch` | int | Number of steps per epoch to run the evaluation for. Only needed if you are using more than 1 machine or using a master machine with more than 1 gpu. | No - Default is None. |\n", - "| `gpu_memory_alloc` | int | Amount of memory allocated per GPU (in MB). | No - Default is no limit. |" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2sEfn2ZVnI_s" - }, - "outputs": [], - "source": [ - "DATASET_NAME = \"movielens_100k\" # Change to your dataset name.\n", - "\n", - "# Change to your data and schema paths. These are paths to the movielens_100k\n", - "# sample data.\n", - "TRAINING_DATA_PATH = f\"gs://cloud-samples-data/vertex-ai/matching-engine/two-tower/{DATASET_NAME}/training_data/*\"\n", - "INPUT_SCHEMA_PATH = f\"gs://cloud-samples-data/vertex-ai/matching-engine/two-tower/{DATASET_NAME}/input_schema.json\"\n", - "\n", - "# URI of the two-tower training Docker image.\n", - "LEARNER_IMAGE_URI = \"us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/two-tower\"\n", - "\n", - "# Change to your output location.\n", - "OUTPUT_DIR = f\"{BUCKET_NAME}/experiment/output\"\n", - "\n", - "TRAIN_BATCH_SIZE = 100 # Batch size for training.\n", - "NUM_EPOCHS = 3 # Number of epochs for training.\n", - "\n", - "print(f\"Dataset name: {DATASET_NAME}\")\n", - "print(f\"Training data path: {TRAINING_DATA_PATH}\")\n", - "print(f\"Input schema path: {INPUT_SCHEMA_PATH}\")\n", - "print(f\"Output directory: {OUTPUT_DIR}\")\n", - "print(f\"Train batch size: {TRAIN_BATCH_SIZE}\")\n", - "print(f\"Number of epochs: {NUM_EPOCHS}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "upLZ8kcankwj" - }, - "source": [ - "## Train on Vertex Training" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6M_O_L55nwQ0" - }, - "source": [ - "Submit the two-tower training job to Vertex Training. The following command uses a single CPU machine for training. When using single node training, `training_steps_per_epoch` and `eval_steps_per_epoch` do not need to be set." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1gXZRq80nl2S" - }, - "outputs": [], - "source": [ - "learning_job_name = f\"two_tower_cpu_{DATASET_NAME}_{TIMESTAMP}\"\n", - "\n", - "CREATION_LOG = ! gcloud ai custom-jobs create \\\n", - " --display-name={learning_job_name} \\\n", - " --worker-pool-spec=machine-type=n1-standard-8,replica-count=1,container-image-uri={LEARNER_IMAGE_URI} \\\n", - " --region={REGION} \\\n", - " --args=--training_data_path={TRAINING_DATA_PATH} \\\n", - " --args=--input_schema_path={INPUT_SCHEMA_PATH} \\\n", - " --args=--job-dir={OUTPUT_DIR} \\\n", - " --args=--train_batch_size={TRAIN_BATCH_SIZE} \\\n", - " --args=--num_epochs={NUM_EPOCHS}\n", - "\n", - "print(CREATION_LOG)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "RaIkcFT2n4_U" - }, - "source": [ - "If you want to train using GPUs, you need to write configuration to a YAML file:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "nAod1hbSn5yw" - }, - "outputs": [], - "source": [ - "learning_job_name = f\"two_tower_gpu_{DATASET_NAME}_{TIMESTAMP}\"\n", - "\n", - "config = f\"\"\"workerPoolSpecs:\n", - " -\n", - " machineSpec:\n", - " machineType: n1-highmem-4\n", - " acceleratorType: NVIDIA_TESLA_K80\n", - " acceleratorCount: 1\n", - " replicaCount: 1\n", - " containerSpec:\n", - " imageUri: {LEARNER_IMAGE_URI}\n", - " args:\n", - " - --training_data_path={TRAINING_DATA_PATH}\n", - " - --input_schema_path={INPUT_SCHEMA_PATH}\n", - " - --job-dir={OUTPUT_DIR}\n", - " - --training_steps_per_epoch=1500\n", - " - --eval_steps_per_epoch=1500\n", - "\"\"\"\n", - "\n", - "!echo $'{config}' > ./config.yaml\n", - "\n", - "CREATION_LOG = ! gcloud ai custom-jobs create \\\n", - " --display-name={learning_job_name} \\\n", - " --region={REGION} \\\n", - " --config=config.yaml\n", - "\n", - "print(CREATION_LOG)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "94tmU59YrKfe" - }, - "source": [ - "If you want to use TFRecord input file format, you can try the following command:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8wZbRgUhrLD0" - }, - "outputs": [], - "source": [ - "TRAINING_DATA_PATH = f\"gs://cloud-samples-data/vertex-ai/matching-engine/two-tower/{DATASET_NAME}/tfrecord/*\"\n", - "\n", - "learning_job_name = f\"two_tower_cpu_tfrecord_{DATASET_NAME}_{TIMESTAMP}\"\n", - "\n", - "CREATION_LOG = ! gcloud ai custom-jobs create \\\n", - " --display-name={learning_job_name} \\\n", - " --worker-pool-spec=machine-type=n1-standard-8,replica-count=1,container-image-uri={LEARNER_IMAGE_URI} \\\n", - " --region={REGION} \\\n", - " --args=--training_data_path={TRAINING_DATA_PATH} \\\n", - " --args=--input_schema_path={INPUT_SCHEMA_PATH} \\\n", - " --args=--job-dir={OUTPUT_DIR} \\\n", - " --args=--train_batch_size={TRAIN_BATCH_SIZE} \\\n", - " --args=--num_epochs={NUM_EPOCHS} \\\n", - " --args=--input_file_format=tfrecord\n", - "\n", - "print(CREATION_LOG)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "yceUSlyWrWes" - }, - "source": [ - "After the job is submitted successfully, you can view its details and logs:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "XXDC7F_8rXWM" - }, - "outputs": [], - "source": [ - "JOB_ID = re.search(r\"(?<=/customJobs/)\\d+\", CREATION_LOG[1]).group(0)\n", - "print(JOB_ID)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "NkbwWCEMoQcy" - }, - "outputs": [], - "source": [ - "# View the job's configuration and state.\n", - "STATE = \"state: JOB_STATE_PENDING\"\n", - "\n", - "while STATE not in [\"state: JOB_STATE_SUCCEEDED\", \"state: JOB_STATE_FAILED\"]:\n", - " DESCRIPTION = ! gcloud ai custom-jobs describe {JOB_ID} --region={REGION}\n", - " STATE = DESCRIPTION[-2]\n", - " print(STATE)\n", - " time.sleep(60)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wgs0qV_Nr-RN" - }, - "source": [ - "When the training starts, you can view the logs in TensorBoard. Colab users can use the TensorBoard widget below:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8SweSrkhr_DP" - }, - "outputs": [], - "source": [ - "TENSORBOARD_DIR = os.path.join(OUTPUT_DIR, \"tensorboard\")\n", - "%tensorboard --logdir {TENSORBOARD_DIR}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "RzCrdxgAsGll" - }, - "source": [ - "For Google CLoud Notebooks users, the TensorBoard widget above won't work. We recommend you to launch TensorBoard through the Cloud Shell.\n", - "\n", - "1. In your Cloud Shell, launch Tensorboard on port 8080:\n", - "\n", - " ```\n", - " export TENSORBOARD_DIR=gs://xxxxx/tensorboard\n", - " tensorboard --logdir=${TENSORBOARD_DIR} --port=8080 --load_fast=false\n", - " ```\n", - "\n", - "2. Click the \"Web Preview\" button at the top-right of the Cloud Shell window (looks like an eye in a rectangle). \n", - "\n", - "3. Select \"Preview on port 8080\". This should launch the TensorBoard webpage in a new tab in your browser.\n", - "\n", - "After the job finishes successfully, you can view the output directory:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "mFPLfY4gsK1V" - }, - "outputs": [], - "source": [ - "! gsutil ls {OUTPUT_DIR}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ZhY0h8ijsPlP" - }, - "source": [ - "## Deploy on Vertex Prediction" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6oquDjRgsS2V" - }, - "source": [ - "### Import the model" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gidmXBWysaeP" - }, - "source": [ - "Our training job will export two TF SavedModels under `gs:///query_model` and `gs:///candidate_model`. These exported models can be used for online or batch prediction in Vertex Prediction. First, import the query (or candidate) model:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "yEFd3Og_sbdm" - }, - "outputs": [], - "source": [ - "# The following imports the query (user) encoder model.\n", - "MODEL_TYPE = \"query\"\n", - "# Use the following instead to import the candidate (movie) encoder model.\n", - "# MODEL_TYPE = 'candidate'\n", - "\n", - "DISPLAY_NAME = f\"{DATASET_NAME}_{MODEL_TYPE}\" # The display name of the model.\n", - "MODEL_NAME = f\"{MODEL_TYPE}_model\" # Used by the deployment container." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "GCrhxf7GsdZS" - }, - "outputs": [], - "source": [ - "aiplatform.init(\n", - " project=PROJECT_ID,\n", - " location=REGION,\n", - " staging_bucket=BUCKET_NAME,\n", - ")\n", - "\n", - "model = aiplatform.Model.upload(\n", - " display_name=DISPLAY_NAME,\n", - " artifact_uri=OUTPUT_DIR,\n", - " serving_container_image_uri=\"us-central1-docker.pkg.dev/cloud-ml-algos/two-tower/deploy\",\n", - " serving_container_health_route=f\"/v1/models/{MODEL_NAME}\",\n", - " serving_container_predict_route=f\"/v1/models/{MODEL_NAME}:predict\",\n", - " serving_container_environment_variables={\n", - " \"MODEL_BASE_PATH\": \"$(AIP_STORAGE_URI)\",\n", - " \"MODEL_NAME\": MODEL_NAME,\n", - " },\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0x-pZJzUsh22" - }, - "source": [ - "### Deploy the model" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "QJECrcTdskix" - }, - "source": [ - "After importing the model, you must deploy it to an endpoint so that you can get online predictions. More information about this process can be found in the [official documentation](https://cloud.google.com/vertex-ai/docs/predictions/deploy-model-api)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "jB3yT5xassCt" - }, - "outputs": [], - "source": [ - "! gcloud ai models list --region={REGION} --filter={DISPLAY_NAME}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zkJh2rmysu2M" - }, - "source": [ - "Create a model endpoint:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "er94Wp82sxYW" - }, - "outputs": [], - "source": [ - "endpoint = aiplatform.Endpoint.create(display_name=DATASET_NAME)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "PICvm8PhqtMw" - }, - "source": [ - "Deploy model to the endpoint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "OUEF7Yces4uD" - }, - "outputs": [], - "source": [ - "model.deploy(\n", - " endpoint=endpoint,\n", - " machine_type=\"n1-standard-4\",\n", - " traffic_split={\"0\": 100},\n", - " deployed_model_display_name=DISPLAY_NAME,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Y_LMW1rjtMM6" - }, - "source": [ - "## Predict" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "QAkHJlY7tOmu" - }, - "source": [ - "Now that you have deployed the query/candidate encoder model on Vertex Prediction, you can call the model to calculate embeddings for live data. There are two methods of getting predictions, online and batch, which are shown below." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "rwiJRfJRtQ1V" - }, - "source": [ - "### Online prediction" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "THz5Gn5ftTsm" - }, - "source": [ - "[Online prediction](https://cloud.google.com/vertex-ai/docs/predictions/online-predictions-custom-models) is used to synchronously query a model on a small batch of instances with minimal latency. The following function calls the deployed Vertex Prediction model endpoint using Vertex SDK for Python:" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bFVnzRzltfDa" - }, - "source": [ - "The input data you want predictions on should be provided as a stringified JSON in the `data` field. Note that you should also provide a unique `key` field (of type str) for each input instance so that you can associate each output embedding with its corresponding input." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "E8Wt7wYgtg_f" - }, - "outputs": [], - "source": [ - "# Input items for the query model:\n", - "input_items = [\n", - " {\"data\": '{\"user_id\": [\"1\"]}', \"key\": \"key1\"},\n", - " {\"data\": '{\"user_id\": [\"2\"]}', \"key\": \"key2\"},\n", - "]\n", - "\n", - "# Input items for the candidate model:\n", - "# input_items = [{\n", - "# 'data' : '{\"movie_id\": [\"1\"], \"movie_title\": [\"fake title\"]}',\n", - "# 'key': 'key1'\n", - "# }]\n", - "\n", - "encodings = endpoint.predict(input_items)\n", - "print(f\"Number of encodings: {len(encodings.predictions)}\")\n", - "print(encodings.predictions[0][\"encoding\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "1k-_XJzlthfP" - }, - "source": [ - "You can also do online prediction using the gcloud CLI, as shown below:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Tn5L9V0utkpA" - }, - "outputs": [], - "source": [ - "import json\n", - "request = json.dumps({\"instances\": input_items})\n", - "with open(\"request.json\", \"w\") as writer:\n", - " writer.write(f\"{request}\\n\")\n", - "\n", - "ENDPOINT_ID = endpoint.resource_name\n", - "\n", - "! gcloud ai endpoints predict {ENDPOINT_ID} \\\n", - " --region={REGION} \\\n", - " --json-request=request.json" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ocLE_U6ftnA3" - }, - "source": [ - "### Batch prediction" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "U__JdxfPto-_" - }, - "source": [ - "[Batch prediction](https://cloud.google.com/vertex-ai/docs/predictions/batch-predictions) is used to asynchronously make predictions on a batch of input data. This is recommended if you have a large input size and do not need an immediate response, such as getting embeddings for candidate objects in order to create an index for a nearest neighbor search service such as [Vertex Matching Engine](https://cloud.google.com/vertex-ai/docs/matching-engine/overview).\n", - "\n", - "The input data needs to be on Cloud Storage and in JSONL format. You can use the sample query object file provided below. Like with online prediction, it's recommended to have the `key` field so that you can associate each output embedding with its corresponding input." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ar13RZ4VtquX" - }, - "outputs": [], - "source": [ - "QUERY_SAMPLE_PATH = f\"gs://cloud-samples-data/vertex-ai/matching-engine/two-tower/{DATASET_NAME}/query_sample.jsonl\"\n", - "\n", - "! gsutil cat {QUERY_SAMPLE_PATH}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Z4f5yEmatu8P" - }, - "source": [ - "The following function calls the deployed Vertex Prediction model using the sample query object input file. Note that it uses the model resource directly and doesn't require a deployed endpoint. Once you start the job, you can track its status on the [Cloud Console](https://console.cloud.google.com/vertex-ai/batch-predictions)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EYEOOPS8txYY" - }, - "outputs": [], - "source": [ - "model.batch_predict(\n", - " job_display_name=f\"batch_predict_{DISPLAY_NAME}\",\n", - " gcs_source=[QUERY_SAMPLE_PATH],\n", - " gcs_destination_prefix=OUTPUT_DIR,\n", - " machine_type=\"n1-standard-4\",\n", - " starting_replica_count=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zImnlP2Yt6Sv" - }, - "source": [ - "## Hyperparameter tuning" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "I2nRxtLTt8xn" - }, - "source": [ - "After successfully training your model, deploying it, and calling it to make predictions, you may want to optimize the hyperparameters used during training to improve your model's accuracy and performance. See the Vertex AI documentation for an [overview of hyperparameter tuning](https://cloud.google.com/vertex-ai/docs/training/hyperparameter-tuning-overview) and [how to use it in your Vertex Training jobs](https://cloud.google.com/vertex-ai/docs/training/using-hyperparameter-tuning).\n", - "\n", - "For this example, the following command runs a Vertex AI hyperparameter tuning job with 8 trials that attempts to maximize the validation AUC metric. The hyperparameters it optimizes are the number of hidden layers, the size of the hidden layers, and the learning rate." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "z_ea5wfjt_XD" - }, - "outputs": [], - "source": [ - "PARALLEL_TRIAL_COUNT = 4\n", - "MAX_TRIAL_COUNT = 8\n", - "METRIC = \"val_auc\"\n", - "hyper_tune_job_name = f\"hyper_tune_{DATASET_NAME}_{TIMESTAMP}\"\n", - "\n", - "config = json.dumps(\n", - " {\n", - " \"displayName\": hyper_tune_job_name,\n", - " \"studySpec\": {\n", - " \"metrics\": [{\"metricId\": METRIC, \"goal\": \"MAXIMIZE\"}],\n", - " \"parameters\": [\n", - " {\n", - " \"parameterId\": \"num_hidden_layers\",\n", - " \"scaleType\": \"UNIT_LINEAR_SCALE\",\n", - " \"integerValueSpec\": {\"minValue\": 0, \"maxValue\": 2},\n", - " \"conditionalParameterSpecs\": [\n", - " {\n", - " \"parameterSpec\": {\n", - " \"parameterId\": \"num_nodes_hidden_layer1\",\n", - " \"scaleType\": \"UNIT_LOG_SCALE\",\n", - " \"integerValueSpec\": {\"minValue\": 1, \"maxValue\": 128},\n", - " },\n", - " \"parentIntValues\": {\"values\": [1, 2]},\n", - " },\n", - " {\n", - " \"parameterSpec\": {\n", - " \"parameterId\": \"num_nodes_hidden_layer2\",\n", - " \"scaleType\": \"UNIT_LOG_SCALE\",\n", - " \"integerValueSpec\": {\"minValue\": 1, \"maxValue\": 128},\n", - " },\n", - " \"parentIntValues\": {\"values\": [2]},\n", - " },\n", - " ],\n", - " },\n", - " {\n", - " \"parameterId\": \"learning_rate\",\n", - " \"scaleType\": \"UNIT_LOG_SCALE\",\n", - " \"doubleValueSpec\": {\"minValue\": 0.0001, \"maxValue\": 1.0},\n", - " },\n", - " ],\n", - " \"algorithm\": \"ALGORITHM_UNSPECIFIED\",\n", - " },\n", - " \"maxTrialCount\": MAX_TRIAL_COUNT,\n", - " \"parallelTrialCount\": PARALLEL_TRIAL_COUNT,\n", - " \"maxFailedTrialCount\": 3,\n", - " \"trialJobSpec\": {\n", - " \"workerPoolSpecs\": [\n", - " {\n", - " \"machineSpec\": {\n", - " \"machineType\": \"n1-standard-4\",\n", - " },\n", - " \"replicaCount\": 1,\n", - " \"containerSpec\": {\n", - " \"imageUri\": LEARNER_IMAGE_URI,\n", - " \"args\": [\n", - " f\"--training_data_path={TRAINING_DATA_PATH}\",\n", - " f\"--input_schema_path={INPUT_SCHEMA_PATH}\",\n", - " f\"--job-dir={OUTPUT_DIR}\",\n", - " ],\n", - " },\n", - " }\n", - " ]\n", - " },\n", - " }\n", - ")\n", - "\n", - "\n", - "! curl -X POST -H \"Authorization: Bearer \"$(gcloud auth print-access-token) \\\n", - " -H \"Content-Type: application/json; charset=utf-8\" \\\n", - " -d '{config}' https://us-central1-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/hyperparameterTuningJobs" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TpV-iwP9qw9c" - }, - "source": [ - "## Cleaning up\n", - "\n", - "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", - "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", - "\n", - "Otherwise, you can delete the individual resources you created in this tutorial:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "sx_vKniMq9ZX" - }, - "outputs": [], - "source": [ - "# Delete endpoint resource\n", - "endpoint.delete(force=True)\n", - "\n", - "# Delete model resource\n", - "model.delete()\n", - "\n", - "# Delete Cloud Storage objects that were created\n", - "! gsutil -m rm -r $OUTPUT_DIR" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "name": "two-tower-model-introduction.ipynb", - "toc_visible": true - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/notebooks/official/migration/README.md b/notebooks/official/migration/README.md new file mode 100644 index 000000000..49f2c6cbc --- /dev/null +++ b/notebooks/official/migration/README.md @@ -0,0 +1,262 @@ + +[AutoML Image Classification](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ1 Vertex SDK AutoML Image Classification.ipynb) + +``` +Learn to use `AutoML` to train an image model and use `Vertex AI Prediction` and `Vertex AI Batch Prediction` to do online and batch predictions. + +The steps performed include: + +- Train an AutoML image classification model. +- Make a batch prediction. +- Deploy model to a endpoint +- Make a online prediction + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Image](https://cloud.google.com/vertex-ai/docs/tutorials/image-recognition-automl/training). + + +[Custom Scikit-Learn model with pre-built training container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ10 Vertex SDK Custom Scikit-Learn with pre-built training container.ipynb) + +``` +Learn to use `Vertex AI Training` to create a custom trained model and use `Vertex AI Batch Prediction` to do a batch prediction on the trained model. + +The steps performed include: + +- Create a `Vertex AI` custom job for training a scikit-learn model. +- Upload the trained model artifacts as a `Model` resource. +- Make a batch prediction. +- Deploy model to a endpoint +- Make a online prediction + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Hyperparameter Tuning](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ11 Vertex SDK Hyperparameter Tuning.ipynb) + +``` +Learn to use `Vertex AI Hyperparameter` to create and tune a custom trained model. + +The steps performed include: + +- Create a `Vertex AI` hyperparameter tuning job for training a TensorFlow model. + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/training/hyperparameter-tuning-overview). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[AutoML Video Classificaton](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ14 Vertex SDK AutoML Video Classification.ipynb) + +``` +Learn to use `AutoML` to train a video model and use `Vertex AI Batch Prediction` to do batch predictions. + +The steps performed include: + +- Train an AutoML video classification model. +- Make a batch prediction. + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Video](https://cloud.google.com/vertex-ai/docs/tutorials/video-classification-automl/training). + + +[AutoML Video Object Tracking](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ15 Vertex SDK AutoML Object Tracking.ipynb) + +``` +Learn to use `AutoML` to train a video model and use `Vertex AI Batch Prediction` to do batch predictions. + +The steps performed include: + +- Train an AutoML video object tracking model. +- Make a batch prediction. + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Video](https://cloud.google.com/video-intelligence/automl/object-tracking/docs/index-object-tracking). + + +[Custom Image Classification w/pre-built training container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ2,12 Vertex SDK Custom Image Classification with pre-built training container.ipynb) + +``` +Learn how to train a tensorflow image classification model using a prebuilt container and Vertex AI training. + +The steps performed include: + +- *Package the training code into a python application.* +- *Containerize the training application using Cloud Build and Artifact Registry.* +- *Create a custom container training job in Vertex AI and run it.* +- *Evaluate the model generated from the training job.* +- *Create a model resource for the trained model in Vertex AI Model Registry.* +- *Run a Vertex AI batch prediction job.* +- *Deploy the model resource to a Vertex AI Endpoint.* +- *Run a online prediction job on the model resource.* +- *Clean up the resources created.* + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Custom Image Classification w/custom training container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ3 Vertex SDK Custom Image Classification with custom training container.ipynb) + +``` +Learn how to train a tensorflow image classification model using a custom container and Vertex AI training. + +The steps performed include: + +- *Package the training code into a python application.* +- *Containerize the training application using Cloud Build and Artifact Registry.* +- *Create a custom container training job in Vertex AI and run it.* +- *Evaluate the model generated from the training job.* +- *Create a model resource for the trained model in Vertex AI Model Registry.* +- *Run a Vertex AI batch prediction job.* +- *Deploy the model resource to a Vertex AI Endpoint.* +- *Run a online prediction job on the model resource.* +- *Clean up the resources created.* + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[AutoML Tabular Binary Classification](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ4 Vertex SDK AutoML Tabular Binary Classification.ipynb) + +``` +In this tutorial, you create an AutoML tabular binary classification model and deploy for online prediction from a Python script using the Vertex AI SDK. + +The steps performed include: + +- Create a Vertex `Dataset` resource. +- Train the model. +- View the model evaluation. +- Deploy the `Model` resource to a serving `Endpoint` resource. +- Make a prediction. +- Undeploy the `Model` + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Tabular](https://cloud.google.com/vertex-ai/docs/start/automl-users#tables). + + +[AutoML Image Object Detection](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ5 Vertex SDK AutoML Image Object Detection.ipynb) + +``` +Learn to use `AutoML` to train an image model and use `Vertex AI Prediction` and `Vertex AI Batch Prediction` to do online and batch predictions. + +The steps performed include: + +- Train an AutoML object detection model. +- Make a batch prediction. +- Deploy model to a endpoint +- Make a online prediction + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Image](https://cloud.google.com/vertex-ai/docs/tutorials/image-recognition-automl/training). + + +[AutoML Text Classification](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ6 Vertex SDK AutoML Text Classification.ipynb) + +``` +The objective of this notebook is to build a AutoML Video Classification Model. + +The steps performed include the following: + +* Set your task name, and GCS prefix +* Copy AutoML video demo train data for creating managed dataset +* Create a dataset on Vertex AI. +* Configure a training job +* Launch a training job and create a model on Vertex AI +* Copy AutoML Video Demo Prediction Data for creating batch prediction job +* Perform batch prediction job on the model + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/classification/prepare-data). + + +[AutoML Text Entity Extraction](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ7 Vertex SDK AutoML Text Entity Extraction.ipynb) + +``` +The objective of this notebook is to build a AutoML Text Entity Extraction Model. + +The steps performed include the following: + +* Set your task name, and GCS prefix +* Copy AutoML video demo train data for creating managed dataset +* Create a dataset on Vertex AI. +* Configure a training job +* Launch a training job and create a model on Vertex AI +* Copy AutoML Video Demo Prediction Data for creating batch prediction job +* Perform batch prediction job on the model + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/entity-extraction/prepare-data). + + +[AutoML Text Sentiment Analysis](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ8 Vertex SDK AutoML Text Sentiment Analysis.ipynb) + +``` +The objective of this notebook is to build a AutoML Text Sentiment Analysis model. + +The steps performed include the following: + +* Copy AutoML video demo train data for creating managed dataset +* Create a dataset on Vertex AI. +* Configure a training job +* Launch a training job and create a model on Vertex AI +* Copy AutoML Video Demo Prediction Data for creating batch prediction job +* Perform batch prediction job on the model + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/sentiment-analysis/prepare-data). + + +[Custom XGBoost model with pre-built training container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ9 Vertex SDK Custom XGBoost with pre-built training container.ipynb) + +``` +Learn to use `Vertex AI Training` to create a custom trained model and use `Vertex AI Batch Prediction` to do a batch prediction on the trained model. + +The steps performed include: + +- Create a `Vertex AI` custom job for training a scikit-learn model. +- Upload the trained model artifacts as a `Model` resource. +- Make a batch prediction. +- Deploy model to a endpoint +- Make a online prediction + +``` + +   Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + diff --git a/notebooks/official/migration/UJ1 Vertex SDK AutoML Image Classification.ipynb b/notebooks/official/migration/UJ1 Vertex SDK AutoML Image Classification.ipynb index 0aaab94cc..3674d8efc 100644 --- a/notebooks/official/migration/UJ1 Vertex SDK AutoML Image Classification.ipynb +++ b/notebooks/official/migration/UJ1 Vertex SDK AutoML Image Classification.ipynb @@ -45,7 +45,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -54,6 +54,45 @@ "


" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7a8a13b86a8b" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy an AutoML image classification model.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [AutoML Image](https://cloud.google.com/vertex-ai/docs/tutorials/image-recognition-automl/training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "618cfedf829a" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn to use `AutoML` to train an image model and use `Vertex AI Prediction` and `Vertex AI Batch Prediction` to do online and batch predictions.\n", + "\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML`\n", + "- `Vertex AI Batch Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train an AutoML image classification model.\n", + "- Make a batch prediction.\n", + "- Deploy model to a endpoint\n", + "- Make a online prediction" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/migration/UJ10 Vertex SDK Custom Scikit-Learn with pre-built training container.ipynb b/notebooks/official/migration/UJ10 Vertex SDK Custom Scikit-Learn with pre-built training container.ipynb index 4c8e51288..6ac3a141e 100644 --- a/notebooks/official/migration/UJ10 Vertex SDK Custom Scikit-Learn with pre-built training container.ipynb +++ b/notebooks/official/migration/UJ10 Vertex SDK Custom Scikit-Learn with pre-built training container.ipynb @@ -33,18 +33,18 @@ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom tabular classification scikit-learn model for batch prediction." + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom tabular classification scikit-learn model for batch prediction.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/migration/UJ11 Vertex SDK Hyperparameter Tuning.ipynb b/notebooks/official/migration/UJ11 Vertex SDK Hyperparameter Tuning.ipynb index 1fc29f7ff..56074c1f2 100644 --- a/notebooks/official/migration/UJ11 Vertex SDK Hyperparameter Tuning.ipynb +++ b/notebooks/official/migration/UJ11 Vertex SDK Hyperparameter Tuning.ipynb @@ -45,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -54,6 +54,42 @@ "


" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7a8a13b86a8b" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to hyperparamer tune a custom tabular classification TemsorFlow model.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/training/hyperparameter-tuning-overview) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "618cfedf829a" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn to use `Vertex AI Hyperparameter` to create and tune a custom trained model.\n", + "\n", + "You learn how to create and tune a custom-trained model from a Python script in a Docker container using the Vertex AI SDK for Python.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Training`\n", + "- `Vertex AI Hyperparameter Tuning`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a `Vertex AI` hyperparameter tuning job for training a TensorFlow model." + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/migration/UJ14 Vertex SDK AutoML Video Classification.ipynb b/notebooks/official/migration/UJ14 Vertex SDK AutoML Video Classification.ipynb index 3212ea769..548bbeb46 100644 --- a/notebooks/official/migration/UJ14 Vertex SDK AutoML Video Classification.ipynb +++ b/notebooks/official/migration/UJ14 Vertex SDK AutoML Video Classification.ipynb @@ -45,7 +45,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -54,6 +54,43 @@ "


" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7a8a13b86a8b" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train a AutoML video classification model and do a batch prediction.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [AutoML Video](https://cloud.google.com/vertex-ai/docs/tutorials/video-classification-automl/training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "618cfedf829a" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn to use `AutoML` to train a video model and use `Vertex AI Batch Prediction` to do batch predictions.\n", + "\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML`\n", + "- `Vertex AI Batch Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train an AutoML video classification model.\n", + "- Make a batch prediction." + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/migration/UJ15 Vertex SDK AutoML Object Tracking.ipynb b/notebooks/official/migration/UJ15 Vertex SDK AutoML Object Tracking.ipynb index e141f9dcc..2fc7ba6ef 100644 --- a/notebooks/official/migration/UJ15 Vertex SDK AutoML Object Tracking.ipynb +++ b/notebooks/official/migration/UJ15 Vertex SDK AutoML Object Tracking.ipynb @@ -45,7 +45,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -54,6 +54,43 @@ "


" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7a8a13b86a8b" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train a AutoML video object tracking model and do a batch prediction.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [AutoML Video](https://cloud.google.com/video-intelligence/automl/object-tracking/docs/index-object-tracking)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "618cfedf829a" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn to use `AutoML` to train a video model and use `Vertex AI Batch Prediction` to do batch predictions.\n", + "\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML`\n", + "- `Vertex AI Batch Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train an AutoML video object tracking model.\n", + "- Make a batch prediction." + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/migration/UJ2,12 Vertex SDK Custom Image Classification with pre-built training container.ipynb b/notebooks/official/migration/UJ2,12 Vertex SDK Custom Image Classification with pre-built training container.ipynb index e63791097..9c0235b84 100644 --- a/notebooks/official/migration/UJ2,12 Vertex SDK Custom Image Classification with pre-built training container.ipynb +++ b/notebooks/official/migration/UJ2,12 Vertex SDK Custom Image Classification with pre-built training container.ipynb @@ -45,7 +45,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -54,6 +54,51 @@ "


" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7a8a13b86a8b" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train using a pre-built container and deploy a custom image classification model for online and batch prediction.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f1ae7d54ad29" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to train a tensorflow image classification model using a prebuilt container and Vertex AI training. After training, you also deploy the model to Vertex AI using a pre-built container and generate both batch and online predictions on it. \n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Training\n", + "- Vertex AI Model Registry\n", + "- Vertex AI Predictions\n", + "- Vertex AI Batch Predictions\n", + "- Vertex AI Endpoints\n", + "\n", + "\n", + "The steps performed include:\n", + "\n", + "- *Package the training code into a python application.*\n", + "- *Containerize the training application using Cloud Build and Artifact Registry.*\n", + "- *Create a custom container training job in Vertex AI and run it.*\n", + "- *Evaluate the model generated from the training job.*\n", + "- *Create a model resource for the trained model in Vertex AI Model Registry.*\n", + "- *Run a Vertex AI batch prediction job.*\n", + "- *Deploy the model resource to a Vertex AI Endpoint.*\n", + "- *Run a online prediction job on the model resource.*\n", + "- *Clean up the resources created.*" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/migration/UJ3 Vertex SDK Custom Image Classification with custom training container.ipynb b/notebooks/official/migration/UJ3 Vertex SDK Custom Image Classification with custom training container.ipynb index 6cd65f3a0..9c73118c6 100644 --- a/notebooks/official/migration/UJ3 Vertex SDK Custom Image Classification with custom training container.ipynb +++ b/notebooks/official/migration/UJ3 Vertex SDK Custom Image Classification with custom training container.ipynb @@ -34,18 +34,18 @@ "\n", "\n", " \n", " \n", " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates training a custom image classification model using Tensorflow and Vertex AI SDK by creating a custom training container. Additionally, the notebooks also deploys the trained model to Vertex AI and predictions are generated from it." + "This notebook demonstrates training a custom image classification model using Tensorflow and Vertex AI SDK by creating a custom training container. Additionally, the notebooks also deploys the trained model to Vertex AI and predictions are generated from it.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/migration/UJ4 Vertex SDK AutoML Tabular Binary Classification.ipynb b/notebooks/official/migration/UJ4 Vertex SDK AutoML Tabular Binary Classification.ipynb index bbf468c43..5c3482eea 100644 --- a/notebooks/official/migration/UJ4 Vertex SDK AutoML Tabular Binary Classification.ipynb +++ b/notebooks/official/migration/UJ4 Vertex SDK AutoML Tabular Binary Classification.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use the Vertex AI SDK to create tabular binary classification models and do online prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model." + "This tutorial demonstrates how to use the Vertex AI SDK to create tabular binary classification models and do online prediction using a Google Cloud [AutoML](https://cloud.google.com/vertex-ai/docs/start/automl-users) model.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai). Learn more about [Classification for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { diff --git a/notebooks/official/migration/UJ5 Vertex SDK AutoML Image Object Detection.ipynb b/notebooks/official/migration/UJ5 Vertex SDK AutoML Image Object Detection.ipynb index e7789b5f0..1e9efbea2 100644 --- a/notebooks/official/migration/UJ5 Vertex SDK AutoML Image Object Detection.ipynb +++ b/notebooks/official/migration/UJ5 Vertex SDK AutoML Image Object Detection.ipynb @@ -45,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -55,6 +55,45 @@ "


" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7a8a13b86a8b" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy an AutoML object detection model.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [AutoML Image](https://cloud.google.com/vertex-ai/docs/tutorials/image-recognition-automl/training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "618cfedf829a" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn to use `AutoML` to train an image model and use `Vertex AI Prediction` and `Vertex AI Batch Prediction` to do online and batch predictions.\n", + "\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML`\n", + "- `Vertex AI Batch Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train an AutoML object detection model.\n", + "- Make a batch prediction.\n", + "- Deploy model to a endpoint\n", + "- Make a online prediction" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/migration/UJ6 Vertex SDK AutoML Text Classification.ipynb b/notebooks/official/migration/UJ6 Vertex SDK AutoML Text Classification.ipynb index 9a2acd70d..30e5f084a 100644 --- a/notebooks/official/migration/UJ6 Vertex SDK AutoML Text Classification.ipynb +++ b/notebooks/official/migration/UJ6 Vertex SDK AutoML Text Classification.ipynb @@ -33,18 +33,18 @@ "\n", "\n", " \n", " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,11 +61,11 @@ "source": [ "## Overview\n", "\n", - "\n", - "\n", "This notebook demonstrates how to create an AutoML Video Classification Model, with a Vertex AI video dataset, and how to serve the model for batch prediction. It requires you provide a bucket where the dataset will be stored.\n", "\n", - "Note: you may incur charges for training, prediction, storage or usage of other GCP products in connection with testing this SDK.\n" + "Note: you may incur charges for training, prediction, storage or usage of other GCP products in connection with testing this SDK.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/classification/prepare-data)." ] }, { diff --git a/notebooks/official/migration/UJ7 Vertex SDK AutoML Text Entity Extraction.ipynb b/notebooks/official/migration/UJ7 Vertex SDK AutoML Text Entity Extraction.ipynb index a31321c17..f6d7aaf55 100644 --- a/notebooks/official/migration/UJ7 Vertex SDK AutoML Text Entity Extraction.ipynb +++ b/notebooks/official/migration/UJ7 Vertex SDK AutoML Text Entity Extraction.ipynb @@ -33,18 +33,18 @@ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,11 +61,11 @@ "source": [ "## Overview\n", "\n", - "\n", + "This notebook demonstrates how to create an AutoML Text Entity Extraction model, with a Vertex AI ncbi disease research dataset, and how to serve the model for batch prediction. It requires you provide a bucket where the dataset will be stored.\n", "\n", - "This notebook demonstrates how to create an AutoML Text Entity Extrasction Model, with a Vertex AI ncbi disease research dataset, and how to serve the model for batch prediction. It requires you provide a bucket where the dataset will be stored.\n", + "Note: you may incur charges for training, prediction, storage or usage of other Google Cloud products in connection with testing this SDK.\n", "\n", - "Note: you may incur charges for training, prediction, storage or usage of other GCP products in connection with testing this SDK." + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/entity-extraction/prepare-data)." ] }, { @@ -76,7 +76,7 @@ "source": [ "### Objective\n", "\n", - "The objective of this notebook is to build a AutoML Text Entity Extrasction Model. The following steps have been followed:\n", + "The objective of this notebook is to build a AutoML Text Entity Extraction Model. The following steps have been followed:\n", "This tutorial uses the following Google Cloud ML services :\n", "\n", "* Vertex AI Dataset resource\n", diff --git a/notebooks/official/migration/UJ8 Vertex SDK AutoML Text Sentiment Analysis.ipynb b/notebooks/official/migration/UJ8 Vertex SDK AutoML Text Sentiment Analysis.ipynb index 4b101cbb0..ae43a0c3e 100644 --- a/notebooks/official/migration/UJ8 Vertex SDK AutoML Text Sentiment Analysis.ipynb +++ b/notebooks/official/migration/UJ8 Vertex SDK AutoML Text Sentiment Analysis.ipynb @@ -3,7 +3,6 @@ { "cell_type": "code", "execution_count": null, - "id": "bdccc50b", "metadata": { "id": "copyright" }, @@ -26,7 +25,6 @@ }, { "cell_type": "markdown", - "id": "c6c22009", "metadata": { "id": "title:migration,new" }, @@ -47,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -58,7 +56,47 @@ }, { "cell_type": "markdown", - "id": "b3558cd7", + "metadata": { + "id": "2277f661a148" + }, + "source": [ + "## Overview\n", + "\n", + "This notebook demonstrates how to create an AutoML Text Sentiment Analysis model, with a Vertex AI ncbi disease research dataset, and how to serve the model for batch prediction. It requires you provide a bucket where the dataset will be stored.\n", + "\n", + "Note: you may incur charges for training, prediction, storage or usage of other Google Cloud products in connection with testing this SDK.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/sentiment-analysis/prepare-data)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f926ec7acab3" + }, + "source": [ + "### Objective\n", + "\n", + "The objective of this notebook is to build a AutoML Text Sentiment Analysis model. The following steps have been followed:\n", + "This tutorial uses the following Google Cloud ML services :\n", + "\n", + "* Vertex AI Dataset resource\n", + "* AutoML Training\n", + "* Vertex AI Model resource\n", + "* Vertex AI Batch Prediction\n", + "\n", + "The steps performed include the following:\n", + "\n", + "* Copy AutoML video demo train data for creating managed dataset\n", + "* Create a dataset on Vertex AI.\n", + "* Configure a training job\n", + "* Launch a training job and create a model on Vertex AI\n", + "* Copy AutoML Video Demo Prediction Data for creating batch prediction job\n", + "* Perform batch prediction job on the model" + ] + }, + { + "cell_type": "markdown", "metadata": { "id": "dataset:claritin,tst" }, @@ -70,7 +108,6 @@ }, { "cell_type": "markdown", - "id": "9b9362da", "metadata": { "id": "costs" }, @@ -91,7 +128,6 @@ }, { "cell_type": "markdown", - "id": "05425dbe", "metadata": { "id": "setup_local" }, @@ -125,7 +161,6 @@ }, { "cell_type": "markdown", - "id": "070c64e0", "metadata": { "id": "install_aip:mbsdk" }, @@ -138,7 +173,6 @@ { "cell_type": "code", "execution_count": null, - "id": "f6b14b99", "metadata": { "id": "install_aip:mbsdk" }, @@ -157,7 +191,6 @@ }, { "cell_type": "markdown", - "id": "81f60b84", "metadata": { "id": "restart" }, @@ -170,7 +203,6 @@ { "cell_type": "code", "execution_count": null, - "id": "a95627f0", "metadata": { "id": "restart" }, @@ -188,7 +220,6 @@ }, { "cell_type": "markdown", - "id": "b7f6b038", "metadata": { "id": "before_you_begin:nogpu" }, @@ -220,7 +251,6 @@ { "cell_type": "code", "execution_count": null, - "id": "f55cca7c", "metadata": { "id": "set_project_id" }, @@ -232,7 +262,6 @@ { "cell_type": "code", "execution_count": null, - "id": "6917314c", "metadata": { "id": "autoset_project_id" }, @@ -248,7 +277,6 @@ { "cell_type": "code", "execution_count": null, - "id": "53236aa8", "metadata": { "id": "set_gcloud_project_id" }, @@ -259,7 +287,6 @@ }, { "cell_type": "markdown", - "id": "c009cc18", "metadata": { "id": "region" }, @@ -281,7 +308,6 @@ { "cell_type": "code", "execution_count": null, - "id": "071a11c0", "metadata": { "id": "region" }, @@ -295,7 +321,6 @@ }, { "cell_type": "markdown", - "id": "ae48374d", "metadata": { "id": "timestamp" }, @@ -308,7 +333,6 @@ { "cell_type": "code", "execution_count": null, - "id": "41ba0990", "metadata": { "id": "timestamp" }, @@ -328,7 +352,6 @@ }, { "cell_type": "markdown", - "id": "2128e871", "metadata": { "id": "gcp_authenticate" }, @@ -357,7 +380,6 @@ { "cell_type": "code", "execution_count": null, - "id": "433e860c", "metadata": { "id": "gcp_authenticate" }, @@ -390,7 +412,6 @@ }, { "cell_type": "markdown", - "id": "b57cb5f6", "metadata": { "id": "bucket:mbsdk" }, @@ -407,7 +428,6 @@ { "cell_type": "code", "execution_count": null, - "id": "61b082b1", "metadata": { "id": "bucket" }, @@ -420,7 +440,6 @@ { "cell_type": "code", "execution_count": null, - "id": "ff81b3cc", "metadata": { "id": "autoset_bucket" }, @@ -433,7 +452,6 @@ }, { "cell_type": "markdown", - "id": "f8c009cd", "metadata": { "id": "create_bucket" }, @@ -444,7 +462,6 @@ { "cell_type": "code", "execution_count": null, - "id": "2f881cb5", "metadata": { "id": "create_bucket" }, @@ -455,7 +472,6 @@ }, { "cell_type": "markdown", - "id": "d746d0f0", "metadata": { "id": "validate_bucket" }, @@ -466,7 +482,6 @@ { "cell_type": "code", "execution_count": null, - "id": "8c435668", "metadata": { "id": "validate_bucket" }, @@ -477,7 +492,6 @@ }, { "cell_type": "markdown", - "id": "f578b01b", "metadata": { "id": "setup_vars" }, @@ -491,7 +505,6 @@ { "cell_type": "code", "execution_count": null, - "id": "f41ecf1e", "metadata": { "id": "import_aip:mbsdk" }, @@ -502,7 +515,6 @@ }, { "cell_type": "markdown", - "id": "292245fd", "metadata": { "id": "init_aip:mbsdk" }, @@ -515,7 +527,6 @@ { "cell_type": "code", "execution_count": null, - "id": "56dc88d8", "metadata": { "id": "init_aip:mbsdk" }, @@ -526,7 +537,6 @@ }, { "cell_type": "markdown", - "id": "87e20f86", "metadata": { "id": "import_file:u_dataset,csv" }, @@ -539,7 +549,6 @@ { "cell_type": "code", "execution_count": null, - "id": "fffdec5d", "metadata": { "id": "import_file:claritin,csv,tst" }, @@ -551,7 +560,6 @@ }, { "cell_type": "markdown", - "id": "9c8d950b", "metadata": { "id": "quick_peek:csv" }, @@ -566,7 +574,6 @@ { "cell_type": "code", "execution_count": null, - "id": "da6d0980", "metadata": { "id": "quick_peek:csv" }, @@ -586,7 +593,6 @@ }, { "cell_type": "markdown", - "id": "00e9f81e", "metadata": { "id": "create_a_dataset:migration" }, @@ -596,7 +602,6 @@ }, { "cell_type": "markdown", - "id": "14b72768", "metadata": { "id": "datasets_create:migration,new,mbsdk" }, @@ -606,7 +611,6 @@ }, { "cell_type": "markdown", - "id": "00d777bd", "metadata": { "id": "create_dataset:text,tst" }, @@ -625,7 +629,6 @@ { "cell_type": "code", "execution_count": null, - "id": "ca8a6f66", "metadata": { "id": "create_dataset:text,tst" }, @@ -642,7 +645,6 @@ }, { "cell_type": "markdown", - "id": "068df169", "metadata": { "id": "create_dataset:text,tst" }, @@ -662,7 +664,6 @@ }, { "cell_type": "markdown", - "id": "fb50a4ce", "metadata": { "id": "train_a_model:migration" }, @@ -672,7 +673,6 @@ }, { "cell_type": "markdown", - "id": "293160ba", "metadata": { "id": "trainingpipelines_create:migration,new,mbsdk" }, @@ -682,7 +682,6 @@ }, { "cell_type": "markdown", - "id": "84801634", "metadata": { "id": "create_automl_pipeline:text,tst" }, @@ -709,7 +708,6 @@ { "cell_type": "code", "execution_count": null, - "id": "69eaae0e", "metadata": { "id": "create_automl_pipeline:text,tst" }, @@ -726,7 +724,6 @@ }, { "cell_type": "markdown", - "id": "da9ecb4e", "metadata": { "id": "create_automl_pipeline:text,tst" }, @@ -738,7 +735,6 @@ }, { "cell_type": "markdown", - "id": "55f19997", "metadata": { "id": "run_automl_pipeline:text" }, @@ -761,7 +757,6 @@ { "cell_type": "code", "execution_count": null, - "id": "6149074c", "metadata": { "id": "run_automl_pipeline:text" }, @@ -778,7 +773,6 @@ }, { "cell_type": "markdown", - "id": "6e8fe148", "metadata": { "id": "run_automl_pipeline:text" }, @@ -804,7 +798,6 @@ }, { "cell_type": "markdown", - "id": "c25dee28", "metadata": { "id": "evaluate_the_model:migration" }, @@ -814,7 +807,6 @@ }, { "cell_type": "markdown", - "id": "903e8226", "metadata": { "id": "models_evaluations_list:migration,new" }, @@ -824,7 +816,6 @@ }, { "cell_type": "markdown", - "id": "cb2d95f3", "metadata": { "id": "evaluate_the_model:mbsdk" }, @@ -838,7 +829,6 @@ { "cell_type": "code", "execution_count": null, - "id": "9b1ec312", "metadata": { "id": "evaluate_the_model:mbsdk" }, @@ -860,7 +850,6 @@ }, { "cell_type": "markdown", - "id": "9eab460e", "metadata": { "id": "evaluate_the_model:mbsdk" }, @@ -901,7 +890,6 @@ }, { "cell_type": "markdown", - "id": "d4111c50", "metadata": { "id": "make_batch_predictions:migration" }, @@ -911,7 +899,6 @@ }, { "cell_type": "markdown", - "id": "f73fad68", "metadata": { "id": "batchpredictionjobs_create:migration,new,mbsdk" }, @@ -921,7 +908,6 @@ }, { "cell_type": "markdown", - "id": "ba77f1c7", "metadata": { "id": "get_test_items:batch_prediction" }, @@ -934,7 +920,6 @@ { "cell_type": "code", "execution_count": null, - "id": "1c9fc91f", "metadata": { "id": "get_test_items:automl,tst,csv" }, @@ -956,7 +941,6 @@ }, { "cell_type": "markdown", - "id": "2a18c8e2", "metadata": { "id": "make_batch_file:automl,text" }, @@ -976,7 +960,6 @@ { "cell_type": "code", "execution_count": null, - "id": "70461c41", "metadata": { "id": "make_batch_file:automl,text" }, @@ -1006,7 +989,6 @@ }, { "cell_type": "markdown", - "id": "254cbdbb", "metadata": { "id": "batch_request:mbsdk" }, @@ -1024,7 +1006,6 @@ { "cell_type": "code", "execution_count": null, - "id": "8f3cf8b6", "metadata": { "id": "batch_request:mbsdk" }, @@ -1042,7 +1023,6 @@ }, { "cell_type": "markdown", - "id": "530dbf5b", "metadata": { "id": "batch_request:mbsdk" }, @@ -1062,7 +1042,6 @@ }, { "cell_type": "markdown", - "id": "89414481", "metadata": { "id": "batch_request_wait:mbsdk" }, @@ -1075,7 +1054,6 @@ { "cell_type": "code", "execution_count": null, - "id": "a579bd4a", "metadata": { "id": "batch_request_wait:mbsdk" }, @@ -1086,7 +1064,6 @@ }, { "cell_type": "markdown", - "id": "2cba4cc6", "metadata": { "id": "batch_request_wait:mbsdk" }, @@ -1121,7 +1098,6 @@ }, { "cell_type": "markdown", - "id": "c46e3e76", "metadata": { "id": "get_batch_prediction:mbsdk,tst" }, @@ -1140,7 +1116,6 @@ { "cell_type": "code", "execution_count": null, - "id": "d2af5ea8", "metadata": { "id": "get_batch_prediction:mbsdk,tst" }, @@ -1169,7 +1144,6 @@ }, { "cell_type": "markdown", - "id": "9fc83253", "metadata": { "id": "get_batch_prediction:mbsdk,tst" }, @@ -1181,7 +1155,6 @@ }, { "cell_type": "markdown", - "id": "19466786", "metadata": { "id": "make_online_predictions:migration" }, @@ -1191,7 +1164,6 @@ }, { "cell_type": "markdown", - "id": "e97f1e55", "metadata": { "id": "deploy_model:migration,new,mbsdk" }, @@ -1201,7 +1173,6 @@ }, { "cell_type": "markdown", - "id": "d2745f77", "metadata": { "id": "deploy_model:mbsdk,automatic" }, @@ -1214,7 +1185,6 @@ { "cell_type": "code", "execution_count": null, - "id": "6d30aa15", "metadata": { "id": "deploy_model:mbsdk,automatic" }, @@ -1225,7 +1195,6 @@ }, { "cell_type": "markdown", - "id": "c2c876d0", "metadata": { "id": "deploy_model:mbsdk,automatic" }, @@ -1244,7 +1213,6 @@ }, { "cell_type": "markdown", - "id": "9bb982a8", "metadata": { "id": "endpoints_predict:migration,new,mbsdk" }, @@ -1254,7 +1222,6 @@ }, { "cell_type": "markdown", - "id": "246945bb", "metadata": { "id": "get_test_item" }, @@ -1267,7 +1234,6 @@ { "cell_type": "code", "execution_count": null, - "id": "e21c3f76", "metadata": { "id": "get_test_item:automl,tst,csv" }, @@ -1284,7 +1250,6 @@ }, { "cell_type": "markdown", - "id": "95ffe1ea", "metadata": { "id": "predict_request:mbsdk,tst" }, @@ -1313,7 +1278,6 @@ { "cell_type": "code", "execution_count": null, - "id": "16b7ab95", "metadata": { "id": "predict_request:mbsdk,tst" }, @@ -1327,7 +1291,6 @@ }, { "cell_type": "markdown", - "id": "f4c79c7f", "metadata": { "id": "predict_request:mbsdk,tst" }, @@ -1339,7 +1302,6 @@ }, { "cell_type": "markdown", - "id": "52717fb9", "metadata": { "id": "undeploy_model:mbsdk" }, @@ -1352,7 +1314,6 @@ { "cell_type": "code", "execution_count": null, - "id": "7c164d13", "metadata": { "id": "undeploy_model:mbsdk" }, @@ -1363,7 +1324,6 @@ }, { "cell_type": "markdown", - "id": "4b844c87", "metadata": { "id": "cleanup:mbsdk" }, @@ -1389,7 +1349,6 @@ { "cell_type": "code", "execution_count": null, - "id": "2ea906d0", "metadata": { "id": "cleanup:mbsdk" }, diff --git a/notebooks/official/migration/UJ9 Vertex SDK Custom XGBoost with pre-built training container.ipynb b/notebooks/official/migration/UJ9 Vertex SDK Custom XGBoost with pre-built training container.ipynb index 891a6d189..f849378c6 100644 --- a/notebooks/official/migration/UJ9 Vertex SDK Custom XGBoost with pre-built training container.ipynb +++ b/notebooks/official/migration/UJ9 Vertex SDK Custom XGBoost with pre-built training container.ipynb @@ -33,20 +33,69 @@ "\n", "\n", " \n", " \n", + " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", + "\n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", "


" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "7a8a13b86a8b" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train and deploy a custom tabular classification XGBoost model for batch prediction.\n", + "\n", + "Learn more about [Migrate to Vertex AI](https://cloud.google.com/vertex-ai/docs/start/migrating-to-vertex-ai) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "618cfedf829a" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn to use `Vertex AI Training` to create a custom trained model and use `Vertex AI Batch Prediction` to do a batch prediction on the trained model.\n", + "\n", + "\n", + "You learn how to create a custom-trained model from a Python script in a Docker container using the Vertex AI SDK for Python, and then do a prediction on the deployed model by sending data.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Training`\n", + "- `Vertex AI Batch Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a `Vertex AI` custom job for training a scikit-learn model.\n", + "- Upload the trained model artifacts as a `Model` resource.\n", + "- Make a batch prediction.\n", + "- Deploy model to a endpoint\n", + "- Make a online prediction" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/ml_metadata/README.md b/notebooks/official/ml_metadata/README.md index 7f15862f2..868f10e29 100644 --- a/notebooks/official/ml_metadata/README.md +++ b/notebooks/official/ml_metadata/README.md @@ -1,6 +1,23 @@ +[Track parameters and metrics for custom training jobs](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb) + +``` +Learn how to use Vertex AI SDK for Python to: + +The steps performed include: +- Track training parameters and prediction metrics for a custom training job. +- Extract and perform analysis for all parameters and metrics within an Experiment. + +``` + +   Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + [Track parameters and metrics for locally trained models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-locally-trained-models.ipynb) +``` Learn how to use `Vertex ML Metadata` to track training parameters and evaluation metrics. The steps performed include: @@ -8,16 +25,14 @@ The steps performed include: - Track parameters and metrics for a locally trained model. - Extract and perform analysis for all parameters and metrics within an Experiment. -[Track parameters and metrics for custom training jobs](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb) +``` -Learn how to use Vertex AI SDK for Python to: +   Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata). -The steps performed include: -- Track training parameters and prediction metrics for a custom training job. -- Extract and perform analysis for all parameters and metrics within an Experiment. [Track artifacts and metrics across Vertex AI Pipelines runs using Vertex ML Metadata](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/ml_metadata/vertex-pipelines-ml-metadata.ipynb) +``` Learn how to track artifacts and metrics with `Vertex ML Metadata` in `Vertex AI Pipeline` runs. The steps performed include: @@ -28,3 +43,10 @@ The steps performed include: * Compare Vertex Pipelines runs, both in the Cloud console and programmatically * Trace the lineage for pipeline-generated artifacts * Query your pipeline run metadata + +``` + +   Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata). + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + diff --git a/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb b/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb index ef7ec0adc..3900c475c 100644 --- a/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb +++ b/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-custom-jobs.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates how to track metrics and parameters for Vertex AI custom training jobs, and how to perform detailed analysis using this data." + "This notebook demonstrates how to track metrics and parameters for Vertex AI custom training jobs, and how to perform detailed analysis using this data.\n", + "\n", + "Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-locally-trained-models.ipynb b/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-locally-trained-models.ipynb index c31aa3a15..0f196e12a 100644 --- a/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-locally-trained-models.ipynb +++ b/notebooks/official/ml_metadata/sdk-metric-parameter-tracking-for-locally-trained-models.ipynb @@ -45,7 +45,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates how to track metrics and parameters for ML training jobs and analyze this metadata using Vertex AI SDK for Python." + "This notebook demonstrates how to track metrics and parameters for ML training jobs and analyze this metadata using Vertex AI SDK for Python.\n", + "\n", + "Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata)" ] }, { diff --git a/notebooks/official/ml_metadata/vertex-pipelines-ml-metadata.ipynb b/notebooks/official/ml_metadata/vertex-pipelines-ml-metadata.ipynb index 28e9e8a55..9fa2d8701 100644 --- a/notebooks/official/ml_metadata/vertex-pipelines-ml-metadata.ipynb +++ b/notebooks/official/ml_metadata/vertex-pipelines-ml-metadata.ipynb @@ -1,1225 +1,1217 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ur8xi4C7S06n" - }, - "outputs": [], - "source": [ - "# Copyright 2021 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": "JAPoU8Sm5E6e" - }, - "source": [ - "# Vertex AI: Track artifacts and metrics across Vertex AI Pipelines runs using Vertex ML Metadata\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \"Colab Run in Colab\n", - " \n", - " \n", - " \n", - " \"GitHub\n", - " View on GitHub\n", - " \n", - " \n", - " \n", - " \"Vertex\n", - " Open in Vertex AI Workbench\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Overview\n", - "\n", - "This notebook demonstrates how to track metrics and artifacts across Vertex AI Pipelines runs, and analyze this metadata using the Vertex AI SDK. If you'd prefer to follow a step-by-step tutorial, check out the [codelab version](https://codelabs.developers.google.com/vertex-mlmd-pipelines#0) of this notebook." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tvgnzT1CKxrO" - }, - "source": [ - "### Objective\n", - "\n", - "In this notebook, you learn how to track artifacts and metrics with `Vertex ML Metadata` in `Vertex AI Pipeline` runs.\n", - "\n", - "\n", - "The steps performed include:\n", - "\n", - "* Use the Kubeflow Pipelines SDK to build an ML pipeline that runs on Vertex AI\n", - "* The pipeline will create a dataset, train a scikit-learn model, and deploy the model to an endpoint\n", - "* Write custom pipeline components that generate artifacts and metadata\n", - "* Compare Vertex Pipelines runs, both in the Cloud console and programmatically\n", - "* Trace the lineage for pipeline-generated artifacts\n", - "* Query your pipeline run metadata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Dataset\n", - "\n", - "In this notebook, we will train a model using scikit-learn to classify bean types using the [Dry Beans Dataset](https://archive.ics.uci.edu/ml/datasets/Dry+Bean+Dataset) from UCI Machine Learning. This is a tabular dataset that includes measurements and characteristics of seven different types of beans taken from images." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "### Costs \n", - "\n", - "\n", - "This tutorial uses billable components of Google Cloud:\n", - "\n", - "* Vertex AI\n", - "* Cloud Storage\n", - "\n", - "\n", - "Learn about [Vertex AI\n", - "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", - "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", - "Calculator](https://cloud.google.com/products/calculator/)\n", - "to generate a cost estimate based on your projected usage." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ze4-nDLfK4pw" - }, - "source": [ - "### Set up your local development environment\n", - "\n", - "**If you are using Colab or AI Platform Notebooks**, your environment already meets\n", - "all the requirements to run this notebook. You can skip this step." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gCuSR8GkAgzl" - }, - "source": [ - "**Otherwise**, make sure your environment meets this notebook's requirements.\n", - "You need the following:\n", - "\n", - "* The Google Cloud SDK\n", - "* Git\n", - "* Python 3\n", - "* virtualenv\n", - "* Jupyter notebook running in a virtual environment with Python 3\n", - "\n", - "The Google Cloud guide to [Setting up a Python development\n", - "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", - "installation guide](https://jupyter.org/install) provide detailed instructions\n", - "for meeting these requirements. The following steps provide a condensed set of\n", - "instructions:\n", - "\n", - "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", - "\n", - "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", - "\n", - "1. [Install\n", - " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", - " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", - "\n", - "1. To install Jupyter, run `pip install jupyter` on the\n", - "command-line in a terminal shell.\n", - "\n", - "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", - "\n", - "1. Open this notebook in the Jupyter Notebook Dashboard." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "i7EUnXsZhAGF" - }, - "source": [ - "### Install additional packages\n", - "\n", - "Run the following commands to install the Vertex AI SDK and packages used in this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "IaYsrh0Tc17L" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "# The Google Cloud Notebook product has specific requirements\n", - "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", - "\n", - "# Google Cloud Notebook requires dependencies to be installed with '--user'\n", - "USER_FLAG = \"\"\n", - "if IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " USER_FLAG = \"--user\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "MCQDRsnE3uzz" - }, - "source": [ - "Install Vertex AI and Kubeflow Pipelines SDKs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "wyy5Lbnzg5fi" - }, - "outputs": [], - "source": [ - "!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0\n", - "!pip3 install {USER_FLAG} kfp==1.8.9" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hhq5zEbGg0XX" - }, - "source": [ - "### Restart the kernel\n", - "\n", - "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EzrelQZ22IZj" - }, - "outputs": [], - "source": [ - "# Automatically restart kernel after installs\n", - "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": "lWEdiXsJg0XY" - }, - "source": [ - "## Before you begin" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BF1j6f9HApxa" - }, - "source": [ - "### 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", - "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 services we'll be using throughout this notebook by running the cell below.\n", - "\n", - "1. If you are running this notebook locally, you will need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", - "\n", - "1. Enter your project ID in the project ID 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 `$` into these commands." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "e86205a30eb4" - }, - "source": [ - "### Authenticate your Google Cloud account\n", - "\n", - "**If you are using AI Platform Notebooks**, your environment is already\n", - "authenticated. Skip this step." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "28f75ab2b551" - }, - "source": [ - "**If you are using Colab**, run the cell below and follow the instructions\n", - "when prompted to authenticate your account via oAuth.\n", - "\n", - "**Otherwise**, follow these steps:\n", - "\n", - "1. In the Cloud Console, go to the [**Create service account key**\n", - " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", - "\n", - "2. Click **Create service account**.\n", - "\n", - "3. In the **Service account name** field, enter a name, and\n", - " click **Create**.\n", - "\n", - "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"AI Platform\"\n", - "into the filter box, and select\n", - " **AI Platform Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", - "\n", - "5. Click *Create*. A JSON file that contains your key downloads to your\n", - "local environment.\n", - "\n", - "6. Enter the path to your service account key as the\n", - "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "d2b00dc291f7" - }, - "source": [ - "#### 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`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "a6a066dd8d6a" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "PROJECT_ID = \"\"\n", - "\n", - "# Get your Google Cloud project ID from gcloud\n", - "if not os.getenv(\"IS_TESTING\"):\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": "markdown", - "metadata": { - "id": "dbeae85aef1d" - }, - "source": [ - "Otherwise, set your project ID here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "f90e4cbfb7af" - }, - "outputs": [], - "source": [ - "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", - " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "fdb343d2ae3c" - }, - "outputs": [], - "source": [ - "import sys\n", - "\n", - "# 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", - "# If on Google Cloud Notebooks, then don't execute this code\n", - "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", - "\n", - "if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", - " if \"google.colab\" in sys.modules:\n", - " from google.colab import auth as google_auth\n", - "\n", - " google_auth.authenticate_user()\n", - " !gcloud config set project $PROJECT_ID\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 ''" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "aab852d94fc7" - }, - "source": [ - "#### Enable Cloud services used throughout this notebook.\n", - "\n", - "Run the cell below to the enable Compute Engine, Container Registry, and Vertex AI services." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "18396d3d7fe4" - }, - "outputs": [], - "source": [ - "!gcloud services enable compute.googleapis.com \\\n", - " containerregistry.googleapis.com \\\n", - " aiplatform.googleapis.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "06571eb4063b" - }, - "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 it onto the name of resources you create in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "697568e92bd6" - }, - "outputs": [], - "source": [ - "from datetime import datetime\n", - "\n", - "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "641c8b2873c0" - }, - "source": [ - "### Create a Cloud Storage Bucket" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "68e74d218ea9" - }, - "source": [ - "To run our Vertex Pipeline, we'll need a storage bucket to store artifacts generated by our pipeline. This bucket needs to be regional. We're using the `us-central1` region here, but you are welcome to use another region (just replace it throughout this lab). If you already have a bucket you can replace the `BUCKET_NAME` variable with the name of your bucket and skip the `gsutil mb` step." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "953a1399e79f" - }, - "outputs": [], - "source": [ - "BUCKET_NAME = \"gs://{}-bucket\".format(PROJECT_ID)\n", - "!gsutil mb -l us-central1 $BUCKET_NAME # You only need to run this once" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "b75e9153c699" - }, - "source": [ - "Next, make sure your compute service account has `store.objectAdmin` access to this bucket. Your compute service account will look something like `YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com`." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "XoEqT2Y4DJmf" - }, - "source": [ - "### Import libraries and define constants" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Y9Uo3tifg1kx" - }, - "source": [ - "Import required libraries." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pRUOFELefqf1" - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "# We'll use this beta library for metadata querying\n", - "from google.cloud import aiplatform, aiplatform_v1beta1\n", - "from google.cloud.aiplatform import pipeline_jobs\n", - "from kfp.v2 import compiler, dsl\n", - "from kfp.v2.dsl import (Artifact, Dataset, Input, Metrics, Model, Output,\n", - " OutputPath, component)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "xtXZWmYqJ1bh" - }, - "source": [ - "Define some constants" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "JIOrI-hoJ46P" - }, - "outputs": [], - "source": [ - "PATH = get_ipython().run_line_magic(\"env\", \"PATH\")\n", - "%env PATH={PATH}:/home/jupyter/.local/bin\n", - "REGION = \"us-central1\"\n", - "\n", - "PIPELINE_ROOT = f\"{BUCKET_NAME}/pipeline_root/\"\n", - "PIPELINE_ROOT" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "2937d462a96a" - }, - "source": [ - "Initialize the Vertex AI SDK" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "7def96de8098" - }, - "outputs": [], - "source": [ - "aiplatform.init(project=PROJECT_ID, location=REGION)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Xuny18aMcWDb" - }, - "source": [ - "## Concepts\n", - "\n", - "To better understand [Vertex Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata), we'd like to introduce the following concepts:\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "NThDci5bp0Uw" - }, - "source": [ - "### Pipeline Run\n", - "When we use the term run, we're referring to a single execution of your pipeline in Vertex Pipelines. Each run generates artifacts, metrics, and associated metadata." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "SAyRR3Ydp4X5" - }, - "source": [ - "### Artifact\n", - "\n", - "An artifact is a resource generated by your pipeline. Artifacts could include datasets, models, endpoints, or custom resources defined in your pipeline." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "40ee71479689" - }, - "source": [ - "### Metric\n", - "\n", - "A metric is a way to measure the performance of your pipeline runs and artifacts. For example, a metric could be the accuracy of a classification model artifact created in your pipeline, or the size of the dataset used to train your model." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "57b1cc9981d5" - }, - "source": [ - "### Metadata\n", - "\n", - "Metadata describes the artifacts and metrics generated by your pipeline runs. Metadata on a model, for example, could include the URL of the model artifacts, its name, and the time it was created." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "l1YW2pgyegFP" - }, - "source": [ - "## Creating a 3-step pipeline with custom components\n", - "\n", - "The focus of this lab is on understanding *metadata* from pipeline runs. In order to do that, we'll need a pipeline to run on Vertex Pipelines, which is where we'll start. Here we'll define a 3-step pipeline with the following custom components:\n", - "\n", - "* `get_dataframe`: Retrieve data from a BigQuery table and convert it into a pandas DataFrame\n", - "* `train_sklearn_model`: Use the pandas DataFrame to train and export a scikit-learn model, along with some metrics\n", - "* `deploy_model`: Deploy the exported scikit-learn model to an endpoint in Vertex AI" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "KPY41M9_AhZU" - }, - "source": [ - "### Create and define Python function based components" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bfMQSmRuUuX-" - }, - "source": [ - "First, define the `get_dataframe` component with the code below. This component does the following:\n", - "* Creates a reference to a BigQuery table using the BigQuery client library\n", - "* Downloads the BigQuery table and converts it to a shuffled pandas DataFrame\n", - "* Exports the DataFrame to a CSV file" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "RiQuMv4bmpuV" - }, - "outputs": [], - "source": [ - "@component(\n", - " packages_to_install=[\"google-cloud-bigquery\", \"pandas\", \"pyarrow\"],\n", - " base_image=\"python:3.9\",\n", - " output_component_file=\"create_dataset.yaml\",\n", - ")\n", - "def get_dataframe(bq_table: str, output_data_path: OutputPath(\"Dataset\")):\n", - " from google.cloud import bigquery\n", - "\n", - " bqclient = bigquery.Client(project=PROJECT_ID)\n", - " table = bigquery.TableReference.from_string(bq_table)\n", - " rows = bqclient.list_rows(table)\n", - " dataframe = rows.to_dataframe(\n", - " create_bqstorage_client=True,\n", - " )\n", - " dataframe = dataframe.sample(frac=1, random_state=2)\n", - " dataframe.to_csv(output_data_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Y06J7A7yU21t" - }, - "source": [ - "Next, create a component to train a scikit-learn model. This component does the following:\n", - "* Imports a CSV as a pandas DataFrame\n", - "* Splits the DataFrame into train and test sets\n", - "* Trains a scikit-learn model\n", - "* Logs metrics from the model\n", - "* Saves the model artifacts as a local `model.joblib` file" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "p5JBCBKyH-NC" - }, - "outputs": [], - "source": [ - "@component(\n", - " packages_to_install=[\"sklearn\", \"pandas\", \"joblib\"],\n", - " base_image=\"python:3.9\",\n", - " output_component_file=\"beans_model_component.yaml\",\n", - ")\n", - "def sklearn_train(\n", - " dataset: Input[Dataset], metrics: Output[Metrics], model: Output[Model]\n", - "):\n", - " import pandas as pd\n", - " from joblib import dump\n", - " from sklearn.model_selection import train_test_split\n", - " from sklearn.tree import DecisionTreeClassifier\n", - "\n", - " df = pd.read_csv(dataset.path)\n", - " labels = df.pop(\"Class\").tolist()\n", - " data = df.values.tolist()\n", - " x_train, x_test, y_train, y_test = train_test_split(data, labels)\n", - "\n", - " skmodel = DecisionTreeClassifier()\n", - " skmodel.fit(x_train, y_train)\n", - " score = skmodel.score(x_test, y_test)\n", - " print(\"accuracy is:\", score)\n", - "\n", - " metrics.log_metric(\"accuracy\", (score * 100.0))\n", - " metrics.log_metric(\"framework\", \"Scikit Learn\")\n", - " metrics.log_metric(\"dataset_size\", len(df))\n", - " dump(skmodel, model.path + \".joblib\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gaNNTFPaU7KT" - }, - "source": [ - "Finally, our last component will take the trained model from the previous step, upload it to Vertex AI, and deploy it to an endpoint:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "VGq5QCoyIEWJ" - }, - "outputs": [], - "source": [ - "@component(\n", - " packages_to_install=[\"google-cloud-aiplatform\"],\n", - " base_image=\"python:3.9\",\n", - " output_component_file=\"beans_deploy_component.yaml\",\n", - ")\n", - "def deploy_model(\n", - " model: Input[Model],\n", - " project: str,\n", - " region: str,\n", - " vertex_endpoint: Output[Artifact],\n", - " vertex_model: Output[Model],\n", - "):\n", - " from google.cloud import aiplatform\n", - "\n", - " aiplatform.init(project=project, location=region)\n", - "\n", - " deployed_model = aiplatform.Model.upload(\n", - " display_name=\"beans-model-pipeline\",\n", - " artifact_uri=model.uri.replace(\"model\", \"\"),\n", - " serving_container_image_uri=\"us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest\",\n", - " )\n", - " endpoint = deployed_model.deploy(machine_type=\"n1-standard-4\")\n", - "\n", - " # Save data to the output params\n", - " vertex_endpoint.uri = endpoint.resource_name\n", - " vertex_model.uri = deployed_model.resource_name" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "UBXUgxgqA_GB" - }, - "source": [ - "### Define and compile the pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "66odBYKrIN4q" - }, - "outputs": [], - "source": [ - "@dsl.pipeline(\n", - " # Default pipeline root. You can override it when submitting the pipeline.\n", - " pipeline_root=PIPELINE_ROOT,\n", - " # A name for the pipeline.\n", - " name=\"mlmd-pipeline\",\n", - ")\n", - "def pipeline(\n", - " bq_table: str = \"\",\n", - " output_data_path: str = \"data.csv\",\n", - " project: str = PROJECT_ID,\n", - " region: str = REGION,\n", - "):\n", - " dataset_task = get_dataframe(bq_table)\n", - "\n", - " model_task = sklearn_train(dataset_task.output)\n", - "\n", - " deploy_model(model=model_task.outputs[\"model\"], project=project, region=region)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "910541af051c" - }, - "source": [ - "The following will generate a JSON file that you'll use to run the pipeline:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "o_wnT10RJ7-W" - }, - "outputs": [], - "source": [ - "compiler.Compiler().compile(pipeline_func=pipeline, package_path=\"mlmd_pipeline.json\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "u-iTnzt3B6Z_" - }, - "source": [ - "### Start two pipeline runs\n", - "\n", - "Next we'll kick off **two** runs of our pipeline. First let's define a timestamp to use for our pipeline job IDs:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "i2wnpu8_7JfV" - }, - "outputs": [], - "source": [ - "from datetime import datetime\n", - "\n", - "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3d380ed72490" - }, - "source": [ - "Our pipeline takes one parameter when we run it: the `bq_table` we want to use for training data. This pipeline run will use a smaller version of the beans dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ff4aee966c5f" - }, - "outputs": [], - "source": [ - "run1 = pipeline_jobs.PipelineJob(\n", - " display_name=\"mlmd-pipeline\",\n", - " template_path=\"mlmd_pipeline.json\",\n", - " job_id=\"mlmd-pipeline-small-{}\".format(TIMESTAMP),\n", - " parameter_values={\"bq_table\": \"sara-vertex-demos.beans_demo.small_dataset\"},\n", - " enable_caching=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "555ac88a22cf" - }, - "source": [ - "Next, create another pipeline run using a larger version of the same dataset." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3d9fcb6a4a9e" - }, - "outputs": [], - "source": [ - "run2 = pipeline_jobs.PipelineJob(\n", - " display_name=\"mlmd-pipeline\",\n", - " template_path=\"mlmd_pipeline.json\",\n", - " job_id=\"mlmd-pipeline-large-{}\".format(TIMESTAMP),\n", - " parameter_values={\"bq_table\": \"sara-vertex-demos.beans_demo.large_dataset\"},\n", - " enable_caching=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "5670722f7668" - }, - "source": [ - "Finally, kick off pipeline executions for both runs. It's best to do this in two separate notebook cells so you can see the output for each run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1f477f5565c6" - }, - "outputs": [], - "source": [ - "run1.submit()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6e682e41af78" - }, - "source": [ - "Then, kick off the second run:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "cb263e503ced" - }, - "outputs": [], - "source": [ - "run2.submit()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cc15017be48e" - }, - "source": [ - "After running this cell, you'll see a link to view each pipeline in the Vertex AI console. Open that link to see more details on your pipeline.\n", - "\n", - "**These pipeline runs will take 10-15 minutes to complete.**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jZLrJZTfL7tE" - }, - "source": [ - "## Comparing pipeline runs" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "A1PqKxlpOZa2" - }, - "source": [ - "Now that you have two pipeline completed pipeline runs, we're ready to take a closer look at pipeline metrics using the Vertex AI SDK.\n", - "\n", - "**For guidance on inspecting pipeline artifacts and metadata in the Vertex AI Console, see [this codelab](https://codelabs.developers.google.com/vertex-mlmd-pipelines#5).**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jbRf1WoH_vbY" - }, - "source": [ - "You can use the `aiplatform.get_pipeline_df()` method to access run metadata. Here, we'll get metadata for the last two runs of the same pipeline and load it into a Pandas DataFrame. The `mlmd-pipeline` parameter here refers to the name we gave our pipeline in our pipeline definition:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "90d850cda34f" - }, - "outputs": [], - "source": [ - "df = aiplatform.get_pipeline_df(pipeline=\"mlmd-pipeline\")\n", - "print(df)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "d23e2cb66265" - }, - "source": [ - "We've only executed our pipeline twice here, but you can imagine how many metrics you'd have with more executions. Next, we'll create a custom visualization with matplotlib to see the relationship between our model's accuracy and the amount of data used for training. Run the following to generate a graph:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "5957415cc390" - }, - "outputs": [], - "source": [ - "plt.plot(df[\"metric.dataset_size\"], df[\"metric.accuracy\"], label=\"Accuracy\")\n", - "plt.title(\"Accuracy and dataset size\")\n", - "plt.legend(loc=4)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "EYuYgqVCMKU1" - }, - "source": [ - "## Querying pipeline metrics" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4431b5d062f3" - }, - "source": [ - "In addition to getting a DataFrame of all pipeline metrics, you may want to programmatically query artifacts created in your ML system. From there you could create a custom dashboard or let others in your organizaiton get details on specific artifacts." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "995723757c5d" - }, - "source": [ - "### Getting all Model artifacts\n", - "\n", - "To query artifacts in this way, we'll create a `MetadataServiceClient`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "r8orCj8iJuO1" - }, - "outputs": [], - "source": [ - "API_ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", - "metadata_client = aiplatform_v1beta1.MetadataServiceClient(\n", - " client_options={\"api_endpoint\": API_ENDPOINT}\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "e5aee9cdc5bd" - }, - "source": [ - "Next, we'll make a `list_artifacts` request to that endpoint and pass a filter indicating which artifacts we'd like in our response. First, let's get all the artifacts in our project that are **models**. To do that, run the following in your notebook:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "29260057ae40" - }, - "outputs": [], - "source": [ - "MODEL_FILTER = 'schema_title = \"system.Model\"'\n", - "artifact_request = aiplatform_v1beta1.ListArtifactsRequest(\n", - " parent=\"projects/{}/locations/{}/metadataStores/default\".format(PROJECT_ID, REGION),\n", - " filter=MODEL_FILTER,\n", - ")\n", - "model_artifacts = metadata_client.list_artifacts(artifact_request)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dfb57f1b7833" - }, - "source": [ - "The resulting `model_artifacts` response contains an iterable object for each model artifact in your project, along with associated metadata for each model." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WTHvPMweMlP1" - }, - "source": [ - "### Filtering objects and displaying in a DataFrame" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "F19_5lw0MqXv" - }, - "source": [ - "It would be handy if we could more easily visualize the resulting artifact query. Next, let's get all artifacts created after August 10, 2021 with a `LIVE` state. After we run this request, we'll display the results in a pandas DataFrame. First, execute the request:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "GmN9vE9pqqzt" - }, - "outputs": [], - "source": [ - "LIVE_FILTER = 'create_time > \"2021-08-10T00:00:00-00:00\" AND state = LIVE'\n", - "artifact_req = {\n", - " \"parent\": \"projects/{}/locations/{}/metadataStores/default\".format(\n", - " PROJECT_ID, REGION\n", - " ),\n", - " \"filter\": LIVE_FILTER,\n", - "}\n", - "live_artifacts = metadata_client.list_artifacts(artifact_req)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6bba2012b7f0" - }, - "source": [ - "Then, display the results in a DataFrame:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "6bee5790cec4" - }, - "outputs": [], - "source": [ - "data = {\"uri\": [], \"createTime\": [], \"type\": []}\n", - "\n", - "for i in live_artifacts:\n", - " data[\"uri\"].append(i.uri)\n", - " data[\"createTime\"].append(i.create_time)\n", - " data[\"type\"].append(i.schema_title)\n", - "\n", - "df = pd.DataFrame.from_dict(data)\n", - "print(df)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TpV-iwP9qw9c" - }, - "source": [ - "## Cleaning up\n", - "\n", - "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", - "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", - "\n", - "If you don't want to delete the project, do the following to clean up the resources you used:\n", - "\n", - "* If you used Google Cloud Notebooks to run this, stop or delete the notebook instance\n", - "\n", - "* The pipeline runs we executed deployed endpoints in Vertex AI. Navigate to the [Vertex AI console](https://console.cloud.google.com/vertex-ai/endpoints) to delete those endpoints\n", - "\n", - "* Delete the [Cloud Storage bucket](https://console.cloud.google.com/storage/browser/) you created" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "name": "vertex-pipelines-ml-metadata.ipynb", - "toc_visible": true - }, - "environment": { - "kernel": "python3", - "name": "common-cpu.m95", - "type": "gcloud", - "uri": "gcr.io/deeplearning-platform-release/base-cpu:m95" - }, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2021 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Vertex AI: Track artifacts and metrics across Vertex AI Pipelines runs using Vertex ML Metadata\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + "\n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e88691377fcc" + }, + "source": [ + "## Overview\n", + "\n", + "This notebook demonstrates how to track metrics and artifacts across Vertex AI Pipelines runs, and analyze this metadata using the Vertex AI SDK. If you'd prefer to follow a step-by-step tutorial, check out the [codelab version](https://codelabs.developers.google.com/vertex-mlmd-pipelines#0) of this notebook.\n", + "\n", + "Learn more about [Vertex ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata) and [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn how to track artifacts and metrics with `Vertex ML Metadata` in `Vertex AI Pipeline` runs.\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Pipelines\n", + "- Vertex ML Metadata\n", + "\n", + "The steps performed include:\n", + "\n", + "* Use the Kubeflow Pipelines SDK to build an ML pipeline that runs on Vertex AI\n", + "* The pipeline will create a dataset, train a scikit-learn model, and deploy the model to an endpoint\n", + "* Write custom pipeline components that generate artifacts and metadata\n", + "* Compare Vertex Pipelines runs, both in the Cloud console and programmatically\n", + "* Trace the lineage for pipeline-generated artifacts\n", + "* Query your pipeline run metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ce1e72673981" + }, + "source": [ + "### Dataset\n", + "\n", + "In this notebook, we will train a model using scikit-learn to classify bean types using the [Dry Beans Dataset](https://archive.ics.uci.edu/ml/datasets/Dry+Bean+Dataset) from UCI Machine Learning. This is a tabular dataset that includes measurements and characteristics of seven different types of beans taken from images." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0c997d8d92ce" + }, + "source": [ + "### Costs \n", + "\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ze4-nDLfK4pw" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or AI Platform Notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gCuSR8GkAgzl" + }, + "source": [ + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [Setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook Dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "### Install additional packages\n", + "\n", + "Run the following commands to install the Vertex AI SDK and packages used in this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IaYsrh0Tc17L" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Google Cloud Notebook product has specific requirements\n", + "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", + "\n", + "# Google Cloud Notebook requires dependencies to be installed with '--user'\n", + "USER_FLAG = \"\"\n", + "if IS_GOOGLE_CLOUD_NOTEBOOK:\n", + " USER_FLAG = \"--user\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MCQDRsnE3uzz" + }, + "source": [ + "Install Vertex AI and Kubeflow Pipelines SDKs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wyy5Lbnzg5fi" + }, + "outputs": [], + "source": [ + "!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0\n", + "!pip3 install {USER_FLAG} kfp==1.8.9" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "lWEdiXsJg0XY" + }, + "source": [ + "## Before you begin" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "### 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", + "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 services we'll be using throughout this notebook by running the cell below.\n", + "\n", + "1. If you are running this notebook locally, you will need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. Enter your project ID in the project ID 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e86205a30eb4" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using AI Platform Notebooks**, your environment is already\n", + "authenticated. Skip this step." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "28f75ab2b551" + }, + "source": [ + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"AI Platform\"\n", + "into the filter box, and select\n", + " **AI Platform Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d2b00dc291f7" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a6a066dd8d6a" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "PROJECT_ID = \"\"\n", + "\n", + "# Get your Google Cloud project ID from gcloud\n", + "if not os.getenv(\"IS_TESTING\"):\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": "markdown", + "metadata": { + "id": "dbeae85aef1d" + }, + "source": [ + "Otherwise, set your project ID here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f90e4cbfb7af" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or PROJECT_ID is None:\n", + " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fdb343d2ae3c" + }, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "# 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", + "# If on Google Cloud Notebooks, then don't execute this code\n", + "IS_GOOGLE_CLOUD_NOTEBOOK = os.path.exists(\"/opt/deeplearning/metadata/env_version\")\n", + "\n", + "if not IS_GOOGLE_CLOUD_NOTEBOOK:\n", + " if \"google.colab\" in sys.modules:\n", + " from google.colab import auth as google_auth\n", + "\n", + " google_auth.authenticate_user()\n", + " !gcloud config set project $PROJECT_ID\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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aab852d94fc7" + }, + "source": [ + "#### Enable Cloud services used throughout this notebook.\n", + "\n", + "Run the cell below to the enable Compute Engine, Container Registry, and Vertex AI services." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "18396d3d7fe4" + }, + "outputs": [], + "source": [ + "!gcloud services enable compute.googleapis.com \\\n", + " containerregistry.googleapis.com \\\n", + " aiplatform.googleapis.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "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 it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "697568e92bd6" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "641c8b2873c0" + }, + "source": [ + "### Create a Cloud Storage Bucket" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "68e74d218ea9" + }, + "source": [ + "To run our Vertex Pipeline, we'll need a storage bucket to store artifacts generated by our pipeline. This bucket needs to be regional. We're using the `us-central1` region here, but you are welcome to use another region (just replace it throughout this lab). If you already have a bucket you can replace the `BUCKET_NAME` variable with the name of your bucket and skip the `gsutil mb` step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "953a1399e79f" + }, + "outputs": [], + "source": [ + "BUCKET_NAME = \"gs://{}-bucket\".format(PROJECT_ID)\n", + "!gsutil mb -l us-central1 $BUCKET_NAME # You only need to run this once" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b75e9153c699" + }, + "source": [ + "Next, make sure your compute service account has `store.objectAdmin` access to this bucket. Your compute service account will look something like `YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Import libraries and define constants" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y9Uo3tifg1kx" + }, + "source": [ + "Import required libraries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pRUOFELefqf1" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "# We'll use this beta library for metadata querying\n", + "from google.cloud import aiplatform, aiplatform_v1beta1\n", + "from google.cloud.aiplatform import pipeline_jobs\n", + "from kfp.v2 import compiler, dsl\n", + "from kfp.v2.dsl import (Artifact, Dataset, Input, Metrics, Model, Output,\n", + " OutputPath, component)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xtXZWmYqJ1bh" + }, + "source": [ + "Define some constants" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "JIOrI-hoJ46P" + }, + "outputs": [], + "source": [ + "PATH = get_ipython().run_line_magic(\"env\", \"PATH\")\n", + "%env PATH={PATH}:/home/jupyter/.local/bin\n", + "REGION = \"us-central1\"\n", + "\n", + "PIPELINE_ROOT = f\"{BUCKET_NAME}/pipeline_root/\"\n", + "PIPELINE_ROOT" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2937d462a96a" + }, + "source": [ + "Initialize the Vertex AI SDK" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7def96de8098" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Xuny18aMcWDb" + }, + "source": [ + "## Concepts\n", + "\n", + "To better understand [Vertex Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [ML Metadata](https://cloud.google.com/vertex-ai/docs/ml-metadata), we'd like to introduce the following concepts:\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NThDci5bp0Uw" + }, + "source": [ + "### Pipeline Run\n", + "When we use the term run, we're referring to a single execution of your pipeline in Vertex Pipelines. Each run generates artifacts, metrics, and associated metadata." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SAyRR3Ydp4X5" + }, + "source": [ + "### Artifact\n", + "\n", + "An artifact is a resource generated by your pipeline. Artifacts could include datasets, models, endpoints, or custom resources defined in your pipeline." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "40ee71479689" + }, + "source": [ + "### Metric\n", + "\n", + "A metric is a way to measure the performance of your pipeline runs and artifacts. For example, a metric could be the accuracy of a classification model artifact created in your pipeline, or the size of the dataset used to train your model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "57b1cc9981d5" + }, + "source": [ + "### Metadata\n", + "\n", + "Metadata describes the artifacts and metrics generated by your pipeline runs. Metadata on a model, for example, could include the URL of the model artifacts, its name, and the time it was created." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l1YW2pgyegFP" + }, + "source": [ + "## Creating a 3-step pipeline with custom components\n", + "\n", + "The focus of this lab is on understanding *metadata* from pipeline runs. In order to do that, we'll need a pipeline to run on Vertex Pipelines, which is where we'll start. Here we'll define a 3-step pipeline with the following custom components:\n", + "\n", + "* `get_dataframe`: Retrieve data from a BigQuery table and convert it into a pandas DataFrame\n", + "* `train_sklearn_model`: Use the pandas DataFrame to train and export a scikit-learn model, along with some metrics\n", + "* `deploy_model`: Deploy the exported scikit-learn model to an endpoint in Vertex AI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KPY41M9_AhZU" + }, + "source": [ + "### Create and define Python function based components" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bfMQSmRuUuX-" + }, + "source": [ + "First, define the `get_dataframe` component with the code below. This component does the following:\n", + "* Creates a reference to a BigQuery table using the BigQuery client library\n", + "* Downloads the BigQuery table and converts it to a shuffled pandas DataFrame\n", + "* Exports the DataFrame to a CSV file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RiQuMv4bmpuV" + }, + "outputs": [], + "source": [ + "@component(\n", + " packages_to_install=[\"google-cloud-bigquery\", \"pandas\", \"pyarrow\"],\n", + " base_image=\"python:3.9\",\n", + " output_component_file=\"create_dataset.yaml\",\n", + ")\n", + "def get_dataframe(bq_table: str, output_data_path: OutputPath(\"Dataset\")):\n", + " from google.cloud import bigquery\n", + "\n", + " bqclient = bigquery.Client(project=PROJECT_ID)\n", + " table = bigquery.TableReference.from_string(bq_table)\n", + " rows = bqclient.list_rows(table)\n", + " dataframe = rows.to_dataframe(\n", + " create_bqstorage_client=True,\n", + " )\n", + " dataframe = dataframe.sample(frac=1, random_state=2)\n", + " dataframe.to_csv(output_data_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y06J7A7yU21t" + }, + "source": [ + "Next, create a component to train a scikit-learn model. This component does the following:\n", + "* Imports a CSV as a pandas DataFrame\n", + "* Splits the DataFrame into train and test sets\n", + "* Trains a scikit-learn model\n", + "* Logs metrics from the model\n", + "* Saves the model artifacts as a local `model.joblib` file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "p5JBCBKyH-NC" + }, + "outputs": [], + "source": [ + "@component(\n", + " packages_to_install=[\"sklearn\", \"pandas\", \"joblib\"],\n", + " base_image=\"python:3.9\",\n", + " output_component_file=\"beans_model_component.yaml\",\n", + ")\n", + "def sklearn_train(\n", + " dataset: Input[Dataset], metrics: Output[Metrics], model: Output[Model]\n", + "):\n", + " import pandas as pd\n", + " from joblib import dump\n", + " from sklearn.model_selection import train_test_split\n", + " from sklearn.tree import DecisionTreeClassifier\n", + "\n", + " df = pd.read_csv(dataset.path)\n", + " labels = df.pop(\"Class\").tolist()\n", + " data = df.values.tolist()\n", + " x_train, x_test, y_train, y_test = train_test_split(data, labels)\n", + "\n", + " skmodel = DecisionTreeClassifier()\n", + " skmodel.fit(x_train, y_train)\n", + " score = skmodel.score(x_test, y_test)\n", + " print(\"accuracy is:\", score)\n", + "\n", + " metrics.log_metric(\"accuracy\", (score * 100.0))\n", + " metrics.log_metric(\"framework\", \"Scikit Learn\")\n", + " metrics.log_metric(\"dataset_size\", len(df))\n", + " dump(skmodel, model.path + \".joblib\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gaNNTFPaU7KT" + }, + "source": [ + "Finally, our last component will take the trained model from the previous step, upload it to Vertex AI, and deploy it to an endpoint:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VGq5QCoyIEWJ" + }, + "outputs": [], + "source": [ + "@component(\n", + " packages_to_install=[\"google-cloud-aiplatform\"],\n", + " base_image=\"python:3.9\",\n", + " output_component_file=\"beans_deploy_component.yaml\",\n", + ")\n", + "def deploy_model(\n", + " model: Input[Model],\n", + " project: str,\n", + " region: str,\n", + " vertex_endpoint: Output[Artifact],\n", + " vertex_model: Output[Model],\n", + "):\n", + " from google.cloud import aiplatform\n", + "\n", + " aiplatform.init(project=project, location=region)\n", + "\n", + " deployed_model = aiplatform.Model.upload(\n", + " display_name=\"beans-model-pipeline\",\n", + " artifact_uri=model.uri.replace(\"model\", \"\"),\n", + " serving_container_image_uri=\"us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest\",\n", + " )\n", + " endpoint = deployed_model.deploy(machine_type=\"n1-standard-4\")\n", + "\n", + " # Save data to the output params\n", + " vertex_endpoint.uri = endpoint.resource_name\n", + " vertex_model.uri = deployed_model.resource_name" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UBXUgxgqA_GB" + }, + "source": [ + "### Define and compile the pipeline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "66odBYKrIN4q" + }, + "outputs": [], + "source": [ + "@dsl.pipeline(\n", + " # Default pipeline root. You can override it when submitting the pipeline.\n", + " pipeline_root=PIPELINE_ROOT,\n", + " # A name for the pipeline.\n", + " name=\"mlmd-pipeline\",\n", + ")\n", + "def pipeline(\n", + " bq_table: str = \"\",\n", + " output_data_path: str = \"data.csv\",\n", + " project: str = PROJECT_ID,\n", + " region: str = REGION,\n", + "):\n", + " dataset_task = get_dataframe(bq_table)\n", + "\n", + " model_task = sklearn_train(dataset_task.output)\n", + "\n", + " deploy_model(model=model_task.outputs[\"model\"], project=project, region=region)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "910541af051c" + }, + "source": [ + "The following will generate a JSON file that you'll use to run the pipeline:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "o_wnT10RJ7-W" + }, + "outputs": [], + "source": [ + "compiler.Compiler().compile(pipeline_func=pipeline, package_path=\"mlmd_pipeline.json\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "u-iTnzt3B6Z_" + }, + "source": [ + "### Start two pipeline runs\n", + "\n", + "Next we'll kick off **two** runs of our pipeline. First let's define a timestamp to use for our pipeline job IDs:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "i2wnpu8_7JfV" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "TIMESTAMP = datetime.now().strftime(\"%Y%m%d%H%M%S\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3d380ed72490" + }, + "source": [ + "Our pipeline takes one parameter when we run it: the `bq_table` we want to use for training data. This pipeline run will use a smaller version of the beans dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ff4aee966c5f" + }, + "outputs": [], + "source": [ + "run1 = pipeline_jobs.PipelineJob(\n", + " display_name=\"mlmd-pipeline\",\n", + " template_path=\"mlmd_pipeline.json\",\n", + " job_id=\"mlmd-pipeline-small-{}\".format(TIMESTAMP),\n", + " parameter_values={\"bq_table\": \"sara-vertex-demos.beans_demo.small_dataset\"},\n", + " enable_caching=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "555ac88a22cf" + }, + "source": [ + "Next, create another pipeline run using a larger version of the same dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3d9fcb6a4a9e" + }, + "outputs": [], + "source": [ + "run2 = pipeline_jobs.PipelineJob(\n", + " display_name=\"mlmd-pipeline\",\n", + " template_path=\"mlmd_pipeline.json\",\n", + " job_id=\"mlmd-pipeline-large-{}\".format(TIMESTAMP),\n", + " parameter_values={\"bq_table\": \"sara-vertex-demos.beans_demo.large_dataset\"},\n", + " enable_caching=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5670722f7668" + }, + "source": [ + "Finally, kick off pipeline executions for both runs. It's best to do this in two separate notebook cells so you can see the output for each run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1f477f5565c6" + }, + "outputs": [], + "source": [ + "run1.submit()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6e682e41af78" + }, + "source": [ + "Then, kick off the second run:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb263e503ced" + }, + "outputs": [], + "source": [ + "run2.submit()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cc15017be48e" + }, + "source": [ + "After running this cell, you'll see a link to view each pipeline in the Vertex AI console. Open that link to see more details on your pipeline.\n", + "\n", + "**These pipeline runs will take 10-15 minutes to complete.**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jZLrJZTfL7tE" + }, + "source": [ + "## Comparing pipeline runs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "A1PqKxlpOZa2" + }, + "source": [ + "Now that you have two pipeline completed pipeline runs, we're ready to take a closer look at pipeline metrics using the Vertex AI SDK.\n", + "\n", + "**For guidance on inspecting pipeline artifacts and metadata in the Vertex AI Console, see [this codelab](https://codelabs.developers.google.com/vertex-mlmd-pipelines#5).**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jbRf1WoH_vbY" + }, + "source": [ + "You can use the `aiplatform.get_pipeline_df()` method to access run metadata. Here, we'll get metadata for the last two runs of the same pipeline and load it into a Pandas DataFrame. The `mlmd-pipeline` parameter here refers to the name we gave our pipeline in our pipeline definition:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "90d850cda34f" + }, + "outputs": [], + "source": [ + "df = aiplatform.get_pipeline_df(pipeline=\"mlmd-pipeline\")\n", + "print(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d23e2cb66265" + }, + "source": [ + "We've only executed our pipeline twice here, but you can imagine how many metrics you'd have with more executions. Next, we'll create a custom visualization with matplotlib to see the relationship between our model's accuracy and the amount of data used for training. Run the following to generate a graph:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5957415cc390" + }, + "outputs": [], + "source": [ + "plt.plot(df[\"metric.dataset_size\"], df[\"metric.accuracy\"], label=\"Accuracy\")\n", + "plt.title(\"Accuracy and dataset size\")\n", + "plt.legend(loc=4)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EYuYgqVCMKU1" + }, + "source": [ + "## Querying pipeline metrics" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4431b5d062f3" + }, + "source": [ + "In addition to getting a DataFrame of all pipeline metrics, you may want to programmatically query artifacts created in your ML system. From there you could create a custom dashboard or let others in your organizaiton get details on specific artifacts." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "995723757c5d" + }, + "source": [ + "### Getting all Model artifacts\n", + "\n", + "To query artifacts in this way, we'll create a `MetadataServiceClient`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "r8orCj8iJuO1" + }, + "outputs": [], + "source": [ + "API_ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", + "metadata_client = aiplatform_v1beta1.MetadataServiceClient(\n", + " client_options={\"api_endpoint\": API_ENDPOINT}\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e5aee9cdc5bd" + }, + "source": [ + "Next, we'll make a `list_artifacts` request to that endpoint and pass a filter indicating which artifacts we'd like in our response. First, let's get all the artifacts in our project that are **models**. To do that, run the following in your notebook:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "29260057ae40" + }, + "outputs": [], + "source": [ + "MODEL_FILTER = 'schema_title = \"system.Model\"'\n", + "artifact_request = aiplatform_v1beta1.ListArtifactsRequest(\n", + " parent=\"projects/{}/locations/{}/metadataStores/default\".format(PROJECT_ID, REGION),\n", + " filter=MODEL_FILTER,\n", + ")\n", + "model_artifacts = metadata_client.list_artifacts(artifact_request)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dfb57f1b7833" + }, + "source": [ + "The resulting `model_artifacts` response contains an iterable object for each model artifact in your project, along with associated metadata for each model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WTHvPMweMlP1" + }, + "source": [ + "### Filtering objects and displaying in a DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "F19_5lw0MqXv" + }, + "source": [ + "It would be handy if we could more easily visualize the resulting artifact query. Next, let's get all artifacts created after August 10, 2021 with a `LIVE` state. After we run this request, we'll display the results in a pandas DataFrame. First, execute the request:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GmN9vE9pqqzt" + }, + "outputs": [], + "source": [ + "LIVE_FILTER = 'create_time > \"2021-08-10T00:00:00-00:00\" AND state = LIVE'\n", + "artifact_req = {\n", + " \"parent\": \"projects/{}/locations/{}/metadataStores/default\".format(\n", + " PROJECT_ID, REGION\n", + " ),\n", + " \"filter\": LIVE_FILTER,\n", + "}\n", + "live_artifacts = metadata_client.list_artifacts(artifact_req)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6bba2012b7f0" + }, + "source": [ + "Then, display the results in a DataFrame:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6bee5790cec4" + }, + "outputs": [], + "source": [ + "data = {\"uri\": [], \"createTime\": [], \"type\": []}\n", + "\n", + "for i in live_artifacts:\n", + " data[\"uri\"].append(i.uri)\n", + " data[\"createTime\"].append(i.create_time)\n", + " data[\"type\"].append(i.schema_title)\n", + "\n", + "df = pd.DataFrame.from_dict(data)\n", + "print(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "If you don't want to delete the project, do the following to clean up the resources you used:\n", + "\n", + "* If you used Google Cloud Notebooks to run this, stop or delete the notebook instance\n", + "\n", + "* The pipeline runs we executed deployed endpoints in Vertex AI. Navigate to the [Vertex AI console](https://console.cloud.google.com/vertex-ai/endpoints) to delete those endpoints\n", + "\n", + "* Delete the [Cloud Storage bucket](https://console.cloud.google.com/storage/browser/) you created" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "vertex-pipelines-ml-metadata.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/notebooks/official/model_evaluation/README.md b/notebooks/official/model_evaluation/README.md index 0069fbe46..e2e274216 100644 --- a/notebooks/official/model_evaluation/README.md +++ b/notebooks/official/model_evaluation/README.md @@ -1,32 +1,28 @@ -[Evaluating BatchPrediction results from AutoML Tabular Classification model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/automl_tabular_classification_model_evaluation.ipynb) +[Evaluating batch prediction results from an AutoML Tabular classification model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/automl_tabular_classification_model_evaluation.ipynb) -Learn how to train a Vertex AI AutoML Tabular Classification model and learn how to evaluate it through a Vertex AI pipeline job using `google_cloud_pipeline_components`: +``` +Learn how to train a Vertex AI AutoML Tabular classification model and learn how to evaluate it through a Vertex AI pipeline job using `google_cloud_pipeline_components`: The steps performed include: - Create a Vertex AI `Dataset`. -- Train a Automl Tabular Classification model on the `Dataset` resource. +- Train an Automl Tabular classification model on the `Dataset` resource. - Import the trained `AutoML model resource` into the pipeline. - Run a `Batch Prediction` job. -- Evaulate the AutoML model using the `Classification Evaluation Component`. +- Evaluate the AutoML model using the `Classification Evaluation component`. - Import the classification metrics to the AutoML model resource. -[Evaluating BatchPrediction results from AutoML Tabular Classification model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/automl_video_classification_model_evaluation.ipynb) +``` -Learn how to train a Vertex AI AutoML Tabular Classification model and learn how to evaluate it through a Vertex AI pipeline job using `google_cloud_pipeline_components`: +   Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). -The steps performed include: +   Learn more about [AutoML Tabular](https://cloud.google.com/vertex-ai/docs/start/automl-users#tables). -- Create a Vertex AI `Dataset`. -- Train a Automl Tabular Classification model on the `Dataset` resource. -- Import the trained `AutoML model resource` into the pipeline. -- Run a `Batch Prediction` job. -- Evaulate the AutoML model using the `Classification Evaluation Component`. -- Import the classification metrics to the AutoML model resource. -[Evaluating BatchPrediction results from AutoML Tabular regression model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/automl_tabular_regression_model_evaluation.ipynb) +[Evaluating batch prediction results from AutoML Tabular regression model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/automl_tabular_regression_model_evaluation.ipynb) +``` Learn how to evaluate a Vertex AI model resource through a Vertex AI pipeline job using `google_cloud_pipeline_components`: The steps performed include: @@ -35,28 +31,20 @@ The steps performed include: - Configure a `AutoMLTabularTrainingJob` - Run the `AutoMLTabularTrainingJob` which returns a model - Import a pre-trained `AutoML model resource` into the pipeline -- Run a `batch prediction` job +- Run a `batch prediction` job in the pipeline - Evaulate the AutoML model using the `regression evaluation component` -- Import the Classification Metrics to the AutoML model resource +- Import the Regression Metrics to the AutoML model resource -[Evaluating Batch Prediction results from Custom Tabular regression model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/custom_tabular_regression_model_evaluation.ipynb) +``` -Learn how to evaluate a Vertex AI model resource through a Vertex AI pipeline job using `google_cloud_pipeline_components`: +   Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). -The steps performed include: +   Learn more about [AutoML Tabular](https://cloud.google.com/vertex-ai/docs/start/automl-users#tables). -- Create a Vertex AI `CustomTrainingJob` for training a model. -- Run the `CustomTrainingJob` -- Retrieve and load the model artifacts. -- View the model evaluation. -- Upload the model as a Vertex AI Model resource. -- Import a pre-trained `Vertex AI model resource` into the pipeline -- Run a `batch prediction` job -- Evaulate the model using the `regression evaluation component` -- Import the Classification Metrics to the Vertex AI model resource [AutoML text classification pipelines using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/automl_text_classification_model_evaluation.ipynb) +``` Learn how to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` text classification model. The steps performed include: @@ -68,4 +56,81 @@ The steps performed include: - Evaulate the AutoML model using the `Classification Evaluation Component`. - Import the classification metrics to the AutoML model resource. +``` + +   Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). + +   Learn more about [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/classification/prepare-data). + + +[Evaluating batch prediction results from AutoML Video classification model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/automl_video_classification_model_evaluation.ipynb) + +``` +Learn how to train a Vertex AI AutoML Video classification model and learn how to evaluate it through a Vertex AI pipeline job using `google_cloud_pipeline_components`: + +The steps performed include: + +- Create a `Vertex AI Dataset`. +- Train a Automl Video Classification model on the `Vertex AI Dataset` resource. +- Import the trained `AutoML Vertex AI Model resource` into the pipeline. +- Run a batch prediction job inside the pipeline. +- Evaulate the AutoML model using the classification evaluation component. +- Import the classification metrics to the AutoML Vertex AI Model resource. + +``` + +   Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). + +   Learn more about [AutoML Video](https://cloud.google.com/vertex-ai/docs/video-data/classification/prepare-data). + + +[Evaluating BatchPrediction results from a Custom Tabular classification model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/custom_tabular_classification_model_evaluation.ipynb) + +``` +In this tutorial, you train a scikit-learn RandomForest model, save it in Vertex AI Model Registry and learn how to evaluate it through a Vertex AI pipeline job using `google_cloud_pipeline_components`. + +The steps performed include: + +- Fetch the dataset from the public source. +- Preprocess the data locally and save test data in BigQuery. +- Train a RandomForest classification model locally using scikit-learn Python package. +- Create a custom container in Artifact Registry for predictions. +- Upload the model in Vertex AI Model Registry. +- Create and run a Vertex AI Pipeline that: + - Imports the trained model into the pipeline. + - Runs a `Batch Prediction` job on the test data in BigQuery. + - Evaulates the model using the evaluation component from google-cloud-pipeline-components Python SDK. + - Imports the classification metrics in to the model resource in Vertex AI Model Registry. +- Print and visualize the classification evaluation metrics. +- Clean up the resources created in this notebook. + +``` + +   Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Evaluating batch prediction results from custom tabular regression model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_evaluation/custom_tabular_regression_model_evaluation.ipynb) + +``` +Learn how to evaluate a Vertex AI model resource through a Vertex AI pipeline job using `google_cloud_pipeline_components`: + +The steps performed include: + +- Create a Vertex AI `CustomTrainingJob` for training a model. +- Run the `CustomTrainingJob` +- Retrieve and load the model artifacts. +- View the model evaluation. +- Upload the model as a Vertex AI Model resource. +- Import a pre-trained `Vertex AI model resource` into the pipeline. +- Run a `batch prediction` job in the pipeline. +- Evaulate the model using the `regression evaluation component`. +- Import the Regression Metrics to the Vertex AI model resource. + +``` + +   Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). diff --git a/notebooks/official/model_evaluation/automl_tabular_classification_model_evaluation.ipynb b/notebooks/official/model_evaluation/automl_tabular_classification_model_evaluation.ipynb index dad7dac9f..fa35a9dde 100644 --- a/notebooks/official/model_evaluation/automl_tabular_classification_model_evaluation.ipynb +++ b/notebooks/official/model_evaluation/automl_tabular_classification_model_evaluation.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate an AutoML Tabular classification model. Model evaluation helps determine your model's performance based on the evaluation metrics and improve the model whenever necessary. " + "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate an AutoML Tabular classification model. Model evaluation helps determine your model's performance based on the evaluation metrics and improve the model whenever necessary. \n", + "\n", + "Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). Learn more about [Classification for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { diff --git a/notebooks/official/model_evaluation/automl_tabular_regression_model_evaluation.ipynb b/notebooks/official/model_evaluation/automl_tabular_regression_model_evaluation.ipynb index 794e3154a..2d346f785 100644 --- a/notebooks/official/model_evaluation/automl_tabular_regression_model_evaluation.ipynb +++ b/notebooks/official/model_evaluation/automl_tabular_regression_model_evaluation.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates how to use Vertex AI regression model evaluation component to evaluate an AutoML Tabular regression model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. " + "This notebook demonstrates how to use Vertex AI regression model evaluation component to evaluate an AutoML Tabular regression model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. \n", + "\n", + "Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction). Learn more about [Regression for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { diff --git a/notebooks/official/model_evaluation/automl_text_classification_model_evaluation.ipynb b/notebooks/official/model_evaluation/automl_text_classification_model_evaluation.ipynb index b05c1ff3b..286da8f9d 100644 --- a/notebooks/official/model_evaluation/automl_text_classification_model_evaluation.ipynb +++ b/notebooks/official/model_evaluation/automl_text_classification_model_evaluation.ipynb @@ -1,1746 +1,1729 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "copyright" - }, - "outputs": [], - "source": [ - "# Copyright 2022 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": "title:generic" - }, - "source": [ - "# Vertex AI Pipelines: AutoML text classification pipelines using google-cloud-pipeline-components\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \"Colab Run in Colab\n", - " \n", - " \n", - " \n", - " \"GitHub\n", - " View on GitHub\n", - " \n", - " \n", - " \n", - " \"Vertex\n", - " Open in Vertex AI Workbench\n", - " \n", - "
\n", - "


" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "overview:pipelines,automl" - }, - "source": [ - "## Overview\n", - "\n", - "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate an AutoML text classification model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "objective:pipelines,automl" - }, - "source": [ - "### Objective\n", - "\n", - "In this tutorial, you learn how to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` text classification model.\n", - "\n", - "\n", - "This tutorial uses the following Google Cloud ML services:\n", - "\n", - "- Vertex AI `Datasets`\n", - "- Vertex AI `Training`(AutoML Tabular Classification) \n", - "- Vertex AI `Model Registry`\n", - "- Vertex AI `Pipelines`\n", - "- Vertex AI `Batch Predictions`\n", - "\n", - "The steps performed include:\n", - "\n", - "- Create a Vertex AI `Dataset`.\n", - "- Train a Automl Tabular Classification model on the `Dataset` resource.\n", - "- Import the trained `AutoML model resource` into the pipeline.\n", - "- Run a `Batch Prediction` job.\n", - "- Evaulate the AutoML model using the `Classification Evaluation Component`.\n", - "- Import the classification metrics to the AutoML model resource.\n", - "\n", - "The components are [documented here](https://google-cloud-pipeline-components.readthedocs.io/en/latest/google_cloud_pipeline_components.aiplatform.html#module-google_cloud_pipeline_components.aiplatform)." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dd81fd5c3454" - }, - "source": [ - "### Dataset\n", - "\n", - "The dataset used for this tutorial is the [Happy Moments dataset](https://www.kaggle.com/ritresearch/happydb) from [Kaggle Datasets](https://www.kaggle.com/ritresearch/happydb). The version of the dataset you will use in this tutorial is stored in a public Cloud Storage bucket." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "costs" - }, - "source": [ - "### Costs\n", - "\n", - "This tutorial uses billable components of Google Cloud:\n", - "\n", - "* Vertex AI\n", - "* Cloud Storage\n", - "\n", - "Learn about [Vertex AI\n", - "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", - "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", - "Calculator](https://cloud.google.com/products/calculator/)\n", - "to generate a cost estimate based on your projected usage." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "setup_local" - }, - "source": [ - "### Set up your local development environment\n", - "\n", - "If you are using Colab or Google Vertex AI Workbench Notebook, your environment already meets all the requirements to run this notebook. You can skip this step.\n", - "\n", - "Otherwise, make sure your environment meets this notebook's requirements. You need the following:\n", - "\n", - "- The Cloud Storage SDK\n", - "- Git\n", - "- Python 3\n", - "- virtualenv\n", - "- Jupyter notebook running in a virtual environment with Python 3\n", - "\n", - "The Cloud Storage guide to [Setting up a Python development environment](https://cloud.google.com/python/setup) and the [Jupyter installation guide](https://jupyter.org/install) provide detailed instructions for meeting these requirements. The following steps provide a condensed set of instructions:\n", - "\n", - "1. [Install and initialize the SDK](https://cloud.google.com/sdk/docs/).\n", - "\n", - "2. [Install Python 3](https://cloud.google.com/python/setup#installing_python).\n", - "\n", - "3. [Install virtualenv](Ihttps://cloud.google.com/python/setup#installing_and_using_virtualenv) and create a virtual environment that uses Python 3.\n", - "\n", - "4. Activate that environment and run `pip3 install Jupyter` in a terminal shell to install Jupyter.\n", - "\n", - "5. Run `jupyter notebook` on the command line in a terminal shell to launch Jupyter.\n", - "\n", - "6. Open this notebook in the Jupyter Notebook Dashboard.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "install_aip:mbsdk" - }, - "source": [ - "## Installation\n", - "\n", - "Install the packages required for executing this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "install_aip:mbsdk" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "# The Vertex AI Workbench Notebook product has specific requirements\n", - "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", - "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", - " \"/opt/deeplearning/metadata/env_version\"\n", - ")\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 \\\n", - " google-cloud-storage \\\n", - " kfp google-cloud-pipeline-components \\\n", - " ndjson {USER_FLAG} -q" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "restart" - }, - "source": [ - "### Restart the kernel\n", - "\n", - "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": "check_versions" - }, - "source": [ - "Check the versions of the packages you installed. The KFP SDK version should be >=1.6." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "check_versions:kfp,gcpc" - }, - "outputs": [], - "source": [ - "! python3 -c \"import kfp; print('KFP SDK version: {}'.format(kfp.__version__))\"\n", - "! python3 -c \"import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "before_you_begin:nogpu" - }, - "source": [ - "## Before you begin\n", - "\n", - "### GPU runtime\n", - "\n", - "This tutorial does not require a GPU runtime.\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 Vertex AI APIs, Compute Engine APIs, and Cloud Storage.](https://console.cloud.google.com/flows/enableapi?apiid=ml.googleapis.com,compute_component,storage-component.googleapis.com)\n", - "\n", - "4. [The Google Cloud SDK](https://cloud.google.com/sdk) is already installed in Google Vertex AI Workbench Notebook.\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 `$`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "set_project_id" - }, - "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" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "region" - }, - "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)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "region" - }, - "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": [ - "#### UUID\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 uuid for each instance session, and append the uuid onto the name of resources you create in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "timestamp" - }, - "outputs": [], - "source": [ - "import random\n", - "import string\n", - "\n", - "\n", - "# Generate a uuid of a specifed length(default=8)\n", - "def generate_uuid(length: int = 8) -> str:\n", - " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", - "\n", - "\n", - "UUID = generate_uuid()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gcp_authenticate" - }, - "source": [ - "### Authenticate your Google Cloud account\n", - "\n", - "**If you are using Vertex AI Workbench Notebook**, your environment is already authenticated.\n", - "\n", - "**If you are using Colab**, run the cell below and follow the instructions\n", - "when prompted to authenticate your account via oAuth.\n", - "\n", - "**Otherwise**, follow these steps:\n", - "\n", - "1. In the Cloud Console, go to the [**Create service account key**\n", - " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", - "\n", - "2. Click **Create service account**.\n", - "\n", - "3. In the **Service account name** field, enter a name, and\n", - " click **Create**.\n", - "\n", - "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", - "into the filter box, and select\n", - " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", - "\n", - "5. Click *Create*. A JSON file that contains your key downloads to your\n", - "local environment.\n", - "\n", - "6. Enter the path to your service account key as the\n", - "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "gcp_authenticate" - }, - "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 = \"google.colab\" in sys.modules\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", - " 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 ''" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bucket:mbsdk" - }, - "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 AI 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." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "bucket" - }, - "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-\" + UUID\n", - " BUCKET_URI = \"gs://\" + BUCKET_NAME" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "create_bucket" - }, - "source": [ - "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "create_bucket" - }, - "outputs": [], - "source": [ - "! 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": { - "id": "set_service_account" - }, - "source": [ - "#### Service Account\n", - "\n", - "**If you don't know your service account**, try to get your service account using `gcloud` command by executing the second cell below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "set_service_account" - }, - "outputs": [], - "source": [ - "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "autoset_service_account" - }, - "outputs": [], - "source": [ - "if (\n", - " SERVICE_ACCOUNT == \"\"\n", - " or SERVICE_ACCOUNT is None\n", - " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", - "):\n", - " # Get your service account from gcloud\n", - " if not IS_COLAB:\n", - " shell_output = !gcloud auth list 2>/dev/null\n", - " SERVICE_ACCOUNT = shell_output[2].replace(\"*\", \"\").strip()\n", - "\n", - " if IS_COLAB:\n", - " shell_output = ! gcloud projects describe $PROJECT_ID\n", - " project_number = shell_output[-1].split(\":\")[1].strip().replace(\"'\", \"\")\n", - " SERVICE_ACCOUNT = f\"{project_number}-compute@developer.gserviceaccount.com\"\n", - "\n", - " print(\"Service Account:\", SERVICE_ACCOUNT)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "set_service_account:pipelines" - }, - "source": [ - "#### Set service account access for Vertex AI Pipelines\n", - "\n", - "Run the following commands to grant your service account access to read and write pipeline artifacts in the bucket that you created in the previous step -- you only need to run these once per service account." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "set_service_account:pipelines" - }, - "outputs": [], - "source": [ - "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator $BUCKET_URI\n", - "\n", - "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer $BUCKET_URI" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "setup_vars" - }, - "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\n", - "import kfp\n", - "from google.cloud import aiplatform_v1" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "pipeline_constants" - }, - "source": [ - "#### Vertex AI Pipelines constants\n", - "\n", - "Setup up the following constants for Vertex AI Pipelines:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pipeline_constants" - }, - "outputs": [], - "source": [ - "PIPELINE_ROOT = \"{}/pipeline_root/happydb\".format(BUCKET_URI)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "init_aip:mbsdk" - }, - "source": [ - "## Initialize Vertex AI SDK for Python\n", - "\n", - "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "init_aip:mbsdk" - }, - "outputs": [], - "source": [ - "aip.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "define_pipeline:gcpc,automl,happydb,tcn" - }, - "source": [ - "## Define AutoML text classification model pipeline that uses components from `google_cloud_pipeline_components`\n", - "\n", - "Next, you define the pipeline.\n", - "\n", - "Create and deploy an AutoML text classification `Model` resource using a `Dataset` resource." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "define_pipeline:gcpc,automl,happydb,tcn" - }, - "outputs": [], - "source": [ - "IMPORT_FILE = \"gs://cloud-ml-data/NL-classification/happiness.csv\"\n", - "\n", - "\n", - "@kfp.dsl.pipeline(name=\"automl-text-classification\" + UUID)\n", - "def pipeline(\n", - " project: str = PROJECT_ID, region: str = REGION, import_file: str = IMPORT_FILE\n", - "):\n", - " from google_cloud_pipeline_components import aiplatform as gcc_aip\n", - " from google_cloud_pipeline_components.v1.endpoint import (EndpointCreateOp,\n", - " ModelDeployOp)\n", - "\n", - " dataset_create_task = gcc_aip.TextDatasetCreateOp(\n", - " display_name=\"train-automl-happydb\",\n", - " gcs_source=import_file,\n", - " import_schema_uri=aip.schema.dataset.ioformat.text.multi_label_classification,\n", - " project=project,\n", - " )\n", - "\n", - " training_run_task = gcc_aip.AutoMLTextTrainingJobRunOp(\n", - " dataset=dataset_create_task.outputs[\"dataset\"],\n", - " display_name=\"train-automl-happydb\",\n", - " prediction_type=\"classification\",\n", - " multi_label=True,\n", - " training_fraction_split=0.6,\n", - " validation_fraction_split=0.2,\n", - " test_fraction_split=0.2,\n", - " model_display_name=\"train-automl-happydb\",\n", - " project=project,\n", - " )\n", - "\n", - " endpoint_op = EndpointCreateOp(\n", - " project=project,\n", - " location=region,\n", - " display_name=\"train-automl-happydb\",\n", - " )\n", - "\n", - " _ = ModelDeployOp(\n", - " model=training_run_task.outputs[\"model\"],\n", - " endpoint=endpoint_op.outputs[\"endpoint\"],\n", - " automatic_resources_min_replica_count=1,\n", - " automatic_resources_max_replica_count=1,\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "compile_pipeline" - }, - "source": [ - "## Compile the pipeline\n", - "\n", - "Next, compile the pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "compile_pipeline" - }, - "outputs": [], - "source": [ - "from kfp.v2 import compiler # noqa: F811\n", - "\n", - "compiler.Compiler().compile(\n", - " pipeline_func=pipeline,\n", - " package_path=\"text_classification_pipeline.json\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "run_pipeline:automl,text" - }, - "source": [ - "## Run the pipeline\n", - "\n", - "Next, run the pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "run_pipeline:automl,text" - }, - "outputs": [], - "source": [ - "DISPLAY_NAME = \"happydb_\" + UUID\n", - "\n", - "job = aip.PipelineJob(\n", - " display_name=DISPLAY_NAME,\n", - " template_path=\"text_classification_pipeline.json\",\n", - " pipeline_root=PIPELINE_ROOT,\n", - " enable_caching=False,\n", - ")\n", - "\n", - "job.run()\n", - "\n", - "! rm text_classification_pipeline.json" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "view_pipeline_run:automl,text" - }, - "source": [ - "Click on the generated link to see your run in the Cloud Console.\n", - "\n", - "In the UI, many of the pipeline DAG nodes will expand or collapse when you click on them. Here is a partially-expanded view of the DAG (click image to see larger version).\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9af2a70fc560" - }, - "outputs": [], - "source": [ - "model_display_name = \"train-automl-happydb \"\n", - "models = aip.Model.list(\n", - " filter=f\"display_name={model_display_name}\", order_by=\"create_time\"\n", - ")\n", - "if models:\n", - " model = models[0]\n", - "model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "0a460b7aefc3" - }, - "outputs": [], - "source": [ - "# For existing model, use MODEL_ID to load the model.\n", - "# MODEL_ID = '3402729003222564864'\n", - "# model = aip.Model(model_name=MODEL_ID)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "679ded8b6097" - }, - "outputs": [], - "source": [ - "# Get evaluations\n", - "model_evaluations = model.list_model_evaluations()\n", - "\n", - "model_evaluation = list(model_evaluations)[0]\n", - "print(model_evaluation)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "92a590960332" - }, - "outputs": [], - "source": [ - "# Print the evaluation metrics\n", - "for evaluation in model_evaluations:\n", - " evaluation = evaluation.to_dict()\n", - " print(\"Model's evaluation metrics from Training:\\n\")\n", - " metrics = evaluation[\"metrics\"]\n", - " for metric in metrics.keys():\n", - " print(f\"metric: {metric}, value: {metrics[metric]}\\n\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "f54ab89a020c" - }, - "source": [ - "## Get batch predictions from your model\n", - "\n", - "You can get batch predictions from a text classification model without deploying it. You must first format all of your prediction instances (prediction input) in JSONL format and you must store the JSONL file in a Google Cloud Storage bucket. You must also provide a Google Cloud Storage bucket to hold your prediction output.\n", - "\n", - "To start, you must first create your predictions input file in JSONL format. Each line in the JSONL document needs to be formatted like so:\n", - "\n", - "```\n", - "{ \"content\": \"gs://sourcebucket/datasets/texts/source_text.txt\", \"mimeType\": \"text/plain\"}\n", - "```\n", - "\n", - "The `content` field in the JSON structure must be a Google Cloud Storage URI to another document that contains the text input for prediction.\n", - "[See the documentation for more information.](https://cloud.google.com/ai-platform-unified/docs/predictions/batch-predictions#text)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "f23865fbab9a" - }, - "outputs": [], - "source": [ - "instances = [\n", - " {\n", - " \"Text\": \"I went on a successful date with someone I felt sympathy and connection with.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\n", - " \"Text\": \"I was happy when my son got 90% marks in his examination\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\"Text\": \"I went to the gym this morning and did yoga.\", \"Labels\": \"exercise\"},\n", - " {\n", - " \"Text\": \"We had a serious talk with some friends of ours who have been flaky lately. They understood and we had a good evening hanging out.\",\n", - " \"Labels\": \"bonding\",\n", - " },\n", - " {\n", - " \"Text\": \"I went with grandchildren to butterfly display at Crohn Conservatory\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\"Text\": \"I meditated last night.\", \"Labels\": \"leisure\"},\n", - " {\n", - " \"Text\": \"I made a new recipe for peasant bread, and it came out spectacular!\",\n", - " \"Labels\": \"achievement\",\n", - " },\n", - " {\n", - " \"Text\": \"I got gift from my elder brother which was really surprising me\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\"Text\": \"YESTERDAY MY MOMS BIRTHDAY SO I ENJOYED\", \"Labels\": \"enjoy_the_moment\"},\n", - " {\n", - " \"Text\": \"Watching cupcake wars with my three teen children\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\"Text\": \"I came in 3rd place in my Call of Duty video game.\", \"Labels\": \"leisure\"},\n", - " {\n", - " \"Text\": \"I completed my 5 miles run without break. It makes me feel strong.\",\n", - " \"Labels\": \"exercise\",\n", - " },\n", - " {\"Text\": \"went to movies with my friends it was fun\", \"Labels\": \"bonding\"},\n", - " {\n", - " \"Text\": \"I was shorting Gold and made $200 from the trade.\",\n", - " \"Labels\": \"achievement\",\n", - " },\n", - " {\n", - " \"Text\": \"Hearing Songs It can be nearly impossible to go from angry to happy, so you're just looking for the thought that eases you out of your angry feeling and moves you in the direction of happiness. It may take a while, but as long as you're headed in a more positive direction youall be doing yourself a world of good.\",\n", - " \"Labels\": \"enjoy_the_moment\",\n", - " },\n", - " {\n", - " \"Text\": \"My son performed very well for a test preparation.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\"Text\": \"I helped my neighbour to fix their car damages.\", \"Labels\": \"bonding\"},\n", - " {\n", - " \"Text\": \"Managed to get the final trophy in a game I was playing.\",\n", - " \"Labels\": \"achievement\",\n", - " },\n", - " {\n", - " \"Text\": \"A hot kiss with my girl friend last night made my day\",\n", - " \"Labels\": \"bonding\",\n", - " },\n", - " {\n", - " \"Text\": \"My new BCAAs came in the mail. Yay! Strawberry Lemonade flavored aminos make my heart happy.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\"Text\": \"Got A in class.\", \"Labels\": \"achievement\"},\n", - " {\n", - " \"Text\": \"My sister called me from abroad this morning after some long years. Such a happy occassion for all family members.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\n", - " \"Text\": \"The cake I made today came out amazing. It tasted amazing as well.\",\n", - " \"Labels\": \"achievement\",\n", - " },\n", - " {\n", - " \"Text\": \"There are two types of people in the world: those who choose to be happy, and those who choose to be unhappy. Contrary to popular belief, happiness doesn't come from fame, fortune, other people, or material possessions\",\n", - " \"Labels\": \"enjoy_the_moment\",\n", - " },\n", - " {\n", - " \"Text\": \"My grandmother start to walk from the bed after a long time.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\"Text\": \"i was able to hit a top spin serve in tennis\", \"Labels\": \"achievement\"},\n", - " {\n", - " \"Text\": \"I napped with my husband on the bed this afternoon and it was sweet to cuddle so close to him.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\n", - " \"Text\": \"My co-woker started playing a Carley Rae Jepsen song from her phone while ringing out customers.\",\n", - " \"Labels\": \"leisure\",\n", - " },\n", - " {\n", - " \"Text\": \"My son woke me up to a fantastic breakfast of eggs, his special hamburger patty and pancakes.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - " {\n", - " \"Text\": \"After a long time my brother gave a suprise visit to my house yesterday.\",\n", - " \"Labels\": \"affection\",\n", - " },\n", - "]\n", - "\n", - "input_file_name = \"happiness-batch-prediction-input.jsonl\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6d0156222582" - }, - "source": [ - "For batch prediction, you must supply the following:\n", - "\n", - "+ All of your prediction instances as individual files on Google Cloud Storage, as TXT files for your instances\n", - "+ A JSONL file that lists the URIs of all your prediction instances\n", - "+ A Cloud Storage bucket to hold the output from batch prediction\n", - "\n", - "For this tutorial, the following cells create a new Storage bucket, upload individual prediction instances as text files to the bucket, and then create the JSONL file with the URIs of your prediction instances." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "aa27e20fc2ec" - }, - "outputs": [], - "source": [ - "# Instantiate the Storage client and create the new bucket\n", - "from google.cloud import storage\n", - "\n", - "storage_client = storage.Client()\n", - "bucket = storage_client.bucket(BUCKET_NAME)\n", - "# Iterate over the prediction instances, creating a new TXT file\n", - "# for each.\n", - "input_file_data = []\n", - "for count, instance in enumerate(instances):\n", - " print(instance)\n", - " instance_name = f\"input_{count}.txt\"\n", - " instance_file_uri = f\"{BUCKET_URI}/batch-prediction-input/{instance_name}\"\n", - " # Add the data to store in the JSONL input file.\n", - " tmp_data = {\"content\": instance_file_uri, \"mimeType\": \"text/plain\"}\n", - " input_file_data.append(tmp_data)\n", - "\n", - " # Create the new instance file\n", - " blob = bucket.blob(\"batch-prediction-input/\" + instance_name)\n", - " blob.upload_from_string(instance[\"Text\"])\n", - "\n", - "\n", - "input_str = \"\\n\".join([str(d) for d in input_file_data])\n", - "file_blob = bucket.blob(f\"{input_file_name}\")\n", - "file_blob.upload_from_string(input_str)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "d330cc0a3582" - }, - "outputs": [], - "source": [ - "job_display_name = \"happiness-text-classification-batch-prediction-job\"\n", - "batch_prediction_job = model.batch_predict(\n", - " job_display_name=job_display_name,\n", - " gcs_source=f\"{BUCKET_URI}/{input_file_name}\",\n", - " gcs_destination_prefix=f\"{BUCKET_URI}/output\",\n", - " sync=True,\n", - ")\n", - "batch_prediction_job_name = batch_prediction_job.resource_name" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "b3ca5b6c88ef" - }, - "outputs": [], - "source": [ - "from google.cloud.aiplatform import jobs\n", - "\n", - "batch_job = jobs.BatchPredictionJob(batch_prediction_job_name)\n", - "print(f\"Batch prediction job state: {str(batch_job.state)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "8ec70df091f1" - }, - "source": [ - "## Get predictions for batch prediction job\n", - "\n", - "Load the batch predictions from GCS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "82c88319987e" - }, - "outputs": [], - "source": [ - "import ndjson\n", - "\n", - "bp_iter_outputs = batch_job.iter_outputs()\n", - "\n", - "prediction_results = list()\n", - "for blob in bp_iter_outputs:\n", - " if blob.name.split(\"/\")[-1].startswith(\"prediction\"):\n", - " prediction_results.append(blob.name)\n", - "\n", - "for prediction_result in prediction_results:\n", - " gfile_name = f\"gs://{bp_iter_outputs.bucket.name}/{prediction_result}\".replace(\n", - " BUCKET_URI + \"/\", \"\"\n", - " )\n", - " data = bucket.get_blob(gfile_name).download_as_string()\n", - " data = ndjson.loads(data)\n", - " # print(data)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "10aefe12628a" - }, - "source": [ - "## Create input file with ground truth for evaluation \n", - "\n", - "Evaluation component needs ground truth to be part of the input file against which the predictions are evaluated" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8f51edb0d581" - }, - "outputs": [], - "source": [ - "input_file_name = \"happiness-batch-prediction-input-with-groundtruth.jsonl\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "c6b057194bb4" - }, - "outputs": [], - "source": [ - "# Instantiate the Storage client and create the new bucket\n", - "from google.cloud import storage\n", - "\n", - "storage_client = storage.Client()\n", - "bucket = storage_client.bucket(BUCKET_NAME)\n", - "# Iterate over the prediction instances, creating a new TXT file\n", - "# for each.\n", - "input_file_data = []\n", - "for count, instance in enumerate(instances):\n", - " instance_name = f\"input_{count}.txt\"\n", - " instance_file_uri = (\n", - " f\"{BUCKET_URI}/evaluation-batch-prediction-input/{instance_name}\"\n", - " )\n", - " # Add the data to store in the JSONL input file.\n", - " # out_put variable in each json instance is needed to act as ground_truth for the evaluation task\n", - " tmp_data = {\n", - " \"content\": instance_file_uri,\n", - " \"mimeType\": \"text/plain\",\n", - " \"out_put\": instance[\"Labels\"],\n", - " }\n", - " input_file_data.append(tmp_data)\n", - "\n", - " # Create the new instance file\n", - " blob = bucket.blob(\"evaluation-batch-prediction-input/\" + instance_name)\n", - " blob.upload_from_string(instance[\"Text\"])\n", - "\n", - "import json\n", - "\n", - "input_str = json.dumps(input_file_data[0])\n", - "for i in input_file_data[1:]:\n", - " input_str = input_str + \"\\n\" + json.dumps(i)\n", - "# input_str = \"\\n\".join([str(d) for d in input_file_data])\n", - "file_blob = bucket.blob(f\"{input_file_name}\")\n", - "file_blob.upload_from_string(input_str)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "da26980e4892" - }, - "source": [ - "# Create pipeline for model evaluation\n", - "\n", - "Now, you run a Vertex AI BatchPrediction job and generate evaluations its results. \n", - "\n", - "To do so, you create a Vertex AI pipeline using the components available from the [`google-cloud-pipeline-components`](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.17/index.html) Python package." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "681c838a9e9a" - }, - "source": [ - "### Define the Pipeline\n", - "\n", - "While defining the flow of the pipeline, you get the model resource first. Then, you sample the provided source dataset for batch predictions and create a batch prediction. Once the batch prediction job is completed, you get the classification evaluation metrics.\n", - "\n", - "The pipeline uses the following components:\n", - "\n", - "- `GetVertexModelOp`: Gets a Vertex AI Model Artifact. \n", - "- `EvaluationDataSamplerOp`: Randomly downsamples an input dataset to a specified size for computing Vertex Explainable AI feature attributions for AutoML Tabular and custom models. Creates a Dataflow job with Apache Beam to downsample the dataset. \n", - "- `EvaluationDataSplitterOp`: Removes the Ground Truth columns from the input dataset for supporting unstructured AutoML models and custom models in Batch Prediction. Creates a Dataflow job with Apache Beam to remove the ground truth columns.\n", - "- `ModelBatchPredictOp`: Creates a Google Cloud Vertex BatchPredictionJob and waits for it to complete. \n", - "- `ModelEvaluationClassificationOp`: Compute evaluation metrics on a trained model’s batch prediction results. Creates a Dataflow job with Apache Beam and TFMA to compute evaluation metrics. Supports mutliclass classification evaluation for tabular, image, video, and text data. \n", - "- `ModelImportEvaluationOp`: Imports a model evaluation artifact to an existing Vertex model with ModelService.ImportModelEvaluation. \n", - "\n", - "Learn more about [Google Cloud Pipeline Model Evaluation components](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.20/google_cloud_pipeline_components.experimental.evaluation.html)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1eb4358fb33b" - }, - "outputs": [], - "source": [ - "@kfp.dsl.pipeline(name=\"automl-text-classification-evaluation\")\n", - "def evaluation_automl_text_classification_evaluation_pipeline(\n", - " project: str,\n", - " location: str,\n", - " root_dir: str,\n", - " model_name: str,\n", - " target_column_name: str,\n", - " key_columns: list,\n", - " ground_truth_gcs_uri: list,\n", - " batch_predict_gcs_source_uris: list,\n", - " batch_predict_instances_format: str,\n", - " batch_predict_predictions_format: str = \"jsonl\",\n", - " batch_predict_machine_type: str = \"n1-standard-4\",\n", - " batch_predict_starting_replica_count: int = 5,\n", - " batch_predict_max_replica_count: int = 10,\n", - " batch_predict_explanation_metadata: dict = {},\n", - " batch_predict_explanation_parameters: dict = {},\n", - " batch_predict_explanation_data_sample_size: int = 10000,\n", - " encryption_spec_key_name: str = \"\",\n", - "):\n", - "\n", - " from google_cloud_pipeline_components.aiplatform import ModelBatchPredictOp\n", - " from google_cloud_pipeline_components.experimental.evaluation import (\n", - " EvaluationDataSamplerOp, EvaluationDataSplitterOp, GetVertexModelOp,\n", - " ModelEvaluationClassificationOp, ModelImportEvaluationOp)\n", - "\n", - " # Get the Vertex AI model resource\n", - " get_model_task = GetVertexModelOp(model_resource_name=model_name)\n", - "\n", - " # Run Data-sampling task\n", - " data_sampler_task = EvaluationDataSamplerOp(\n", - " project=project,\n", - " location=location,\n", - " root_dir=root_dir,\n", - " gcs_source_uris=ground_truth_gcs_uri,\n", - " instances_format=batch_predict_instances_format,\n", - " sample_size=batch_predict_explanation_data_sample_size,\n", - " )\n", - "\n", - " # Run Data-splitter task\n", - " data_splitter_task = EvaluationDataSplitterOp(\n", - " project=project,\n", - " location=location,\n", - " root_dir=root_dir,\n", - " gcs_source_uris=data_sampler_task.outputs[\"gcs_output_directory\"],\n", - " instances_format=batch_predict_instances_format,\n", - " ground_truth_column=target_column_name,\n", - " )\n", - "\n", - " # Run Batch Explanations\n", - " batch_predict_task = ModelBatchPredictOp(\n", - " project=project,\n", - " location=location,\n", - " model=get_model_task.outputs[\"model\"],\n", - " job_display_name=\"model-registry-batch-predict-evaluation\",\n", - " gcs_source_uris=data_splitter_task.outputs[\"gcs_output_directory\"],\n", - " instances_format=batch_predict_instances_format,\n", - " predictions_format=batch_predict_predictions_format,\n", - " gcs_destination_output_uri_prefix=root_dir,\n", - " machine_type=batch_predict_machine_type,\n", - " starting_replica_count=batch_predict_starting_replica_count,\n", - " max_replica_count=batch_predict_max_replica_count,\n", - " encryption_spec_key_name=encryption_spec_key_name,\n", - " )\n", - "\n", - " # Run evaluation based on prediction type and feature attribution component.\n", - " # After, import the model evaluations to the Vertex model.\n", - " eval_task = ModelEvaluationClassificationOp(\n", - " project=project,\n", - " location=location,\n", - " root_dir=root_dir,\n", - " key_columns=key_columns,\n", - " ground_truth_column=target_column_name,\n", - " ground_truth_gcs_source=ground_truth_gcs_uri,\n", - " ground_truth_format=\"jsonl\",\n", - " predictions_gcs_source=batch_predict_task.outputs[\"gcs_output_directory\"],\n", - " predictions_format=batch_predict_predictions_format,\n", - " encryption_spec_key_name=encryption_spec_key_name,\n", - " )\n", - "\n", - " ModelImportEvaluationOp(\n", - " classification_metrics=eval_task.outputs[\"evaluation_metrics\"],\n", - " model=get_model_task.outputs[\"model\"],\n", - " dataset_type=batch_predict_instances_format,\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "da6fe805d207" - }, - "source": [ - "### Compile the pipeline\n", - "\n", - "Next, compile the pipline to the `automl_text_classification_evaluation.json` file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "a8623eccf059" - }, - "outputs": [], - "source": [ - "from kfp.v2 import compiler\n", - "\n", - "compiler.Compiler().compile(\n", - " pipeline_func=evaluation_automl_text_classification_evaluation_pipeline,\n", - " package_path=\"automl_text_classification_evaluation.json\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ce4da3e6d82b" - }, - "source": [ - "### Define the parameters to run the pipeline\n", - "\n", - "Specify the required parameters to run the pipeline.\n", - "\n", - "Set a display name for your pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "31f172dfb60b" - }, - "outputs": [], - "source": [ - "PIPELINE_DISPLAY_NAME = \"[your-pipeline-display-name]\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "88386d636e0b" - }, - "outputs": [], - "source": [ - "# If no display name is set, use the default one\n", - "if (\n", - " PIPELINE_DISPLAY_NAME == \"[your-pipeline-display-name]\"\n", - " or PIPELINE_DISPLAY_NAME == \"\"\n", - " or PIPELINE_DISPLAY_NAME is None\n", - "):\n", - " PIPELINE_DISPLAY_NAME = \"happiness_\" + UUID" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ba99dc63345d" - }, - "source": [ - "To pass the required arguments to the pipeline, you define the following paramters below:\n", - "\n", - "- `project`: Project ID.\n", - "- `location`: Region where the pipeline is run.\n", - "- `root_dir`: The GCS directory for keeping staging files and artifacts. A random subdirectory is created under the directory to keep job info for resuming the job in case of failure.\n", - "- `model_name`: Resource name of the trained AutoML Tabular Classification model.\n", - "- `target_column_name`: Name of the column to be used as the target for classification.\n", - "- `batch_predict_gcs_source_uris`: List of the Cloud Storage bucket uris of input instances for batch prediction.\n", - "- `batch_predict_instances_format`: Format of the input instances for batch prediction. Format used here is'**jsonl**'.\n", - "- `batch_predict_explanation_data_sample_size`: Size of the samples to be considered for batch prediction and evaluation.\n", - "- `ground_truth_gcs_uri`: Google Cloud Storage URI(-s) to your instances to run data splitter on. They must match instances_format.\n", - "- `key_columns` : The list of fields in the ground truth gcs source to format the joining key. Used to merge prediction instances with ground truth data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "c7f9ac728635" - }, - "outputs": [], - "source": [ - "DATA_SOURCE = f\"{BUCKET_URI}/{input_file_name}\"\n", - "PIPELINE_ROOT = f\"{BUCKET_URI}/pipeline_root/happiness_{UUID}\"\n", - "parameters = {\n", - " \"project\": PROJECT_ID,\n", - " \"location\": REGION,\n", - " \"root_dir\": PIPELINE_ROOT,\n", - " \"model_name\": model.resource_name,\n", - " \"target_column_name\": \"out_put\",\n", - " \"batch_predict_gcs_source_uris\": [DATA_SOURCE],\n", - " \"batch_predict_instances_format\": \"jsonl\",\n", - " \"batch_predict_explanation_data_sample_size\": 10,\n", - " \"ground_truth_gcs_uri\": [DATA_SOURCE],\n", - " \"key_columns\": [\"content\", \"mimeType\"],\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "9b6bf9409c51" - }, - "source": [ - "Create a Vertex AI pipeline job using the following parameters:\n", - "\n", - "- `display_name`: The name of the pipeline, this will show up in the Google Cloud console.\n", - "- `template_path`: The path of PipelineJob or PipelineSpec JSON or YAML file. It can be a local path, a Google Cloud Storage URI or an Artifact Registry URI.\n", - "- `parameter_values`: The mapping from runtime parameter names to its values that\n", - " control the pipeline run.\n", - "- `enable_caching`: Whether to turn on caching for the run.\n", - "\n", - "Learn more about [Class PipelineJob](https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform.PipelineJob).\n", - "\n", - "After creating, run the pipeline job using the configured `SERVICE_ACCOUNT`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8db9156f3050" - }, - "outputs": [], - "source": [ - "evaluation_job = aip.PipelineJob(\n", - " display_name=PIPELINE_DISPLAY_NAME,\n", - " template_path=\"automl_text_classification_evaluation.json\",\n", - " parameter_values=parameters,\n", - " enable_caching=False,\n", - ")\n", - "\n", - "evaluation_job.run(service_account=SERVICE_ACCOUNT)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "570f69c35f3b" - }, - "source": [ - "# Model Evaluation" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "40944be9d8e7" - }, - "source": [ - "In the results from last step, click on the generated link to see your run in the Cloud Console.\n", - "\n", - "In the UI, many of the pipeline directed acyclic graph (DAG) nodes expand or collapse when you click on them. Here is a partially-expanded view of the DAG (click image to see larger version).\n", - "\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "c9b563bdc3d5" - }, - "source": [ - "### Get the Model Evaluation Results\n", - "\n", - "After the evalution pipeline is finished, run the below cell to print the evaluation metrics." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "f05de1ad1e67" - }, - "outputs": [], - "source": [ - "# Iterate over the pipeline tasks\n", - "for task in evaluation_job._gca_resource.job_detail.task_details:\n", - " # Obtain the artifacts from the evaluation task\n", - " if (\n", - " (\"model-evaluation\" in task.task_name)\n", - " and (\"model-evaluation-import\" not in task.task_name)\n", - " and (\n", - " task.state == aiplatform_v1.types.PipelineTaskDetail.State.SUCCEEDED\n", - " or task.state == aiplatform_v1.types.PipelineTaskDetail.State.SKIPPED\n", - " )\n", - " ):\n", - " evaluation_metrics = task.outputs.get(\"evaluation_metrics\").artifacts[\n", - " 0\n", - " ] # ['artifacts']\n", - " evaluation_metrics_gcs_uri = evaluation_metrics.uri\n", - "\n", - "print(evaluation_metrics)\n", - "print(evaluation_metrics_gcs_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "34c1905f54e3" - }, - "source": [ - "### Visualize the metrics\n", - "\n", - "Visualize the available metrics like `auRoc` and `logLoss` using a bar-chart." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "274de9ff8dc5" - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "metrics = []\n", - "values = []\n", - "for i in evaluation_metrics.metadata.items():\n", - " metrics.append(i[0])\n", - " values.append(i[1])\n", - "plt.figure(figsize=(15, 5))\n", - "plt.bar(x=metrics, height=values)\n", - "plt.title(\"Evaluation Metrics\")\n", - "plt.ylabel(\"Value\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "91082815d1b3" - }, - "source": [ - "# Get Model Evaluations from Model Registry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "8a35f4f09cc2" - }, - "outputs": [], - "source": [ - "for task in evaluation_job.task_details:\n", - " if \"model-evaluation-import\" in task.task_name:\n", - " val = json.loads(task.execution.metadata.get(\"output:gcp_resources\"))\n", - " model_evaluation = val[\"resources\"][0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "70aaaca32f36" - }, - "outputs": [], - "source": [ - "# Print the evaluation metrics\n", - "model_evaluation_id = model_evaluation[\"resourceUri\"].split(\"/\")[-1]\n", - "print(model_evaluation_id)\n", - "\n", - "evaluation = model.get_model_evaluation(evaluation_id=model_evaluation_id)\n", - "evaluation = evaluation.to_dict()\n", - "print(\"Model's evaluation metrics from Training:\\n\")\n", - "metrics = evaluation[\"metrics\"]\n", - "for metric in metrics.keys():\n", - " print(f\"metric: {metric}, value: {metrics[metric]}\\n\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cleanup:pipelines" - }, - "source": [ - "# Cleaning up\n", - "\n", - "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", - "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", - "\n", - "Otherwise, you can delete the individual resources you created in this tutorial -- *Note:* this is auto-generated and not all resources may be applicable for this tutorial:\n", - "\n", - "\n", - "- Dataset\n", - "- Model\n", - "- AutoML Training Job\n", - "- Batch Job\n", - "- Evaluation Job\n", - "- Cloud Storage Bucket" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "92e77f0a7931" - }, - "outputs": [], - "source": [ - "delete_dataset = True\n", - "delete_training_pipeline = True\n", - "delete_batchpredict_job = True\n", - "delete_evaluation_pipeline = True\n", - "delete_model = True\n", - "delete_endpoint = True\n", - "delete_bucket = False\n", - "\n", - "dataset_type = \"text\"\n", - "dataset_display_name = \"train-automl-happydb\"\n", - "model_display_name = \"train-automl-happydb\"\n", - "endpoint_display_name = \"train-automl-happydb\"\n", - "\n", - "\n", - "if delete_endpoint:\n", - " endpoints = aip.Endpoint.list(\n", - " filter=f\"display_name={endpoint_display_name}\", order_by=\"create_time\"\n", - " )\n", - " if endpoints:\n", - " endpoint = endpoints[0]\n", - " endpoint.undeploy_all()\n", - " endpoint.delete()\n", - " print(\"Deleted endpoint:\", endpoint)\n", - "\n", - "if delete_model:\n", - " models = aip.Model.list(\n", - " filter=f\"display_name={model_display_name}\", order_by=\"create_time\"\n", - " )\n", - " if models:\n", - " model = models[0]\n", - " model.delete()\n", - " print(\"Deleted model:\", model)\n", - "\n", - "if delete_dataset:\n", - " if dataset_type == \"tabular\":\n", - " datasets = aip.TabularDataset.list(\n", - " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", - " )\n", - " if datasets:\n", - " dataset = datasets[0]\n", - " dataset.delete()\n", - " print(\"Deleted dataset:\", dataset)\n", - "\n", - " if dataset_type == \"image\":\n", - " datasets = aip.ImageDataset.list(\n", - " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", - " )\n", - " if datasets:\n", - " dataset = datasets[0]\n", - " dataset.delete()\n", - " print(\"Deleted dataset:\", dataset)\n", - "\n", - " if dataset_type == \"text\":\n", - " datasets = aip.TextDataset.list(\n", - " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", - " )\n", - " if datasets:\n", - " dataset = datasets[0]\n", - " dataset.delete()\n", - " print(\"Deleted dataset:\", dataset)\n", - "\n", - " if dataset_type == \"video\":\n", - " datasets = aip.VideoDataset.list(\n", - " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", - " )\n", - " if datasets:\n", - " dataset = datasets[0]\n", - " dataset.delete()\n", - " print(\"Deleted dataset:\", dataset)\n", - "\n", - "if delete_training_pipeline:\n", - " job.delete()\n", - "\n", - "if delete_batchpredict_job:\n", - " batch_prediction_job.delete()\n", - "\n", - "if delete_evaluation_pipeline:\n", - " evaluation_job.delete()\n", - "\n", - "\n", - "if delete_bucket and os.getenv(\"IS_TESTING\"):\n", - " ! gsutil rm -r $BUCKET_URI" - ] - } - ], - "metadata": { - "colab": { - "name": "automl_text_classification_model_evaluation.ipynb", - "toc_visible": true - }, - "environment": { - "kernel": "python3", - "name": "common-cpu.m95", - "type": "gcloud", - "uri": "gcr.io/deeplearning-platform-release/base-cpu:m95" - }, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic" + }, + "source": [ + "# Vertex AI Pipelines: AutoML text classification pipelines using google-cloud-pipeline-components\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:pipelines,automl" + }, + "source": [ + "## Overview\n", + "\n", + "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate an AutoML text classification model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. \n", + "\n", + "Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction) and [AutoML Text](https://cloud.google.com/vertex-ai/docs/text-data/classification/prepare-data)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:pipelines,automl" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` text classification model.\n", + "\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- Vertex AI `Datasets`\n", + "- Vertex AI `Training`(AutoML Tabular Classification) \n", + "- Vertex AI `Model Registry`\n", + "- Vertex AI `Pipelines`\n", + "- Vertex AI `Batch Predictions`\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a Vertex AI `Dataset`.\n", + "- Train a Automl Tabular Classification model on the `Dataset` resource.\n", + "- Import the trained `AutoML model resource` into the pipeline.\n", + "- Run a `Batch Prediction` job.\n", + "- Evaulate the AutoML model using the `Classification Evaluation Component`.\n", + "- Import the classification metrics to the AutoML model resource.\n", + "\n", + "The components are [documented here](https://google-cloud-pipeline-components.readthedocs.io/en/latest/google_cloud_pipeline_components.aiplatform.html#module-google_cloud_pipeline_components.aiplatform)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dd81fd5c3454" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the [Happy Moments dataset](https://www.kaggle.com/ritresearch/happydb) from [Kaggle Datasets](https://www.kaggle.com/ritresearch/happydb). The version of the dataset you will use in this tutorial is stored in a public Cloud Storage bucket." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "costs" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_local" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "If you are using Colab or Google Vertex AI Workbench Notebook, your environment already meets all the requirements to run this notebook. You can skip this step.\n", + "\n", + "Otherwise, make sure your environment meets this notebook's requirements. You need the following:\n", + "\n", + "- The Cloud Storage SDK\n", + "- Git\n", + "- Python 3\n", + "- virtualenv\n", + "- Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Cloud Storage guide to [Setting up a Python development environment](https://cloud.google.com/python/setup) and the [Jupyter installation guide](https://jupyter.org/install) provide detailed instructions for meeting these requirements. The following steps provide a condensed set of instructions:\n", + "\n", + "1. [Install and initialize the SDK](https://cloud.google.com/sdk/docs/).\n", + "\n", + "2. [Install Python 3](https://cloud.google.com/python/setup#installing_python).\n", + "\n", + "3. [Install virtualenv](Ihttps://cloud.google.com/python/setup#installing_and_using_virtualenv) and create a virtual environment that uses Python 3.\n", + "\n", + "4. Activate that environment and run `pip3 install Jupyter` in a terminal shell to install Jupyter.\n", + "\n", + "5. Run `jupyter notebook` on the command line in a terminal shell to launch Jupyter.\n", + "\n", + "6. Open this notebook in the Jupyter Notebook Dashboard.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "install_aip:mbsdk" + }, + "source": [ + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "install_aip:mbsdk" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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 \\\n", + " google-cloud-storage \\\n", + " kfp google-cloud-pipeline-components \\\n", + " ndjson {USER_FLAG} -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "check_versions" + }, + "source": [ + "Check the versions of the packages you installed. The KFP SDK version should be >=1.6." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "check_versions:kfp,gcpc" + }, + "outputs": [], + "source": [ + "! python3 -c \"import kfp; print('KFP SDK version: {}'.format(kfp.__version__))\"\n", + "! python3 -c \"import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "before_you_begin:nogpu" + }, + "source": [ + "## Before you begin\n", + "\n", + "### GPU runtime\n", + "\n", + "This tutorial does not require a GPU runtime.\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 Vertex AI APIs, Compute Engine APIs, and Cloud Storage.](https://console.cloud.google.com/flows/enableapi?apiid=ml.googleapis.com,compute_component,storage-component.googleapis.com)\n", + "\n", + "4. [The Google Cloud SDK](https://cloud.google.com/sdk) is already installed in Google Vertex AI Workbench Notebook.\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 `$`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "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": [ + "#### UUID\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 uuid for each instance session, and append the uuid onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "timestamp" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gcp_authenticate" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebook**, your environment is already authenticated.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gcp_authenticate" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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 AI 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "set_service_account" + }, + "source": [ + "#### Service Account\n", + "\n", + "**If you don't know your service account**, try to get your service account using `gcloud` command by executing the second cell below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_service_account" + }, + "outputs": [], + "source": [ + "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "autoset_service_account" + }, + "outputs": [], + "source": [ + "if (\n", + " SERVICE_ACCOUNT == \"\"\n", + " or SERVICE_ACCOUNT is None\n", + " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", + "):\n", + " # Get your service account from gcloud\n", + " if not IS_COLAB:\n", + " shell_output = !gcloud auth list 2>/dev/null\n", + " SERVICE_ACCOUNT = shell_output[2].replace(\"*\", \"\").strip()\n", + "\n", + " if IS_COLAB:\n", + " shell_output = ! gcloud projects describe $PROJECT_ID\n", + " project_number = shell_output[-1].split(\":\")[1].strip().replace(\"'\", \"\")\n", + " SERVICE_ACCOUNT = f\"{project_number}-compute@developer.gserviceaccount.com\"\n", + "\n", + " print(\"Service Account:\", SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "set_service_account:pipelines" + }, + "source": [ + "#### Set service account access for Vertex AI Pipelines\n", + "\n", + "Run the following commands to grant your service account access to read and write pipeline artifacts in the bucket that you created in the previous step -- you only need to run these once per service account." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_service_account:pipelines" + }, + "outputs": [], + "source": [ + "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator $BUCKET_URI\n", + "\n", + "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "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\n", + "import kfp\n", + "from google.cloud import aiplatform_v1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pipeline_constants" + }, + "source": [ + "#### Vertex AI Pipelines constants\n", + "\n", + "Setup up the following constants for Vertex AI Pipelines:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pipeline_constants" + }, + "outputs": [], + "source": [ + "PIPELINE_ROOT = \"{}/pipeline_root/happydb\".format(BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk" + }, + "source": [ + "## Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk" + }, + "outputs": [], + "source": [ + "aip.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "define_pipeline:gcpc,automl,happydb,tcn" + }, + "source": [ + "## Define AutoML text classification model pipeline that uses components from `google_cloud_pipeline_components`\n", + "\n", + "Next, you define the pipeline.\n", + "\n", + "Create and deploy an AutoML text classification `Model` resource using a `Dataset` resource." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "define_pipeline:gcpc,automl,happydb,tcn" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = \"gs://cloud-ml-data/NL-classification/happiness.csv\"\n", + "\n", + "\n", + "@kfp.dsl.pipeline(name=\"automl-text-classification\" + UUID)\n", + "def pipeline(\n", + " project: str = PROJECT_ID, region: str = REGION, import_file: str = IMPORT_FILE\n", + "):\n", + " from google_cloud_pipeline_components import aiplatform as gcc_aip\n", + " from google_cloud_pipeline_components.v1.endpoint import (EndpointCreateOp,\n", + " ModelDeployOp)\n", + "\n", + " dataset_create_task = gcc_aip.TextDatasetCreateOp(\n", + " display_name=\"train-automl-happydb\",\n", + " gcs_source=import_file,\n", + " import_schema_uri=aip.schema.dataset.ioformat.text.multi_label_classification,\n", + " project=project,\n", + " )\n", + "\n", + " training_run_task = gcc_aip.AutoMLTextTrainingJobRunOp(\n", + " dataset=dataset_create_task.outputs[\"dataset\"],\n", + " display_name=\"train-automl-happydb\",\n", + " prediction_type=\"classification\",\n", + " multi_label=True,\n", + " training_fraction_split=0.6,\n", + " validation_fraction_split=0.2,\n", + " test_fraction_split=0.2,\n", + " model_display_name=\"train-automl-happydb\",\n", + " project=project,\n", + " )\n", + "\n", + " endpoint_op = EndpointCreateOp(\n", + " project=project,\n", + " location=region,\n", + " display_name=\"train-automl-happydb\",\n", + " )\n", + "\n", + " _ = ModelDeployOp(\n", + " model=training_run_task.outputs[\"model\"],\n", + " endpoint=endpoint_op.outputs[\"endpoint\"],\n", + " automatic_resources_min_replica_count=1,\n", + " automatic_resources_max_replica_count=1,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "compile_pipeline" + }, + "source": [ + "## Compile the pipeline\n", + "\n", + "Next, compile the pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "compile_pipeline" + }, + "outputs": [], + "source": [ + "from kfp.v2 import compiler # noqa: F811\n", + "\n", + "compiler.Compiler().compile(\n", + " pipeline_func=pipeline,\n", + " package_path=\"text_classification_pipeline.json\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_pipeline:automl,text" + }, + "source": [ + "## Run the pipeline\n", + "\n", + "Next, run the pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_pipeline:automl,text" + }, + "outputs": [], + "source": [ + "DISPLAY_NAME = \"happydb_\" + UUID\n", + "\n", + "job = aip.PipelineJob(\n", + " display_name=DISPLAY_NAME,\n", + " template_path=\"text_classification_pipeline.json\",\n", + " pipeline_root=PIPELINE_ROOT,\n", + " enable_caching=False,\n", + ")\n", + "\n", + "job.run()\n", + "\n", + "! rm text_classification_pipeline.json" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "view_pipeline_run:automl,text" + }, + "source": [ + "Click on the generated link to see your run in the Cloud Console.\n", + "\n", + "In the UI, many of the pipeline DAG nodes will expand or collapse when you click on them. Here is a partially-expanded view of the DAG (click image to see larger version).\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9af2a70fc560" + }, + "outputs": [], + "source": [ + "model_display_name = \"train-automl-happydb \"\n", + "models = aip.Model.list(\n", + " filter=f\"display_name={model_display_name}\", order_by=\"create_time\"\n", + ")\n", + "if models:\n", + " model = models[0]\n", + "model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0a460b7aefc3" + }, + "outputs": [], + "source": [ + "# For existing model, use MODEL_ID to load the model.\n", + "# MODEL_ID = '3402729003222564864'\n", + "# model = aip.Model(model_name=MODEL_ID)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "679ded8b6097" + }, + "outputs": [], + "source": [ + "# Get evaluations\n", + "model_evaluations = model.list_model_evaluations()\n", + "\n", + "model_evaluation = list(model_evaluations)[0]\n", + "print(model_evaluation)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "92a590960332" + }, + "outputs": [], + "source": [ + "# Print the evaluation metrics\n", + "for evaluation in model_evaluations:\n", + " evaluation = evaluation.to_dict()\n", + " print(\"Model's evaluation metrics from Training:\\n\")\n", + " metrics = evaluation[\"metrics\"]\n", + " for metric in metrics.keys():\n", + " print(f\"metric: {metric}, value: {metrics[metric]}\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f54ab89a020c" + }, + "source": [ + "## Get batch predictions from your model\n", + "\n", + "You can get batch predictions from a text classification model without deploying it. You must first format all of your prediction instances (prediction input) in JSONL format and you must store the JSONL file in a Google Cloud Storage bucket. You must also provide a Google Cloud Storage bucket to hold your prediction output.\n", + "\n", + "To start, you must first create your predictions input file in JSONL format. Each line in the JSONL document needs to be formatted like so:\n", + "\n", + "```\n", + "{ \"content\": \"gs://sourcebucket/datasets/texts/source_text.txt\", \"mimeType\": \"text/plain\"}\n", + "```\n", + "\n", + "The `content` field in the JSON structure must be a Google Cloud Storage URI to another document that contains the text input for prediction.\n", + "[See the documentation for more information.](https://cloud.google.com/ai-platform-unified/docs/predictions/batch-predictions#text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f23865fbab9a" + }, + "outputs": [], + "source": [ + "instances = [\n", + " {\n", + " \"Text\": \"I went on a successful date with someone I felt sympathy and connection with.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\n", + " \"Text\": \"I was happy when my son got 90% marks in his examination\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\"Text\": \"I went to the gym this morning and did yoga.\", \"Labels\": \"exercise\"},\n", + " {\n", + " \"Text\": \"We had a serious talk with some friends of ours who have been flaky lately. They understood and we had a good evening hanging out.\",\n", + " \"Labels\": \"bonding\",\n", + " },\n", + " {\n", + " \"Text\": \"I went with grandchildren to butterfly display at Crohn Conservatory\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\"Text\": \"I meditated last night.\", \"Labels\": \"leisure\"},\n", + " {\n", + " \"Text\": \"I made a new recipe for peasant bread, and it came out spectacular!\",\n", + " \"Labels\": \"achievement\",\n", + " },\n", + " {\n", + " \"Text\": \"I got gift from my elder brother which was really surprising me\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\"Text\": \"YESTERDAY MY MOMS BIRTHDAY SO I ENJOYED\", \"Labels\": \"enjoy_the_moment\"},\n", + " {\n", + " \"Text\": \"Watching cupcake wars with my three teen children\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\"Text\": \"I came in 3rd place in my Call of Duty video game.\", \"Labels\": \"leisure\"},\n", + " {\n", + " \"Text\": \"I completed my 5 miles run without break. It makes me feel strong.\",\n", + " \"Labels\": \"exercise\",\n", + " },\n", + " {\"Text\": \"went to movies with my friends it was fun\", \"Labels\": \"bonding\"},\n", + " {\n", + " \"Text\": \"I was shorting Gold and made $200 from the trade.\",\n", + " \"Labels\": \"achievement\",\n", + " },\n", + " {\n", + " \"Text\": \"Hearing Songs It can be nearly impossible to go from angry to happy, so you're just looking for the thought that eases you out of your angry feeling and moves you in the direction of happiness. It may take a while, but as long as you're headed in a more positive direction youall be doing yourself a world of good.\",\n", + " \"Labels\": \"enjoy_the_moment\",\n", + " },\n", + " {\n", + " \"Text\": \"My son performed very well for a test preparation.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\"Text\": \"I helped my neighbour to fix their car damages.\", \"Labels\": \"bonding\"},\n", + " {\n", + " \"Text\": \"Managed to get the final trophy in a game I was playing.\",\n", + " \"Labels\": \"achievement\",\n", + " },\n", + " {\n", + " \"Text\": \"A hot kiss with my girl friend last night made my day\",\n", + " \"Labels\": \"bonding\",\n", + " },\n", + " {\n", + " \"Text\": \"My new BCAAs came in the mail. Yay! Strawberry Lemonade flavored aminos make my heart happy.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\"Text\": \"Got A in class.\", \"Labels\": \"achievement\"},\n", + " {\n", + " \"Text\": \"My sister called me from abroad this morning after some long years. Such a happy occassion for all family members.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\n", + " \"Text\": \"The cake I made today came out amazing. It tasted amazing as well.\",\n", + " \"Labels\": \"achievement\",\n", + " },\n", + " {\n", + " \"Text\": \"There are two types of people in the world: those who choose to be happy, and those who choose to be unhappy. Contrary to popular belief, happiness doesn't come from fame, fortune, other people, or material possessions\",\n", + " \"Labels\": \"enjoy_the_moment\",\n", + " },\n", + " {\n", + " \"Text\": \"My grandmother start to walk from the bed after a long time.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\"Text\": \"i was able to hit a top spin serve in tennis\", \"Labels\": \"achievement\"},\n", + " {\n", + " \"Text\": \"I napped with my husband on the bed this afternoon and it was sweet to cuddle so close to him.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\n", + " \"Text\": \"My co-woker started playing a Carley Rae Jepsen song from her phone while ringing out customers.\",\n", + " \"Labels\": \"leisure\",\n", + " },\n", + " {\n", + " \"Text\": \"My son woke me up to a fantastic breakfast of eggs, his special hamburger patty and pancakes.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + " {\n", + " \"Text\": \"After a long time my brother gave a suprise visit to my house yesterday.\",\n", + " \"Labels\": \"affection\",\n", + " },\n", + "]\n", + "\n", + "input_file_name = \"happiness-batch-prediction-input.jsonl\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d0156222582" + }, + "source": [ + "For batch prediction, you must supply the following:\n", + "\n", + "+ All of your prediction instances as individual files on Google Cloud Storage, as TXT files for your instances\n", + "+ A JSONL file that lists the URIs of all your prediction instances\n", + "+ A Cloud Storage bucket to hold the output from batch prediction\n", + "\n", + "For this tutorial, the following cells create a new Storage bucket, upload individual prediction instances as text files to the bucket, and then create the JSONL file with the URIs of your prediction instances." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aa27e20fc2ec" + }, + "outputs": [], + "source": [ + "# Instantiate the Storage client and create the new bucket\n", + "from google.cloud import storage\n", + "\n", + "storage_client = storage.Client()\n", + "bucket = storage_client.bucket(BUCKET_NAME)\n", + "# Iterate over the prediction instances, creating a new TXT file\n", + "# for each.\n", + "input_file_data = []\n", + "for count, instance in enumerate(instances):\n", + " print(instance)\n", + " instance_name = f\"input_{count}.txt\"\n", + " instance_file_uri = f\"{BUCKET_URI}/batch-prediction-input/{instance_name}\"\n", + " # Add the data to store in the JSONL input file.\n", + " tmp_data = {\"content\": instance_file_uri, \"mimeType\": \"text/plain\"}\n", + " input_file_data.append(tmp_data)\n", + "\n", + " # Create the new instance file\n", + " blob = bucket.blob(\"batch-prediction-input/\" + instance_name)\n", + " blob.upload_from_string(instance[\"Text\"])\n", + "\n", + "\n", + "input_str = \"\\n\".join([str(d) for d in input_file_data])\n", + "file_blob = bucket.blob(f\"{input_file_name}\")\n", + "file_blob.upload_from_string(input_str)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d330cc0a3582" + }, + "outputs": [], + "source": [ + "job_display_name = \"happiness-text-classification-batch-prediction-job\"\n", + "batch_prediction_job = model.batch_predict(\n", + " job_display_name=job_display_name,\n", + " gcs_source=f\"{BUCKET_URI}/{input_file_name}\",\n", + " gcs_destination_prefix=f\"{BUCKET_URI}/output\",\n", + " sync=True,\n", + ")\n", + "batch_prediction_job_name = batch_prediction_job.resource_name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b3ca5b6c88ef" + }, + "outputs": [], + "source": [ + "from google.cloud.aiplatform import jobs\n", + "\n", + "batch_job = jobs.BatchPredictionJob(batch_prediction_job_name)\n", + "print(f\"Batch prediction job state: {str(batch_job.state)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8ec70df091f1" + }, + "source": [ + "## Get predictions for batch prediction job\n", + "\n", + "Load the batch predictions from GCS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "82c88319987e" + }, + "outputs": [], + "source": [ + "import ndjson\n", + "\n", + "bp_iter_outputs = batch_job.iter_outputs()\n", + "\n", + "prediction_results = list()\n", + "for blob in bp_iter_outputs:\n", + " if blob.name.split(\"/\")[-1].startswith(\"prediction\"):\n", + " prediction_results.append(blob.name)\n", + "\n", + "for prediction_result in prediction_results:\n", + " gfile_name = f\"gs://{bp_iter_outputs.bucket.name}/{prediction_result}\".replace(\n", + " BUCKET_URI + \"/\", \"\"\n", + " )\n", + " data = bucket.get_blob(gfile_name).download_as_string()\n", + " data = ndjson.loads(data)\n", + " # print(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "10aefe12628a" + }, + "source": [ + "## Create input file with ground truth for evaluation \n", + "\n", + "Evaluation component needs ground truth to be part of the input file against which the predictions are evaluated" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8f51edb0d581" + }, + "outputs": [], + "source": [ + "input_file_name = \"happiness-batch-prediction-input-with-groundtruth.jsonl\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c6b057194bb4" + }, + "outputs": [], + "source": [ + "# Instantiate the Storage client and create the new bucket\n", + "from google.cloud import storage\n", + "\n", + "storage_client = storage.Client()\n", + "bucket = storage_client.bucket(BUCKET_NAME)\n", + "# Iterate over the prediction instances, creating a new TXT file\n", + "# for each.\n", + "input_file_data = []\n", + "for count, instance in enumerate(instances):\n", + " instance_name = f\"input_{count}.txt\"\n", + " instance_file_uri = (\n", + " f\"{BUCKET_URI}/evaluation-batch-prediction-input/{instance_name}\"\n", + " )\n", + " # Add the data to store in the JSONL input file.\n", + " # out_put variable in each json instance is needed to act as ground_truth for the evaluation task\n", + " tmp_data = {\n", + " \"content\": instance_file_uri,\n", + " \"mimeType\": \"text/plain\",\n", + " \"out_put\": instance[\"Labels\"],\n", + " }\n", + " input_file_data.append(tmp_data)\n", + "\n", + " # Create the new instance file\n", + " blob = bucket.blob(\"evaluation-batch-prediction-input/\" + instance_name)\n", + " blob.upload_from_string(instance[\"Text\"])\n", + "\n", + "import json\n", + "\n", + "input_str = json.dumps(input_file_data[0])\n", + "for i in input_file_data[1:]:\n", + " input_str = input_str + \"\\n\" + json.dumps(i)\n", + "# input_str = \"\\n\".join([str(d) for d in input_file_data])\n", + "file_blob = bucket.blob(f\"{input_file_name}\")\n", + "file_blob.upload_from_string(input_str)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "da26980e4892" + }, + "source": [ + "# Create pipeline for model evaluation\n", + "\n", + "Now, you run a Vertex AI BatchPrediction job and generate evaluations its results. \n", + "\n", + "To do so, you create a Vertex AI pipeline using the components available from the [`google-cloud-pipeline-components`](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.17/index.html) Python package." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "681c838a9e9a" + }, + "source": [ + "### Define the Pipeline\n", + "\n", + "While defining the flow of the pipeline, you get the model resource first. Then, you sample the provided source dataset for batch predictions and create a batch prediction. Once the batch prediction job is completed, you get the classification evaluation metrics.\n", + "\n", + "The pipeline uses the following components:\n", + "\n", + "- `GetVertexModelOp`: Gets a Vertex AI Model Artifact. \n", + "- `EvaluationDataSamplerOp`: Randomly downsamples an input dataset to a specified size for computing Vertex Explainable AI feature attributions for AutoML Tabular and custom models. Creates a Dataflow job with Apache Beam to downsample the dataset. \n", + "- `EvaluationDataSplitterOp`: Removes the Ground Truth columns from the input dataset for supporting unstructured AutoML models and custom models in Batch Prediction. Creates a Dataflow job with Apache Beam to remove the ground truth columns.\n", + "- `ModelBatchPredictOp`: Creates a Google Cloud Vertex BatchPredictionJob and waits for it to complete. \n", + "- `ModelEvaluationClassificationOp`: Compute evaluation metrics on a trained model’s batch prediction results. Creates a Dataflow job with Apache Beam and TFMA to compute evaluation metrics. Supports mutliclass classification evaluation for tabular, image, video, and text data. \n", + "- `ModelImportEvaluationOp`: Imports a model evaluation artifact to an existing Vertex model with ModelService.ImportModelEvaluation. \n", + "\n", + "Learn more about [Google Cloud Pipeline Model Evaluation components](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.20/google_cloud_pipeline_components.experimental.evaluation.html)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1eb4358fb33b" + }, + "outputs": [], + "source": [ + "@kfp.dsl.pipeline(name=\"automl-text-classification-evaluation\")\n", + "def evaluation_automl_text_classification_evaluation_pipeline(\n", + " project: str,\n", + " location: str,\n", + " root_dir: str,\n", + " model_name: str,\n", + " target_column_name: str,\n", + " key_columns: list,\n", + " ground_truth_gcs_uri: list,\n", + " batch_predict_gcs_source_uris: list,\n", + " batch_predict_instances_format: str,\n", + " batch_predict_predictions_format: str = \"jsonl\",\n", + " batch_predict_machine_type: str = \"n1-standard-4\",\n", + " batch_predict_starting_replica_count: int = 5,\n", + " batch_predict_max_replica_count: int = 10,\n", + " batch_predict_explanation_metadata: dict = {},\n", + " batch_predict_explanation_parameters: dict = {},\n", + " batch_predict_explanation_data_sample_size: int = 10000,\n", + " encryption_spec_key_name: str = \"\",\n", + "):\n", + "\n", + " from google_cloud_pipeline_components.aiplatform import ModelBatchPredictOp\n", + " from google_cloud_pipeline_components.experimental.evaluation import (\n", + " EvaluationDataSamplerOp, EvaluationDataSplitterOp, GetVertexModelOp,\n", + " ModelEvaluationClassificationOp, ModelImportEvaluationOp)\n", + "\n", + " # Get the Vertex AI model resource\n", + " get_model_task = GetVertexModelOp(model_resource_name=model_name)\n", + "\n", + " # Run Data-sampling task\n", + " data_sampler_task = EvaluationDataSamplerOp(\n", + " project=project,\n", + " location=location,\n", + " root_dir=root_dir,\n", + " gcs_source_uris=ground_truth_gcs_uri,\n", + " instances_format=batch_predict_instances_format,\n", + " sample_size=batch_predict_explanation_data_sample_size,\n", + " )\n", + "\n", + " # Run Data-splitter task\n", + " data_splitter_task = EvaluationDataSplitterOp(\n", + " project=project,\n", + " location=location,\n", + " root_dir=root_dir,\n", + " gcs_source_uris=data_sampler_task.outputs[\"gcs_output_directory\"],\n", + " instances_format=batch_predict_instances_format,\n", + " ground_truth_column=target_column_name,\n", + " )\n", + "\n", + " # Run Batch Explanations\n", + " batch_predict_task = ModelBatchPredictOp(\n", + " project=project,\n", + " location=location,\n", + " model=get_model_task.outputs[\"model\"],\n", + " job_display_name=\"model-registry-batch-predict-evaluation\",\n", + " gcs_source_uris=data_splitter_task.outputs[\"gcs_output_directory\"],\n", + " instances_format=batch_predict_instances_format,\n", + " predictions_format=batch_predict_predictions_format,\n", + " gcs_destination_output_uri_prefix=root_dir,\n", + " machine_type=batch_predict_machine_type,\n", + " starting_replica_count=batch_predict_starting_replica_count,\n", + " max_replica_count=batch_predict_max_replica_count,\n", + " encryption_spec_key_name=encryption_spec_key_name,\n", + " )\n", + "\n", + " # Run evaluation based on prediction type and feature attribution component.\n", + " # After, import the model evaluations to the Vertex model.\n", + " eval_task = ModelEvaluationClassificationOp(\n", + " project=project,\n", + " location=location,\n", + " root_dir=root_dir,\n", + " key_columns=key_columns,\n", + " ground_truth_column=target_column_name,\n", + " ground_truth_gcs_source=ground_truth_gcs_uri,\n", + " ground_truth_format=\"jsonl\",\n", + " predictions_gcs_source=batch_predict_task.outputs[\"gcs_output_directory\"],\n", + " predictions_format=batch_predict_predictions_format,\n", + " encryption_spec_key_name=encryption_spec_key_name,\n", + " )\n", + "\n", + " ModelImportEvaluationOp(\n", + " classification_metrics=eval_task.outputs[\"evaluation_metrics\"],\n", + " model=get_model_task.outputs[\"model\"],\n", + " dataset_type=batch_predict_instances_format,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "da6fe805d207" + }, + "source": [ + "### Compile the pipeline\n", + "\n", + "Next, compile the pipline to the `automl_text_classification_evaluation.json` file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a8623eccf059" + }, + "outputs": [], + "source": [ + "from kfp.v2 import compiler\n", + "\n", + "compiler.Compiler().compile(\n", + " pipeline_func=evaluation_automl_text_classification_evaluation_pipeline,\n", + " package_path=\"automl_text_classification_evaluation.json\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ce4da3e6d82b" + }, + "source": [ + "### Define the parameters to run the pipeline\n", + "\n", + "Specify the required parameters to run the pipeline.\n", + "\n", + "Set a display name for your pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "31f172dfb60b" + }, + "outputs": [], + "source": [ + "PIPELINE_DISPLAY_NAME = \"[your-pipeline-display-name]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "88386d636e0b" + }, + "outputs": [], + "source": [ + "# If no display name is set, use the default one\n", + "if (\n", + " PIPELINE_DISPLAY_NAME == \"[your-pipeline-display-name]\"\n", + " or PIPELINE_DISPLAY_NAME == \"\"\n", + " or PIPELINE_DISPLAY_NAME is None\n", + "):\n", + " PIPELINE_DISPLAY_NAME = \"happiness_\" + UUID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ba99dc63345d" + }, + "source": [ + "To pass the required arguments to the pipeline, you define the following paramters below:\n", + "\n", + "- `project`: Project ID.\n", + "- `location`: Region where the pipeline is run.\n", + "- `root_dir`: The GCS directory for keeping staging files and artifacts. A random subdirectory is created under the directory to keep job info for resuming the job in case of failure.\n", + "- `model_name`: Resource name of the trained AutoML Tabular Classification model.\n", + "- `target_column_name`: Name of the column to be used as the target for classification.\n", + "- `batch_predict_gcs_source_uris`: List of the Cloud Storage bucket uris of input instances for batch prediction.\n", + "- `batch_predict_instances_format`: Format of the input instances for batch prediction. Format used here is'**jsonl**'.\n", + "- `batch_predict_explanation_data_sample_size`: Size of the samples to be considered for batch prediction and evaluation.\n", + "- `ground_truth_gcs_uri`: Google Cloud Storage URI(-s) to your instances to run data splitter on. They must match instances_format.\n", + "- `key_columns` : The list of fields in the ground truth gcs source to format the joining key. Used to merge prediction instances with ground truth data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c7f9ac728635" + }, + "outputs": [], + "source": [ + "DATA_SOURCE = f\"{BUCKET_URI}/{input_file_name}\"\n", + "PIPELINE_ROOT = f\"{BUCKET_URI}/pipeline_root/happiness_{UUID}\"\n", + "parameters = {\n", + " \"project\": PROJECT_ID,\n", + " \"location\": REGION,\n", + " \"root_dir\": PIPELINE_ROOT,\n", + " \"model_name\": model.resource_name,\n", + " \"target_column_name\": \"out_put\",\n", + " \"batch_predict_gcs_source_uris\": [DATA_SOURCE],\n", + " \"batch_predict_instances_format\": \"jsonl\",\n", + " \"batch_predict_explanation_data_sample_size\": 10,\n", + " \"ground_truth_gcs_uri\": [DATA_SOURCE],\n", + " \"key_columns\": [\"content\", \"mimeType\"],\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9b6bf9409c51" + }, + "source": [ + "Create a Vertex AI pipeline job using the following parameters:\n", + "\n", + "- `display_name`: The name of the pipeline, this will show up in the Google Cloud console.\n", + "- `template_path`: The path of PipelineJob or PipelineSpec JSON or YAML file. It can be a local path, a Google Cloud Storage URI or an Artifact Registry URI.\n", + "- `parameter_values`: The mapping from runtime parameter names to its values that\n", + " control the pipeline run.\n", + "- `enable_caching`: Whether to turn on caching for the run.\n", + "\n", + "Learn more about [Class PipelineJob](https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform.PipelineJob).\n", + "\n", + "After creating, run the pipeline job using the configured `SERVICE_ACCOUNT`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8db9156f3050" + }, + "outputs": [], + "source": [ + "evaluation_job = aip.PipelineJob(\n", + " display_name=PIPELINE_DISPLAY_NAME,\n", + " template_path=\"automl_text_classification_evaluation.json\",\n", + " parameter_values=parameters,\n", + " enable_caching=False,\n", + ")\n", + "\n", + "evaluation_job.run(service_account=SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "570f69c35f3b" + }, + "source": [ + "# Model Evaluation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "40944be9d8e7" + }, + "source": [ + "In the results from last step, click on the generated link to see your run in the Cloud Console.\n", + "\n", + "In the UI, many of the pipeline directed acyclic graph (DAG) nodes expand or collapse when you click on them. Here is a partially-expanded view of the DAG (click image to see larger version).\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c9b563bdc3d5" + }, + "source": [ + "### Get the Model Evaluation Results\n", + "\n", + "After the evalution pipeline is finished, run the below cell to print the evaluation metrics." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f05de1ad1e67" + }, + "outputs": [], + "source": [ + "# Iterate over the pipeline tasks\n", + "for task in evaluation_job._gca_resource.job_detail.task_details:\n", + " # Obtain the artifacts from the evaluation task\n", + " if (\n", + " (\"model-evaluation\" in task.task_name)\n", + " and (\"model-evaluation-import\" not in task.task_name)\n", + " and (\n", + " task.state == aiplatform_v1.types.PipelineTaskDetail.State.SUCCEEDED\n", + " or task.state == aiplatform_v1.types.PipelineTaskDetail.State.SKIPPED\n", + " )\n", + " ):\n", + " evaluation_metrics = task.outputs.get(\"evaluation_metrics\").artifacts[\n", + " 0\n", + " ] # ['artifacts']\n", + " evaluation_metrics_gcs_uri = evaluation_metrics.uri\n", + "\n", + "print(evaluation_metrics)\n", + "print(evaluation_metrics_gcs_uri)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "34c1905f54e3" + }, + "source": [ + "### Visualize the metrics\n", + "\n", + "Visualize the available metrics like `auRoc` and `logLoss` using a bar-chart." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "274de9ff8dc5" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "metrics = []\n", + "values = []\n", + "for i in evaluation_metrics.metadata.items():\n", + " metrics.append(i[0])\n", + " values.append(i[1])\n", + "plt.figure(figsize=(15, 5))\n", + "plt.bar(x=metrics, height=values)\n", + "plt.title(\"Evaluation Metrics\")\n", + "plt.ylabel(\"Value\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "91082815d1b3" + }, + "source": [ + "# Get Model Evaluations from Model Registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8a35f4f09cc2" + }, + "outputs": [], + "source": [ + "for task in evaluation_job.task_details:\n", + " if \"model-evaluation-import\" in task.task_name:\n", + " val = json.loads(task.execution.metadata.get(\"output:gcp_resources\"))\n", + " model_evaluation = val[\"resources\"][0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "70aaaca32f36" + }, + "outputs": [], + "source": [ + "# Print the evaluation metrics\n", + "model_evaluation_id = model_evaluation[\"resourceUri\"].split(\"/\")[-1]\n", + "print(model_evaluation_id)\n", + "\n", + "evaluation = model.get_model_evaluation(evaluation_id=model_evaluation_id)\n", + "evaluation = evaluation.to_dict()\n", + "print(\"Model's evaluation metrics from Training:\\n\")\n", + "metrics = evaluation[\"metrics\"]\n", + "for metric in metrics.keys():\n", + " print(f\"metric: {metric}, value: {metrics[metric]}\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup:pipelines" + }, + "source": [ + "# Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial -- *Note:* this is auto-generated and not all resources may be applicable for this tutorial:\n", + "\n", + "\n", + "- Dataset\n", + "- Model\n", + "- AutoML Training Job\n", + "- Batch Job\n", + "- Evaluation Job\n", + "- Cloud Storage Bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "92e77f0a7931" + }, + "outputs": [], + "source": [ + "delete_dataset = True\n", + "delete_training_pipeline = True\n", + "delete_batchpredict_job = True\n", + "delete_evaluation_pipeline = True\n", + "delete_model = True\n", + "delete_endpoint = True\n", + "delete_bucket = False\n", + "\n", + "dataset_type = \"text\"\n", + "dataset_display_name = \"train-automl-happydb\"\n", + "model_display_name = \"train-automl-happydb\"\n", + "endpoint_display_name = \"train-automl-happydb\"\n", + "\n", + "\n", + "if delete_endpoint:\n", + " endpoints = aip.Endpoint.list(\n", + " filter=f\"display_name={endpoint_display_name}\", order_by=\"create_time\"\n", + " )\n", + " if endpoints:\n", + " endpoint = endpoints[0]\n", + " endpoint.undeploy_all()\n", + " endpoint.delete()\n", + " print(\"Deleted endpoint:\", endpoint)\n", + "\n", + "if delete_model:\n", + " models = aip.Model.list(\n", + " filter=f\"display_name={model_display_name}\", order_by=\"create_time\"\n", + " )\n", + " if models:\n", + " model = models[0]\n", + " model.delete()\n", + " print(\"Deleted model:\", model)\n", + "\n", + "if delete_dataset:\n", + " if dataset_type == \"tabular\":\n", + " datasets = aip.TabularDataset.list(\n", + " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", + " )\n", + " if datasets:\n", + " dataset = datasets[0]\n", + " dataset.delete()\n", + " print(\"Deleted dataset:\", dataset)\n", + "\n", + " if dataset_type == \"image\":\n", + " datasets = aip.ImageDataset.list(\n", + " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", + " )\n", + " if datasets:\n", + " dataset = datasets[0]\n", + " dataset.delete()\n", + " print(\"Deleted dataset:\", dataset)\n", + "\n", + " if dataset_type == \"text\":\n", + " datasets = aip.TextDataset.list(\n", + " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", + " )\n", + " if datasets:\n", + " dataset = datasets[0]\n", + " dataset.delete()\n", + " print(\"Deleted dataset:\", dataset)\n", + "\n", + " if dataset_type == \"video\":\n", + " datasets = aip.VideoDataset.list(\n", + " filter=f\"display_name={dataset_display_name}\", order_by=\"create_time\"\n", + " )\n", + " if datasets:\n", + " dataset = datasets[0]\n", + " dataset.delete()\n", + " print(\"Deleted dataset:\", dataset)\n", + "\n", + "if delete_training_pipeline:\n", + " job.delete()\n", + "\n", + "if delete_batchpredict_job:\n", + " batch_prediction_job.delete()\n", + "\n", + "if delete_evaluation_pipeline:\n", + " evaluation_job.delete()\n", + "\n", + "\n", + "if delete_bucket and os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "automl_text_classification_model_evaluation.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/notebooks/official/model_evaluation/automl_video_classification_model_evaluation.ipynb b/notebooks/official/model_evaluation/automl_video_classification_model_evaluation.ipynb index bf0549f51..1048e6252 100644 --- a/notebooks/official/model_evaluation/automl_video_classification_model_evaluation.ipynb +++ b/notebooks/official/model_evaluation/automl_video_classification_model_evaluation.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate an AutoML video classification model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. " + "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate an AutoML video classification model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. \n", + "\n", + "Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction) and [AutoML Video](https://cloud.google.com/vertex-ai/docs/video-data/classification/prepare-data)." ] }, { @@ -202,7 +204,7 @@ "\n", "! pip3 install --upgrade google-cloud-aiplatform \\\n", " kfp \\\n", - " google-cloud-pipeline-components \\\n", + " google-cloud-pipeline-components==1.0.26 \\\n", " google-cloud-storage {USER_FLAG} -q" ] }, @@ -752,9 +754,9 @@ "\n", "- `display_name`: The human readable name for the `TrainingJob` resource.\n", "- `prediction_type`: The type task to train the model for.\n", - "- `classification`: A video classification model.\n", - "- `object_tracking`: A video object tracking model.\n", - "- `action_recognition`: A video action recognition model.\n" + " - `classification`: A video classification model.\n", + " - `object_tracking`: A video object tracking model.\n", + " - `action_recognition`: A video action recognition model.\n" ] }, { @@ -1013,12 +1015,13 @@ "\n", "- `GetVertexModelOp`: Gets a Vertex AI Model Artifact. \n", "- `EvaluationDataSamplerOp`: Randomly downsamples an input dataset to a specified size for generating predictions from AutoML and custom models. Creates a Dataflow job with Apache Beam to downsample the dataset. \n", + "- `TargetFieldDataRemoverOp`: Removes the target field from the input dataset.\n", "- `ModelBatchPredictOp`: Creates a Google Cloud Vertex BatchPredictionJob and waits for it to complete. \n", "- `ModelEvaluationClassificationOp`: Compute evaluation metrics on a trained model’s batch prediction results. Creates a Dataflow job with Apache Beam and TFMA to compute evaluation metrics. Supports mutliclass classification evaluation for image, video, and text data. \n", "\n", "- `ModelImportEvaluationOp`: Imports a model evaluation artifact to an existing Vertex model with ModelService.ImportModelEvaluation. \n", "\n", - "Learn more about [Google Cloud Pipeline Model Evaluation components](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.20/google_cloud_pipeline_components.experimental.evaluation.html)." + "Learn more about [Google Cloud Pipeline Model Evaluation components](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.26/google_cloud_pipeline_components.experimental.evaluation.html)." ] }, { @@ -1036,9 +1039,9 @@ " root_dir: str,\n", " prediction_type: str,\n", " model_name: str,\n", - " target_column_name: str,\n", + " target_field_name: str,\n", " ground_truth_gcs_uri: list,\n", - " class_labels: list = \"{}\",\n", + " class_labels: list,\n", " batch_predict_instances_format: str = \"jsonl\",\n", " batch_predict_predictions_format: str = \"jsonl\",\n", " batch_predict_machine_type: str = \"n1-standard-16\",\n", @@ -1070,7 +1073,7 @@ " root_dir=root_dir,\n", " gcs_source_uris=data_sampler_task.outputs[\"gcs_output_directory\"],\n", " instances_format=batch_predict_instances_format,\n", - " target_field_name=target_column_name,\n", + " target_field_name=target_field_name,\n", " )\n", "\n", " # Run Batch Prediction.\n", @@ -1095,10 +1098,10 @@ " location=location,\n", " root_dir=root_dir,\n", " ground_truth_gcs_source=data_sampler_task.outputs[\"gcs_output_directory\"],\n", - " target_field_name=target_column_name,\n", + " target_field_name=target_field_name,\n", " prediction_score_column=\"prediction.confidence\",\n", " prediction_label_column=\"prediction.displayName\",\n", - " class_labels=[\"brush_hair\", \"cartwheel\"],\n", + " class_labels=class_labels,\n", " ground_truth_format=batch_predict_instances_format,\n", " predictions_format=batch_predict_predictions_format,\n", " predictions_gcs_source=batch_predict_task.outputs[\"gcs_output_directory\"],\n", @@ -1152,7 +1155,7 @@ "- `location`: Region where the pipeline is run.\n", "- `root_dir`: The GCS directory for keeping staging files and artifacts. A random subdirectory is created under the directory to keep job info for resuming the job in case of failure.\n", "- `model_name`: Resource name of the trained AutoML Video Classification model.\n", - "- `target_column_name`: Name of the column to be used as the target for classification.\n", + "- `target_field_name`: Name of the column to be used as the target for classification.\n", "- `batch_predict_instances_format`: Format of the input instances for batch prediction. Can be '**jsonl**' or '**bigquery**' or '**csv**'.\n", "- `batch_predict_sample_size`: Size of the samples to be considered for batch prediction and evaluation." ] @@ -1168,14 +1171,16 @@ "LABEL_COLUMN = \"outputLabel\"\n", "PIPELINE_ROOT = f\"{BUCKET_URI}/pipeline_root/pen{UUID}\"\n", "SAMPLE_SIZE = 2\n", + "CLASS_LABELS = [\"brush_hair\", \"cartwheel\"]\n", "parameters = {\n", " \"project\": PROJECT_ID,\n", " \"location\": REGION,\n", " \"root_dir\": PIPELINE_ROOT,\n", " \"prediction_type\": \"segment-classification\",\n", " \"model_name\": MODEL_RSC_NAME,\n", - " \"target_column_name\": LABEL_COLUMN,\n", + " \"target_field_name\": LABEL_COLUMN,\n", " \"ground_truth_gcs_uri\": [gcs_ground_truth_uri],\n", + " \"class_labels\": CLASS_LABELS,\n", " \"batch_predict_instances_format\": \"jsonl\",\n", " \"batch_predict_sample_size\": SAMPLE_SIZE,\n", "}" diff --git a/notebooks/official/model_evaluation/custom_tabular_classification_model_evaluation.ipynb b/notebooks/official/model_evaluation/custom_tabular_classification_model_evaluation.ipynb index 43e559fcb..2355cf5ae 100644 --- a/notebooks/official/model_evaluation/custom_tabular_classification_model_evaluation.ipynb +++ b/notebooks/official/model_evaluation/custom_tabular_classification_model_evaluation.ipynb @@ -45,7 +45,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate a custom-trained tabular classification model saved in Vertex AI Model Registry. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. " + "This notebook demonstrates how to use the Vertex AI classification model evaluation component to evaluate a custom-trained tabular classification model saved in Vertex AI Model Registry. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. \n", + "\n", + "Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { @@ -150,7 +152,7 @@ "source": [ "# Install the latest versions of the following packages\n", "! pip3 install --upgrade google-cloud-aiplatform \\\n", - " google-cloud-pipeline-components \\\n", + " google-cloud-pipeline-components==1.0.26 \\\n", " matplotlib \\\n", " pyarrow -q\n", "# Install the specified versions of the following packages\n", @@ -666,7 +668,7 @@ "source": [ "# Create a bigquery dataset\n", "bq_dataset = bigquery.Dataset(f\"{PROJECT_ID}.{PREDICTION_INPUT_DATASET_ID}\")\n", - "bq_dataset = bq_client.create_dataset(bq_dataset)\n", + "bq_dataset = bq_client.create_dataset(bq_dataset, exists_ok=True)\n", "print(f\"Created dataset {bq_client.project}.{bq_dataset.dataset_id}\")" ] }, @@ -1163,7 +1165,7 @@ " location: str,\n", " root_dir: str,\n", " model_name: str,\n", - " target_column_name: str,\n", + " target_field_name: str,\n", " bigquery_source_input_uri: str,\n", " bigquery_destination_output_uri: str,\n", " batch_predict_instances_format: str,\n", @@ -1203,7 +1205,7 @@ " root_dir=root_dir,\n", " bigquery_source_uri=data_sampler_task.outputs[\"bigquery_output_table\"],\n", " instances_format=batch_predict_instances_format,\n", - " target_field_name=target_column_name,\n", + " target_field_name=target_field_name,\n", " )\n", "\n", " # Run the batch prediction task\n", @@ -1229,7 +1231,7 @@ " class_labels=evaluation_class_names,\n", " prediction_label_column=evaluation_prediction_label_column,\n", " prediction_score_column=evaluation_prediction_score_column,\n", - " target_field_name=target_column_name,\n", + " target_field_name=target_field_name,\n", " ground_truth_format=batch_predict_instances_format,\n", " ground_truth_bigquery_source=data_sampler_task.outputs[\"bigquery_output_table\"],\n", " predictions_format=batch_predict_predictions_format,\n", @@ -1283,7 +1285,7 @@ "- `location`: Region where the pipeline needs to be run. If not set, the pipeline defaults to the region that Vertex AI SDK is configured with.\n", "- `root_dir`: The Cloud Storage directory for keeping the staged files and artifacts. A random subdirectory is created under the directory to keep the job information for resuming the job in case of a failure.\n", "- `model_name`: Resource name of the trained custom tabular classification model.\n", - "- `target_column_name`: Name of the column to be used as the ground truth for evaluation.\n", + "- `target_field_name`: Name of the column to be used as the ground truth for evaluation.\n", "- `bigquery_source_input_uri`: BigQuery table URI where the test input is stored.\n", "- `bigquery_destination_output_uri`: BigQuery dataset URI for exporting predictions on the test set.\n", "- `batch_predict_instances_format`: Format of the input for batch prediction and evaluation.\n", @@ -1305,7 +1307,7 @@ " \"location\": REGION,\n", " \"root_dir\": PIPELINE_ROOT,\n", " \"model_name\": aip_model.resource_name,\n", - " \"target_column_name\": TARGET,\n", + " \"target_field_name\": TARGET,\n", " \"bigquery_source_input_uri\": f\"bq://{PROJECT_ID}.{table_ref.dataset_id}.{table_ref.table_id}\",\n", " \"bigquery_destination_output_uri\": f\"bq://{PROJECT_ID}.{table_ref.dataset_id}\",\n", " \"batch_predict_instances_format\": \"bigquery\",\n", diff --git a/notebooks/official/model_evaluation/custom_tabular_regression_model_evaluation.ipynb b/notebooks/official/model_evaluation/custom_tabular_regression_model_evaluation.ipynb index 47d043a04..539337d23 100644 --- a/notebooks/official/model_evaluation/custom_tabular_regression_model_evaluation.ipynb +++ b/notebooks/official/model_evaluation/custom_tabular_regression_model_evaluation.ipynb @@ -29,7 +29,7 @@ "id": "title" }, "source": [ - "# Vertex AI Pipelines: Evaluating batch prediction results from Custom Tabular regression model\n", + "# Vertex AI Pipelines: Evaluating batch prediction results from custom tabular regression model\n", "\n", "\n", "\n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates how to use the Vertex AI regression model evaluation component to evaluate a custom regression model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. " + "This notebook demonstrates how to use the Vertex AI regression model evaluation component to evaluate a custom regression model. Model evaluation helps you determine your model performance based on the evaluation metrics and improve the model if necessary. \n", + "\n", + "Learn more about [Vertex AI Model Evaluation](https://cloud.google.com/vertex-ai/docs/evaluation/introduction) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { @@ -194,7 +196,7 @@ " \n", "! pip3 install --upgrade --quiet {USER_FLAG} google-cloud-aiplatform \\\n", " tensorflow \\\n", - " google-cloud-pipeline-components \\\n", + " google-cloud-pipeline-components==1.0.26 \\\n", " kfp \\\n", " matplotlib \\\n", " google-cloud-storage " @@ -652,7 +654,7 @@ "\n", "Set the variables `TRAIN_GPU/TRAIN_NGPU` and `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Telsa K80 GPUs allocated to each VM, you would specify:\n", "\n", - " (aip.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + " (aip.gapic.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", "\n", "\n", "Otherwise specify `(None, None)` to use a container image to run on a CPU.\n", @@ -805,7 +807,7 @@ "\n", "Now you are ready to start creating your own custom model and training for Boston Housing. \n", "\n", - "[Learn more about custom model training on Vertex AI](https://cloud.google.com/vertex-ai/docs/training/custom-training)\n", + "Learn more about [custom model training on Vertex AI](https://cloud.google.com/vertex-ai/docs/training/custom-training)\n", "\n", "### Examine the training package\n", "\n", @@ -1247,7 +1249,7 @@ "\n", "\n", "\n", - "In the next code cell, define the parameters." + "In the next code cell, you define the parameters." ] }, { @@ -1276,7 +1278,7 @@ "id": "781989a46a3b" }, "source": [ - "In the next code cell, define the metadata" + "**In the next code cell, you define the metadata**" ] }, { @@ -1333,11 +1335,11 @@ "\n", "In the next cell, you write the contents of the instance_schema.yaml . You write the structure about the prediction instances you give to your batch prediction .\n", "\n", - "- Give the title and description.\n", - "- Give type of the input. In our case input to batch predictin is \n", + "- Specify the title and description.\n", + "- Specify type of the input. In your case input layer to batch prediction is \n", "**{\"dense_input\": [0.02715405449271202, 0.0, 0.027177177369594574, 0.0, 0.0010195195209234953, 0.009660660289227962, 0.1501501500606537, 0.0027548049110919237, 0.036036036908626556, 1.0, 0.03033033013343811, 0.04091591760516167, 0.043618619441986084]}**\n", "which is an object. Inside object, there are properties like dense_input.\n", - "- Give description about property\n", + "- Specify description about property\n", "- For each property, mention its type. \n", "- If type of the property is an array, mention the information about array items in `items` key.\n" ] @@ -1365,28 +1367,18 @@ " description: 'Input values to model'\n" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "ef75c6f86088" - }, - "source": [ - "#### Make prediction schema yaml file" - ] - }, { "cell_type": "markdown", "metadata": { "id": "53f324aaf19a" }, "source": [ + "#### Make prediction schema yaml file\n", + "\n", "In the next cell, you write the contents of the prediction_schema.yaml . You write the structure about the prediction output you get from your batch prediction job.\n", "\n", - "In your case, output from batch prediction job is \n", "\n", - "**{\"instance\": {\"dense_input\": [0.02715405449271202, 0.0, 0.027177177369594574, 0.0, 0.0010195195209234953, 0.009660660289227962, 0.1501501500606537, 0.0027548049110919237, 0.036036036908626556, 1.0, 0.03033033013343811, 0.04091591760516167, 0.043618619441986084]}, \"prediction\": [0.522156954]}**\n", - "\n", - "Prediction output of batch prediction job is **\"prediction\": [0.522156954]**, which is of type array." + "Output of batch prediction job is \"prediction\": [value], which is of type array." ] }, { @@ -1438,15 +1430,15 @@ "- `display_name`: The human readable name for the `Model` resource.\n", "- `artifact`: The Cloud Storage location of the trained model artifacts.\n", "- `serving_container_image_uri`: The serving container image.\n", - "- `instance_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single instance.\n", - "- `prediction_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single prediction produced by this model.\n", + "- `instance_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the format of a single instance.\n", + "- `prediction_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the format of a single prediction produced by this model.\n", "- `sync`: Whether to execute the upload asynchronously or synchronously.\n", "- `explanation_parameters`: Parameters to configure explaining for `Model`'s predictions.\n", "- `explanation_metadata`: Metadata describing the `Model`'s input and output for explanation.\n", "\n", "If the `upload()` method is run asynchronously, you can subsequently block until completion with the `wait()` method.\n", "\n", - "**Note:** If you want to configure explanations for the model, set `explanation_parameters`, `explanation_metadata` parameters. Else do not set them." + "**Note:** If you want to configure explanations for the model, set `explanation_parameters`, `explanation_metadata` parameters. Otherwise do not set them." ] }, { @@ -1528,7 +1520,7 @@ "\n", "- `serving_input`: The name of the input layer of the underlying model.\n", "- `content`: The feature values of the test item as a list.\n", - "- `ground_truth_column`: Give any name to this key. Use the same name in target_column_name in the below pipeline parameters.\n", + "- `ground_truth_column`: Give any name to this key. Use the same name in target_field_name in the below pipeline parameters.\n", "- `value`: Ground truth value of this instance.\n", "\n", " " @@ -1559,7 +1551,7 @@ "\n", "Now you create a pipeline for performing model evaluation.\n", "\n", - "### Create Pipeline for evaluations\n", + "### Create pipeline for evaluations\n", "\n", "Now, you run a Vertex AI BatchPrediction job and generate evaluations and feature-attributions on its results by creating a Vertex AI pipeline using the components available from the [google-cloud-pipeline-components](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.17/index.html) python package. \n", "\n", @@ -1610,14 +1602,14 @@ "\n", "- `GetVertexModelOp`: Gets a Vertex AI Model resource Artifact. \n", "- `EvaluationDataSamplerOp`: Randomly downsamples an input dataset to a specified size for computing Vertex Explainable AI feature attributions for AutoML Tabular and custom models. Creates a Dataflow job with Apache Beam to downsample the dataset. \n", - "- `EvaluationDataSplitterOp`: Removes the Ground Truth columns from the input dataset for supporting unstructured AutoML models and custom models in Batch Prediction. Creates a Dataflow job with Apache Beam to remove the ground truth columns. \n", + "- `TargetFieldDataRemoverOp`: Removes the Ground Truth columns from the input dataset for supporting unstructured AutoML models and custom models in Batch Prediction. Creates a Dataflow job with Apache Beam to remove the ground truth columns. \n", "- `ModelBatchPredictOp`: Creates a Google Cloud Vertex BatchPredictionJob and waits for it to complete. \n", "- `ModelEvaluationRegressionOp`: Compute evaluation metrics on a trained model’s batch prediction results. Creates a Dataflow job with Apache Beam and TFMA to compute evaluation metrics. Supports regression for tabular data.\n", "- `ModelEvaluationFeatureAttributionOp`: Compute feature attribution on a trained model’s batch explanation results. Creates a Dataflow job with Apache Beam and TFMA to compute feature attributions. \n", "- `ModelImportEvaluationOp`: Imports a model evaluation artifact to an existing Vertex AI Model resource with ModelService.ImportModelEvaluation. \n", "\n", "\n", - "Learn more about [Google Cloud Pipeline Model Evaluation components](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.20/google_cloud_pipeline_components.experimental.evaluation.html).\n", + "Learn more about [Google Cloud Pipeline Model Evaluation components](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.26/google_cloud_pipeline_components.experimental.evaluation.html).\n", "\n", "##### Example workflow\n", "\n", @@ -1631,17 +1623,17 @@ "\n", "{\"dense_input\": [0.004922522697597742, 0.0, 0.3608507513999939], \"MEDV\": 18.8}\n", "\n", - "2.If above output is give to data splitter with ground truth column as MEDV, then output is\n", + "2.If above output is give to target_field_data_remover with target_field_name as MEDV, then output is\n", "\n", "{\"dense_input\": [0.004922522697597742, 0.0, 0.3608507513999939]}\n", "\n", - "3.If output from data splitter is given as input to batch prediction, example output is\n", + "3.If output from target_field_data_remover is given as input to batch prediction, example output is\n", "\n", "{\"instance\": {\"dense_input\": [0.002855135127902031, 0.0, 0.1618601232767105]}, \"prediction\": [20.7158852], \"explanation\": {\"attributions\": [{\"outputName\": \"medv\", \"baselineOutputValue\": 6.1286516189575195, \"instanceOutputValue\": 20.715885162353516, \"outputIndex\": [0], \"featureAttributions\": {\"crim\": [-0.02773827149629295], \"zn\": [0.0], \"indus\": [-0.6544220782498746], \"chas\": [0.0], \"nox\": [1.5975404104438946], \"rm\": [12.334328035516096], \"age\": [1.9477325958880005], \"dis\": [-1.1212691238079533], \"rad\": [0.1904019388794652], \"tax\": [-1.0420063589728579], \"ptratio\": [0.6294915264341129], \"b\": [8.135296088546342], \"lstat\": [-7.403950636448881]}, \"approximationError\": 0.00012541217340836087}]}}\n", "\n", - "4.The output of the batch prediction is given as input for the `ModelEvaluationRegressionOp` component. For a custom model, the ground truth cannot be part of the batch prediction instance, so we provide the output of the data sampler with ground truths to `ModelEvaluationRegressionOp`'s `ground_truth_gcs_source` parameter.\n", + "4.The output of the batch prediction is given as input for the `ModelEvaluationRegressionOp` component. For a custom model, the ground truth cannot be part of the batch prediction instance, so you provide the output of the data sampler with ground truths to `ModelEvaluationRegressionOp`'s `ground_truth_gcs_source` parameter.\n", "\n", - "5.In `ModelImportEvaluationOp`, we import evaluation metrics and feature attributions to the model.\n" + "5.In `ModelImportEvaluationOp`, you import evaluation metrics and feature attributions to the model.\n" ] }, { @@ -1658,9 +1650,8 @@ " location: str,\n", " root_dir: str,\n", " model_name: str,\n", - " target_column_name: str,\n", + " target_field_name: str,\n", " batch_predict_gcs_source_uris: list,\n", - " key_columns: list,\n", " batch_predict_instances_format: str,\n", " batch_predict_sample_size: int,\n", " batch_predict_predictions_format: str = \"jsonl\",\n", @@ -1693,7 +1684,7 @@ " root_dir=root_dir,\n", " gcs_source_uris=data_sampler_task.outputs[\"gcs_output_directory\"],\n", " instances_format=batch_predict_instances_format,\n", - " target_field_name=target_column_name,\n", + " target_field_name=target_field_name,\n", " )\n", "\n", " # Run Batch Explanations\n", @@ -1722,7 +1713,7 @@ " ground_truth_gcs_source=data_sampler_task.outputs[\"gcs_output_directory\"],\n", " predictions_format=batch_predict_predictions_format,\n", " prediction_score_column=\"prediction\",\n", - " target_field_name=target_column_name,\n", + " target_field_name=target_field_name,\n", " )\n", "\n", " # Get Feature Attributions\n", @@ -1748,9 +1739,9 @@ "id": "RqcRr7USbseH" }, "source": [ - "##### Compile the pipeline\n", + "#### Compile the pipeline\n", "\n", - "Next, compile the pipline to the `tabular_regression_pipline.json` file." + "Compile the pipeline and save the compiled pipeline in the file tabular_regression_pipline.json" ] }, { @@ -1773,7 +1764,7 @@ "id": "zwrhHGm7bseH" }, "source": [ - "##### Define the parameters to run the pipeline\n", + "#### Define the parameters to run the pipeline\n", "\n", "Specify the required parameters to run the pipeline.\n", "\n", @@ -1782,13 +1773,12 @@ "\n", "- `project`: Project ID.\n", "- `location`: Region where the pipeline is run.\n", - "- `root_dir`: The GCS directory for keeping staging files and artifacts. A random subdirectory will be created under the directory to keep job info for resuming the job in case of failure.\n", + "- `root_dir`: The Cloud Storage directory for keeping staging files and artifacts. A random subdirectory will be created under the directory to keep job info for resuming the job in case of failure.\n", "- `model_name`: Resource name of the trained Custom Tabular Regression model.\n", - "- `target_column_name`: Name of the column to be used as the target for regression.\n", + "- `target_field_name`: Name of the column to be used as the target for regression.\n", "- `batch_predict_gcs_source_uris`: List of the Cloud Storage bucket uris of input instances for batch prediction.\n", "- `batch_predict_instances_format`: Format of the input instances for batch prediction. Can be \"jsonl\", \"csv\" or \"bigquery\".\n", - "- `batch_predict_explanation_data_sample_size`: Size of the samples to be considered for batch prediction and evaluation.\n", - "- `key_columns`: The list of fields in the ground truth gcs source to format the joining key. Used to merge prediction instances with ground truth data." + "- `batch_predict_explanation_data_sample_size`: Size of the samples to be considered for batch prediction and evaluation.\n" ] }, { @@ -1806,13 +1796,12 @@ " \"location\": REGION,\n", " \"root_dir\": PIPELINE_ROOT,\n", " \"model_name\": model.resource_name,\n", - " \"target_column_name\": \"MEDV\",\n", + " \"target_field_name\": \"MEDV\",\n", " \"batch_predict_gcs_source_uris\": [\n", " BUCKET_URI + \"/\" + \"test_file_with_ground_truth.jsonl\"\n", " ],\n", " \"batch_predict_instances_format\": \"jsonl\",\n", " \"batch_predict_sample_size\": batch_predict_sample_size,\n", - " \"key_columns\": [\"dense_input\"],\n", "}" ] }, @@ -1822,7 +1811,7 @@ "id": "zsd1Peh0bseI" }, "source": [ - "Next, you create the pipeline job, with the following parameters:\n", + "**Next, you create the pipeline job, with the following parameters:**\n", "\n", "- `display_name`: The user-defined name of this Pipeline.\n", "- `template_path`: The path of PipelineJob or PipelineSpec JSON or YAML file. It can be a local path, a Google Cloud Storage URI (e.g. \"gs://project.name\"), or an Artifact Registry URI (e.g. \"https://us-central1-kfp.pkg.dev/proj/repo/pack/latest\").\n", @@ -1873,7 +1862,7 @@ "\n", "\n", "\n", - "### Get the model evaluation results\n", + "## Get the model evaluation results\n", "\n", "After the evalution pipeline is finished, run the below cell to print the evaluation metrics." ] diff --git a/notebooks/official/model_monitoring/README.md b/notebooks/official/model_monitoring/README.md index b42349be5..4731b91a3 100644 --- a/notebooks/official/model_monitoring/README.md +++ b/notebooks/official/model_monitoring/README.md @@ -1,6 +1,145 @@ +[Vertex AI Batch Prediction with Model Monitoring](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/batch_prediction_model_monitoring.ipynb) + +``` +Learn to use the `Vertex AI Model Monitoring` service to detect drift and anomalies in batch prediction. + +The steps performed include: + +- Upload a pre-trained model as a Vertex AI Model resource. +- Generate batch prediction requests. +- Interpret the statistics, visualizations, other data reported by the model monitoring feature. + +``` + +   Learn more about [Vertex AI Model Monitoring for batch predictions](https://cloud.google.com/vertex-ai/docs/model-monitoring/model-monitoring-batch-predictions). + + +[Vertex AI Model Monitoring for AutoML tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl.ipynb) + +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for AutoML tabular models. + +The steps performed include: + +- Train an `AutoML` model. +- Deploy the `Model` resource to the `Endpoint` resource. +- Configure the `Endpoint` resource for model monitoring. +- Generate synthetic prediction requests for skew. +- Wait for email alert notification. +- Generate synthetic prediction requests for drift. +- Wait for email alert notification. + +``` + +   Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring). + + +[Vertex AI Model Monitoring for batch prediction in AutoML image models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl_image_batch.ipynb) + +``` +Learn how to use `Vertex AI Model Monitoring` with `Vertex AI Batch Prediction` with an AutoML image classification model to detect an out of distribution image. + +The steps performed include: + +1. Train an AutoML image classification model. +2. Submit a batch prediction containing both in and out of distribution images. +3. Use Model Monitoring to calculate anomaly score on each image. +4. Identify the images in the batch prediction request that are out of distribution. + +``` + +   Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring). + + +[Vertex AI Model Monitoring for custom tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom.ipynb) + +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models. + +The steps performed include: + +- Download a pre-trained custom tabular model. +- Upload the pre-trained model as a `Model` resource. +- Deploy the `Model` resource to the `Endpoint` resource. +- Configure the `Endpoint` resource for model monitoring. +- Generate synthetic prediction requests for skew. +- Wait for email alert notification. +- Generate synthetic prediction requests for drift. +- Wait for email alert notification. + +``` + +   Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring). + + +[Vertex AI Model Monitoring for custom tabular models with TensorFlow Serving container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom_tf_serving.ipynb) + +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models, using a custom deployment container. + +The steps performed include: + +- Download a pre-trained custom tabular model. +- Upload the pre-trained model as a `Model` resource. +- Deploying the `Model` resource to an `Endpoint` resource with `TensorFlow Serving` serving binary. +- Configure the `Endpoint` resource for model monitoring. +- Generate synthetic prediction requests for skew. +- Wait for email alert notification. +- Generate synthetic prediction requests for drift. +- Wait for email alert notification. + +``` + +   Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring). + + +[Vertex AI Model Monitoring for setup for tabular models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/get_started_with_model_monitoring_setup.ipynb) + +``` +Learn to setup the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests. + +The steps performed include: + +- Download a pre-trained custom tabular model. +- Upload the pre-trained model as a `Model` resource. +- Deploy the `Model` resource to the `Endpoint` resource. +- Configure the `Endpoint` resource for model monitoring. + - Skew and drift detection for feature inputs. + - Skew and drift detection for feature attributions. +- Automatic generation of the `input schema` by sending 1000 prediction request. +- List, pause, resume and delete monitoring jobs. +- Restart monitoring job with predefined `input schema`. +- View logged monitored data. + +``` + +   Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring). + + +[Vertex AI Model Monitoring for XGBoost models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/get_started_with_model_monitoring_xgboost.ipynb) + +``` +Learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests for XGBoost models. + +The steps performed include: + +- Download a pre-trained XGBoost model. +- Upload the pre-trained model as a `Model` resource. +- Deploy the `Model` resource to the `Endpoint` resource. +- Configure the `Endpoint` resource for model monitoring: + - drift detection only -- no access to training data. + - predefine the input schema to map feature alias names to the unnamed array input to the model. +- Generate synthetic prediction requests for drift. + +``` + +   Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring). + + [Vertex AI Model Monitoring with Explainable AI Feature Attributions](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_monitoring/model_monitoring.ipynb) +``` Learn to use the `Vertex AI Model Monitoring` service to detect drift and anomalies in prediction requests from a deployed `Vertex AI Model` resource. The steps performed include: @@ -12,3 +151,8 @@ The steps performed include: - Initialize the baseline distribution for model monitoring. - Generate synthetic prediction requests. - Understand how to interpret the statistics, visualizations, other data reported by the model monitoring feature. + +``` + +   Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring). + diff --git a/notebooks/community/model_monitoring/batch_prediction_model_monitoring.ipynb b/notebooks/official/model_monitoring/batch_prediction_model_monitoring.ipynb similarity index 95% rename from notebooks/community/model_monitoring/batch_prediction_model_monitoring.ipynb rename to notebooks/official/model_monitoring/batch_prediction_model_monitoring.ipynb index 57408a671..17567097e 100644 --- a/notebooks/community/model_monitoring/batch_prediction_model_monitoring.ipynb +++ b/notebooks/official/model_monitoring/batch_prediction_model_monitoring.ipynb @@ -35,18 +35,19 @@ "\n", "
\n", " \n", " \n", + " \n", "
\n", - " \n", - " \"Colab Open in Colab\n", + " \n", + " \"Colab Run in Colab\n", " \n", " \n", - " \n", + " \n", " \"GitHub\n", " View on GitHub\n", " \n", - " \n", - " \n", - " \"GoogleOpen in Workbench AI Notebook\n", + " \n", + "\n", + " \"VertexOpen in Vertex AI Workbench\n", " \n", "
" @@ -60,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "In this notebook, you will learn how to use Model Monitoring with batch prediction requests on a deployed Vertex AI Model resource. In a companion notebook, Vertex AI Model Monitoring with Explainable AI Feature Attributions, you can learn about how to apply model monitoring to streaming, real-time predictions." + "In this notebook, you will learn how to use Model Monitoring with batch prediction requests on a deployed Vertex AI Model resource. In a companion notebook, Vertex AI Model Monitoring with Explainable AI Feature Attributions, you can learn about how to apply model monitoring to streaming, real-time predictions.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring for batch predictions](https://cloud.google.com/vertex-ai/docs/model-monitoring/model-monitoring-batch-predictions)." ] }, { @@ -70,6 +73,8 @@ }, "source": [ "### Objective\n", + "In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect drift and anomalies in batch prediction.\n", + "\n", "This tutorial uses the following Google Cloud ML services:\n", "\n", "- Vertex AI Model Monitoring\n", @@ -80,8 +85,26 @@ "\n", "- Upload a pre-trained model as a Vertex AI Model resource.\n", "- Generate batch prediction requests.\n", - "- Interpret the statistics, visualizations, other data reported by the model monitoring feature.\n", + "- Interpret the statistics, visualizations, other data reported by the model monitoring feature." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "35b52a5fba4a" + }, + "source": [ + "### Model\n", "\n", + "This tutorial uses a pre-trained model, where the model artifacts are stored in a public Cloud Storage bucket. The model predicts for an online gaming site, the probability that a player may churn, i.e. stop being an active player." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5508f7979954" + }, + "source": [ "### Costs \n", "\n", "This tutorial uses billable components of Google Cloud:\n", @@ -173,9 +196,11 @@ " USER_FLAG = \"--user\"\n", "\n", "# Install Python package dependencies.\n", - "! pip3 install -q {USER_FLAG} tensorflow-data-validation \\\n", - " google-api-core \\\n", - " google-cloud-aiplatform" + "! pip3 install -q {USER_FLAG} google-cloud-aiplatform \\\n", + " tensorflow-data-validation \\\n", + " protobuf==3.20.3\n", + "\n", + "! pip3 install -q {USER_FLAG} cachetools==5.2.0" ] }, { @@ -883,6 +908,8 @@ }, "outputs": [], "source": [ + "import time\n", + "\n", "# If auto-testing, wait for request completion\n", "if os.getenv(\"IS_TESTING\"):\n", " time.sleep(1800)" diff --git a/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl.ipynb b/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl.ipynb new file mode 100644 index 000000000..146bbe4b8 --- /dev/null +++ b/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl.ipynb @@ -0,0 +1,1506 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# @title Copyright & License (click to expand)\n", + "# Copyright 2022 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": "fsv4jGuU89rX" + }, + "source": [ + "# Vertex AI Model Monitoring for AutoML tabular models\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lA32H1oKGgpf" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use Vertex AI Model Monitoring for AutoML tabular models.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b258970168ce" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for AutoML tabular models.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML`\n", + "- `Vertex AI Model Monitoring`\n", + "- `Vertex AI Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train an `AutoML` model.\n", + "- Deploy the `Model` resource to the `Endpoint` resource.\n", + "- Configure the `Endpoint` resource for model monitoring.\n", + "- Generate synthetic prediction requests for skew.\n", + "- Generate synthetic prediction requests for drift.\n", + "- Wait for email alert notification.\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6ad4aba1d241" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the GSOD dataset from [BigQuery public datasets](https://cloud.google.com/bigquery/public-data). In this notebook, you use only the fields year, month and day from the dataset to predict the value of mean daily temperature (mean_temp)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "t6Cd51FkG09E" + }, + "source": [ + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* BigQuery\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertext AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8yVpQt-JHKPF" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step.\n", + "\n", + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3848df1e5b0" + }, + "source": [ + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b24b232ee039" + }, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "\n", + "assert sys.version_info.major == 3, \"This notebook requires Python 3.\"\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install required packages.\n", + "! pip3 install {USER_FLAG} --quiet --upgrade google-cloud-aiplatform \\\n", + " google-cloud-bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the SDK, you need to restart the notebook kernel so it can find the packages. You can restart kernel from *Kernel -> Restart Kernel*, or running the following:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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", + "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. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\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": "09021c90b34c" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "You can also change the `REGION` variable, which is used for operations throughout the rest of this notebook. Below are regions supported for Vertex AI.\n", + "\n", + "- Americas: `us-central1`\n", + "- Europe: `europe-west4`\n", + "- Asia Pacific: `asia-east1`\n", + "\n", + "**For this notebook, we recommend that you leave the region set to the default value us-central1**.\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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nUjIaIu0Kb0-" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42c8a7c56abd" + }, + "source": [ + "#### User Email\n", + "\n", + "Set your user email address to receive monitoring alerts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce2589511bb6" + }, + "outputs": [], + "source": [ + "USER_EMAIL = \"[your-email-address]\" # @param {type:\"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " USER_EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench notebooks**, your environment is already\n", + "authenticated.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click **Create**. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sECqTau7Oh6M" + }, + "source": [ + "### Login to your Google Cloud account and enable AI services" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C6H1vZYjvT6w" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8RJ3_20etd31" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Import libraries " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "51010fc06d8c" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "from google.cloud import bigquery\n", + "from google.cloud.aiplatform import model_monitoring" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "### Create BigQuery client\n", + "\n", + "In this tutorial, you explore the monitoring data stored in BigQuery. You create a client interface, which you subsequently use to access the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b890e02cb4b0" + }, + "source": [ + "## Introduction to Vertex AI Model Monitoring\n", + "\n", + "Vertex AI Model Monitoring is supported for AutoML tabular models and custom tabular models. You can monitor for skew and drift detection of the features in the inbound prediction requests or skew and drift detection of the feature attributions (Explainable AI) in the outbound prediction response -- that is, the distribution of the attributions on how they contributed to the output (predictions).\n", + "\n", + "The following are the basic steps to enable model monitoring:\n", + "\n", + "1. Deploy a `Vertex AI` AutoML or custom tabular model to an `Vertex AI Endpoint`.\n", + "2. Configure a model monitoring specification.\n", + "3. Upload the model monitoring specification to the `Vertex AI Endpoint`.\n", + "4. Upload or automatic generation of the `input schema` for parsing.\n", + "5. For feature skew detection, upload the training data for automatic generation of the feature distribution.\n", + "6. For feature attributions, upload corresponding `Vertex AI Explainability` specification.\n", + "\n", + "Once configured, you can enable/disable monitoring, change alerts and update the model monitoring configuration. \n", + "\n", + "When model monitoring is enabled, the sampled incoming prediction requests are logged into a BigQuery table. The input feature values contained in the logged requests are then analyzed for skew or drift on an specified interval basis. You set a sampling rate to monitor a subset of the production inputs to a model, and the monitoring interval.\n", + "\n", + "The model monitoring service needs to know how to parse the feature values, which is referred to as the input schema. For AutoML tabular models, the input schema is automatically generated. For custom tabular models, the service attempts to automatically derive the input schema from the first 1000 prediction requests. Alternatively, one can upload the input schema.\n", + "\n", + "For skew detection, the monitoring service requires a baseline for the statistical distribution of values in the training data. For AutoML tabular models this is automatically derived. For custom tabular models, you upload the training data to the service, and have the service automatically derive the distribution.\n", + "\n", + "For feature attribution skew and drift detection, requires enabling your deployed model for `Vertex AI Explainability` for custom tabular models. For AutoML models, `Vertex AI Explainability` is automatically enabled.\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,bq" + }, + "source": [ + "#### Location of BigQuery training data.\n", + "\n", + "Now set the variable `IMPORT_FILE` to the location of the data table in BigQuery." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:gsod,bq,lrg" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = \"bq://bigquery-public-data.samples.gsod\"\n", + "BQ_TABLE = \"bigquery-public-data.samples.gsod\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "#### BigQuery input data\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `TabularDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `bq_source`: Import data items from a BigQuery table into the `Dataset` resource.\n", + "- `labels`: User defined metadata. In this example, you store the location of the Cloud Storage bucket containing the user defined data.\n", + "\n", + "Learn more about [TabularDataset from BigQuery table](https://cloud.google.com/vertex-ai/docs/datasets/create-dataset-api#aiplatform_create_dataset_tabular_bigquery_sample-python)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:tabular,bq,lrg" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.TabularDataset.create(\n", + " display_name=\"gsod_\" + UUID, bq_source=[IMPORT_FILE]\n", + ")\n", + "\n", + "label_column = \"mean_temp\"\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:tabular,lrg,transformations" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, you perform two steps: 1) create a training pipeline, and 2) run the pipeline.\n", + "\n", + "#### Create training pipeline\n", + "\n", + "An AutoML training pipeline is created with the `AutoMLTabularTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `optimization_prediction_type`: The type task to train the model for.\n", + " - `classification`: A tabuar classification model.\n", + " - `regression`: A tabular regression model.\n", + "- `column_transformations`: (Optional): Transformations to apply to the input columns. In this example, you set the column transformations to use the default transformation based on their data type.\n", + "- `optimization_objective`: The optimization objective to minimize or maximize.\n", + " - binary classification:\n", + " - `minimize-log-loss`\n", + " - `maximize-au-roc`\n", + " - `maximize-au-prc`\n", + " - `maximize-precision-at-recall`\n", + " - `maximize-recall-at-precision`\n", + " - multi-class classification:\n", + " - `minimize-log-loss`\n", + " - regression:\n", + " - `minimize-rmse`\n", + " - `minimize-mae`\n", + " - `minimize-rmsle`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_transformations:gsod" + }, + "outputs": [], + "source": [ + "TRANSFORMATIONS = [\n", + " {\"auto\": {\"column_name\": \"year\"}},\n", + " {\"auto\": {\"column_name\": \"month\"}},\n", + " {\"auto\": {\"column_name\": \"day\"}},\n", + "]\n", + "\n", + "label_column = \"mean_temp\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_automl_pipeline:tabular,lrg,transformations" + }, + "outputs": [], + "source": [ + "dag = aiplatform.AutoMLTabularTrainingJob(\n", + " display_name=\"gsod_\" + UUID,\n", + " optimization_prediction_type=\"regression\",\n", + " optimization_objective=\"minimize-rmse\",\n", + " column_transformations=TRANSFORMATIONS,\n", + ")\n", + "\n", + "print(dag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:tabular" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Next, you run the created DAG to start the training job by invoking the method `run`, with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "- `validation_fraction_split`: The percentage of the dataset to use for validation.\n", + "- `target_column`: The name of the column to train as the label.\n", + "- `budget_milli_node_hours`: (optional) Maximum training time specified in unit of millihours (1000 = hour).\n", + "- `disable_early_stopping`: If `True`, training maybe completed before using the entire budget if the service believes it cannot further improve on the model objective measurements.\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "The execution of the training pipeline may take upto > 30 minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_automl_pipeline:tabular" + }, + "outputs": [], + "source": [ + "model = dag.run(\n", + " dataset=dataset,\n", + " model_display_name=\"gsod_\" + UUID,\n", + " training_fraction_split=0.8,\n", + " validation_fraction_split=0.1,\n", + " test_fraction_split=0.1,\n", + " budget_milli_node_hours=8000,\n", + " disable_early_stopping=False,\n", + " target_column=label_column,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "deploy_model:mbsdk,dedicated" + }, + "source": [ + "## Deploy the model\n", + "\n", + "Next, deploy your model for online prediction. To deploy the model, you invoke the `deploy` method, with the following parameters:\n", + "\n", + "- `machine_type`: The type of compute machine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "deploy_model:mbsdk,dedicated" + }, + "outputs": [], + "source": [ + "endpoint = model.deploy(machine_type=\"n1-standard-4\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "87abd93294c4" + }, + "source": [ + "### Configure the alerting specification\n", + "\n", + "First, you configure the `alerting_config` specification with the following settings:\n", + "\n", + "- `user_emails`: A list of one or more email to send alerts to.\n", + "- `enable_logging`: Streams detected anomalies to Cloud Logging. Default is False." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "be6137df0086" + }, + "outputs": [], + "source": [ + "# Create alerting configuration.\n", + "alerting_config = model_monitoring.EmailAlertConfig(\n", + " user_emails=[USER_EMAIL], enable_logging=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "66c7283276bc" + }, + "source": [ + "### Configure the monitoring interval specification\n", + "\n", + "Next, you configure the `schedule_config` specification with the following settings:\n", + "\n", + "- `monitor_interval`: Sets the model monitoring job scheduling interval in hours. Minimum time interval is 1 hour." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1230b92d1eed" + }, + "outputs": [], + "source": [ + "# Monitoring Interval\n", + "MONITOR_INTERVAL = 1 # @param {type:\"number\"}\n", + "\n", + "# Create schedule configuration\n", + "schedule_config = model_monitoring.ScheduleConfig(monitor_interval=MONITOR_INTERVAL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3bd8dd304191" + }, + "source": [ + "### Configure the sampling specification\n", + "\n", + "Next, you configure the `logging_sampling_strategy` specification with the following settings:\n", + "\n", + "- `sample_rate`: The rate as a percentage (between 0 and 1) to randomly sample prediction requests for monitoring. Selected samples are logged to a BigQuery table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3688c245a0e9" + }, + "outputs": [], + "source": [ + "# Sampling rate (optional, default=.8)\n", + "SAMPLE_RATE = 0.5 # @param {type:\"number\"}\n", + "\n", + "# Create sampling configuration\n", + "logging_sampling_strategy = model_monitoring.RandomSampleConfig(sample_rate=SAMPLE_RATE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c1bc3bc8992f" + }, + "source": [ + "### Configure the drift detection specification\n", + "\n", + "Next, you configure the `drift_config` specification with the following settings:\n", + "\n", + "- `drift_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for drift. The value is the detection threshold. When not specified, the default drift threshold for a feature is 0.3 (30%).\n", + "\n", + "*Note:* Enabling drift detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "128bdc05cb5b" + }, + "outputs": [], + "source": [ + "DRIFT_THRESHOLD_VALUE = 0.05\n", + "\n", + "DRIFT_THRESHOLDS = {\"year\": DRIFT_THRESHOLD_VALUE, \"motnth\": DRIFT_THRESHOLD_VALUE}\n", + "\n", + "drift_config = model_monitoring.DriftDetectionConfig(drift_thresholds=DRIFT_THRESHOLDS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "651b576aa037" + }, + "source": [ + "### Configure the skew detection specification\n", + "\n", + "Next, you configure the `skew_config` specification with the following settings:\n", + "\n", + "- `data_source`: The source of the dataset of the original training data. The format of the source defaults to a BigQuery table. Otherwise the setting `data_format` must be set to one of the values below. The location of the data must be a Cloud Storage location.\n", + " - `csv`: \n", + " - `jsonl`:\n", + " - `tf-record`:\n", + "- `skew_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for skew. The value is the detection threshold. When not specified, the default skew threshold for a feature is 0.3 (30%).\n", + "- `target_field`: The target label for the training dataset\n", + "\n", + "*Note:* Enabling skew detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4cb098c74d2c" + }, + "outputs": [], + "source": [ + "# URI to training dataset.\n", + "DATASET_BQ_URI = \"bq://\" + BQ_TABLE\n", + "# Prediction target column name in training dataset.\n", + "TARGET = label_column\n", + "\n", + "SKEW_THRESHOLD_VALUE = 0.5\n", + "\n", + "SKEW_THRESHOLDS = {\n", + " \"year\": SKEW_THRESHOLD_VALUE,\n", + " \"month\": SKEW_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "skew_config = model_monitoring.SkewDetectionConfig(\n", + " data_source=DATASET_BQ_URI, skew_thresholds=SKEW_THRESHOLDS, target_field=TARGET\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8b6d5bd71ac9" + }, + "source": [ + "### Assemble the objective specification\n", + "\n", + "Finally, you assemble the objective specification `objective_config` with the following settings:\n", + "\n", + "- `skew_detection_config`: (Optional) The specification for the skew detection configuration.\n", + "- `drift_detection_config`: (Optional) The specification for the drift detection configuration.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d353205a8aec" + }, + "outputs": [], + "source": [ + "objective_config = model_monitoring.ObjectiveConfig(\n", + " skew_detection_config=skew_config,\n", + " drift_detection_config=drift_config,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8ac30ffa72b5" + }, + "source": [ + "### Create the input schema\n", + "\n", + "The monitoring service needs to know the features and data types for the the feature inputs to the model, which is referred to as the `input schema`. \n", + "\n", + "For `AutoML` models, the `input schema` is predefined and automatically loaded by the monitoring service." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "82c7e7af7163" + }, + "source": [ + "### Create the monitoring job\n", + "\n", + "You create a monitoring job, with your monitoring specifications, using the `aiplatform.ModelDeploymentMonitoringJob.create()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the monitoring job.\n", + "- `project`: The project ID.\n", + "- `region`: The region.\n", + "- `endpoint`: The fully qualified resource name of the `Vertex AI Endpoint` to enable monitoring.\n", + "- `logging_sampling_strategy`: The specification for the sampling configuration.\n", + "- `schedule_config`: The specification for the scheduling configuration.\n", + "- `alert_config`: The specification for the alerting configuration.\n", + "- `objective_configs`: The specification for the objectives configuration." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4b8dd381c5c3" + }, + "outputs": [], + "source": [ + "monitoring_job = aiplatform.ModelDeploymentMonitoringJob.create(\n", + " display_name=\"churn_\" + UUID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " endpoint=endpoint,\n", + " logging_sampling_strategy=logging_sampling_strategy,\n", + " schedule_config=schedule_config,\n", + " alert_config=alerting_config,\n", + " objective_configs=objective_config,\n", + ")\n", + "\n", + "print(monitoring_job)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3c6d3b620264" + }, + "source": [ + "#### Email notification of the monitoring job.\n", + "\n", + "An email notification is sent to the email address in the alerting configuration, notifying that the model monitoring job is now enabled.\n", + "\n", + "The contents will appear like:\n", + "\n", + "
\n", + "Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are using the Vertex AI Model Monitoring service.\n", + "This mail is to inform you that we received your request to set up drift or skew detection for the Prediction Endpoint listed below. Starting from now, incoming prediction requests will be sampled and logged for analysis.\n", + "Raw requests and responses will be collected from prediction service and saved in bq://[your-project-id].model_deployment_monitoring_[endpoint-id].serving_predict .\n", + "
\n", + "\n", + "*Note:* You do not need to wait for the email notification to continue to the next step." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dcc4aae9e20f" + }, + "source": [ + "#### Monitoring Job State\n", + "\n", + "After you start the `Vertex AI Model Monitoring` job, it will be in a `PENDING` state until `skew distribution baseline` is calculated. The monitoring service will initiate a batch job to generate the distribution baseline from the training data. \n", + "\n", + "Once the baseline distribution is generated, then the monitoring job will enter `OFFLINE` state. On the per interval basis -- e.g., once an hour, the monitoring job will enter `RUNNING` state while analyzing the sampled data. Once completed, it will return to an `OFFLINE` state while awaiting the next scheduled analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f640fb7f10cd" + }, + "outputs": [], + "source": [ + "jobs = monitoring_job.list(filter=f\"display_name=churn_{UUID}\")\n", + "job = jobs[0]\n", + "print(job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e385d103aba6" + }, + "source": [ + "### Automatic generation of the baseline distribution\n", + "\n", + "Next, the monitoring service creates a batch job to analyze the training data to generate the baseline distribution. Once completed, the monitoring service will starting monitoring on the specified interval." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "670b5bc98c2a" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Pause a bit for the baseline distribution to be calculated\n", + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(180)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "26bac245f6c5" + }, + "source": [ + "### Generate synthetic prediction requests for skew detection\n", + "\n", + "Next, you extract the first 1000 instances from the BigQuery training table to use for prediction requests. You modify the data (synthetic) to trigger the skew detection in the prediction requests from the training distribution versus serving distribution, as follows:\n", + "\n", + "- `year`: Set all values to 3." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "\n", + "rows = bqclient.list_rows(table, max_results=1000)\n", + "\n", + "instances = []\n", + "for row in rows:\n", + " instance = {}\n", + " for key, value in row.items():\n", + " if key == TARGET:\n", + " continue\n", + " if value is None:\n", + " value = \"\"\n", + " if key == \"year\":\n", + " value = \"3\"\n", + " instance[key] = str(value)\n", + " instances.append(instance)\n", + "\n", + "print(len(instances))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2b5859ea4ae9" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "Once the monitoring service has started, the sampled prediction requests will be logged to Cloud Storage. On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the first logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 500 entries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd177a8decbb" + }, + "outputs": [], + "source": [ + "while True:\n", + " time.sleep(180)\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 0:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aeaea3a7a194" + }, + "source": [ + "### Skew detection during monitoring\n", + "\n", + "The feature input skew detection will occur at the next monitoring interval. In this tutorial, you set the monitoring interval to one hour. So, in about an hour your monitoring job will go from `OFFLINE` to `RUNNING`. While running, it will analyze the logged sampled tables from the predictions during this interval and compare them to the baseline distribution.\n", + "\n", + "Once the analysis is completed, the monitoring job will send email notifications on the detected skew, in this case `year`, and the monitoring job will go into `OFFLINE` state until the next interval.\n", + "\n", + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert.\n", + "\n", + "The contents will appear like\n", + "\n", + "
\n", + " Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are subscribing to the Vertex AI Model Monitoring service.\n", + "This mail is just to inform you that there are some anomalies detected in your deployed models and may need your attention.\n", + "\n", + "\n", + "Basic Information:\n", + "\n", + "Endpoint Name: projects/[your-project-id]/locations/us-central1/endpoints/3315907167046860800\n", + "Monitoring Job: projects/[your-project-id]/locations/us-central1/modelDeploymentMonitoringJobs/8672170640054157312\n", + "Statistics and Anomalies Root Path(Google Cloud Storage): gs://cloud-ai-platform-773884b1-2a32-48d6-8b83-c03cde416b68/model_monitoring/job-8672170640054157312\n", + "BigQuery Command: SELECT * FROM `bq://[your-project-id].model_deployment_monitoring_3315907167046860800.serving_predict`\n", + "\n", + "\n", + "Training Prediction Skew Anomalies (Raw Feature):\n", + "\n", + "Anomalies Report Path(Google Cloud Storage): gs://cloud-ai-platform-773884b1-2a32-48d6-8b83-c03cde416b68/model_monitoring/job-8672170640054157312/serving/2022-08-25T00:00/stats_and_anomalies//anomalies/training_prediction_skew_anomalies\n", + "\n", + "For more information about the alert, please visit the model monitoring alert page.\n", + "\n", + "Deployed model id: \n", + "\n", + "Feature name\tAnomaly short description\tAnomaly long description\n", + "country\tHigh Linfty distance between training and serving\tThe Linfty distance between training and serving is 0.947563 (up to six significant digits), above the threshold 0.5. The feature value with maximum difference is: Year\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2e64ffaae2de" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 45)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "555642c341e1" + }, + "source": [ + "### Generate synthetic prediction requests for drift detection\n", + "\n", + "Next, you extract the same first 1000 instances from the BigQuery training table to use for prediction requests. You modify the data (synthetic) to trigger the drift detection in the prediction requests from the training distribution versus serving distribution, as follows:\n", + "\n", + "- `month`: set all values to 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "\n", + "rows = bqclient.list_rows(table, max_results=1000)\n", + "\n", + "instances = []\n", + "for row in rows:\n", + " instance = {}\n", + " for key, value in row.items():\n", + " if key == TARGET:\n", + " continue\n", + " if value is None:\n", + " value = \"\"\n", + " elif key == \"month\":\n", + " value = \"1\"\n", + " instance[key] = str(value)\n", + " instances.append(instance)\n", + "\n", + "print(len(instances))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5184c68e4c99" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the first logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 1500 entries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d9a2f9342b06" + }, + "outputs": [], + "source": [ + "while True:\n", + " time.sleep(180)\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 505:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "683ed0ba4ccd" + }, + "source": [ + "### Drift detection during monitoring\n", + "\n", + "The feature input drift detection will occur at the next monitoring interval. In this tutorial, you set the monitoring interval to one hour. So, in about an hour your monitoring job will go from `OFFLINE` to `RUNNING`. While running, it will analyze the logged sampled tables from the predictions during this interval and compare them to the previous monitoring interva distribution.\n", + "\n", + "Once the analysis is completed, the monitoring job will send email notifications on the detected drift, in this case `cnt_user_engagement`, and the monitoring job will go into `OFFLINE` state until the next interval.\n", + "\n", + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2e64ffaae2de" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 45)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "39cdad8fdcc5" + }, + "source": [ + "### Delete the monitoring job\n", + "\n", + "You can delete the monitoring job using the `delete()` method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ef1ddc1d6017" + }, + "outputs": [], + "source": [ + "monitoring_job.pause()\n", + "monitoring_job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c6280efab664" + }, + "source": [ + "#### Undeploy and delete the `Vertex AI Endpoint` resource\n", + "\n", + "Your `Vertex AI Endpoint` resource can be deleted using the `delete()` method. Prior to deleting, any model deployed to your `Vertex AI Endpoint` resource, must first be undeployed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ad0d28b762e5" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()\n", + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "18889460bd33" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c736a6bf1428" + }, + "outputs": [], + "source": [ + "! bq rm -f {PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "get_started_with_model_monitoring_automl.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl_image_batch.ipynb b/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl_image_batch.ipynb new file mode 100644 index 000000000..2e0d8aad7 --- /dev/null +++ b/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl_image_batch.ipynb @@ -0,0 +1,1331 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Vertex AI Model Monitoring for batch prediction in AutoML image models\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


\n", + "\n", + "**This feature is in private preview**. You can request access to model monitoring for AutoML image models with this [Form](https://docs.google.com/forms/d/1aTitFrlNRlUAF_gvbMFQWDY0Oq8T_fUrN1m79atF8xQ/edit?resourcekey=0-psKsTGtVUFFUBDL2timIQA)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use Vertex AI Model Monitoring for AutoML image models.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xxo0b4reEiVm" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `Vertex AI Model Monitoring` with `Vertex AI Batch Prediction` with an AutoML image classification model to detect an out of distribution image.\n", + "\n", + "\n", + "Due to lack of unlabeled samples, AutoML image classification model is prone to classifiy out of distribution image into one of the labeled class in training dataset thus making **False Positive** prediction. With `Vertex AI Model Monitoring` you can detect and identify prediction requests that contain out of distribution images.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML`\n", + "- `Vertex AI Batch Prediction`\n", + "- `Vertex AI Model Monitoring`\n", + "\n", + "The steps performed include:\n", + "\n", + "1. Train an AutoML image classification model.\n", + "2. Submit a batch prediction containing both in and out of distribution images.\n", + "3. Use Model Monitoring to calculate anomaly score on each image.\n", + "4. Identify the images in the batch prediction request that are out of distribution.\n", + "\n", + "### Term & Concept\n", + "\n", + "**Anomaly Score**:\n", + "1. Normalized distance to training dataset using properitary model, above 3 can be deemed as outlier. (__similair to z-score in statistics__)\n", + "\n", + "![image.png](data:image/png;base64,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FWYGbLn0tS+79fI7r1r7lpZL68ZuNh558YGfPv+D8rwSlnQuoz5sXX2NETNaYV/nm127dt13332PP/6467rzR33rrbd++MMf7u/vn+ntwIED//Ef//GLX/xi5qOWi2VZN91004c+9KFZJezdu5dk/PKXv2z5n/XmXe9610c+8pHFixfPfLp7924kPPTQQzMftVxIwy233PLBD35w6dKlLcfWDRK++tWvPvzwwy2XmTfUlttuuw0cFi1aNPPpyy+/TBoeeeSRefomJNx+++2koa+vb1YJIPnoo4/OfNRyicfjpOFDv/Gh7p7ulmPr5qWXXiIXjz32WMtl1pu77rrrox/9aEdHx8ynL774IhKoEjMftVySySRpuOeee3p6elqOrZsXXngBHH7961+3XGbe0HLf9773gWR7e/vMp88//zxpeOqpp2Y+armQhjvuuOP9739/d/csODz33HOkYX4JiUTizjvvpEZls9mW2NbNs9ueve+r9z3zzDMtl5k31Ki7776bNMyKJGFJw7PPPjszYMslk8mQBiS0tbW1HFs3Tz/9NBK2bdvWcpl5A5I0K650Oj3zKQiAJHjOfNRyIQ13vfeu9733fbOWxRNPPEEatm/f3vI/8wYkP/CBD4AklXPaU9oCEqjV1Ktpj6b+JA0g+d73vjefz091D++pz6RhfgkEJDjJSKVmIWwtmdPpYOvBtJtHX3rg589/v1IvzX8YEiTvkuVbgsjsvorVwq6j2188PF/55dLtm5Zv9TwvMkufHilWx3ceeX7n0fnKD2py8fLNfuBNy0L4s1gZfenw9l0D85VfLpXfsvpqP+LPlEDGiuXRl448t+fYfOXX3da3acUWn1zMBvB4ZQwJewdfmim/5dKe6d665urWz2k3hcrIi0e27RvcNc196s+efN9lK6/0/VlygTck7Diy7cDQnqlBpt335BdvXX01pRmNTCeaOI5XRl88tG3/8O5poab+7M73Xb76Gj+YJQ1IgFoh4dC8w4YlHcu3rJSymJUUIGHH4W3zDzx62/tJw9RUte79SDBaGtpx+Nmj8w4blnat2Lr6Wn+Og8DGSsPbDz0zWDjcEjvzZknniivXXjfTHRfAGZ8YeuHwtvmHLqThyrVvJsGz4kAuth96arg4MGsUoWN/95or17x5Vg9exB8tDb5w6JmBeXOxomctHHHW+gA4w4XB7Yee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GjZxY5ntiDltpDTG+ee5O9I0K3TN9NHcvC3OChnIELp49OTs4UOO2o8ajY8++uhf/PNHf/RH/+zV61fJqkZtsq8T0tATvN6uNzr0zLg1LSY458kKcRToF+qIOPzsnxchvKJWlpukznKpFPKjyei/9s2nH37YGgzH02Wtd1drj1IH+05JzQLJwODHjOYZKtSXgOjDLonSclI3EInoS4jctaJoxvrLy0jFL7FFHG+k0ifFB2dg53SbcWmqg1Gu605W87vJ5s2yOl61loeGFpf0ztpiYqYZBEcKljq9gpklZPWOut2orXDP9ME6MYaHlhjfLTGbgQDN9UJFpdulxQ9bjQf3d5PdSjpno9+v6riwXDVaK722aKoROqooRTcWXMBrnoDUERn5u59Wuo2rav2Fmcg04cAMKojGVxYOUWfkujjphpXmeWq9xbiuYdKhZVyQIewy8OWHoLDZYTWfKIw/TPD0NwoCdrXBsOYz/oD0EpGSUTNVk3580rw6b3T7y3sJJO8cP18C4P/f/aoFMLbT/TO7YPV7U/efDYFQxudQ+h1tfYbkhaWEIDFCR2J5pgXO5bgR0jzfa91/xVU34op00EOjJbyYygrmaXW76MyuydvcuR/aovwiwUvkJDrS7NZbpyftfq2Z8dM6WOzW8nH8CFkd6RtO5rp8BEl+W013i5E5WnuTWLX7jgC3wZDDpi4FeNFYjE/ag1qzd9I9PeldnHTPahpxo1+eH3pWeY53oPDmnYDOeQpSe+FytnJex38eLO+++GX/ug9EgozjzormXtQFV/TK5T27tmGTuXLy1d3tTkiruR+vX98tPp1WRqvTyg7ELq7UzRhTLoOwNximaZFwSFhDtIUjwPIEcZjFRfNWUckS+FekD87GV5No2YpvlOxbT14vR69362m93raau3a/flgowN6Ob+c67gnIScM100MUJQS7VqnaaQso19ezuQpGlUg6eh6mpthO3Ozq9evlJy9nr/hfX49nVMzD6sGAF7P98HH/8cPBxaXht93+UAQPk0okzj8xGUIhCmYMD68LnP6VNftCoPf1wemFUJng+N31G50Dzx88ahfXJmnuR+MLfvDB+SU4MZxkW1qDSmdA50qhj1xyGUdpJzrbiDux40kodwsn1is+LSVEaWpEJgbiERx+YjLxCBVSwU49S+afowqXS35RXGRlYloZrV7k0fFB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)\n", + "\n", + "## Main Function\n", + "\n", + "1. Produce an **Anomaly Score** for each prediction image.\n", + "2. Checkout nearst neighbor of prediction image in training dataset using the properiatery model.\n", + "3. Log prediction output and monitoring result into an unified BigQuery table.\n", + " 1. Have anomaly score and prediction result.\n", + " 2. Have batch/online information\n", + "\n", + "## Value & Usage\n", + "Model researchers:\n", + "1. Can query images by normalized anomaly score to re-label and retrain the model instead of randomly check every image.\n", + " 1. Use KNN to find out which training has shortest normalized distance to understand how anomaly score is derived.\n", + "2. Do joint analysis between custom trained classification model and Google's properiatery model. (e.g Query by high anomaly score and high confidence score to understand false positive predictions.)\n", + "\n", + "Model ops:\n", + "1. Setup custom alert by reading average anomaly score across time at BigQuery thus monitoring prediction data quality." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "999e464a72df" + }, + "source": [ + "### Dataset\n", + "\n", + "The image dataset used for this tutorial is the [Flowers dataset](https://www.tensorflow.org/datasets/catalog/tf_flowers) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview). The version of the dataset in this tutorial is stored in a public Cloud Storage bucket. The trained model predicts the type of flower in a given image from a class of five flowers: daisy, dandelion, rose, sunflower, or tulip." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81c777b8ad32" + }, + "source": [ + "### Costs\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), [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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the following packages for further running this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KhuBVKyoa4ib" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install the packages\n", + "! pip3 install {USER_FLAG} -q --upgrade google-cloud-aiplatform \\\n", + " google-cloud-storage \\\n", + " pandas-gbq\n", + "\n", + "! pip3 install {USER_FLAG} -q -U google-cloud-aiplatform \"shapely<2\" \\\n", + " tensorflow==2.7 \\\n", + " google-api-core==2.10" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "project_id" + }, + "source": [ + "## Before you begin\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", + "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, Compute Engine, Cloud Storage and Cloud Logging APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,storage_component,logging).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "project_id" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "region" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42c8a7c56abd" + }, + "source": [ + "#### User Email\n", + "\n", + "Set your user email address to receive monitoring alerts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce2589511bb6" + }, + "outputs": [], + "source": [ + "USER_EMAIL = \"[your-email-address]\" # @param {type:\"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " USER_EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "29b110b44457" + }, + "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", + "1. **Click Create service account**.\n", + "\n", + "2. In the **Service account name** field, enter a name, and click **Create**.\n", + "\n", + "3. 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", + "4. Click Create. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "5. Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "89788a802687" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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 AI 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Import libraries " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "51010fc06d8c" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,csv" + }, + "source": [ + "#### Location of Cloud Storage training data.\n", + "\n", + "Now set the variable `IMPORT_FILE` to the location of the CSV index file in Cloud Storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:flowers,csv,icn" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = (\n", + " \"gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "quick_peek:csv" + }, + "source": [ + "#### Quick peek at your data\n", + "\n", + "This tutorial uses a version of the Happy Moments dataset that is stored in a public Cloud Storage bucket, using a CSV index file.\n", + "\n", + "Start by doing a quick peek at the data. You count the number of examples by counting the number of rows in the CSV index file (`wc -l`) and then peek at the first few rows." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "quick_peek:csv" + }, + "outputs": [], + "source": [ + "FILE = IMPORT_FILE\n", + "\n", + "count = ! gsutil cat $FILE | wc -l\n", + "print(\"Number of Examples\", int(count[0]))\n", + "\n", + "print(\"First 10 rows\")\n", + "! gsutil cat $FILE | head" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:image,icn" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `ImageDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `gcs_source`: A list of one or more dataset index files to import the data items into the `Dataset` resource.\n", + "- `import_schema_uri`: The data labeling schema for the data items:\n", + " - `single_label`: Binary and multi-class classification\n", + " - `multi_label`: Multi-label multi-class classification\n", + " - `bounding_box`: Object detection\n", + " - `image_segmentation`: Segmentation\n", + "\n", + "Learn more about [ImageDataset](https://cloud.google.com/vertex-ai/docs/datasets/prepare-image)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_dataset:image,icn" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.ImageDataset.create(\n", + " display_name=\"flowers_\" + UUID,\n", + " gcs_source=[IMPORT_FILE],\n", + " import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,\n", + ")\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:image,edge,icn" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, you perform two steps: 1) create a training pipeline, and 2) run the pipeline.\n", + "\n", + "#### Create training pipeline\n", + "\n", + "An AutoML training pipeline is created with the `AutoMLImageTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `prediction_type`: The type task to train the model for.\n", + " - `classification`: An image classification model.\n", + " - `object_detection`: An image object detection model.\n", + "- `multi_label`: If a classification task, whether single (`False`) or multi-labeled (`True`).\n", + "- `model_type`: The type of model for deployment.\n", + " - `CLOUD`: Deployment on Google Cloud\n", + " - `CLOUD_HIGH_ACCURACY_1`: Optimized for accuracy over latency for deployment on Google Cloud.\n", + " - `CLOUD_LOW_LATENCY_`: Optimized for latency over accuracy for deployment on Google Cloud.\n", + " - `MOBILE_TF_VERSATILE_1`: Deployment on an edge device.\n", + " - `MOBILE_TF_HIGH_ACCURACY_1`:Optimized for accuracy over latency for deployment on an edge device.\n", + " - `MOBILE_TF_LOW_LATENCY_1`: Optimized for latency over accuracy for deployment on an edge device.\n", + "- `base_model`: (optional) Transfer learning from existing `Model` resource -- supported for image classification only.\n", + "\n", + "The instantiated object is the DAG (directed acyclic graph) for the training job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_automl_pipeline:image,edge,icn" + }, + "outputs": [], + "source": [ + "dag = aiplatform.AutoMLImageTrainingJob(\n", + " display_name=\"flowers_\" + UUID,\n", + " prediction_type=\"classification\",\n", + " multi_label=False,\n", + " model_type=\"CLOUD\",\n", + " base_model=None,\n", + ")\n", + "\n", + "print(dag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:image" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Next, you run the created DAG to start the training job by invoking the method `run`, with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "- `validation_fraction_split`: The percentage of the dataset to use for validation.\n", + "- `budget_milli_node_hours`: (optional) Maximum training time specified in unit of milli node-hours (1000 = node-hour).\n", + "- `disable_early_stopping`: If `True`, training maybe completed before using the entire budget if the service believes it cannot further improve on the model objective measurements.\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "The execution of the training pipeline will take upto 2 hrs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "run_automl_pipeline:image" + }, + "outputs": [], + "source": [ + "model = dag.run(\n", + " dataset=dataset,\n", + " model_display_name=\"flowers_\" + UUID,\n", + " training_fraction_split=0.8,\n", + " validation_fraction_split=0.1,\n", + " test_fraction_split=0.1,\n", + " budget_milli_node_hours=8000,\n", + " disable_early_stopping=False,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "11e16f54bc90" + }, + "source": [ + "## Introduction to Batch Prediction\n", + "\n", + "Batch prediction provides the ability to do offline batch processing of large amounts of prediction requests. Resources are only provisioned during the batch process and then deprovisioned when the batch request is completed. The results are stored in Cloud Storage, in contrast to online prediction where the results are returned as a HTTP response packet.\n", + "\n", + "The input format for your batch job is dependent on the format supported by your model server. Foremost, the web server in your model server must support a JSONL format, which the web server converts to a format support either directly by the model input intertace or a serving function interface. For batch prediction, this JSONL format is referred to as the `pivot` format.\n", + "\n", + "### Input format for batch prediction jobs\n", + "\n", + "\n", + "The batch server accepts the following input formats for AutoML image models:\n", + "\n", + "- JSONL\n", + "\n", + "### Output format for batch prediction jobs\n", + "\n", + "The batch server accepts the following output formats for AutoML image models:\n", + "\n", + "- JSONL" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "make_prediction" + }, + "source": [ + "## Send a batch prediction request\n", + "\n", + "Send a batch prediction to your deployed model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "get_test_items:batch_prediction" + }, + "source": [ + "### Make batch file\n", + "\n", + "#### Batch data assembly\n", + "\n", + "Next, you construct the batch request file. The prepared batch request file has a collection of flower images (in-distribution) and dog images (out-of-distribution).\n", + "\n", + "Each entry is in the form:\n", + "\n", + "```\n", + "{\"content\": cloud-samples-data/vertex-ai/model-monitoring/flowers_anomaly_dog/image_02300.jpg\", \"mimeType\": \"image/jpeg\"}\n", + "```\n", + "\n", + "Currently, the sampled batch data is stored in a public multi-region (e.g. US) bucket. For Vertex AI Batch Prediction, the data needs to be copied over to a single region bucket (e.g., us-central1).\n", + "\n", + "Next, you copy the data to your Cloud Storage bucket, and update the paths in the batch file accordingly.\n", + "\n", + "#### Batch file contents\n", + "\n", + "The batch file contains the following 10 images:\n", + "- 6 daisy flower images\n", + "- 2 passion flower images (out of distribution)\n", + "- 2 dog images (out of distribution)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "604a76a94bd9" + }, + "outputs": [], + "source": [ + "SAMPLE_BATCH_DATA = (\n", + " \"gs://cloud-samples-data/vertex-ai/model-monitoring/flowers_anomaly_dog/\"\n", + ")\n", + "USER_BATCH_DATA = BUCKET_URI + \"/batch_data/\"\n", + "! gsutil cp -r {SAMPLE_BATCH_DATA} {USER_BATCH_DATA}\n", + "\n", + "SAMPLE_BATCH_FILE = (\n", + " \"gs://cloud-samples-data/vertex-ai/model-monitoring/flowers_anomaly_dog/batch.jsonl\"\n", + ")\n", + "USER_BATCH_FILE = USER_BATCH_DATA + \"/flowers_anomaly_dog/batch.jsonl\"\n", + "! gsutil cp {SAMPLE_BATCH_FILE} tmp.jsonl\n", + "SCRIPT = f\"s#{SAMPLE_BATCH_DATA}#{USER_BATCH_DATA}flowers_anomaly_dog/#g\"\n", + "! sed $SCRIPT tmp.jsonl >batch.jsonl\n", + "! gsutil cp batch.jsonl {USER_BATCH_FILE}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "34c95126" + }, + "source": [ + "### Create batch prediction job\n", + "\n", + "This step parameterizes and builds the data structure representing the batch prediction request, with model monitoring enabled.\n", + "\n", + "The BatchPredictionJob object specifies the input source, the data format, and the computing resources requests for the batch prediction. Learn more about BatchPredictionJob.\n", + "\n", + "The ModelMonitoringConfig object specifies the alerting email address, the training dataset, the features to be monitored, and their associated alerting thresholds. Learn more about ModelMonitoringConfig." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3a54368a" + }, + "outputs": [], + "source": [ + "OUTPUT_URI = BUCKET_URI + \"/batch_results\"\n", + "MODEL_NAME = model.resource_name\n", + "\n", + "from google.cloud.aiplatform_v1beta1.types import (\n", + " BatchDedicatedResources, BatchPredictionJob, GcsDestination, GcsSource,\n", + " MachineSpec, ModelMonitoringAlertConfig, ModelMonitoringConfig,\n", + " ModelMonitoringObjectiveConfig, ThresholdConfig)\n", + "\n", + "batch_prediction_job = BatchPredictionJob(\n", + " display_name=\"flowers_\" + UUID,\n", + " model=MODEL_NAME,\n", + " input_config=BatchPredictionJob.InputConfig(\n", + " instances_format=\"jsonl\", gcs_source=GcsSource(uris=[USER_BATCH_FILE])\n", + " ),\n", + " output_config=BatchPredictionJob.OutputConfig(\n", + " predictions_format=\"jsonl\",\n", + " gcs_destination=GcsDestination(output_uri_prefix=OUTPUT_URI),\n", + " ),\n", + " dedicated_resources=BatchDedicatedResources(\n", + " machine_spec=MachineSpec(machine_type=\"n1-standard-8\"),\n", + " starting_replica_count=1,\n", + " max_replica_count=1,\n", + " ),\n", + " # Model monitoring service will be triggerred if provide following configs.\n", + " model_monitoring_config=ModelMonitoringConfig(\n", + " alert_config=ModelMonitoringAlertConfig(\n", + " email_alert_config=ModelMonitoringAlertConfig.EmailAlertConfig(\n", + " user_emails=[USER_EMAIL]\n", + " )\n", + " ),\n", + " objective_configs=[\n", + " ModelMonitoringObjectiveConfig(\n", + " training_prediction_skew_detection_config=ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig(\n", + " default_skew_threshold=ThresholdConfig(value=2),\n", + " )\n", + " )\n", + " ],\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cae39778" + }, + "source": [ + "### Submit batch prediction job\n", + "\n", + "This step submits the batch prediction request created in the previous step. If successful, it returns a JSON document summarizing the request, which is displayed in the cell output below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bcdd4a47" + }, + "outputs": [], + "source": [ + "from google.cloud.aiplatform_v1beta1.services.job_service import \\\n", + " JobServiceClient\n", + "\n", + "API_ENDPOINT = f\"{REGION}-aiplatform.googleapis.com\"\n", + "client = JobServiceClient(client_options={\"api_endpoint\": API_ENDPOINT})\n", + "out = client.create_batch_prediction_job(\n", + " parent=f\"projects/{PROJECT_ID}/locations/{REGION}\",\n", + " batch_prediction_job=batch_prediction_job,\n", + ")\n", + "BATCH_PREDICTION_JOB_ID = out.name.split(\"/\")[-1]\n", + "print(\"BATCH_PREDICTION_JOB_ID:\", BATCH_PREDICTION_JOB_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "49ec90a0" + }, + "source": [ + "## Wait for prediction results\n", + "\n", + "The batch prediction request will be completed after about **25 mins**, and the model monitoring result will be available **10 mins** after that. The request below obtains the batch prediction job id, which is a unique number associated with asynchronous requests like this one.\n", + "\n", + "*Note:* On the first monitoring trial, the wait time for the monitoring results to be available is approximately **30 mins**, in which a cached image index for the model is built." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c30496b5" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# If auto-testing, wait for request completion\n", + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 60)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ary8Dh7g3KMv" + }, + "source": [ + "## Check 1: Check Outliers From BigQuery\n", + "\n", + "First, you define some helper functions:\n", + "\n", + "- `get_batch_prediction_anomaly_scores`: Get anomaly scores per image for the batch prediction from the corresponding BigQuery anomaly score table.\n", + "- `plot_outlier_images`: Plot the top (greatest) outlier images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nHbEmRQM3P5R" + }, + "outputs": [], + "source": [ + "import matplotlib.image as mpimg\n", + "import matplotlib.pyplot as plt\n", + "import tensorflow as tf\n", + "\n", + "\n", + "def plot_outlier_images(data: pd.DataFrame, col_num: int = 4) -> None:\n", + " row_num = int((data.shape[0] - 1) / col_num) + 1\n", + " plot, axes = plt.subplots(row_num, col_num, figsize=(8 * col_num, 7 * row_num))\n", + " if row_num == 1:\n", + " axes = [axes]\n", + " print(row_num, col_num)\n", + " for idx, row in data.reset_index().iterrows():\n", + " ax = axes[int(idx / col_num)][int(idx % col_num)]\n", + " ax.imshow(mpimg.imread(tf.io.gfile.GFile(row[\"image_gcs_uri\"], \"rb\")))\n", + " ax.title.set_text(\n", + " \"{} \\n automl_prediciton: {}, automl condifence: {} \\n normalized anomaly score: {}, anomaly score: {}\".format(\n", + " row[\"image_id\"],\n", + " row[\"classification\"],\n", + " round(row[\"confidence_score\"], 2),\n", + " round(row[\"normalized_score\"], 2),\n", + " round(row[\"score\"], 2),\n", + " )\n", + " )\n", + "\n", + "\n", + "def get_batch_prediction_anomaly_scores(\n", + " batch_prediction_job_id: int,\n", + " limits: int = 20,\n", + " ascore_threshold: float = 2,\n", + " ascending: bool = False,\n", + " greater: bool = True,\n", + ") -> pd.DataFrame:\n", + " TABLE_NAME = (\n", + " f\"{PROJECT_ID}.vertex_ai_model_monitoring.image_classification_anomaly_scores\"\n", + " )\n", + " SELECT_COLUMNS = [\n", + " \"image_id\",\n", + " \"record_time\",\n", + " \"prediction_result.confidence_score\",\n", + " \"prediction_result.classification\",\n", + " \"anomaly_score_result.score\",\n", + " \"anomaly_score_result.normalized_score\",\n", + " \"nearest_neighbor\",\n", + " \"metadata.image_gcs_uri\",\n", + " ]\n", + " query_string = (\n", + " f\"\"\"SELECT {','.join(SELECT_COLUMNS)}\"\"\"\n", + " f\"\"\" FROM `{TABLE_NAME}`\"\"\"\n", + " f\"\"\" WHERE metadata.batch_prediction_job_id = {batch_prediction_job_id}\"\"\"\n", + " f\"\"\" AND anomaly_score_result.normalized_score {\">\" if greater else \"<\"} {ascore_threshold}\"\"\"\n", + " f\"\"\" ORDER BY anomaly_score_result.normalized_score {\"\" if ascending else \"DESC\"}\"\"\"\n", + " f\"\"\" LIMIT {limits}\"\"\"\n", + " )\n", + " print(query_string)\n", + " return pd.read_gbq(query_string, project_id=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "33714dceb92f" + }, + "source": [ + "#### Get the anomaly scores\n", + "\n", + "Get the anomaly scores, ranked by greatest. Then display the top four." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Z8c96SX0-HgW" + }, + "outputs": [], + "source": [ + "scores = get_batch_prediction_anomaly_scores(\n", + " BATCH_PREDICTION_JOB_ID, ascore_threshold=3\n", + ")\n", + "\n", + "scores.iloc[:4]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c8b1db0dae6f" + }, + "source": [ + "#### Plot the outlier images\n", + "\n", + "Next, you plot (display) the top outlier images.\n", + "\n", + "Notice that the four outlier images are the four out of distribution in the batch job - 2 passion flower, and 2 dog images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qh1u9-7O4bnj" + }, + "outputs": [], + "source": [ + "plot_outlier_images(scores)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yDUjZd3gtk5x" + }, + "source": [ + "## Check 2: Check KNN for the Image" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b0887edf34f6" + }, + "source": [ + "### Get ID of greatest outlier\n", + "\n", + "Next, you get the image id of the image that has the greatest outlier value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "54393848e3bf" + }, + "outputs": [], + "source": [ + "image_id = scores.iloc[:4][\"image_id\"][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "D-Hx0Agl8aVL" + }, + "source": [ + "### KNN of outliers\n", + "\n", + "Plot images similiar (nearest neighbor) from the `training dataset` to the outlier." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "43F-8HYh2XfF" + }, + "outputs": [], + "source": [ + "def plot_knn_images(data: pd.DataFrame, image_id, col_num: int = 4) -> None:\n", + " image_row = data.loc[data.image_id == image_id].iloc[0]\n", + " total_image_number = len(image_row.nearest_neighbor) + 1\n", + " row_num = int((total_image_number - 1) / col_num) + 1\n", + " plot, axes = plt.subplots(row_num, col_num, figsize=(8 * col_num, 7 * row_num))\n", + " if row_num == 1:\n", + " axes = [axes]\n", + " print(row_num, col_num)\n", + "\n", + " # Print prediction image.\n", + " ax = axes[0][0]\n", + " ax.imshow(mpimg.imread(tf.io.gfile.GFile(image_row[\"image_gcs_uri\"], \"rb\")))\n", + " ax.title.set_text(\n", + " \"{} \\n automl_prediciton: {}, automl confidence: {} \\n normalized anomaly score: {}, anomaly score: {}\".format(\n", + " image_row[\"image_id\"],\n", + " image_row[\"classification\"],\n", + " round(image_row[\"confidence_score\"], 2),\n", + " round(image_row[\"normalized_score\"], 2),\n", + " round(image_row[\"score\"], 2),\n", + " )\n", + " )\n", + "\n", + " for _idx, row in enumerate(image_row.nearest_neighbor):\n", + " idx = _idx + 1\n", + " ax = axes[int(idx / col_num)][int(idx % col_num)]\n", + " ax.imshow(mpimg.imread(tf.io.gfile.GFile(row[\"image_id\"], \"rb\")))\n", + " ax.title.set_text(\n", + " \"{} \\n normalized_distance: {}\".format(\n", + " \"/\".join(row[\"image_id\"].split(\"/\")[-2:]),\n", + " round(row[\"normalized_distance\"], 2),\n", + " )\n", + " )\n", + "\n", + "\n", + "plot_knn_images(scores, image_id, col_num=3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "guv5c-Hd8jk0" + }, + "source": [ + "## KNN of non outliers\n", + "\n", + "As a comparison, non-outliers has low anomaly score and is correctly identified as daisy by AutoMl model. It has a lot of similar pictures in the training dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "S21YccTy8i7i" + }, + "outputs": [], + "source": [ + "no_scores = get_batch_prediction_anomaly_scores(\n", + " BATCH_PREDICTION_JOB_ID,\n", + " ascore_threshold=4,\n", + " greater=False,\n", + " limits=1000,\n", + " ascending=True,\n", + ")\n", + "no_scores.iloc[:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de45194eab8b" + }, + "source": [ + "### Get ID of least outlier\n", + "\n", + "Next, you get the image id of the image that has the least outlier value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7440c6e4e229" + }, + "outputs": [], + "source": [ + "image_id = no_scores.iloc[:4][\"image_id\"][0]\n", + "image_id" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "D-Hx0Agl8aVL" + }, + "source": [ + "### Plot KNN of non-outlier\n", + "\n", + "Plot images similiar (nearest neighbor) to the least outlier. \n", + "\n", + "Notice, the similiar images from the `training data` are also daisy flowers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "v7wGJape9pia" + }, + "outputs": [], + "source": [ + "plot_knn_images(no_scores, image_id, col_num=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sXYgrxA5ABuW" + }, + "source": [ + "# Check 3: Check email\n", + "\n", + "The batch prediction monitoring will send you an email if any outliers are found.\n", + "\n", + "![image.png](data:image/png;base64,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QpwAqEWW8bGI0wLAcURNvQBQQp7HR6IILwDb2yt0avadmNPHBYt8sezzGaeHWxeuAf+QyRn+L3X/cwXjUR3AP9d/AXglBjQbNH4bAAAAOGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACoAIABAAAAAEAAAOpoAMABAAAAAEAAAJQAAAAAArok1oAAEAASURBVHgB7J0J3A3V/8ez7/uaZMmehJQSkRKJlKUd7dpI9QulPVHSpl2lxdKitFgKoVJkCUmy75J939f/+/rqmObO3OdePfk/j+dzX17XmTNnznzP+5w585nv+c590h08ePAEfURABERABERABERABEQgDRBInwbaqCaKgAiIgAiIgAiIgAiIQISAtK/GgQiIgAiIgAiIgAiIQFohIO2bVnpa7RQBERABERABERABEZD21RgQAREQAREQAREQARFIKwSkfdNKT6udIiACIiACIiACIiAC0r4aAyIgAiIgAiIgAiIgAmmFgLRvWulptVMEREAEREAEREAEREDaV2NABERABERABERABEQgrRCQ9k0rPa12ioAIiIAIiIAIiIAISPtqDIiACIiACIiACIiACKQVAtK+aaWn1U4REAEREAEREAEREAFpX40BERABERABERABERCBtEJA2jet9LTaKQIiIAIiIAIiIAIiIO2rMSACIiACIiACIiACIpBWCEj7ppWeVjtFQAREQAREQAREQASkfTUGREAEREAEREAEREAE0goBad+00tNqpwiIgAiIgAiIgAiIgLSvxoAIiIAIiIAIiIAIiEBaISDtm1Z6Wu0UAREQAREQAREQARGQ9tUYEAEREAEREAEREAERSCsEpH3TSk+rnSIgAiIgAiIgAiIgAtK+GgMiIAIiIAIiIAIiIAJphYC0b1rpabVTBERABERABERABERA2ldjQAREQAREQAREQAREIK0QkPZNKz2tdoqACIiACIiACIiACEj7agyIgAiIgAiIgAiIgAikFQLSvmmlp9VOERABERABERABERABaV+NAREQAREQAREQAREQgbRCQNo3rfS02ikCIiACIiACIiACIiDtqzEgAiIgAiIgAiIgAiKQVghI+6aVnlY7RUAEREAEREAEREAEpH01BkRABERABERABERABNIKAWnftNLTaqcIiIAIiIAIiIAIiIC0r8aACIiACIiACIiACIhAWiGQErXv0qVLv/nmm/3793s7YfKhjzfHl162bBlHkbl9+3YSGzdu9BUI3JwyZcro0aOjd/3www/Tp0+Pzg/M2blzZ2B+opkLFy7E8nXr1nkPpCFkbtq0yZvp0rt27Zr+6/T3339/5MiRYWVc4RiJAwcO7N69O0YB7RIBERABERABERCB44BAStS+06ZNa9++PRLWy/ftt99+9913vTm+9IwZMzjq4MGD69evJ7FixQpfgcDN+fPn33bbbUuWLPHuXbNmzU033TRv3jxvZlh67ty5F154IecNKxB/fo8ePbD8448/9h6ycuVKMn0WWoGZM2dWrly5VctWgwYNuvPOO2vUqNGrVy/vsXGmt27d2qZNmzjbG2edKiYCIiACIiACIiACKZBAStS+xxJTo0aNON23337rPemIESPYtF3e/MD0ggULVq9eHbgrocw///zz+++/b9iwYd++feNxwSJV27Zte/HFF0+YMOHrr7+eM2fOQw8/9Oabb/78888JnZfCmzdvnjhxYqJHqbwIiIAIiIAIiIAIpDoCGVOdxRhMOARqb9KkSenSpatduzYilURYQ3766acxY8bgRcZFesUVV2TPnt1bskCBApdddtmHH3548803p08feRLAg4vntVWrVnnz5g080ezZs4m/KF68+KhRo04//XTq56jevXtzCJn4mz///PNFixaVLVuWnKJFixK00L9//1NPPbVBgwaUxFn73XffXX755SVKlPBaQoty587dpUsXvMiI4CSV98CBA7Nly9a9e3fspJ5MmTJd3/b6Gb/OmDp1aq1atWbNmkWr7777bjsF4n7rtq0tmrdgE2WPzXv27KlYseKVV16ZMWNG1Db5AwYMaNmyZc2aNTH4s88+o5mFCxdudHGj6tWqsxdtjcg+++yzv/rqK6R506ZN4fnRRx8hwc8///z69etnzZqVYtHNJ5OoEjpo8eLFy5cvv/baaytUqECmPiIgAiIgAiIgAiJw7AmkXL/vwkWEvx75bNu2zdF56KGH7rnnnn379m3ZsuWuu+567rnn3C5fgjCJ66+/Ht2GTHzyyScRowTI+sq0bNWSWOHff//d8tF8hDFQks3AE6HhqKpdu3YkkHqmmFGQfDiwXr16w4cPR9eipxs3bkyBfPnyYTyRFZQnJJcEp0Ale81AZL/33ntI81KlStWuU7tfv37evYFp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xanKREAEREAEREAEREAEUjABad8U3DkyTQREQAREQAREQAREIFkJSPsmK05VJgIiIAIiIAIiIAIikIIJSPum4M6RaSIgAiIgAiIgAiIgAslKQNo3WXGqMhEQAREQAREQAREQgRRMQNo3BXeOTBMBERABERABERABEUhWAtK+yYpTlYmACIiACIiACIiACKRgAtK+KbhzZJoIiIAIiIAIiIAIiECyEpD2TVacqkwEREAEREAEREAERCAFE5D2TcGdI9NEQAREQAREQAREQASSlYC0b7LiVGUiIAIiIAIiIAIiIAIpmIC0bwruHJkmAiIgAiIgAiIgAiKQrASkfZMVpyoTAREQAREQAREQARFIwQSkfVNw58g0ERABERABERABERCBZCUg7ZusOFWZCIiACIiACIiACIhACiaQErXvN998s2LFCh+0H374YfTo0b7M42bz+++/nzdvXlhzZs6c+fPPP4ftjT9/586dVpgKJ0+eHH1gcp0ouuZ4ctzZly1bxhjwHbJjxw4y169f78vX5n9KgCsR7AcOHEius/z5559UuH///n/Zob/++usvv/wSbRWm7t69Ozo/LMeVD7sowg50+QsXLqRFW7dudTmWmDVrVkJTlrs8ffUktElzRowYET1dYCF2+qriaiKf8gcPHvTusk6HsDczdnrMmDGLFy+OUYbaouecBQsWYEB0/m+//UZ+9F0gRv1ul5tGyEkUaex52J3iGCdSplXHGIJOJwLJSyAlat+uXbvefffd+/btc00dP378TTfdtHLlSpdznCWeeOIJxH1Yo4YMGfLGm2+E7Y0zf+7cuRdeeKHd5L766qs33gioMFlOFKc90cXc2WfMmNG+fXvf/Xjz5s1kLlu+LPpA5fx3BH7//ffovvg3p/vjjz+okKv7X3bo559/3rdvX58lCNA2bdrEeIyMUT7sovAdEr25Z88eWuSTuYze++67b9iwYdHlA3N69OgxaNCgwF0JZaIa77rrrtatW2/atMl7IBZGzzDLly8nn/Jz5szxFv7ggw/Ih7A3M3b6kUceGTduXIwygwcPfvfdd30FOIQT3XbbbXv37nW7QNepUyfymQdcZvwJN414Z7w4D489D8dZSbIXS5lWJXszVaEIHEsCGY/lyeI8V69evZgN+/Xvd9ONN3EI9zOmwtp1al933XVx1pDqir3//vu5cuUKM/vW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R19+KCOVQkAR8nsgjDd8ybbikUobIrNFQATSAoHU9xtnx2uvsI7P7xsQrJxmhS89O3/BfIRv27ZtWZFMsR2dKoxk+ZX3EXkjh7hw1u5ZK5fwTbEjCsMI28DXmJItjG0b/nX81oQ72980iV1Ye0VABETg/5eA/L7/v/x1dhEQAREQAREQAREQgWNH4Dh51+3YAdOZREAEREAEREAEREAEUi0Bad9U23UyXAREQAREQAREQAREIEEC0r4JAlNxERABERABERABERCBVEtA2jfVdp0MFwEREAEREAEREAERSJCAtG+CwFRcBERABERABERABEQg1RKQ9k21XSfDRUAEREAEREAEREAEEiQg7ZsgMBUXAREQAREQAREQARFItQSkfVNt18lwERABERABERABERCBBAlI+yYITMVFQAREQAREQAREQARSLQFp31TbdTIWQlzPAABAAElEQVRcBERABERABERABEQgQQLSvgkCU3EREAEREAEREAEREIFUS0DaN9V2nQwXAREQAREQAREQARFIkIC0b4LAVFwEREAEREAEREAERCDVEpD2TbVdJ8NFQAREQAREQAREQAQSJCDtmyAwFRcBERABERABERABEUi1BKR9U23XyXAREAEREAEREAEREIEECUj7JghMxUVABERABERABERABFItAWnfVNt1MlwEREAEREAEREAERCBBAtK+CQJTcREQAREQAREQAREQgVRLQNo31XadDBcBERABERABERABEUiQgLRvgsBUXAREQAREQAREQAREINUSkPZNtV0nw0VABERABERABERABBIkIO2bIDAVFwEREAEREAEREAERSLUEpH1TbdfJcBEQAREQAREQAREQgQQJSPsmCEzFRUAEREAEREAEREAEUi0Bad9U23UyXAREQAREQAREQAREIEEC0r4JAlNxERABERABERABERCBVEtA2jfVdp0MFwEREAEREAEREAERSJCAtG+CwFRcBERABERABERABEQg1RKQ9k21XSfDRUAEREAEREAEREAEEiQg7ZsgMBUXAREQAREQAREQARFItQSkfVNt18lwERABERABERABERCBBAlI+yYITMVFQAREQAREQAREQARSLQFp31TbdTJcBERABERABERABEQgQQLSvgkCU3EREAEREAEREAEREIFUS0DaN9V2nQwXAREQAREQAREQARFIkIC0b4LAVFwEREAEREAEREAERCDVEpD2TbVdJ8NFQAREQAREQAREQAQSJCDtmyAwFRcBERABERABERABEUi1BKR9U23XyXAREAEREAEREAEREIEECUj7JghMxUVABERABERABERABFItAWnfVNt1MlwEREAEREAEREAERCBBAtK+CQJTcREQAREQAREQAREQgVRLQNo31XadDBcBERABERABERABEUiQgLRvgsBUXAREQAREQAREQAREINUSkPZNtV0nw0VABERABERABERABBIkIO2bIDAVFwEREAEREAEREAERSLUEpH1TbdfJcBEQAREQAREQAREQgQQJSPsmCEzFRUAEREAEREAEREAEUi0Bad9U23UyXAREQAREQAREQAREIEEC0r4JAlNxERABERABERABERCBVEtA2jfVdp0MFwEREAEREAEREAERSJCAtG+CwFRcBERABERABERABEQg1RKQ9k21XSfDRUAEREAEREAEREAEEiQg7ZsgMBUXAREQAREQAREQARFItQSkfVNt18lwERABERABERABERCBBAlkTLD8sSg+b968hQsXujNlzpw5f4H8p1c5PUOGDC4z/sTatWt/+eWXvHnz1qpVK56jVq1aNX369GzZsp1//vmxyy9btmz8+PE7d+3EtjPPPDN24eTdu2PHjuzZs+/fv3/UqFHp0qW76KKLjg5O8lql2kRABERABERABEQghRNIidr3hx9+eOaZZ3zgKleu3K9fPySsLz/JzcWLF7dv375GjRpxat/Zs2dTvmzZsrG178aNG+vXr29nv+mmm46Z9qU5PXv2bNKkyaWXXrp7925MxYYZM2bkzJkzSRQqIAIiIAIiIAIiIAJpnEBK1L7WJYjd1q1bHzhwYMOGDW+//fasWbMGDx588803J9phRYsW7dixY+HChRM9MHb5JUuXUCB37txffvkl37ELJ+Pe3r17f/vtt2hf6sySJQtNI5EpU6ZkPIWqEgEREAEREAEREIHjlUDK1b4VK1a88sorjfuuXbtee+01ohFsc/369T/++OPUqVO3b99+yimnIJHNHzx+wvgxo8cQ5JAvX74GDRrUrVuX8gcPHuTbhQRQ1RdffIGj1KIgzjnnHBSkVRv9vWTJkiFDhlSoUIEKR4wYsXfv3oYNG5533nl//PHHB+9/QHlCI7766iuzc8WKFd9/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o7yFJKARr5AAI7KLbQSc1DykLkvNfsmwWkn7ZliHpk1zWH+3V6cDNS5Xvty4seMCkQXYxX6D/zFe2ngj8PkO+5pHWDnJrkzYeQscL+1bYHQpmFEP++R1itgmj22SSlaXJQmsivUJSPv6NBQWgfQgIO2bHv2UWC31sE+MU0FSiW1BqG3VPOqyrYp/Wzl5Wn7jbFvpHLVTBERABERABERABESgSAlI+xYpThUmAiIgAiIgAiIgAiKQwgSkfVO4c1Q1ERABERABERABERCBIiUg7VukOFWYCIiACIiACIiACIhAChOQ9k3hzlHVREAEREAEREAEREAEipSAtG+R4lRhIiACIiACIiACIiACKUxA2jeFO0dVEwEREAEREAEREAERKFIC0r5FilOFiYAIiIAIiIAIiIAIpDABad8U7hxVTQREQAREQAREQAREoEgJSPsWKU4VJgIiIAIiIAIiIAIikMIEpH1TuHNUNREQAREQAREQAREQgSIlIO1bpDhVmAiIgAiIgAiIgAiIQAoTkPZN4c5R1URABERABERABERABIqUQNbmzZuLtMAiKCwrK6sISlERIiACIiACIiAC6UYgBWVJuiFUffMgILtvHoB0WAREQAREQAREQAREIGMIlEjNlmjal5r9olqlCAFbG9FtkiLdUchq0JvqykIyDMsutmFkUjZeC78p2zWZVDHZfTOpN9UWERABERABERABERCBKALSvlF0dEwEREAEREAEREAERCCTCEj7ZlJvqi0iIAIiIAIiIAIiIAJRBKR9o+jomAiIgAiIgAiIgAiIQCYRkPbNpN5UW0RABERABERABERABKIISPtG0dExERABERABERABERCBTCIg7ZtJvam2iIAIiIAIiIAIiIAIRBGQ9o2io2MiIAIiIAIiIAIiIAKZREDaN5N6U20RAREQAREQAREQARGIIiDtG0VHx0RABERABERABERABDKJgLRvJvWm2iICIiACIiACIiACIhBFQNo3io6OiYAIiIAIiIAIiIAIZBIBad9M6k21RQREQAREQAREQAREIIqAtG8UHR0TAREQAREQAREQARHIJAKZoH3nz5//0UcfBXrl119/nTp1aiBy8eLFL7/88tdffx2I/+GHH1577bWVK1cG4r/66ivSkysQb7tvv/12oKjvv/+ek37wwQcbN24MZPn888+J9yNJM2/e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iIAIZDgBad8M72A1TwREQAREQAREQAQaVnBwAAA+EklEQVREwBGQ9nUoFBABERABERABERABEchwAtK+Gd7Bap4IiIAIiIAIiIAIiIAjIO3rUCggAiIgAiIgAiIgAiKQ4QSkfTO8g9U8ERABERABERABERABR0Da16FQQAREQAREQAREQAREIMMJSPtmeAereSIgAiIgAiIgAiIgAo6AtK9DoYAIiIAIiIAIiIAIiECGE5D2zfAOVvNEQAREQAREQAREQAQcAWlfh0IBERABERABERABERCBDCcg7ZvhHazmiYAIiIAIiIAIiIAIOALSvg6FAiIgAiIgAiIgAiIgAhlOQNo3wztYzRMBERABERABERABEXAESrhQ+gbmz5//999/N2zY0G/Cr7/++v777x9//PF+5OLFi7/88suDDjpo//339+N/+OGHBQsWUEL58uX9+K/+3WrWrFm9enU/3sJvv/32fvvt5xf1/fffz507d7fddjv00EO33357P8vnn3/+xx9/NG7c2EVu3LiRmnNqzksWF7958+ZFixb9/PPPTZo0KVWqFPEbNmygei6BBSpUqLDvvvsSppyPP/74999/r1OnTqVKlVyy1atXk2v9+vWHHXbYTjvtlGe8JVixYgW1atOmje1SyJIlS1zerKysunXrul0COTk5e+21lw+BLLNnz95xxx3r1atXpkwZl3jVqlUffvhhxUoVa9eqzVEXn2dg3rx5EGjUqFGeKfOVIKKz8lVO6icOu+xdzbnM16xZ43arVKmy++672+4333zz2WefVatW7YADDnAJLMCl9eabbzZr1szv5UAa7YpAuhBgIOVS//HHHw855JDKlSvHrXbs4GzJwgbzuIUoUgREYOsT4GZOtQ0oiVfpu+++48Hcq1cvP8tff/3VuXPnI444wkXynD799NNJ2aJFC36HDx9uhxizLrnkEhd/4403IrM4tGnTpttvv5341q1b83vWWWdZvCvwtddeI/6pp56yGKQDaVw5J510ElLPJV6+fHn9+vVvuukmF8PRLtldXPohQ4bYIaSwnZHKc/SJJ54g3trIrr8NHDiQQ6gWSibefmfMmGHlILUpgUiLp7bR8XaUKUT79u0pzXb5feGFF/yT+oc4yumIeemll1z62267jRirPKdGfNuhp59+2sXT8D///NNlyTMAt4suuijPZIkniO6s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iIAIiIAIFAOBFJQlxdBqnaI4CZQozpMlfi5d+omzUsptkIDND3WbZEbX05vqyiR1pdgmCWzyipXxK3lsVbIjIJ8Hh0IBERABERABERABERCBDCcg7ZvhHazmiYAIiIAIiIAIiIAIOALSvg6FAiIgAiIgAiIgAiIgAhlOQNo3wztYzRMBERABERABERABEXAEpH0dCgVEQAREQAREQAREQAQynIC0b4Z3sJonAiIgAiIgAiIgAiLgCEj7OhQKiIAIiIAIiIAIiIAIZDgBad8M72A1TwREQAREQAREQAREwBGQ9nUoFBABERABERABERABEchwAtK+Gd7Bap4IiIAIiIAIiIAIiIAjIO3rUCggAiIgAiIgAiIgAiKQ4QSkfTO8g9U8ERABERABERABERABR0Da16FQQAREQAREQAREQAREIMMJSPtmeAereSIgAiIgAiIgAiIgAo5ACRdK38D8+fP//vvvhg0b+k349ddf33///eOPP96PXLx48ZdffnnQQQftv//+fvwPP/ywYMECSihfvrwf/9W/W82aNatXr+7HW/jtt9/eb7/9/KK+//77uXPn7rbbboceeuj222/vZ/n888//+OOPxo0bu8iNGzdSc07Necni4jdv3rxo0aKff/65SZMmpUqVIn7Dhg1UzyWwQIUKFfbdd1/ClPPxxx///vvvderUqVSpkku2evVqcq1fv/6www7baaed8oy3BCtWrKBWbdq0sV0KWbJkicublZVVt25dt0sgJydnr7328iGQZfbs2TvuuGO9evXKlCnjEq9aterDDz+sWKli7Vq1Oeri8wzMmzcPAo0aNcozZX4TxL1I8ltI6qcPu+z9moel+eabbz777LNq1aodcMABLn3sJeoOKSACaUqAgZRL/ccffzzkkEMqV64ctxUrV65ksC1RogQjvD+ockcwwjNUVq1a9eCDDyYvw93XX38dKITnReARE0igXREQgWIiwE2bahstT7xK3333HQ/mXr16+Vn++uuvzp07H3HEES4SCXj66aeTskWLFvwOHz7cDjHeXXLJJS7+xhtvRGZxaNOmTbfffjvxrVu35vess86yeFfga6+9RvxTTz1lMWvWrCGNK+ekk05i7HOJly9fXr9+/ZtuusnFcLRLdheXfsiQIXYIKWxnpPIcfeKJJ4i3NrLrbwMHDuQQ4pySibffGTNmWDkM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iIAIiIAIpCEBad807DRVWQREQAREQAREQAREoEAEpH0LhE2ZREAEREAEREAEREAE0pCAtG8adpqqLAIiIAIiIAIiIAIiUCAC0r4FwqZMIiACIiACIiACIiACaUhA2jcNO01VFgEREAEREAEREAERKBABad8CYVMmERABERABERABERCBNCQg7ZuGnaYqi4AIiIAIiIAIiIAIFIhA1ubNmwuUMYmZsrKykli6ihYBERABERABEUhVAikoS1IVlepVQAKpqH0L2BRlEwEREAEREAEREAEREIFIAvJ5iMSjgyIgAiIgAiIgAiIgAhlEQNo3gzpTTREBERABERABERABEYgkIO0biUcHRUAEREAEREAEREAEMoiAtG8GdaaaIgIiIAIiIAIiIAIiEElA2jcSjw6KgAiIgAiIgAiIgAhkEAFp3wzqTDVFBERABERABERABEQgkoC0byQeHRQBERABERABERABEcggAtK+GdSZaooIiIAIiIAIiIAIiEAkAWnfSDw6KAIiIAIiIAIiIAIikEEEpH0zqDPVFBEQAREQAREQAREQgUgC0r6ReHRQBERABERABERABEQggwhI+2ZQZ6opIiACIiACIiACIiACkQSkfSPx6KAIiIAIiIAIiIAIiEAGEZD2zaDOVFNEQAREQAREQAREQAQiCUj7RuLRQREQAREQAREQAREQgQwiIO2bQZ2ppoiACIiACIiACIiACEQSkPaNxKODIiACIiACIiACIiACGUSgRGq2ZfPmzfPmzfv888/Xrl1bs2bN+vXr77rrrlR13bp1b731VuPGjStVqlRsNV+zZs2MGTMOP/zw8uXLF9tJdSIREAEREAEREAEREIEiJ5CFyizyQgtZ4N9//927d++XXnqJcvbYY48ff/xx3333feSRR6pXr064adOmTz75ZKNGjQp5lsSzf/PNN8ccc8xzzz1Xp06dxHMppQiIgAiIgAiIgAiIQKoRSEWfhw8+/ADhe++9937xxRezZs16/fXXV61aNWjQINhh7p0+fXrt2rVTjaPqIwIiIAIiIAIiIAIikPoEUtHnYemSpYA78sgjt99+ewL777//zTff/P7772/cuBEXiKlTp5566qlYgkePGd3w0IaffvrpnDlzMA+feeaZRBrxDz744J133lm5cmWLFi2aNWtWqlQp4r/77rtnn312yZIlNWrU6NixY+XKlYkcNWpU3bp10dM77bRTt27dypYtS/mcKysri4xt2rQhYGXy++6773700UcXX3yxVYzyx48f36FDh7333tulUUAEREAEREAEREAERCBlCaSi3bdJkybwOu+885Cq+BsQPuWUU26//XYUJ9r3vvvu++mnn4gcPy5Xd44dO3b33XefPHkyafAGJv7VV18966yzkL/lypW75pprhg8fTiSuw82bN58yZQr6eMKECe3atUMKE4/2JTFC+cUXXyxZsuQNN9xw5ZVXbtiw4Y8//rj00ksHDx5MGrftsssu99xzD/LXYl577TUqU7FiRZdAAREQAREQAREQAREQgVQmkIra94ADDnjiiSd4wwyvXxxtcfBFv65fvz6WY7169TDT9unTZ9iwYajVr776atOmTexi1p04ceLVV199xx13vPnmm7hMoFmxDZP4qquuIqZ06dIPP/ywFYgHBfFEYhJ++umnhwwZcueddyJqBw0eNGLECJPIlvKQQw7BZoxKtl1O0bVrV4qKrZhiREAEREAEREAEREAEUpBAKvo8gIkvOeCHgO7EfMuHHfD9xTSL1gwQPOqoo8z9wLwO0Mc//PADIhhXB0vZ9t+NMMZgZKvZgNnlqxGUbGlcIdiGifnkk0++/vprAr/99hu/6Olq1aoRYMP/4eyzzx4wYMB11133/ffff/zxx/369bND+hUBERABERABERABEUh9AqmofXF1wI0Bf18ULVv79u2PO+64Xr16LVq0KPBpM/vwGZRNAfPNCky87OIi7KPHh4FdfHn5goTFU6Cz1zqnhdWrV3O0RIkSlgwPhx49euA44ReFlkb75uTk8B4e7hP4CvtHFRYBERABERABERABEUhlAqmofd97770FCxbgwosDrrGrWrUqAfwZ8kRpb7AtXbr04IMPJjGm3Jtuuunuu+9Gp5YqXQp3CCth2rRp2223xd9jy8tse+65J0dbtWqF1ZkA31PD9owKN+lsGdlF/pKdd+y6ZHf5/4XYYf2KgAiIgAiIgAiIgAikMIEt+i+VqoihF83apUsX3HD5Cxf412J/RbzWqlUrz2pWqFDh+OOP54NovIi2ePFi3Hx32GEHzMB8wyFnZs7o0aPxo+CNt549e9qLcX6BOBaXKVOGvLNnzybv9ddf//jjj1Ogn4bwaaed9vzzz+ML0a5tO3Znzpw5dOhQvkERSKZdERABERABERABERCBVCOQitr3iCOO4K9X4Lx72WWXITT58AKGWBwhcGywL47FWlst3n75IBoqGbncunVrhC8uCkDHTxeviYEDB/K1B36vuOKKk08+mXhnWiaMBwWfgOC8nTp1Ii9nQdTyfTQ7nTsp3z5DIuNSXKVKFXLhH/zAAw9I+4JCmwiIgAiIgAiIgAikOIFU/LtuDhmmWV44w43B3HldfCIBvoaGrwIi1U+MQv3111932203U8n+IT/M23IoXfx9/UgXxi2Yv7E8cuTIli1bEvnXX3/hBcFnIlwCBURABERABERABERABFKTQEpr31RDhnR+4YUX+O4E34h4++23MSpTw3HjxiGUzznnnFSrreojAiIgAiIgAiIgAiIQICDtGwAStcvLdg0bNuR1N16e49PClpSPS0RbkaNK1DEREAEREAEREAEREIFiJCDtW4ywdSoREAEREAEREAEREIGtSiAV33XbqkB0chEQAREQAREQAREQgYwlIO2bsV2rhomACIiACIiACIiACAQISPsGgGhXBERABERABERABEQgYwlI+2Zs16phIiACIiACIiACIiACAQLSvgEg2hUBERABERABERABEchYAtK+Gdu1apgIiIAIiIAIiIAIiECAgLRvAIh2RUAEREAEREAEREAEMpZAiRRs2bRp02Jrxd+PaN26NX9Nbd99961evXpsggRj+NtsixcvXrBgwapVqyiHv05ctmzZBPMmmOz111/ff//981XJ9evXL1y08ON5H1epUuWwww4rV66cnWvevHl///13kyZNEjx1WDLK4S88N2rUKDYBNL744ovGjRtXqlTJHSXyyy+/bNOmjf9nO2bPns1fhHZpXOCAAw7IV2NdRgVEQAREQAREQAREoJgJpKL27dmzZ1wKn3/++S233HL22WcXWGktX7789NNP//HHH2vUqLHzzjt//PHHZcqUefjhh+OKwrh1SCTypptu6tGjR+KVnD9//qmnnkrJBx54IG0kcNFFF/Xu3ZvApEmTfv7558Jr32effZZy4jbz9ttv56809+rVy8eek5MzYMAANPH222/vmvz444+/9NJLbtcFbrjxhsQb63IpIAIiIAIiIAIiIALFTyAVfR4wOtqGQu3ateuWvcUlShRKqf/yyy/nnHNO1apVZ8yYMX36dOQghsw6detccMEFf/31V/GjtzOiL7Ozs9u2bTtr1qypU6cuWrQIKTlixIh33323GKrEZADhi0F91KhReUK47777rC9GjhxJ3WbOnGm753Y/txiqqlOIgAiIgAiIgAiIQOEJFEpNFv70BSgB9wAMkHPnzsX5AXMpv1bIBx988Oqrr/7222916tQ588wzS5UqFSj8iSee+Oabb55++mm3uF+xYsX+/fpfcsklS5cuPeigg0iPnsNjYc2aNbVr18ZCvNNOO1khceM3b96McHznnXe222679u3bk/HEE0+sVq2af948a0VbSpcuPXDgQPNz2GGHHbpmd8X54aOPPjriiCP8olauXPnMM88sXLhw9913b9O2TYP6DTj66aefct7LL7/cUkJg9Z+rO7TvwO73338/7eVpixYuwp8Bhwe/KBdGbWP57tu373HHHUdbcHJwh/IViNtM3Etefvll3C1++OGHPffc86yzzmLisXr16jFjxqD1X3nlFbqDNp5yyimYk7E003Ht2rWjU/J1aiUWAREQAREQAREQgcQJpKLdN7r299xzz/PPP4/+Q8sip9atW0f6yZMnE8ZFtXz58vhFdO7cGeEVKGf2B7MxcDrha0dZrMcGbMJ39OjRmJmxvCJGKaRjx47obJKFxU+YMOH888/HgwJ3gpNPPhmzKHLTP2kitXrvvfdatWrlHHzJjpsBRfkeCEQifE844YQ777yT+mMh7nhaxylTphC/ZMkSEqPC7bwI8Vemv0IYb2YgDB82HCB4NTz55JOWwP8FETIUiY93crMjm40bN84/mng4rJnUFlGOxzCS98UXX2zZsiXCl3kFFUbjfvvtt4SvueYaOo4+RfIO+XdL/LxKKQIiIAIiIAIiIAL5JoBsStkNqYrXqV+9Fi1aYGFldZ5I3nvDyIqD7Nq1a3ll7brrrrOULMQTjynRz/jPP/8QOXz4cBeJuRTTIxu2ya+++uqPP/4ggTvdJ598wu7EiRPD4tFtJEC0WYE4DbOLeZhdbJmPPvpoIrVCC5KLxK5WgcCNN96I6zCR1JyUuCgQRrNiq6bJNOqFF14gftOmTZbRXI0J//e//yUeKzhhmkBifIgtjft9//33SUNLibFymDzY0bFjx3IIa7FL7AewLnN0xYoVRIY1k7oxMWB+YhnduZgekPeOO+6weFixCwd2MclHnNTS61cEREAEREAEREAECkMg/XwemjVrtuOOO6Lxa9WqxS9fHsDlAHmH8fXee+912h/fAAylbhdjKov7pHExyEpMtrZ71VVX2ftkLP1bDD4Pe+yxB5+DsLe4YuNJQMrmLZpb+qOPPho9Z2H7RafmWSsMzCRGofoZ44Zx/61Xrx6eAxylvcwKkOyoz7iJiaTmDRs2xOhLeNdddz3ppJP8tlsuXqQjAISffvrJnCLwqbj22mvtaIK/Ec1kPsDMBFW9bNkyzNsU6FwvcMOw8hs0aMCHLHbZZRd2d9ttN34x5NuuJdCvCIiACIiACIiACBQhgfTTvu6TZEhAA4GHKwF8c1FRFoOtlA9v+ZhYeT/mmGNwS3WReA5YGPlFwGSZ84ig8MqVK2O8DItH15KrVMn/8ypGX7qSLZBIrVDkOBvYtx387FhA0aNYal0klt299trL7ZpTrJOSzH7sY2TufbWVq1aalLQs/ucaLAanCJQu84F+/fpZjH3yAi8F5+XsThcRCGsmxunrr7+eU/DxCpQucwPkL/W0okyUE4ZzhQoVLNJ1aMTpdEgEREAEREAEREAECkMg/fx9Y1tbpXIVIjHE9vl3u/rqq/lKrnsHzqU/6qijUJmPPfaYiyFgHr0EyMIvS/N2FHMyX0DDtBwWv88++5Dyww8/tPQuYLv8Jliro486GhcCvjjhMvJmGMZXKuALVlxmeS/NiXv7CsR+++3Hu3FkNKdnAjgtWDn16tbDMIx2ZxfFiU+zxbvf1157jTBuuMwBbMOtmZjYlC5L3EBYM3EjQfjiE0K18SSpW7cu2VHwcQtRpAiIgAiIgAiIgAgUD4H0s/vGcsFAiw/AQw89hGUUx1acdAnjyBtIyUchcAXu378/nxXDcQLTI34RfK4LCy4ikg0TLB8Xw9WBMP6yZMcbNSwebX388ccPHTqUZHxTApEXOF2CterWrRufOMBQjd8FledNu/Hjx2OCveyyy/wC8XLmfTXcKvhMGx66vGbHq3iIY/OC4AtlfC0BDY1e5805MvL74IMPDho0iE9eEO+8O1yZvNlGe/fee28Xg08FjeLtN87lIvMMhDXTDOF8yQFfXl5ru/nmmynKmaXzLFYJREAEREAEREAERCAZBDLB7guX2267jVV11uv5xYo5bNiw2L+2gFcAJuFbb70VKca7Yp06dcI/mOV4VDLfJuPo4EGDMU9yCEdhNCgaGseJsHhOyncM+LwD8heVydcSiDFHZALmgZBIrfhoMSWQHYM06tzcbTHBmlcA5VhR1JOvIDz33HOofL6NQIVpCCfiu2B8n5gvJxx77LFYWPm2g6WnIffffz8v/JEemcs7giR2G+qfj6PZp9BcJC4HfOaCeDYrxB0KBAJH4zaTD3HwoWJEOYKeP0fSvXt3BD1eyIGiYncDhccmUIwIiIAIiIAIiIAIFJhAlnPBLHARqZMRBwY+O+D8RyMqhgESeyRes7FKixI46hxSXSGBeNLwrhiKE8MnaebMmYN+xWGAv8fhslgg8Vrx1zdKliwZ6zrsCsRngDRU23eH4CinwO0hts50LulxYo5tpiuzqAJxm4nXL84bVEC+vEXFWeWIgAiIgAiIgAgUhkBGad/CgMhvXmQoH1Lgz8L1uLAHuhPbLZ4PvKMWUKX5LVbpRUAEREAEREAEREAEkkdA2rfgbHlzDh9cXinDWMuLdL169Yq1vBa8dOUUAREQAREQAREQAREoagLSvkVNVOWJgAiIgAiIgAiIgAikKoEMedctVfGqXiIgAiIgAiIgAiIgAilEQNo3hTpDVREBERABERABERABEUgqAWnfpOJV4SIgAiIgAiIgAiIgAilEQNo3hTpDVREBERABERABERABEUgqAWnfpOJV4SIgAiIgAiIgAiIgAilEQNo3hTpDVREBERABERABERABEUgqAWnfpOJV4SIgAiIgAiIgAiIgAilEQNo3hTpDVREBERABERABERABEUgqAWnfpOJV4SIgAiIgAiIgAiIgAilEQNo3hTpDVREBERABERABERABEUgqAWnfpOJV4SIgAiIgAiIgAiIgAilE4P8Bye4SREQz1xYAAAAASUVORK5CYII=)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3d3bbc4f6122" + }, + "source": [ + "## Cleanup\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8a4be7b79f14" + }, + "outputs": [], + "source": [ + "delete_bucket = False\n", + "\n", + "try:\n", + " dataset.delete()\n", + " model.delete()\n", + "except:\n", + " pass\n", + "\n", + "\n", + "try:\n", + " jobs = aiplatform.BatchPredictionJob.list(filter=f\"display_name=flowers_{UUID}\")\n", + " jobs[0].delete()\n", + "except:\n", + " pass\n", + "\n", + "# delete BQ table\n", + "! bq rm -r -f {PROJECT_ID}.vertex_ai_model_monitoring\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -rf {BUCKET_URI}" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_with_model_monitoring_automl_image_batch.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl_image_online.ipynb b/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl_image_online.ipynb new file mode 100644 index 000000000..902fd91f3 --- /dev/null +++ b/notebooks/official/model_monitoring/get_started_with_model_monitoring_automl_image_online.ipynb @@ -0,0 +1,1527 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Vertex AI Model Monitoring for online prediction in AutoML image models\n", + "\n", + "\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


\n", + "\n", + "**This feature is in private preview**. You can request access to model monitoring for AutoML image models with this [Form](https://docs.google.com/forms/d/1aTitFrlNRlUAF_gvbMFQWDY0Oq8T_fUrN1m79atF8xQ/edit?resourcekey=0-psKsTGtVUFFUBDL2timIQA).\n", + "\n", + "If after access is granted and your monitoring job fails to start for this reason `Training Datasets for AutoML Deployed Models no longer available, please explicitly configure Analysis Instance Schema`, you need to request that your project be added to the group `VISION_MM_EXP`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use Vertex AI Model Monitoring for AutoML image models.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xxo0b4reEiVm" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `Vertex AI Model Monitoring` with `Vertex AI Online Prediction` with an AutoML image classification model to detect an out of distribution image.\n", + "\n", + "\n", + "Due to lack of unlabeled samples, AutoML image classification model is prone to classifiy out of distribution images into one of the labeled class in training dataset -- thus making **False Positive** prediction. With `Vertex AI Model Monitoring` you can detect and identify prediction requests that contain out of distribution images.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `AutoML`\n", + "- `Vertex AI Online Prediction`\n", + "- `Vertex AI Model Monitoring`\n", + "\n", + "The steps performed include:\n", + "\n", + "1. Train an AutoML image classification model.\n", + "2. Create an endpoint.\n", + "3. Deploy the model to the endpoint, and configure for model monitoring.\n", + "4. Submit a online prediction containing both in and out of distribution images.\n", + "5. Use Model Monitoring to calculate anomaly score on each image.\n", + "6. Identify the images in the online prediction request that are out of distribution.\n", + "\n", + "\n", + "### Term & Concept\n", + "\n", + "**Anomaly Score**:\n", + "1. Normalized distance between training dataset and prediction dataset, above 3 can be deemed as outlier. (__similair to z-score in statistics__)\n", + "\n", + "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3gAAADaCAIAAAB7MHdhAAAKqmlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQU+kWgP970xstIdIJNRRBOgGkhNACKEgHGyEJEEoIgaBiRxZXYC2oiGADXRVRcFWK2BBRbItgxbpBFhFlXSyIisq7wBB29817b96ZOfN/9+T8p/xz/8y5AFBUeBJJGqwCQLo4Wxrm782IiY1j4PoBBGBAAsqAxuNnSdihocEAkan17/LxPuKNyB2r8Vj//vt/FVWBMIsPABSKcIIgi5+O8ClEX/El0mwAUPsQu9GSbMk4tyFMkyIFItw9zkmTPDjOCROMBhM+EWEchGkA4Mk8njQJADIDsTNy+ElIHLIXwjZigUiMsARhj/T0DAHCxxE2Q3wQG3k8PivhL3GS/hYzQRGTx0tS8GQvE4L3EWVJ0njL/s/j+N+SniabymGKKDlZGhCGrGrImXWnZgQpWJwwN2SKRYIJ/wlOlgVETjE/ixM3xQKeT5Bib9rc4ClOFPlxFXGyuRFTLMzyDZ9iaUaYIleilMOeYp50Oq8sNVJhTxZyFfFzkyOipzhHFDV3irNSw4OmfTgKu1QWpqhfKPb3ns7rp+g9Pesv/Yq4ir3ZyREBit550/ULxezpmFkxitoEQh/faZ9Ihb8k21uRS5IWqvAXpvkr7Fk54Yq92cgLOb03VHGGKbzA0CkGHJAB0hCVAgYIRp58AMgWLs0eb4STIVkmFSUlZzPYyA0TMrhivvVMhp2NnT0A4/d18nV4T5+4hxD9+rRtXT0A7ufHxsbOTNuCNgNwkgkAsXPaxtwCgLI2AFcr+TJpzqRt4i5hAHH8XwBoAj1gBMyAFbADTsANeAFfEAhCQASIBYsAHySDdKTyJWAFWAsKQBHYDLaDcrAX7AeHwTFwAjSCs+AiuAJugE5wDzwGctAHXoMh8BGMQhCEgygQFdKE9CETyBKyg1iQB+QLBUNhUCwUDyVBYkgGrYDWQUVQCVQOVULV0C/QaegidA3qgh5CPdAA9A76AqNgMkyDdWFTeBbMgtlwEBwBL4ST4Ew4F86HN8JlcBV8FG6AL8I34HuwHH4ND6MAioSiowxQVigWioMKQcWhElFS1CpUIaoUVYWqRTWj2lF3UHLUIOozGoumohloK7QbOgAdieajM9Gr0MXocvRhdAO6DX0H3YMeQn/HUDA6GEuMK4aLicEkYZZgCjClmIOYesxlzD1MH+YjFoulY5lYZ2wANhabgl2OLcbuxtZhW7Bd2F7sMA6H08RZ4txxITgeLhtXgNuJO4q7gLuN68N9wpPw+ng7vB8+Di/G5+FL8Ufw5/G38f34UYIKwYTgSgghCAjLCJsIBwjNhFuEPsIoUZXIJLoTI4gpxLXEMmIt8TLxCfE9iUQyJLmQ5pFEpDWkMtJx0lVSD+kzWY1sQeaQF5Bl5I3kQ+QW8kPyewqFYkrxosRRsikbKdWUS5RnlE9KVCVrJa6SQGm1UoVSg9JtpTfKBGUTZbbyIuVc5VLlk8q3lAdVCCqmKhwVnsoqlQqV0yoPVIZVqaq2qiGq6arFqkdUr6m+VMOpmar5qgnU8tX2q11S66WiqEZUDpVPXUc9QL1M7aNhaUwal5ZCK6Ido3XQhtTV1B3Uo9SXqleon1OX01F0UzqXnkbfRD9Bv0//MkN3BnuGcMaGGbUzbs8Y0dDW8NIQahRq1Gnc0/iiydD01UzV3KLZqPlUC61loTVPa4nWHq3LWoPaNG03bb52ofYJ7Uc6sI6FTpjOcp39Ojd1hnX1dP11Jbo7dS/pDurR9bz0UvS26Z3XG9Cn6nvoi/S36V/Qf8VQZ7AZaYwyRhtjyEDHIMBAZlBp0GEwasg0jDTMM6wzfGpENGIZJRptM2o1GjLWN55jvMK4xviRCcGEZZJsssOk3WTElGkabbretNH0JVODyWXmMmuYT8woZp5mmWZVZnfNseYs81Tz3eadFrCFo0WyRYXFLUvY0slSZLnbsmsmZqbLTPHMqpkPrMhWbKscqxqrHmu6dbB1nnWj9ZtZxrPiZm2Z1T7ru42jTZrNAZvHtmq2gbZ5ts227+ws7Ph2FXZ37Sn2fvar7Zvs3zpYOggd9jh0O1Id5ziud2x1/Obk7CR1qnUacDZ2jnfe5fyARWOFsopZV10wLt4uq13Ounx2dXLNdj3h+qeblVuq2xG3l7OZs4WzD8zudTd057lXuss9GB7xHvs85J4GnjzPKs/nXkZeAq+DXv1sc3YK+yj7jbeNt9S73nuE48pZyWnxQfn4+xT6dPiq+Ub6lvs+8zP0S/Kr8Rvyd/Rf7t8SgAkICtgS8ICry+Vzq7lDgc6BKwPbgshB4UHlQc+DLYKlwc1z4DmBc7bOeTLXZK54bmMICOGGbA15GsoMzQw9Mw87L3RexbwXYbZhK8Law6nhi8OPhH+M8I7YFPE40ixSFtkapRy1IKo6aiTaJ7okWh4zK2ZlzI1YrVhRbFMcLi4q7mDc8Hzf+dvn9y1wXFCw4P5C5sKlC68t0lqUtujcYuXFvMUn4zHx0fFH4r/yQnhVvOEEbsKuhCE+h7+D/1rgJdgmGBC6C0uE/YnuiSWJL5Pck7YmDSR7JpcmD4o4onLR25SAlL0pI6khqYdSx9Ki0+rS8enx6afFauJUcVuGXsbSjC6JpaRAIs90zdyeOSQNkh7MgrIWZjVl05DB6KbMTPaDrCfHI6ci59OSqCUnl6ouFS+9ucxi2YZl/bl+uT8vRy/nL29dYbBi7YqeleyVlaugVQmrWlcbrc5f3bfGf83htcS1qWt/zbPJK8n7sC56XXO+bv6a/N4f/H+oKVAqkBY8WO+2fu+P6B9FP3ZssN+wc8P3QkHh9SKbotKir8X84us/2f5U9tPYxsSNHZucNu3ZjN0s3nx/i+eWwyWqJbklvVvnbG3YxthWuO3D9sXbr5U6lO7dQdwh2yEvCy5r2mm8c/POr+XJ5fcqvCvqduns2rBrZLdg9+09Xntq9+ruLdr7ZZ9oX3elf2VDlWlV6X7s/pz9Lw5EHWj/mfVz9UGtg0UHvx0SH5IfDjvcVu1cXX1E58imGrhGVjNwdMHRzmM+x5pqrWor6+h1RcfBcdnxV7/E/3L/RNCJ1pOsk7WnTE7tqqfWFzZADcsahhqTG+VNsU1dpwNPtza7NdefsT5z6KzB2Ypz6uc2nSeezz8/diH3wnCLpGXwYtLF3tbFrY8vxVy62zavreNy0OWrV/yuXGpnt1+46n717DXXa6evs6433nC60XDT8Wb9r46/1nc4dTTccr7V1OnS2dw1u+v8bc/bF+/43Llyl3v3xr2597ruR97vfrDggbxb0P3yYdrDt49yHo0+XvME86TwqcrT0mc6z6p+M/+tTu4kP9fj03Pzefjzx7383te/Z/3+tS//BeVFab9+f/VLu5dnB/wGOl/Nf9X3WvJ6dLDgD9U/dr0xe3PqT68/bw7FDPW9lb4de1f8XvP9oQ8OH1qHQ4effUz/ODpS+Enz0+HPrM/tX6K/9I8u+Yr7WvbN/Fvz96DvT8bSx8YkPClvYhRAIQonJgLw7hAAlFgAqJ3I/DB/cp6eEGjyG2CCwH/iyZl7QpwAqEWW8bGI0wLAcURNvQBQQp7HR6IILwDb2yt0avadmNPHBYt8sezzGaeHWxeuAf+QyRn+L3X/cwXjUR3AP9d/AXglBjQbNH4bAAAAOGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACoAIABAAAAAEAAAN4oAMABAAAAAEAAADaAAAAAMtLZkAAAEAASURBVHgB7L15kBzHde7b3VXVe/fsgwEw2AECIAkQ4CaSWkiKFClRpEiJEmWttvXsJ9lX13KE7biWwlvojxthv1DIst8LO7yI9pPFp80StVnWQkkkxUVcQYIgQez77NM9vVdVV9X7naxBczgbBiBAgEAWBt3VWZknM7/MPPnlyaWiQRBE9KUR0AhoBDQCGgGNgEZAI6ARON0IxE63QC1PI6AR0AhoBDQCGgGNgEZAIyAIaKKp64FGQCOgEdAIaAQ0AhoBjcAZQUATzTMCqxaqEdAIaAQ0AhoBjYBGQCOgiaauAxoBjYBGQCOgEdAIaAQ0AmcEAU00zwisWqhGQCOgEdAIaAQ0AhoBjYC5QAie3PvoA899/+jYgfl3qafimZs3v/vmy95jGNMlE/C5g0/++NnvHh7ZO0+kSLhlyx1vveTWpJWa6W3b/l+LhNF9Mx+1XHKp9rdvetf1l74zbiZajq2bZ/c9/uNn7z8ydqDlMvNGpeHOGzfdZs6SC/8ZScP9x8YOzgzYcmlLd964+ba3Xnxzwky2HFs3T+955L+f/e5A4VDLZeZNJpF/59Y7b9z87pmPPL/5zL7Hf/Ls/QOFIzOftlzymc53bL79uo1vnzUNT+x66Cfb7h8sHmv5n3mTT3fectkdIBmNRqc99X3vyT0P//S57w8Wjk57NPVnPtVx6+V3vXnDTbMhGfx614M/3nb/yMTg1CDT7jtzPVSnN6+/cWaNwudjL//iJ89+d6Q0n4T2bNctW+5628XvmCaZn57X/PXuhyjNsfLwzKctl+587zsuu/NNF73NNKyWY+vmkZ0P/PiZ+8crIy2XmTddud5bt9513Ya3z3zU9NxHdz34wLbvjpXnl7DonZffdfXat86Kw4M7fvLTbd8tVsdmym+59LT13brlrmvW39Byad2Aw692PvDAcz+YPxe97YuRcPW6t82sD+QCHP776fvLjWJL7Mybvo7+W7a858o1b4nFpg9xg8D/xQv//bPnvl+qFWYGbLn0tS+79fI7r1r7lpZL68ZuNh558YGfPv+D8rwSlnQuoz5sXX2NETNaYV/nm127dt13332PP/6467rzR33rrbd++MMf7u/vn+ntwIED//Ef//GLX/xi5qOWi2VZN91004c+9KFZJezdu5dk/PKXv2z5n/XmXe9610c+8pHFixfPfLp7924kPPTQQzMftVxIwy233PLBD35w6dKlLcfWDRK++tWvPvzwwy2XmTfUlttuuw0cFi1aNPPpyy+/TBoeeeSRefomJNx+++2koa+vb1YJIPnoo4/OfNRyicfjpOFDv/Gh7p7ulmPr5qWXXiIXjz32WMtl1pu77rrrox/9aEdHx8ynL774IhKoEjMftVySySRpuOeee3p6elqOrZsXXngBHH7961+3XGbe0HLf9773gWR7e/vMp88//zxpeOqpp2Y+armQhjvuuOP9739/d/csODz33HOkYX4JiUTizjvvpEZls9mW2NbNs9ueve+r9z3zzDMtl5k31Ki7776bNMyKJGFJw7PPPjszYMslk8mQBiS0tbW1HFs3Tz/9NBK2bdvWcpl5A5I0K650Oj3zKQiAJHjOfNRyIQ13vfeu9733fbOWxRNPPEEatm/f3vI/8wYkP/CBD4AklXPaU9oCEqjV1Ktpj6b+JA0g+d73vjefz091D++pz6RhfgkEJDjJSKVmIWwtmdPpYOvBtJtHX3rg589/v1IvzX8YEiTvkuVbgsjsvorVwq6j2188PF/55dLtm5Zv9TwvMkufHilWx3ceeX7n0fnKD2py8fLNfuBNy0L4s1gZfenw9l0D85VfLpXfsvpqP+LPlEDGiuXRl448t+fYfOXX3da3acUWn1zMBvB4ZQwJewdfmim/5dKe6d665urWz2k3hcrIi0e27RvcNc196s+efN9lK6/0/VlygTck7Diy7cDQnqlBpt335BdvXX01pRmNTCeaOI5XRl88tG3/8O5poab+7M73Xb76Gj+YJQ1IgFoh4dC8w4YlHcu3rJSymJUUIGHH4W3zDzx62/tJw9RUte79SDBaGtpx+Nmj8w4blnat2Lr6Wn+Og8DGSsPbDz0zWDjcEjvzZknniivXXjfTHRfAGZ8YeuHwtvmHLqThyrVvJsGz4kAuth96arg4MGsUoWN/95or17x5Vg9exB8tDb5w6JmBeXOxomctHHHW+gA4w4XB7Yee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GjZxY5ntiDltpDTG+ee5O9I0K3TN9NHcvC3OChnIELp49OTs4UOO2o8ajY8++uhf/PNHf/RH/+zV61fJqkZtsq8T0tATvN6uNzr0zLg1LSY458kKcRToF+qIOPzsnxchvKJWlpukznKpFPKjyei/9s2nH37YGgzH02Wtd1drj1IH+05JzQLJwODHjOYZKtSXgOjDLonSclI3EInoS4jctaJoxvrLy0jFL7FFHG+k0ifFB2dg53SbcWmqg1Gu605W87vJ5s2yOl61loeGFpf0ztpiYqYZBEcKljq9gpklZPWOut2orXDP9ME6MYaHlhjfLTGbgQDN9UJFpdulxQ9bjQf3d5PdSjpno9+v6riwXDVaK722aKoROqooRTcWXMBrnoDUERn5u59Wuo2rav2Fmcg04cAMKojGVxYOUWfkujjphpXmeWq9xbiuYdKhZVyQIewy8OWHoLDZYTWfKIw/TPD0NwoCdrXBsOYz/oD0EpGSUTNVk3580rw6b3T7y3sJJO8cP18C4P/f/aoFMLbT/TO7YPV7U/efDYFQxudQ+h1tfYbkhaWEIDFCR2J5pgXO5bgR0jzfa91/xVU34op00EOjJbyYygrmaXW76MyuydvcuR/aovwiwUvkJDrS7NZbpyftfq2Z8dM6WOzW8nH8CFkd6RtO5rp8BEl+W013i5E5WnuTWLX7jgC3wZDDpi4FeNFYjE/ag1qzd9I9PeldnHTPahpxo1+eH3pWeY53oPDmnYDOeQpSe+FytnJex38eLO+++GX/ug9EgozjzormXtQFV/TK5T27tmGTuXLy1d3tTkiruR+vX98tPp1WRqvTyg7ELq7UzRhTLoOwNximaZFwSFhDtIUjwPIEcZjFRfNWUckS+FekD87GV5No2YpvlOxbT14vR69362m93raau3a/flgowN6Ob+c67gnIScM100MUJQS7VqnaaQso19ezuQpGlUg6eh6mpthO3Ozq9evlJy9nr/hfX49nVMzD6sGAF7P98HH/8cPBxaXht93+UAQPk0okzj8xGUIhCmYMD68LnP6VNftCoPf1wemFUJng+N31G50Dzx88ahfXJmnuR+MLfvDB+SU4MZxkW1qDSmdA50qhj1xyGUdpJzrbiDux40kodwsn1is+LSVEaWpEJgbiERx+YjLxCBVSwU49S+afowqXS35RXGRlYloZrV7k0fFB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)\n", + "\n", + "## Main Function\n", + "\n", + "1. Produce an **Anomaly Score** for each prediction image.\n", + "2. Checkout nearst neighbor of prediction image in training dataset using the properiatery model.\n", + "3. Log prediction output and monitoring result into an unified BigQuery table.\n", + " 1. Have anomaly score and prediction result.\n", + " 2. Have batch/online information\n", + "\n", + "\n", + "## Value & Usage\n", + "\n", + "Model researchers:\n", + "- Can query images by normalized anomaly score to re-label and retrain the model instead of randomly check every image.\n", + " - Use KNN to find out which training has shortest normalized distance to understand how anomaly score is derived.\n", + "- Do joint analysis between custom trained classification model and Google's properiatery model. (e.g Query by high anomaly score and high confidence score to understand false positive predictions.)\n", + "\n", + "Model ops:\n", + "- Setup custom alert by reading average anomaly score across time at BigQuery thus monitoring prediction data quality." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "999e464a72df" + }, + "source": [ + "### Dataset\n", + "\n", + "The image dataset used for this tutorial is the [Flowers dataset](https://www.tensorflow.org/datasets/catalog/tf_flowers) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview). The version of the dataset in this tutorial is stored in a public Cloud Storage bucket. The trained model predicts the type of flower in a given image from a class of five flowers: daisy, dandelion, rose, sunflower, or tulip." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81c777b8ad32" + }, + "source": [ + "### Costs\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), [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": "install_mlops" + }, + "source": [ + "## Installations\n", + "\n", + "Install the following packages for further running this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KhuBVKyoa4ib" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install the packages\n", + "! pip3 install {USER_FLAG} -q --upgrade google-cloud-aiplatform \\\n", + " google-cloud-storage \\\n", + " pandas-gbq \n", + "\n", + "! pip3 install {USER_FLAG} -q -U google-api-core==2.10 \n", + "\n", + "! pip3 install {USER_FLAG} -q --upgrade protobuf \\\n", + " tensorflow==2.7" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "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": "FS4SrMnNunhA" + }, + "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": "project_id" + }, + "source": [ + "## Before you begin\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", + "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, Compute Engine, Cloud Storage and Cloud Logging APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,compute_component,storage_component,logging).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CgvQvG3MunhB" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wivPymBlunhC" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42c8a7c56abd" + }, + "source": [ + "#### User Email\n", + "\n", + "Set your user email address to receive monitoring alerts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce2589511bb6" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "USER_EMAIL = \"[your-email-address]\" # @param {type:\"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " USER_EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "29b110b44457" + }, + "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", + "1. **Click Create service account**.\n", + "\n", + "2. In the **Service account name** field, enter a name, and click **Create**.\n", + "\n", + "3. 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", + "4. Click Create. A JSON file that contains your key downloads to your local environment.\n", + "\n", + "5. Enter the path to your service account key as the GOOGLE_APPLICATION_CREDENTIALS variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "89788a802687" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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 AI 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rnPkbGAiunhE" + }, + "outputs": [], + "source": [ + "! 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": "l002jDLzunhF" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "51010fc06d8c" + }, + "outputs": [], + "source": [ + "import base64\n", + "\n", + "import google.cloud.aiplatform as aiplatform\n", + "import pandas as pd\n", + "import tensorflow as tf" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lXAxUco7unhF" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_file:u_dataset,csv" + }, + "source": [ + "#### Location of Cloud Storage training data.\n", + "\n", + "Now set the variable `IMPORT_FILE` to the location of the CSV index file in Cloud Storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "import_file:flowers,csv,icn" + }, + "outputs": [], + "source": [ + "IMPORT_FILE = (\n", + " \"gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "quick_peek:csv" + }, + "source": [ + "#### Quick peek at your data\n", + "\n", + "Start by doing a quick peek at the data. You count the number of examples by counting the number of rows in the CSV index file (`wc -l`) and then peek at the first few rows." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gcEpMPbLunhG" + }, + "outputs": [], + "source": [ + "FILE = IMPORT_FILE\n", + "\n", + "count = ! gsutil cat $FILE | wc -l\n", + "print(\"Number of Examples\", int(count[0]))\n", + "\n", + "print(\"First 10 rows\")\n", + "! gsutil cat $FILE | head" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_dataset:image,icn" + }, + "source": [ + "### Create the Dataset\n", + "\n", + "Next, create the `Dataset` resource using the `create` method for the `ImageDataset` class, which takes the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Dataset` resource.\n", + "- `gcs_source`: A list of one or more dataset index files to import the data items into the `Dataset` resource.\n", + "- `import_schema_uri`: The data labeling schema for the data items:\n", + " - `single_label`: Binary and multi-class classification\n", + " - `multi_label`: Multi-label multi-class classification\n", + " - `bounding_box`: Object detection\n", + " - `image_segmentation`: Segmentation\n", + "\n", + "Learn more about [ImageDataset](https://cloud.google.com/vertex-ai/docs/datasets/prepare-image)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zwJ1VdOmunhG" + }, + "outputs": [], + "source": [ + "dataset = aiplatform.ImageDataset.create(\n", + " display_name=\"flowers_\" + UUID,\n", + " gcs_source=[IMPORT_FILE],\n", + " import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,\n", + ")\n", + "\n", + "print(dataset.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_automl_pipeline:image,edge,icn" + }, + "source": [ + "### Create and run training pipeline\n", + "\n", + "To train an AutoML model, you perform two steps: 1) create a training pipeline, and 2) run the pipeline.\n", + "\n", + "#### Create training pipeline\n", + "\n", + "An AutoML training pipeline is created with the `AutoMLImageTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `TrainingJob` resource.\n", + "- `prediction_type`: The type task to train the model for.\n", + " - `classification`: An image classification model.\n", + " - `object_detection`: An image object detection model.\n", + "- `multi_label`: If a classification task, whether single (`False`) or multi-labeled (`True`).\n", + "- `model_type`: The type of model for deployment.\n", + " - `CLOUD`: Deployment on Google Cloud\n", + " - `CLOUD_HIGH_ACCURACY_1`: Optimized for accuracy over latency for deployment on Google Cloud.\n", + " - `CLOUD_LOW_LATENCY_`: Optimized for latency over accuracy for deployment on Google Cloud.\n", + " - `MOBILE_TF_VERSATILE_1`: Deployment on an edge device.\n", + " - `MOBILE_TF_HIGH_ACCURACY_1`:Optimized for accuracy over latency for deployment on an edge device.\n", + " - `MOBILE_TF_LOW_LATENCY_1`: Optimized for latency over accuracy for deployment on an edge device.\n", + "- `base_model`: (optional) Transfer learning from existing `Model` resource -- supported for image classification only.\n", + "\n", + "The instantiated object is the DAG (directed acyclic graph) for the training job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "R4JiXQMkunhG" + }, + "outputs": [], + "source": [ + "dag = aiplatform.AutoMLImageTrainingJob(\n", + " display_name=\"flowers_\" + UUID,\n", + " prediction_type=\"classification\",\n", + " multi_label=False,\n", + " model_type=\"CLOUD\",\n", + " base_model=None,\n", + ")\n", + "\n", + "print(dag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_automl_pipeline:image" + }, + "source": [ + "#### Run the training pipeline\n", + "\n", + "Next, you run the created DAG to start the training job by invoking the method `run`, with the following parameters:\n", + "\n", + "- `dataset`: The `Dataset` resource to train the model.\n", + "- `model_display_name`: The human readable name for the trained model.\n", + "- `training_fraction_split`: The percentage of the dataset to use for training.\n", + "- `test_fraction_split`: The percentage of the dataset to use for test (holdout data).\n", + "- `validation_fraction_split`: The percentage of the dataset to use for validation.\n", + "- `budget_milli_node_hours`: (optional) Maximum training time specified in unit of milli node-hours (1000 = node-hour).\n", + "- `disable_early_stopping`: If `True`, training maybe completed before using the entire budget if the service believes it cannot further improve on the model objective measurements.\n", + "\n", + "The `run` method when completed returns the `Model` resource.\n", + "\n", + "The execution of the training pipeline will take upto 2 hrs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f1kGs1JcunhH" + }, + "outputs": [], + "source": [ + "model = dag.run(\n", + " dataset=dataset,\n", + " model_display_name=\"flowers_\" + UUID,\n", + " training_fraction_split=0.8,\n", + " validation_fraction_split=0.1,\n", + " test_fraction_split=0.1,\n", + " budget_milli_node_hours=8000,\n", + " disable_early_stopping=False,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "628de0914ba1" + }, + "source": [ + "## Creating an `Endpoint` resource\n", + "\n", + "You create an `Endpoint` resource using the `Endpoint.create()` method. At a minimum, you specify the display name for the endpoint. Optionally, you can specify the project and location (region); otherwise the settings are inherited by the values you set when you initialized the Vertex AI SDK with the `init()` method.\n", + "\n", + "In this example, the following parameters are specified:\n", + "\n", + "- `display_name`: A human readable name for the `Endpoint` resource.\n", + "- `project`: Your project ID.\n", + "- `location`: Your region.\n", + "- `labels`: (optional) User defined metadata for the `Endpoint` in the form of key/value pairs.\n", + "\n", + "This method returns an `Endpoint` object.\n", + "\n", + "Learn more about [Vertex AI Endpoints](https://cloud.google.com/vertex-ai/docs/predictions/deploy-model-api)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0ea443f9593b" + }, + "outputs": [], + "source": [ + "endpoint = aiplatform.Endpoint.create(\n", + " display_name=\"flowers_\" + UUID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " labels={\"your_key\": \"your_value\"},\n", + ")\n", + "\n", + "print(endpoint)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ca3fa3f6a894" + }, + "source": [ + "## Deploying `Model` resources to an `Endpoint` resource.\n", + "\n", + "You can deploy one of more `Vertex AI Model` resource instances to the same endpoint. Each `Vertex AI Model` resource that is deployed will have its own deployment container for the serving binary. \n", + "\n", + "*Note:* For this example, you specified the deployment container for the TFHub model in the previous step of uploading the model artifacts to a `Vertex AI Model` resource.\n", + "\n", + "### Deploying a single `Endpoint` resource\n", + "\n", + "In the next example, you deploy a single `Vertex AI Model` resource to a `Vertex AI Endpoint` resource. The `Vertex AI Model` resource already has defined for it the deployment container image. To deploy, you specify the following additional configuration settings:\n", + "\n", + "- The machine type.\n", + "- The (if any) type and number of GPUs.\n", + "- Static, manual or auto-scaling of VM instances.\n", + "\n", + "In this example, you deploy the model with the minimal amount of specified parameters, as follows:\n", + "\n", + "- `model`: The `Model` resource.\n", + "- `deployed_model_displayed_name`: The human readable name for the deployed model instance.\n", + "- `machine_type`: The machine type for each VM instance.\n", + "\n", + "Do to the requirements to provision the resource, this may take upto a few minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e93b034a72f" + }, + "outputs": [], + "source": [ + "response = endpoint.deploy(\n", + " model=model,\n", + " deployed_model_display_name=\"flowers_\" + UUID,\n", + " machine_type=\"n1-standard-4\",\n", + ")\n", + "\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ba4a2924aec6" + }, + "source": [ + "## Configure a monitoring job\n", + "\n", + "Configuring the monitoring job consists of the following specifications:\n", + "\n", + "- `alert_config`: The email address(es) to send monitoring alerts to.\n", + "- `schedule_config`: The time window to analyze predictions.\n", + "- `logging_sampling_strategy`: The rate for sampling prediction requests. \n", + "- `objective_config`: What is being monitored.\n", + "\n", + "*Note:* This feature is currently on available in private preview (v1alpha1). As such it is not accessible via the Vertex AI SDK, but is accessible via the REST interface." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "71e7a539dd61" + }, + "outputs": [], + "source": [ + "import json\n", + "import subprocess\n", + "from typing import Sequence\n", + "\n", + "\n", + "def check_output(commands: Sequence[str]) -> str:\n", + " return subprocess.check_output(commands).decode(\"utf-8\").rstrip(\"\\n\")\n", + "\n", + "\n", + "def get_gcloud_path() -> str:\n", + " return check_output([\"which\", \"gcloud\"])\n", + "\n", + "\n", + "def get_auth_token() -> str:\n", + " return check_output([get_gcloud_path(), \"auth\", \"print-access-token\"])\n", + "\n", + "\n", + "AUTH_TOKEN = get_auth_token()\n", + "print(\"Auth token:\", AUTH_TOKEN)\n", + "\n", + "headers = {\n", + " \"Authorization\": \"Bearer {}\".format(AUTH_TOKEN),\n", + " \"Content-Type\": \"application/json\",\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "604a76a94bd9" + }, + "outputs": [], + "source": [ + "DEPLOYED_MODEL_ID = endpoint.gca_resource.deployed_models[0].id\n", + "\n", + "MODEL_DEPLOYMENT_MONITORING_JOB_PAYLOAD = {\n", + " \"displayName\": f\"flowers_{UUID}\",\n", + " \"endpoint\": f\"{endpoint.resource_name}\",\n", + " \"modelDeploymentMonitoringObjectiveConfigs\": {\n", + " \"deployedModelId\": f\"{DEPLOYED_MODEL_ID}\",\n", + " \"objectiveConfig\": {\"objectiveType\": \"IMAGE_CONTENT\"},\n", + " },\n", + " \"modelDeploymentMonitoringScheduleConfig\": {\n", + " \"monitorInterval\": {\n", + " \"seconds\": 3600 # The model monitoring job will be triggered every hour.\n", + " }\n", + " },\n", + " \"loggingSamplingStrategy\": {\"randomSampleConfig\": {\"sampleRate\": 1}},\n", + " \"modelMonitoringAlertConfig\": {\"emailAlertConfig\": {\"userEmails\": [USER_EMAIL]}},\n", + "}\n", + "\n", + "import requests\n", + "\n", + "API_ENDPOINT = \"{}-aiplatform.googleapis.com\".format(REGION)\n", + "\n", + "model_deployment_monitoring_job_resp = requests.post(\n", + " f\"https://{API_ENDPOINT}/v1alpha1/projects/\"\n", + " f\"{PROJECT_ID}/locations/{REGION}/modelDeploymentMonitoringJobs\",\n", + " headers=headers,\n", + " data=json.dumps(MODEL_DEPLOYMENT_MONITORING_JOB_PAYLOAD),\n", + ")\n", + "print(json.dumps(model_deployment_monitoring_job_resp.json(), indent=2))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "683ed0ba4ccd" + }, + "source": [ + "#### Wait for monitoring to initialize\n", + "\n", + "It can take a file minutes for the monitoring to initialize." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2e64ffaae2de" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " import time\n", + "\n", + " time.sleep(60 * 5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AZBZhI-kyCpv" + }, + "source": [ + "### Make an online prediction using the REST interface\n", + "\n", + "Next, you send a prediction request using the REST API. The request consists of the following 10 images:\n", + "\n", + "- 6 daisy flower images\n", + "- 2 passion flower images (out of distribution)\n", + "- 2 dog images (out of distribution)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Uu1QpCZHyaFn" + }, + "outputs": [], + "source": [ + "def predict_image_classification_sample(image_path):\n", + " \"\"\"Construct a REST based prediction request for the specified image\"\"\"\n", + "\n", + " with tf.io.gfile.GFile(image_path, \"rb\") as f:\n", + " file_content = f.read()\n", + " decoded_uint8 = tf.io.decode_image(file_content, channels=3)\n", + " # Max size of decoded image < 1.5MB\n", + " decoded_uint8 = tf.image.resize(decoded_uint8, (289, 289))\n", + " encoded_content = base64.b64encode(\n", + " tf.image.encode_jpeg(tf.cast(decoded_uint8, tf.uint8)).numpy()\n", + " ).decode(\"utf-8\")\n", + "\n", + " PREDICTION_PAYLOAD = {\n", + " \"instances\": [{\"content\": encoded_content}],\n", + " \"parameters\": {\"confidenceThreshold\": 0.5, \"maxPredictions\": 5},\n", + " }\n", + "\n", + " predict_resp = requests.post(\n", + " f\"https://{API_ENDPOINT}/v1alpha1/\" f\"{endpoint.resource_name}:predict\",\n", + " headers=headers,\n", + " data=json.dumps(PREDICTION_PAYLOAD),\n", + " )\n", + "\n", + " return predict_resp\n", + "\n", + "\n", + "IMAGE_INPUT_FILE = (\n", + " \"gs://cloud-samples-data/vertex-ai/model-monitoring/flowers_anomaly_dog/batch.jsonl\"\n", + ")\n", + "\n", + "lines = tf.io.gfile.GFile(IMAGE_INPUT_FILE).readlines()\n", + "for line in lines:\n", + " image_path = json.loads(line)[\"content\"]\n", + " response = predict_image_classification_sample(image_path)\n", + " print(\"finish prediction. image path: \" + image_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "69ce0fd935d3" + }, + "source": [ + "### Make an online prediction using the SDK interface\n", + "\n", + "Next, you send a prediction request using the SDK with the same 10 images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "61fcefd18066" + }, + "outputs": [], + "source": [ + "def predict_image_classification(image_path):\n", + " with tf.io.gfile.GFile(image_path, \"rb\") as f:\n", + " file_content = f.read()\n", + " decoded_uint8 = tf.io.decode_image(file_content, channels=3)\n", + " # Max size of decoded image < 1.5MB\n", + " decoded_uint8 = tf.image.resize(decoded_uint8, (289, 289))\n", + " encoded_content = base64.b64encode(\n", + " tf.image.encode_jpeg(tf.cast(decoded_uint8, tf.uint8)).numpy()\n", + " ).decode(\"utf-8\")\n", + " INSTANCE = {\"content\": {\"b64\": encoded_content}}\n", + "\n", + " response = endpoint.predict(instances=[INSTANCE])\n", + " print(response)\n", + "\n", + "\n", + "IMAGE_INPUT_FILE = (\n", + " \"gs://cloud-samples-data/vertex-ai/model-monitoring/flowers_anomaly_dog/batch.jsonl\"\n", + ")\n", + "\n", + "lines = tf.io.gfile.GFile(IMAGE_INPUT_FILE).readlines()\n", + "for line in lines:\n", + " image_path = json.loads(line)[\"content\"]\n", + " try:\n", + " response = predict_image_classification(image_path)\n", + " except Exception as e:\n", + " print(e)\n", + " print(\"finish prediction. image path: \" + image_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "683ed0ba4ccd" + }, + "source": [ + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2e64ffaae2de" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " import time\n", + "\n", + " time.sleep(60 * 90)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "adpvEKKdzgzq" + }, + "source": [ + "## Check 1: Check email\n", + "\n", + "After about 1 hour the model monitoring job will send email to you about the prediction you have made. You can click the BigQuery link to view generated model monitoring records.\n", + "\n", + "![image.png](data:image/png;base64,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QASIABEgAiVOQDTTgqO2mVJqllKgaJbiMx6WlUUZffoBO6Fv376nz5zGEhQYGHPnzl2/fv2kyZOguWqVqlhV/7FZIAlW8M/4ewYSVjCrMHXqVBkaYLd07NgRk0cIMAczGcJ0iwgQASJABIgAESACRIAIEIFPJKAs2p/43eETqnQvJDfoacrDF6lsGf27O8X/P9a01Kig1cyiTKt6mlYl6hgGJy4UCxsWs8IlJCRgBgbTJsUuK1t8j82Ri62BEhIBIkAEiAARIAJEgAgQASJQ4gTezrQwvTAqCvNVg0TbcZXw0aKmWslaLCgfZ66wshobF/dnX97VlcyVdyTo/0SACBABIkAEiAARIAJE4CsiwH7f/n2BWtZSGWqjK1rcUkIHVI3uadi6Toku7S+hspEaIkAEiAARIAJEgAgQASJABL5+Ah+4h3HFDX+du88x0e1RJhdTvEDbBtqje5WpWl69eMkpFREgAkSACBABIkAEiAARIAJEQLrRwri4BGScupMcHCFaOvKxR/0qGgM6GrZv/BG7eH1sFiRPBIgAESACRIAIEAEiQASIwH+BgCyjhdXfJzjTyTfNOSCDt2JfkAz2SrZprNOlmZ5VfdGP1tNBBIgAESACRIAIEAEiQASIABH4RALyjRaWQXZuwYNn2cEvs59H50TG571JyUvPFm07pqupbGKgVtlUrWYFjfrVNC1raWqqi6+T+cQiUnIiQASIABEgAkSACBABIkAE/ssEFDVa/suMqO5EgAgQASJABIgAESACRIAIlCIBmhUpRfiUNREgAkSACBABIkAEiAARIALyCZDRIp8RSRABIkAEiAARIAJEgAgQASJQigTIaClF+JQ1ESACRIAIEAEiQASIABEgAvIJkNEinxFJEAEiQASIABEgAkSACBABIlCKBMhoKUX4lDURIAJEgAgQASJABIgAESAC8gmQ0SKfEUkQASJABIgAESACRIAIEAEiUIoEyGgpRfiUNREgAkSACBABIkAEiAARIALyCZDRIp8RSRABIkAEiAARIAJEgAgQASJQigTIaClF+JQ1ESACRIAIEAEiQASIABEgAvIJkNEinxFJEAEiQASIABEgAkSACBABIlCKBMhoKUX4lDURIAJEgAgQASJABIgAESAC8gmQ0SKfEUkQASJABIgAESACRIAIEAEiUIoEyGgpRfiUNREgAkSACBAB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aCLW0+tn9xlEJX+d2gm/Trhjwo4A98DSzUpNuTiZHot+Pk5qtbLPlSk2JkX74Kll5KXhEsDqx2lX/zy2+p/FvyzC8toyTcv+MuknyWNBu7C5AjwWrEmu2KiC4TaTNScBEiAB3QQ406KbD++SAAmQAAmQAAmQAAmQAAn8xwTUY0z/4+qweBIgARIgARIgARIgARIgARJISoBOS1IevCIBEiABEiABEiABEiABEtAzAnRa9KxDWB0SIAESIAESIAESIAESIIGkBOi0JOXBKxIgARIgARIgARIgARIgAT0jQKdFzzqE1SEBEiABEiABEiABEiABEkhKgE5LUh68IgESIAESIAESIAESIAES0DMCdFr0rENYHRIgARIgARIgARIgARIggaQE6LQk5cErEiABEiABEiABEiABEiABPSNAp0XPOoTVIQESIAESIAESIAESIAESSEqATktSHrwiARIgARIgARIgARIgARLQMwJ0WvSsQ1gdEiABEiABEiABEiABEiCBpATotCTlwSsSIAESIAESIAESIAESIAE9I0CnRc86hNUhARIgARIgARIgARIgARJISoBOS1IevCIBEiABEiABEiABEiABEtAzAnRa9KxDWB0SIAESIAESIAESIAESIIGkBOi0JOXBKxIgARIgARIgARIgARIgAT0jQKdFzzqE1SEBEiABEiABEiABEiABEkhKgE5LUh68IgESIAESIAESIAESIAES0DMCdFr0rENYHRIgARIgARIgARIgARIggaQE6LQk5cErEiABEiABEiABEiABEiABPSNAp0XPOoTVIQESIAESIAESIAESIAESSEqATktSHrwiARIgARIgARIgARIgARLQMwJ0WvSsQ1gdEiABEiABEiABEiABEiCBpATotCTlwSsSIAESIAESIAESIAESIAE9I0CnRc86hNUhARIgARIgARIgARIgARJISoBOS1IevCIBEiABEiABEiABEiABEtAzAnRa9KxDWB0SIAESIAESIAESIAESIIGkBOi0JOXBKxIgARIgARIgARIgARIgAT0jQKdFzzqE1SEBEiABEiABEiABEiABEkhKgE5LUh68IgESIAESIAESIAESIAES0DMCdFr0rENYHRIgARIgARIgARIgARIggaQE6LQk5cErEiABEiABEiABEiABEiABPSNAp0XPOoTVIQESIAESIAESIAESIAESSEqATktSHrwiARIgARIgARIgARIgARLQMwJ0WvSsQ1gdEiABEiABEiABEiABEiCBpATotCTlwSsSIAESIAESIAESIAESIAE9I0CnRc86hNUhARIgARIgARIgARIgARJISoBOS1IevCIBEiABEiABEiABEiABEtAzAnRa9KxDWB0SIAESIAESIAESIAESIIGkBOi0JOXBKxIgARIgARIgARIgARIgAT0jQKdFzzqE1SEBEiABEiABEiABEiABEkhKgE5LUh68IgESIAESIAESIAESIAES0DMCdFr0rENYHRIgARIgARIgARIgARIggaQE6LQk5cErEiABEiABEiABEiABEiABPSNAp0XPOoTVIQESIAESIAESIAESIAESSEqATktSHrwiARIgARIgARIgARIgARLQMwJ0WvSsQ1gdEiABEiABEiABEiABEiCBpATotCTlwSsSIAESIAESIAESIAESIAE9I0CnRc86hNUhARIgARIgARIgARIgARJISoBOS1IevCIBEiABEiABEiABEiABEtAzAnRa9KxDWB0SIAESIAESIAESIAESIIGkBOi0JOXBKxIgARIgARIgARIgARIgAT0jQKdFzzqE1SEBEiABEiABEiABEiABEkhKgE5LUh68IgESIAESIAESIAESIAES0DMCdFr0rENYHRIgARIgARIgARIgARIggaQE6LQk5cErEiABEiABEiABEiABEiABPSNAp0XPOoTVIQESIAESIAESIAESIAESSErAJOmlYVx5PPB8+dhbqquZualtFtvCFQulT59eEqY8EeQX5HrpoY29TZm6pVKS6623/+NrbhYZzCs2rqBb3/eF352Td6MiowpVKORcvbhu5dS9Gxn23tLaIi4u7vK+q0ZGRlVbVP4yOKlbK1ojARIgARIgARIgARIggS8gYJBOy81jt7YM3aTWWqey+aacmmSTyUZNnuzlyyc+89rOKVStaJlLKXJa3O+5Qz9nkVy6nZYQ/5A+BXqL0hsP/uFfc1q8n/isG76+ZoeadTrUiomKQVVRhy0hWzLYZkgWBRVIgARIgARIgARIgARIQA8JGKTTIjjCS2ncrzEmE975vzsw9aDnHfd/1p9qM6jl51LO6pil7aT2mXJm+tyMuvVfPfOFgqWV9RyXWVZ2/57DsHXS9tv7b8JpQekmZqZoGhKm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sMyv5/wrib8DW+wx+vLBBx9gOWNYZoZuGrGlSUOGDCHn5ZdfbtKkCd4eLN6FCxfieP+bxMlYu6QFAUEgIwiI0ZIRlITmISOwatUqggQ6duxItABhY9VrVO/Zo+fu3btZfiNgABWkcuXKVJmQkPDXX3+xOu7v71+0aNGuXbtWqFBBNQWliigvFL5OnTqhZoWFhfXq1atAgQJ88SxZsgT1xdnZuWnTpo8//rj9phOVwaL7oUOHvL2969WrZ59YnmYnBL7++utx48ZZ9+jIkSN79uw5d+4cS61IFwo9NGgwBHERekTEESviiCKRhCzBQoBag9euVatWhJyRRvYoyLq7u7s7BfHsbd++Hd+F8qj06NEDCTdWit+DW0LFcubMuWPHDkTR+JToJl4TM6nOoPTyHmGNwJbXB5fLokX/Z+++AywriraBfysLAoJkCQZyEFSQLIuCEgQElaAEZckCEkWCoBIVRHIQlMySQUDSIiAgyJKUnFRekmQEAyDBwH6/pV7a8957z507w87s3Jk6f5zpU6e7uvupOt1V3dV3LixOi0gYdNa2HokK890dddRRU0455WuvvTb11FNbn2OL6+kbb7zBjPNBzTDDDNG8DlES4aNTPlXdV+m66647xRRTVDv4btJHHHGE4njaxZVYe+21OX7csIcffrjZyiQX2D744IMcDJIS+aMIAC+7/LI777hTcB1Bk2aMPHX0t8ZPEBZJ4XP6aadL8/QuueQS6JFRvHKvw62lMpx++gQ+rlNPPXWNNdYId6VE6GFrkKQ/ygp+09lppplGZmFpiLTOQGrkpFTaQFve5jQRbj1i+/LLLxuERbJBQ1AcPyTafM4554hw+/KXv0wQxnbfQuj8SSedFLr90EMPzTLLLOH4lW7atuJt+rhEJ/oWqh3QQW6hqC1hfuutt14sNLTvvnpNJc8++6xaKK2QyGDYXhWfe+45nZJz00031WzxotT+ySef9JlH8RdeeOGiiy4yMmiJQMrogld1UJxy6imvvvKqD8cUQzRbbLGFnVVpCAh+gxiBBue8JwKJQIcIjDC8dph18GQzqHVjswcPgJOkJYcccshPf/pTA/dee+216667ci2qzQhzKiisClYO8+jYY4+NubPkdCBBkPG555773e9+txAjwb3heGy//famq/Jq55133mGHHcqjhNnRFCthpmcfeDt27NhqBt4R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PbfEEkuoouTEqpn+yiuvPProoyXPiBEjPvGJT8Tjn/70pwcffHC22Wb7+Mc/Xm1kHV1L7rjzjvFvjcehNAarf//737/97W+nmmoq9Pe857/urqpvv/32+eabb8455ywNiISmXnHFFZ/73OemmWaa8iryg3fRRRet8m/Dp5StJp5//nmQTj/99Isttli1X/K89NJLt9122xprrFHND0n5gTnDDDNU6S2VJDK05NMgdLA0SFbZGWec8SMf+UippUEZ0MePH//73//+z3/+89JLLz3llFOitOfz17/+ldKOHDmSplXVBmhqJ7Jlllmm0BHrlOG1114jLDk/9rGPlfxqbxb63/72t8cff9yr6kXEgV7LeuWsE8qLL774u9/97sMf/vBCCy3UIKwq/5JWu/wzzTzTIgsvQlUKfSImfET//Oc/6UNLng1SLnnqtKVOu0rBTPQrAhT7hhtuWG655aabbrq6in7961/PMcccCyywQF2GpDcj0Dx2NedJSiKQCCQCA4QA46nrLtD02Oa33nrrwAMPnGeeeVZddVX3DTbYgFGoFDNxrbXWQvnUpz7l/rOf/SxYxSNKuRT0qo7+j3/8A0+ZV1xxRXc8mVmlVU8//TRL+vvf/36hPPHEE4VzJB566KHyVuLggw9GN0MEEbeNR2+MEvwPO+yw9vRLL720gX/kP/fccwtdX9iU7encG/k13iU/2zfy33zzzUGMJt15151BP+mkk4LiDhC2adDjfvjhh6M/+eSThfiDH/wAJVDFkMHdCZ9SvCTGjh1b5VOtglO60UYbqaJk5jt985vflD/A/N73vhfKUKckUbCZT0uhP/XUUzg3XD/84Q9L7c3KwMANtQwcyEjmNnw4xrBSRdxvueWWYE5bcChy+dWvfhX0OmWoggYKOhn5Wwqdt9nQKY/XXHONInX1VvlrVRFKfIkB/tZbbw3GqLfufsEFF6grwPEVvPrqq3U5q/ROhoWSP9D+1re+VSgl0VLK3tZpS512FYaZ6C0CvRJlMKdsdObee+9tUxcNPOGEE9pkGA6veoVt89g1HCAabH3slcgGW+OzPYnAxEWgZ+t/4tY3Ubh18g0z7MxhYcZZHJVmUal97733lr777rulb7zxRunf/OY30pyEv7xzsczQL7zwwjb0n//85/KE2WfJXPqYY46R36V4GJdVp+W6666Tx8z6TiV/Cbs5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Aw888K9//avkkZhiiikWXnjhOnrkfPbZZ++6665ZZpll8cUXn2yyyarF//CHP7z88stLLbVUEP/zn//cf//91QxaNfXUUxfKG2+8cf31148aNer9739/KXLfffc999xzSyyxhCpKTqya6a+88sqjjz5a8owYMeITn/hEPP7pT3968MEHZ5ttto9//OPVRtbRteSOO+8Y/9Z4HEpjsPr3v//929/+dqqppkJ/z3v+6+6q+vbbb59vvvnmnHPO0oBIaOoVV1zxuc99bppppimvIj94F1100Sr/NnxK2WrixRdf/N3vfvfhD394oYUWqvZLnpdeeum2225bY401In97IUaeG264QfvnmmuueHSvE+4jjzzy8MMPq7RkbiNcr4D//PPPf+xjHyOCwvyvf/0rJRw5ciTNqarB+PHjaQ5Rzj333B/96Ecjfxv+QKNXRLbMMstU+UTBZ555hqp8/vOfL/XWCb2O7qO44447Xn31VY354Ac/WPi89tprhK5G/arW+7e//Y1QZpp5pkUWXoSIS34ieOKJJ4A2zzzzFGKbRB2fNkU6f9VGc4JJyyHCK8PJP/7xj1LR7LPP/oEPfKA8NmhdoWdiABCgkD7h5ZZbbrrppqur7te//vUcc8yxwAIL1GVIejMCDRNZc4akJAKJQCIwcAgwkrrugk6PbX7rrbcOPPBAFtKqq67qvsEGG7C5lfrzn/+81lproXzqU59y/9nPfhas4hGlXAp6VUdnu+Ap84orruiOJzOrtOrpp59ebLHFvv/97xcKi61wjsRDDz1U3kocfPDB6GaIIOK28eiNUYL/YYcd1p5+6aWXNvCP/Oeee26h6wvruT2dhS2/xrvkZz1H/ptvvjmI0aQ777oz6CeddFJQ3AHCHAx63A8//HD0J598shB/8IMfoASqGDK4O+FTipdECDfA2XrrrYmjvGJxbrTRRqoolKhOveUK4ZYMv/rVr7w6//zzg1InXL7BV77yFTmj3mOOOSby1wmXRxHqF/mvueaayM/R1Xd84n7LLbcE/fe//33kjAZ/97vfpcZe1fGnLXIWuehF8In7P//5z7XXXlsthdhbZaBUwTzaeeGFFwarsWPHYhuN1GDNC/oFF1xQ6LSXq4Puu9ttt91KZ7fcckuOUGlSy0RLPi1zVomdDAvyt9Gc4FY3RHgbXdaXuM4+++zSgGatK68y0VsE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gXRaulFq2eZEIBFIBBKBRCARSAQSgURgGCGQTsswEnZ2NRFIBBKBRCARSAQSgUQgEehGBNJp6UapZZsTgUQgEUgEEoFEIBFIBBKBYYRAOi3DSNjZ1UQgEUgEEoFEIBFIBBKBRKAbEUinpRullm1OBBKBRCARSAQSgUQgEUgEhhEC6bQMI2FnVxOBRCARSAQSgUQgEUgEEoFuRGBkNza68zb/z9vX/PPPP++885ZSb7755j333PP3v//9k5/85Mwzzxz0Bx544F//+lfJIzHFFFMsvPDCdfTI+eyzz951112zzDLL4osvPtlkk1WL/+EPf3j55ZeXWmqpIP7nP/+5//77qxm0auqppy6UN9544/rrrx81atT73//+UuS+++577rnnllhiCVWUnFg101955ZVHH3205BkxYsQnPvGJePzTn/704IMPzjbbbB//+Merjayja8kdd94x/q3xOJTGYPXvf//7t7/97VRTTYX+nvf8191V9e233z7ffPPNOeecpQGR0NQrrrjic5/73DTTTFNeRX7wLrroolX+bfiUsg2JZv4thVstdcMNN2jnXHPNVYiPPPLIww8/vNBCC1WJ8fall1667bbb1lhjjXhsowxaEkoF5KJUpYpm4carBiVBbMkHsU55XnvtNeBTpI997GNVdaoTbh2d8t9xxx2vvvrqRz/60Q9+8IOl5ZEYN24cYuDzt7/97fHHH2/IANIZZpghiM1CocPPP/98KTLttNPOM8885bFlQi2/+93vZpp5pkUWXoSqtMzTZ+KLL76I+Yc//GFCr34RhWEbLepcWwq3TAxyBG666SYjJB0eOXIkJa9OFoO85f3aPB8yWHy5xhbTR8u6/vrXvxr34GYGLONPm8komFTHk5Zsk5gIJAKJQGsExnfhpSc9tvqtt9468MAD2Uarrrqq+wYbbMDmVurPf/7zWmuthfKpT33K/Wc/+1mwikeUcinoVR39H//4B54yr7jiiu54MrNKq55++unFFlvs+9//fqE88cQThXMkHnroofJW4uCDD0ZnxQYRt41Hb4wS/A877LD29EsvvbSBf+Q/99xzC11fzEDt6WYp+TXeJT9HKPLffPPNQYwm3XnXnUE/6aSTguIOEOZg0ON++OGHoz/55JOF+IMf/AAlUMWQLd4Jn1K8IdHAv064pdSvfvUrtZ9//vlB4Ut85StfQQmQ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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ary8Dh7g3KMv" + }, + "source": [ + "## Check 2 : Check Outliers From BigQuery\n", + "\n", + "First, you define some helper functions:\n", + "\n", + "- `get_online_prediction_anomaly_scores`: Get anomaly scores per image for the online prediction from the corresponding BigQuery anomaly score table.\n", + "- `plot_outlier_images`: Plot the top (greatest) outlier images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nHbEmRQM3P5R" + }, + "outputs": [], + "source": [ + "import io\n", + "\n", + "import matplotlib.image as mpimg\n", + "import matplotlib.pyplot as plt\n", + "import tensorflow as tf\n", + "\n", + "\n", + "def plot_outlier_images(data: pd.DataFrame, col_num: int = 4) -> None:\n", + " row_num = int((data.shape[0] - 1) / col_num) + 1\n", + " plot, axes = plt.subplots(row_num, col_num, figsize=(8 * col_num, 7 * row_num))\n", + " if row_num == 1:\n", + " axes = [axes]\n", + " print(row_num, col_num)\n", + " for idx, row in data.reset_index().iterrows():\n", + " ax = axes[int(idx / col_num)][int(idx % col_num)]\n", + " fp = io.BytesIO(row[\"thumbnail\"])\n", + " img = mpimg.imread(fp, format=\"jpeg\")\n", + " # ax = axes[0][0]\n", + " ax.imshow(img)\n", + " ax.title.set_text(\n", + " \"{} \\n automl_prediciton: {}, automl condifence: {} \\n normalized anomaly score: {}, anomaly score: {}\".format(\n", + " row[\"image_id\"],\n", + " row[\"classification\"],\n", + " round(row[\"confidence_score\"], 2),\n", + " round(row[\"normalized_score\"], 2),\n", + " round(row[\"score\"], 2),\n", + " )\n", + " )\n", + "\n", + "\n", + "def get_online_prediction_anomaly_scores(\n", + " deployed_model_id: int,\n", + " limits: int = 20,\n", + " ascore_threshold: float = 2,\n", + " ascending: bool = False,\n", + " greater: bool = True,\n", + ") -> pd.DataFrame:\n", + " TABLE_NAME = (\n", + " f\"{PROJECT_ID}.vertex_ai_model_monitoring.image_classification_anomaly_scores\"\n", + " )\n", + " SELECT_COLUMNS = [\n", + " \"image_id\",\n", + " \"record_time\",\n", + " \"prediction_result.confidence_score\",\n", + " \"prediction_result.classification\",\n", + " \"anomaly_score_result.score\",\n", + " \"anomaly_score_result.normalized_score\",\n", + " \"nearest_neighbor\",\n", + " \"metadata.thumbnail\",\n", + " ]\n", + " query_string = (\n", + " f\"\"\"SELECT {','.join(SELECT_COLUMNS)}\"\"\"\n", + " f\"\"\" FROM `{TABLE_NAME}`\"\"\"\n", + " f\"\"\" WHERE metadata.deployed_model_id = {deployed_model_id}\"\"\"\n", + " f\"\"\" AND anomaly_score_result.normalized_score {\">\" if greater else \"<\"} {ascore_threshold}\"\"\"\n", + " f\"\"\" ORDER BY anomaly_score_result.normalized_score {\"\" if ascending else \"DESC\"}\"\"\"\n", + " f\"\"\" LIMIT {limits}\"\"\"\n", + " )\n", + " print(query_string)\n", + " return pd.read_gbq(query_string, project_id=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "33714dceb92f" + }, + "source": [ + "#### Get the anomaly scores\n", + "\n", + "Get the anomaly scores, ranked by greatest. Then display the top four." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Z8c96SX0-HgW" + }, + "outputs": [], + "source": [ + "scores = get_online_prediction_anomaly_scores(DEPLOYED_MODEL_ID, ascore_threshold=3)\n", + "\n", + "scores.iloc[:4]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c8b1db0dae6f" + }, + "source": [ + "#### Plot the outlier images\n", + "\n", + "Next, you plot (display) the top outlier images.\n", + "\n", + "Notice that the four outlier images are the four out of distribution in the monitoring result. - 2 passion flower, and 2 dog images like following:\n", + "\n", + "![image.png](data:image/png;base64,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QpwAqEWW8bGI0wLAcURNvQBQQp7HR6IILwDb2yt0avadmNPHBYt8sezzGaeHWxeuAf+QyRn+L3X/cwXjUR3AP9d/AXglBjQbNH4bAAAAOGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACoAIABAAAAAEAAAaDoAMABAAAAAEAAAGaAAAAANesncoAAEAASURBVHgB7N13gGVF0TbwV0Uxo2LOqKComFDBDAZMYEIUI2BAlCiKIipIUFBRFFEREDBgQDBhAkyYc84555ww+/3gea33fOfemZ3dnZ2dGer+MdO3T4eq6qrqp+r0ued8//nPf/6nPy2BlkBLoCXQEmgJtARaAi2BlkBLoCXQEmgJtARaAi2BlsAalsD51/D4PXxLoCXQEmgJtARaAi2BlkBLoCXQEmgJtARaAi2BlkBLoCVwjgQ6E9d60BJoCbQEWgItgZZAS6Al0BJoCbQEWgItgZZAS6Al0BJYCAl0Jm4hpNxztARaAi2BlkBLoCXQEmgJtARaAi2BlkBLoCXQEmgJtAQ6E9c60BJoCbQEWgItgZZAS6Al0BJoCbQEWgItgZZAS6Al0BJYCAl0Jm4hpNxztARaAi2BlkBLoCXQEmgJtARaAi2BlkBLoCXQEmgJtAQ6E9c60BJoCbQEWgItgZZAS6Al0BJoCbQEWgItgZZAS6Al0BJYCAks80zct771rSv993OpS13qUY961K9//WtyfdOb3nTzm9/8Ote5zt577/29730vkv7Zz3628847X/nKV95ss81OOeUUlX/4wx+OOuqom970phtttNFTn/rUf/3rX2np79e+9rX73ve+z3zmM//4xz/6+oEPfOAe97jHta51rcMPP7zaPP7xj9fx6le/+oMf/ODPf/7zqf/c5z633XbbmWWnnXYyvsoPfehD/6XxSuutt95ee+31z3/+8/e///3DHvYw3R/xiEf89Kc/rTHNu8022+ju78c+9rG//OUvJ5xwwm1ucxuzbL311l/+8pfT8vvf/z7WNthgA0R+5zvf+c9//vPvf//7M5/5zD3veU9EPvCBD0SGSgTc//731+y6173uk570pB/+8Ie6IxXBKsnn6U9/uin0/chHPnK/+91P38033/wtb3mLGi0jn0022eSGN7zhC17wgt/+9rdF52QBXxe/+MWHMvzRj370oAc9SD1mtTcRIWPZ0mAqgj3rrLPufe97X+UqV9l3330zplmOPPJIbVCo+w9+8AP1P//5zw8++OCNN94YhQRr5CLAsC960Yvuete7fvazn1X5m9/85tGPfjR+73CHOyin2WGHHaZjVuHyl7+8oX73u98deuihtS4Xu9jF3vnOd2YiBJPMrW996ze+8Y1nn322SqKjXWl8yCGHEKzK973vfXe5y11UPu5xj4tk8P6ud71LJcq33357+pbZFcx4vetdD/0U7+9///s//vEP667G8lnKNHvWs54VIq9whSsQyEEHHZR6f2mFxkPdU/m6170Om5/85Cer2bCAJCKlNre61a0+/elPDy91uSXQEmgJtARaAotNAvbH2pQveclLAgwoBBVe/OIXB4ccccQR2W3Vf/Ob39x2223tlfe6170++tGPqvnVr371hCc8wf57oxvd6KUvfekQjUA49tCTTjpJM5jB7gkh2EDPOOMMNfnYjm3BKp/85CcXbrTRQyN20mc84xk6agmfFJEwz3Oe8xyQAKyCoK52tas997nPDbbREgHvfe97t9xyS93hhO9+97sw1QEHHABQIfKxj31szQKwgWpD3PjXv/4Vjr397W8PjeiLNQOCcADGNa5xjZvd7Gawa0Tx/ve//7a3va2pb3GLWxx33HF/+9vfzIvBO97xjirNHuHoDk1BBTDYpptuStSBeeqHH7wcf/zxpI1CWCgw5k9/+pMlMCkM8+pXv1p7ojjmmGNKDhaLbA34ile8AspN/f777x9Avvvuu+OCEB760Id+4QtfyHR//vOfn//851sU9YCoSgv6yEc+8trXvrZKUooYAaRiGQ1hmdwMRQ53u9vdhsTjFAaGoO585ztDTS6JEfbYYw9jws9f//rX1aDckt3gBjfAoEG+9KUvBdG5RGcsjcbAIdT67ne/Gw4ML+uvvz4y0AweE0IqcbrjjjvqaIRvfOMbkKcxrQIoHtlao4BJvaKN2IH9rAuknTDEyr7whS+kYwG3v/jFLww4+THFs5/9bOMjyWhF82TLrln8EqAMZTtUix+LcnIX1pdFCA8r3GNET3va0yw9XTr66KNxR4df//rXa6mGeifSDNeCI+6Cxf3kJz9RIywyOEvhbUos7I6B85zMhGNM/be//e1dd93V1ALY9DVUEXmZy1yGqvMGoldxNPPhXsSeNSbnhmbtRRycKi902mmnicuQbZZy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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qh1u9-7O4bnj" + }, + "outputs": [], + "source": [ + "plot_outlier_images(scores)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ad3630ad2246" + }, + "source": [ + "#### Plot the non-outlier images\n", + "\n", + "As a comparison, non outliers images are all sun flowers. And they all have low anomaly scores.\n", + "\n", + "\n", + "![image.png](data:image/png;base64,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73//+8c+9rHnPve5ys1LzbUmH/3oR7U977zzWoLHHHPMMsss89WvflXhN7/5TWpJhppHXFp96lOfWmWVVTCjl/PPP7+VbUvngx/8oGqGvO+++5qO9la/7hLoEugS6BJY5CTQE3mL3JR1hrsEugS6BLoEugS6BLoEugTGSECe4v/d8JHlkReTFrnTne4koSOzduKJJ0qE3f3udz/77LMlO/7yl7/I4klJff3rX//IRz7ypCc9CTnJDsmvM844Q3JEfufMM89MH3/+858vu+yy73znO7e+9a2T0rrzne8sMffSl74UneJju+22k0iSR5O5O+igg2TNfvazn0l4rb766vJout5tt900l9wJk/Iy0klPf/rTb3GLW9zqVrd6znOeo4KLZK+Q/cUvfiFh9IpXvOIb3/jG6aefLq0mBSMn9cY3vhHbBijXJqEjCSWDc7vb3e4Tn/jE0572NNlG2aI//OEPkozrrLOOTJYezznnHIlLdaTM5MWIQg7xlFNO0ddDHvIQTCr83Oc+p45EISbV3H777Q3npJNO2mWXXchTzohwLrnkkne+853vete7COTqq69Oxqok4AJ7Bx98sHSefvF27LHHKvzSl770jne8Y6+99pLbwmpyZ8plylzLhZUY999/f4KSoDz88MN15K4ujj766CWXXBKR0047TbYUM2T71re+9V73upeE4worrLDPPvvgWWJR2suQTSjRYdVEG6BqEbiul156aSV3u9vd6IOZ2mOPPWROIxkNP/7xj5sUJXQjgyLzCy+88IorrrjDHe6gR11ovskmmzz72c+mJGRIXMmpYQDDepTuTNunPOUp8nfURopw22231Ys6MonELi1IRMZosKn885///C1veYvsc5tlw4xs5h3veMfI2aQ84xnP0JZWI6UhzXnMYx6jjprIvulNbxokFkP82muvfd3rXke2EpRhIOX9exGVAGRLbprCyPMCLvrAFp7//OfDQIr3gQ98IBryy1/+8vjjj19uueWkeuVwjRc4fOhDH1pttdXotrwzaKLSkQN7pCRuKVRCRemtXQQ6VoKyKQItpaF9SzqnFxjLBhGEZvLUulA/HPq+613vCuigBzVGX7r8tre9LXwITRTYiH2IZP/hs2pXXXXVuuuuq0Qv7CIm9te//pUay6o//vGPV5ictST+S17yEvl3WX7AyHyUgx1iUQh72amO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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bec28d87cfcd" + }, + "outputs": [], + "source": [ + "scores = get_online_prediction_anomaly_scores(\n", + " DEPLOYED_MODEL_ID, ascore_threshold=-2, ascending=True\n", + ")\n", + "\n", + "plot_outlier_images(scores)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yDUjZd3gtk5x" + }, + "source": [ + "## Check 3: Check KNN for the prediction Image at the Training dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b0887edf34f6" + }, + "source": [ + "### Get ID of greatest outlier\n", + "\n", + "Next, you get the image id of the image that has the greatest outlier value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "54393848e3bf" + }, + "outputs": [], + "source": [ + "if not os.getenv(\"IS_TESTING\"):\n", + " image_id = scores.iloc[:4][\"image_id\"][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "D-Hx0Agl8aVL" + }, + "source": [ + "### KNN of outliers\n", + "\n", + "Plot images similiar (nearest neighbor) from the `training dataset` to the outlier." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "43F-8HYh2XfF" + }, + "outputs": [], + "source": [ + "def plot_knn_images(data: pd.DataFrame, image_id, col_num: int = 4) -> None:\n", + " image_row = data.loc[data.image_id == image_id].iloc[0]\n", + " total_image_number = len(image_row.nearest_neighbor) + 1\n", + " row_num = int((total_image_number - 1) / col_num) + 1\n", + " plot, axes = plt.subplots(row_num, col_num, figsize=(8 * col_num, 7 * row_num))\n", + " if row_num == 1:\n", + " axes = [axes]\n", + " print(row_num, col_num)\n", + "\n", + " # Print prediction image.\n", + " ax = axes[0][0]\n", + " fp = io.BytesIO(image_row[\"thumbnail\"])\n", + " img = mpimg.imread(fp, format=\"jpeg\")\n", + " ax.imshow(img)\n", + " ax.title.set_text(\n", + " \"{} \\n automl_prediciton: {}, automl confidence: {} \\n normalized anomaly score: {}, anomaly score: {}\".format(\n", + " image_row[\"image_id\"],\n", + " image_row[\"classification\"],\n", + " round(image_row[\"confidence_score\"], 2),\n", + " round(image_row[\"normalized_score\"], 2),\n", + " round(image_row[\"score\"], 2),\n", + " )\n", + " )\n", + "\n", + " for _idx, row in enumerate(image_row.nearest_neighbor):\n", + " idx = _idx + 1\n", + " ax = axes[int(idx / col_num)][int(idx % col_num)]\n", + " ax.imshow(mpimg.imread(tf.io.gfile.GFile(row[\"image_id\"], \"rb\")))\n", + " ax.title.set_text(\n", + " \"{} \\n normalized_distance: {}\".format(\n", + " \"/\".join(row[\"image_id\"].split(\"/\")[-2:]),\n", + " round(row[\"normalized_distance\"], 2),\n", + " )\n", + " )\n", + "\n", + "\n", + "if not os.getenv(\"IS_TESTING\"):\n", + " plot_knn_images(scores, image_id, col_num=3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "guv5c-Hd8jk0" + }, + "source": [ + "## KNN of non outliers\n", + "\n", + "As a comparison, non-outliers has low anomaly score and is correctly identified as daisy by AutoMl model. It has a lot of similar pictures in the training dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "S21YccTy8i7i" + }, + "outputs": [], + "source": [ + "no_scores = get_online_prediction_anomaly_scores(\n", + " DEPLOYED_MODEL_ID,\n", + " ascore_threshold=4,\n", + " greater=False,\n", + " limits=1000,\n", + " ascending=True,\n", + ")\n", + "no_scores.iloc[:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de45194eab8b" + }, + "source": [ + "### Get ID of least outlier\n", + "\n", + "Next, you get the image id of the image that has the least outlier value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7440c6e4e229" + }, + "outputs": [], + "source": [ + "if not os.getenv(\"IS_TESTING\"):\n", + " image_id = no_scores.iloc[:4][\"image_id\"][0]\n", + " print(image_id)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YmvRGGlGunhK" + }, + "source": [ + "### Plot KNN of non-outlier\n", + "\n", + "Plot images similiar (nearest neighbor) to the least outlier.\n", + "\n", + "Notice, the similiar images from the `training data` are also daisy flowers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "v7wGJape9pia" + }, + "outputs": [], + "source": [ + "if not os.getenv(\"IS_TESTING\"):\n", + " plot_knn_images(no_scores, image_id, col_num=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "39cdad8fdcc5" + }, + "source": [ + "### Delete the monitoring job\n", + "\n", + "You can delete the monitoring job using the `delete()` method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ef1ddc1d6017" + }, + "outputs": [], + "source": [ + "monitoring_job = aiplatform.ModelDeploymentMonitoringJob.list(\n", + " filter=f\"display_name=flowers_{UUID}\"\n", + ")[0]\n", + "\n", + "try:\n", + " monitoring_job.pause()\n", + "except Exception as e:\n", + " print(e)\n", + "monitoring_job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3d3bbc4f6122" + }, + "source": [ + "## Cleanup\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8a4be7b79f14" + }, + "outputs": [], + "source": [ + "delete_bucket = True\n", + "\n", + "try:\n", + " dataset.delete()\n", + " model.delete()\n", + " endpoint.undeploy_all()\n", + " endpoint.delete()\n", + "except:\n", + " pass\n", + "\n", + "# delete BQ table\n", + "! bq rm -r -f {PROJECT_ID}.vertex_ai_model_monitoring\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -rf {BUCKET_URI}" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_with_model_monitoring_automl_image_online.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom.ipynb b/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom.ipynb new file mode 100644 index 000000000..1dcf6406d --- /dev/null +++ b/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom.ipynb @@ -0,0 +1,1662 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# @title Copyright & License (click to expand)\n", + "# Copyright 2022 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": "fsv4jGuU89rX" + }, + "source": [ + "# Vertex AI Model Monitoring for custom tabular models\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lA32H1oKGgpf" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use Vertex AI Model Monitoring for custom tabular models.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de998a3953c9" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Model Monitoring`\n", + "- `Vertex AI Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Download a pre-trained custom tabular model.\n", + "- Upload the pre-trained model as a `Model` resource.\n", + "- Deploy the `Model` resource to the `Endpoint` resource.\n", + "- Configure the `Endpoint` resource for model monitoring.\n", + "- Generate synthetic prediction requests for skew.\n", + "- Wait for email alert notification.\n", + "- Generate synthetic prediction requests for drift.\n", + "- Wait for email alert notification.\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "edba71dc9840" + }, + "source": [ + "### Model\n", + "\n", + "This tutorial uses a pre-trained model, where the model artifacts are stored in a public Cloud Storage bucket. \n", + "\n", + "The model is based on [the blog post](https://cloud.google.com/blog/topics/developers-practitioners/churn-prediction-game-developers-using-google-analytics-4-ga4-and-bigquery-ml). The idea behind this model is that your company has extensive log data describing how your game users have interacted with the site. The raw data contains the following categories of information:\n", + "\n", + "- identity - unique player identitity numbers\n", + "- demographic features - information about the player, such as the geographic region in which a player is located\n", + "- behavioral features - counts of the number of times a player has triggered certain game events, such as reaching a new level\n", + "- churn propensity - this is the label or target feature, it provides an estimated probability that this player may churn, i.e. stop being an active player." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "t6Cd51FkG09E" + }, + "source": [ + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* BigQuery\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertext AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8yVpQt-JHKPF" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step.\n", + "\n", + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3848df1e5b0" + }, + "source": [ + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b24b232ee039" + }, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "\n", + "assert sys.version_info.major == 3, \"This notebook requires Python 3.\"\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install required packages.\n", + "! pip3 install {USER_FLAG} --quiet --upgrade google-cloud-aiplatform \\\n", + " google-cloud-bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the SDK, you need to restart the notebook kernel so it can find the packages. You can restart kernel from *Kernel -> Restart Kernel*, or running the following:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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", + "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. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\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": "09021c90b34c" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "You can also change the `REGION` variable, which is used for operations throughout the rest of this notebook. Below are regions supported for Vertex AI.\n", + "\n", + "- Americas: `us-central1`\n", + "- Europe: `europe-west4`\n", + "- Asia Pacific: `asia-east1`\n", + "\n", + "**For this notebook, we recommend that you leave the region set to the default value us-central1**.\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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nUjIaIu0Kb0-" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42c8a7c56abd" + }, + "source": [ + "#### User Email\n", + "\n", + "Set your user email address to receive monitoring alerts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce2589511bb6" + }, + "outputs": [], + "source": [ + "USER_EMAIL = \"[your-email-address]\" # @param {type:\"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " USER_EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench notebooks**, your environment is already\n", + "authenticated.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click **Create**. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C6H1vZYjvT6w" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8RJ3_20etd31" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:custom" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "Set the name of your Cloud Storage bucket below, which you use in this tutorial to upload the `input schema` for the monitoring service.\n", + "\n", + "Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "a0d294ff6d10" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd7a633296eb" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "from google.cloud import bigquery\n", + "from google.cloud.aiplatform import model_monitoring" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "### Create BigQuery client\n", + "\n", + "In this tutorial, you use data from the same public BigQuery table that was used to train the pre-trained model. You create a client interface, which you subsequently use to access the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "accelerators:training,prediction" + }, + "source": [ + "#### Set hardware accelerators\n", + "\n", + "You can set hardware accelerators for prediction (e.g., GPUs) or choose not to use any (CPU). Hardware accelertors lower the latency response for a prediction request. When choosing a hardware accelerators, consider the additional cost trade-off over latency.\n", + "\n", + "Set the variables `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Tesla K80 GPUs allocated to each VM, you would specify:\n", + "\n", + " (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "See the [locations where accelerators are available](https://cloud.google.com/vertex-ai/docs/general/locations#accelerators).\n", + "\n", + "Otherwise specify `(None, None)` to use a container image to run on a CPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xd5PLXDTlugv" + }, + "outputs": [], + "source": [ + "GPU = False\n", + "if GPU:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 1)\n", + "else:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (None, None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for prediction.\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1u1mr18jlugv" + }, + "outputs": [], + "source": [ + "if GPU:\n", + " DEPLOY_VERSION = \"tf2-gpu.2-5\"\n", + "else:\n", + " DEPLOY_VERSION = \"tf2-cpu.2-5\"\n", + "\n", + "DEPLOY_IMAGE = \"{}-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(\n", + " REGION.split(\"-\")[0], DEPLOY_VERSION\n", + ")\n", + "\n", + "print(\"Deployment:\", DEPLOY_IMAGE, DEPLOY_GPU, DEPLOY_NGPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training,prediction" + }, + "source": [ + "#### Set machine types\n", + "\n", + "Next, set the machine types to use for training and prediction.\n", + "\n", + "- Set the variable `DEPLOY_COMPUTE` to configure your compute resources for prediction.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YAXwbqKKlugv" + }, + "outputs": [], + "source": [ + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "TRAIN_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", TRAIN_COMPUTE)\n", + "\n", + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "DEPLOY_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Deploy machine type\", DEPLOY_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b890e02cb4b0" + }, + "source": [ + "## Introduction to Vertex AI Model Monitoring\n", + "\n", + "Vertex AI Model Monitoring is supported for AutoML tabular models and custom tabular models. You can monitor for skew and drift detection of the features in the inbound prediction requests or skew and drift detection of the feature attributions (Explainable AI) in the outbound prediction response -- that is, the distribution of the attributions on how they contributed to the output (predictions).\n", + "\n", + "The following are the basic steps to enable model monitoring:\n", + "\n", + "1. Deploy a `Vertex AI` AutoML or custom tabular model to an `Vertex AI Endpoint`.\n", + "2. Configure a model monitoring specification.\n", + "3. Upload the model monitoring specification to the `Vertex AI Endpoint`.\n", + "4. Upload or automatic generation of the `input schema` for parsing.\n", + "5. For feature skew detection, upload the training data for automatic generation of the feature distribution.\n", + "6. For feature attributions, upload corresponding `Vertex AI Explainability` specification.\n", + "\n", + "Once configured, you can enable/disable monitoring, change alerts and update the model monitoring configuration. \n", + "\n", + "When model monitoring is enabled, the sampled incoming prediction requests are logged into a BigQuery table. The input feature values contained in the logged requests are then analyzed for skew or drift on an specified interval basis. You set a sampling rate to monitor a subset of the production inputs to a model, and the monitoring interval.\n", + "\n", + "The model monitoring service needs to know how to parse the feature values, which is referred to as the input schema. For AutoML tabular models, the input schema is automatically generated. For custom tabular models, the service attempts to automatically derive the input schema from the first 1000 prediction requests. Alternatively, one can upload the input schema.\n", + "\n", + "For skew detection, the monitoring service requires a baseline for the statistical distribution of values in the training data. For AutoML tabular models this is automatically derived. For custom tabular models, you upload the training data to the service, and have the service automatically derive the distribution.\n", + "\n", + "For feature attribution skew and drift detection, requires enabling your deployed model for `Vertex AI Explainability` for custom tabular models. For AutoML models, `Vertex AI Explainability` is automatically enabled.\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9bf06cd476e9" + }, + "source": [ + "### Upload the model artifacts as a `Vertex AI Model` resource\n", + "\n", + "First, you upload the pre-trained custom tabular model artifacts as a `Vertex AI Model` resource using the `upload()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Model` resource.\n", + "- `artifact_uri`: The Cloud Storage location of the model artifacts.\n", + "- `serving_container_image`: The serving container image to use when the model is deployed to a `Vertex AI Endpoint` resource.\n", + "- `sync`: Whether to wait for the process to complete, or return immediately (async)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0193f247e216" + }, + "outputs": [], + "source": [ + "MODEL_ARTIFACT_URI = \"gs://mco-mm/churn\"\n", + "\n", + "model = aiplatform.Model.upload(\n", + " display_name=\"churn_\" + UUID,\n", + " artifact_uri=MODEL_ARTIFACT_URI,\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + " sync=True,\n", + ")\n", + "\n", + "print(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1069c6f0eba8" + }, + "source": [ + "### Deploy the `Vertex AI Model` resource to a `Vertex AI Endpoint` resource\n", + "\n", + "Next, you deploy your `Vertex AI Model` resource to a `Vertex AI Endpoint` resource using the `deploy()` method, with the following parameters:\n", + "\n", + "- `deploy_model_display`: The human reable name for the deployed model.\n", + "- `machine_type`: The machine type for each VM node instance.\n", + "- `min_replica_count`: The minimum number of nodes to provision for auto-scaling.\n", + "- `max_replica_count`: The maximum number of nodes to provision for auto-scaling.\n", + "- `accelerator_type`: The type, if any, of GPU accelators per provisioned node.\n", + "- `accelrator_count`: The number, if any, of GPU accelators per provisioned node." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b883402dda8c" + }, + "outputs": [], + "source": [ + "MIN_NODES = 1\n", + "MAX_NODES = 1\n", + "\n", + "if GPU:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=\"churn_\" + UUID,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " accelerator_type=DEPLOY_GPU.name,\n", + " accelerator_count=DEPLOY_NGPU,\n", + " )\n", + "else:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=\"churn_\" + UUID,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ba4a2924aec6" + }, + "source": [ + "## Configure a monitoring job\n", + "\n", + "Configuring the monitoring job consists of the following specifications:\n", + "\n", + "- `alert_config`: The email address(es) to send monitoring alerts to.\n", + "- `schedule_config`: The time window to analyze predictions.\n", + "- `logging_sampling_strategy`: The rate for sampling prediction requests. \n", + "- `drift_config`: The features and drift thresholds to monitor.\n", + "- `skew_config`: The features and skew thresholds to monitor." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "87abd93294c4" + }, + "source": [ + "### Configure the alerting specification\n", + "\n", + "First, you configure the `alerting_config` specification with the following settings:\n", + "\n", + "- `user_emails`: A list of one or more email to send alerts to.\n", + "- `enable_logging`: Streams detected anomalies to Cloud Logging. Default is False." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "be6137df0086" + }, + "outputs": [], + "source": [ + "# Create alerting configuration.\n", + "alerting_config = model_monitoring.EmailAlertConfig(\n", + " user_emails=[USER_EMAIL], enable_logging=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "66c7283276bc" + }, + "source": [ + "### Configure the monitoring interval specification\n", + "\n", + "Next, you configure the `schedule_config` specification with the following settings:\n", + "\n", + "- `monitor_interval`: Sets the model monitoring job scheduling interval in hours. Minimum time interval is 1 hour." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1230b92d1eed" + }, + "outputs": [], + "source": [ + "# Monitoring Interval\n", + "MONITOR_INTERVAL = 1 # @param {type:\"number\"}\n", + "\n", + "# Create schedule configuration\n", + "schedule_config = model_monitoring.ScheduleConfig(monitor_interval=MONITOR_INTERVAL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3bd8dd304191" + }, + "source": [ + "### Configure the sampling specification\n", + "\n", + "Next, you configure the `logging_sampling_strategy` specification with the following settings:\n", + "\n", + "- `sample_rate`: The rate as a percentage (between 0 and 1) to randomly sample prediction requests for monitoring. Selected samples are logged to a BigQuery table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3688c245a0e9" + }, + "outputs": [], + "source": [ + "# Sampling rate (optional, default=.8)\n", + "SAMPLE_RATE = 0.5 # @param {type:\"number\"}\n", + "\n", + "# Create sampling configuration\n", + "logging_sampling_strategy = model_monitoring.RandomSampleConfig(sample_rate=SAMPLE_RATE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c1bc3bc8992f" + }, + "source": [ + "### Configure the drift detection specification\n", + "\n", + "Next, you configure the `drift_config` specification with the following settings:\n", + "\n", + "- `drift_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for drift. The value is the detection threshold. When not specified, the default drift threshold for a feature is 0.3 (30%).\n", + "\n", + "*Note:* Enabling drift detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "128bdc05cb5b" + }, + "outputs": [], + "source": [ + "DRIFT_THRESHOLD_VALUE = 0.05\n", + "\n", + "DRIFT_THRESHOLDS = {\n", + " \"country\": DRIFT_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": DRIFT_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "drift_config = model_monitoring.DriftDetectionConfig(drift_thresholds=DRIFT_THRESHOLDS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "651b576aa037" + }, + "source": [ + "### Configure the skew detection specification\n", + "\n", + "Next, you configure the `skew_config` specification with the following settings:\n", + "\n", + "- `data_source`: The source of the dataset of the original training data. The format of the source defaults to a BigQuery table. Otherwise the setting `data_format` must be set to one of the values below. The location of the data must be a Cloud Storage location.\n", + " - `csv`: \n", + " - `jsonl`:\n", + " - `tf-record`:\n", + "- `skew_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for skew. The value is the detection threshold. When not specified, the default skew threshold for a feature is 0.3 (30%).\n", + "- `target_field`: The target label for the training dataset\n", + "\n", + "*Note:* Enabling skew detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4cb098c74d2c" + }, + "outputs": [], + "source": [ + "# URI to training dataset.\n", + "DATASET_BQ_URI = \"bq://mco-mm.bqmlga4.train\" # @param {type:\"string\"}\n", + "# Prediction target column name in training dataset.\n", + "TARGET = \"churned\"\n", + "\n", + "SKEW_THRESHOLD_VALUE = 0.5\n", + "\n", + "SKEW_THRESHOLDS = {\n", + " \"country\": SKEW_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": SKEW_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "skew_config = model_monitoring.SkewDetectionConfig(\n", + " data_source=DATASET_BQ_URI, skew_thresholds=SKEW_THRESHOLDS, target_field=TARGET\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8b6d5bd71ac9" + }, + "source": [ + "### Assemble the objective specification\n", + "\n", + "Finally, you assemble the objective specification `objective_config` with the following settings:\n", + "\n", + "- `skew_detection_config`: (Optional) The specification for the skew detection configuration.\n", + "- `drift_detection_config`: (Optional) The specification for the drift detection configuration.\n", + "- `explanation_config`: (Optional) The specification for explanations when enabling monitoring for feature attributions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d353205a8aec" + }, + "outputs": [], + "source": [ + "objective_config = model_monitoring.ObjectiveConfig(\n", + " skew_detection_config=skew_config,\n", + " drift_detection_config=drift_config,\n", + " explanation_config=None,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8ac30ffa72b5" + }, + "source": [ + "### Create the input schema\n", + "\n", + "The monitoring service needs to know the features and data types for the the feature inputs to the model, which is referred to as the `input schema`. The `input schema` can either be \n", + " - Preloaded to the monitoring service.\n", + " - Automatically generated by the monitoring service after receiving first 1000 prediction instances.\n", + " \n", + "In this tutorial, you preload the `input schema`.\n", + "\n", + "#### Create the predefined input schema\n", + "\n", + "The predefined `input schema` is specified as a YAML file. In this example, you retrieve the BigQuery schema for the training data, which includes the feature names and data types, to generate the YAML specification. The predefined `input schema` must be loade to a Cloud Storage location.\n", + "\n", + "Learn more about [Custom instance schemas for parsing input](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview#custom-input-schemas)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "59becb56ad34" + }, + "outputs": [], + "source": [ + "# Get the BQ table\n", + "\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "bq_table = bqclient.get_table(table)\n", + "\n", + "yaml = \"\"\"type: object\n", + "properties:\n", + "\"\"\"\n", + "\n", + "schema = bq_table.schema\n", + "for feature in schema:\n", + " if feature.name == TARGET:\n", + " continue\n", + " if feature.field_type == \"STRING\":\n", + " f_type = \"string\"\n", + " else:\n", + " f_type = \"integer\"\n", + " yaml += f\"\"\" {feature.name}:\n", + " type: {f_type}\n", + "\"\"\"\n", + "\n", + "yaml += \"\"\"required:\n", + "\"\"\"\n", + "for feature in schema:\n", + " if feature.name == TARGET:\n", + " continue\n", + " yaml += f\"\"\"- {feature.name}\n", + "\"\"\"\n", + "\n", + "print(yaml)\n", + "\n", + "with open(\"schema.yaml\", \"w\") as f:\n", + " f.write(yaml)\n", + "\n", + "! gsutil cp schema.yaml {BUCKET_URI}/schema.yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "82c7e7af7163" + }, + "source": [ + "### Create the monitoring job\n", + "\n", + "You create a monitoring job, with your monitoring specifications, using the `aiplatform.ModelDeploymentMonitoringJob.create()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the monitoring job.\n", + "- `project`: The project ID.\n", + "- `region`: The region.\n", + "- `endpoint`: The fully qualified resource name of the `Vertex AI Endpoint` to enable monitoring.\n", + "- `logging_sampling_strategy`: The specification for the sampling configuration.\n", + "- `schedule_config`: The specification for the scheduling configuration.\n", + "- `alert_config`: The specification for the alerting configuration.\n", + "- `objective_configs`: The specification for the objectives configuration.\n", + "- `analysis_instance_schema_uri`: The location of the YAML file containing the `input schema`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4b8dd381c5c3" + }, + "outputs": [], + "source": [ + "monitoring_job = aiplatform.ModelDeploymentMonitoringJob.create(\n", + " display_name=\"churn_\" + UUID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " endpoint=endpoint,\n", + " logging_sampling_strategy=logging_sampling_strategy,\n", + " schedule_config=schedule_config,\n", + " alert_config=alerting_config,\n", + " objective_configs=objective_config,\n", + " analysis_instance_schema_uri=f\"{BUCKET_URI}/schema.yaml\",\n", + ")\n", + "\n", + "print(monitoring_job)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3c6d3b620264" + }, + "source": [ + "#### Email notification of the monitoring job.\n", + "\n", + "An email notification is sent to the email address in the alerting configuration, notifying that the model monitoring job is now enabled.\n", + "\n", + "The contents will appear like:\n", + "\n", + "
\n", + "Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are using the Vertex AI Model Monitoring service.\n", + "This mail is to inform you that we received your request to set up drift or skew detection for the Prediction Endpoint listed below. Starting from now, incoming prediction requests will be sampled and logged for analysis.\n", + "Raw requests and responses will be collected from prediction service and saved in bq://[your-project-id].model_deployment_monitoring_[endpoint-id].serving_predict .\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dcc4aae9e20f" + }, + "source": [ + "#### Monitoring Job State\n", + "\n", + "After you start the `Vertex AI Model Monitoring` job, it will be in a `PENDING` state until `skew distribution baseline` is calculated. The monitoring service will initiate a batch job to generate the distribution baseline from the training data. \n", + "\n", + "Once the baseline distribution is generated, then the monitoring job will enter `OFFLINE` state. On the per interval basis -- e.g., once an hour, the monitoring job will enter `RUNNING` state while analyzing the sampled data. Once completed, it will return to an `OFFLINE` state while awaiting the next scheduled analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f640fb7f10cd" + }, + "outputs": [], + "source": [ + "jobs = monitoring_job.list(filter=f\"display_name=churn_{UUID}\")\n", + "job = jobs[0]\n", + "print(job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e385d103aba6" + }, + "source": [ + "### Automatic generation of the baseline distribution\n", + "\n", + "Next, the monitoring service creates a batch job to analyze the training data to generate the baseline distribution. Once completed, the monitoring service will starting monitoring on the specified interval." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "670b5bc98c2a" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Pause a bit for the baseline distribution to be calculated\n", + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(180)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "26bac245f6c5" + }, + "source": [ + "### Generate synthetic prediction requests for skew detection\n", + "\n", + "Next, you extract the first 1000 instances from the BigQuery training table to use for prediction requests. You modify the data (synthetic) to trigger the skew detection in the prediction requests from the training distribution versus serving distribution, as follows:\n", + "\n", + "- `country`: Set all values to Canada" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "\n", + "rows = bqclient.list_rows(table, max_results=1000)\n", + "\n", + "instances = []\n", + "for row in rows:\n", + " instance = {}\n", + " for key, value in row.items():\n", + " if key == TARGET:\n", + " continue\n", + " if value is None:\n", + " value = \"\"\n", + " if key == \"country\":\n", + " value = \"Canada\"\n", + " instance[key] = value\n", + " instances.append(instance)\n", + "\n", + "print(len(instances))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2b5859ea4ae9" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "Once the monitoring service has started, the sampled prediction requests will be logged to Cloud Storage. On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the first logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 500 entries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd177a8decbb" + }, + "outputs": [], + "source": [ + "while True:\n", + " time.sleep(180)\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 0:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aeaea3a7a194" + }, + "source": [ + "### Skew detection during monitoring\n", + "\n", + "The feature input skew detection will occur at the next monitoring interval. In this tutorial, you set the monitoring interval to one hour. So, in about an hour your monitoring job will go from `OFFLINE` to `RUNNING`. While running, it will analyze the logged sampled tables from the predictions during this interval and compare them to the baseline distribution.\n", + "\n", + "Once the analysis is completed, the monitoring job will send email notifications on the detected skew, in this case `country`, and the monitoring job will go into `OFFLINE` state until the next interval.\n", + "\n", + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert.\n", + "\n", + "The contents will appear like\n", + "\n", + "
\n", + " Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are subscribing to the Vertex AI Model Monitoring service.\n", + "This mail is just to inform you that there are some anomalies detected in your deployed models and may need your attention.\n", + "\n", + "\n", + "Basic Information:\n", + "\n", + "Endpoint Name: projects/[your-project-id]/locations/us-central1/endpoints/3315907167046860800\n", + "Monitoring Job: projects/[your-project-id]/locations/us-central1/modelDeploymentMonitoringJobs/8672170640054157312\n", + "Statistics and Anomalies Root Path(Google Cloud Storage): gs://cloud-ai-platform-773884b1-2a32-48d6-8b83-c03cde416b68/model_monitoring/job-8672170640054157312\n", + "BigQuery Command: SELECT * FROM `bq://[your-project-id].model_deployment_monitoring_3315907167046860800.serving_predict`\n", + "\n", + "\n", + "Training Prediction Skew Anomalies (Raw Feature):\n", + "\n", + "Anomalies Report Path(Google Cloud Storage): gs://cloud-ai-platform-773884b1-2a32-48d6-8b83-c03cde416b68/model_monitoring/job-8672170640054157312/serving/2022-08-25T00:00/stats_and_anomalies//anomalies/training_prediction_skew_anomalies\n", + "\n", + "For more information about the alert, please visit the model monitoring alert page.\n", + "\n", + "Deployed model id: \n", + "\n", + "Feature name\tAnomaly short description\tAnomaly long description\n", + "country\tHigh Linfty distance between training and serving\tThe Linfty distance between training and serving is 0.947563 (up to six significant digits), above the threshold 0.5. The feature value with maximum difference is: Canada\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b91a0e19ff8b" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 45)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "555642c341e1" + }, + "source": [ + "### Generate synthetic prediction requests for drift detection\n", + "\n", + "Next, you extract the same first 1000 instances from the BigQuery training table to use for prediction requests. You modify the data (synthetic) to trigger the drift detection in the prediction requests from the training distribution versus serving distribution, as follows:\n", + "\n", + "- `cnt_user_engagement`: increase the value 4x." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "\n", + "rows = bqclient.list_rows(table, max_results=1000)\n", + "\n", + "instances = []\n", + "for row in rows:\n", + " instance = {}\n", + " for key, value in row.items():\n", + " if key == TARGET:\n", + " continue\n", + " if value is None:\n", + " value = \"\"\n", + " elif key == \"cnt_user_engagement\":\n", + " value = int(value * 4)\n", + " instance[key] = value\n", + " instances.append(instance)\n", + "\n", + "print(len(instances))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5184c68e4c99" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the first logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 1000 entries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d9a2f9342b06" + }, + "outputs": [], + "source": [ + "while True:\n", + " time.sleep(180)\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 550:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "683ed0ba4ccd" + }, + "source": [ + "### Drift detection during monitoring\n", + "\n", + "The feature input drift detection will occur at the next monitoring interval. In this tutorial, you set the monitoring interval to one hour. So, in about an hour your monitoring job will go from `OFFLINE` to `RUNNING`. While running, it will analyze the logged sampled tables from the predictions during this interval and compare them to the previous monitoring interva distribution.\n", + "\n", + "Once the analysis is completed, the monitoring job will send email notifications on the detected drift, in this case `cnt_user_engagement`, and the monitoring job will go into `OFFLINE` state until the next interval.\n", + "\n", + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2e64ffaae2de" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 45)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "39cdad8fdcc5" + }, + "source": [ + "### Delete the monitoring job\n", + "\n", + "You can delete the monitoring job using the `delete()` method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ef1ddc1d6017" + }, + "outputs": [], + "source": [ + "monitoring_job.pause()\n", + "monitoring_job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c6280efab664" + }, + "source": [ + "#### Undeploy and delete the `Vertex AI Endpoint` resource\n", + "\n", + "Your `Vertex AI Endpoint` resource can be deleted using the `delete()` method. Prior to deleting, any model deployed to your `Vertex AI Endpoint` resource, must first be undeployed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ad0d28b762e5" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()\n", + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "18889460bd33" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c736a6bf1428" + }, + "outputs": [], + "source": [ + "delete_bucket = False\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -rf {BUCKET_URI}\n", + "\n", + "! rm -f schema.yaml\n", + "\n", + "! bq rm -f {PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "get_started_with_model_monitoring_custom.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom_tf_serving.ipynb b/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom_tf_serving.ipynb new file mode 100644 index 000000000..c012c3b53 --- /dev/null +++ b/notebooks/official/model_monitoring/get_started_with_model_monitoring_custom_tf_serving.ipynb @@ -0,0 +1,1878 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# @title Copyright & License (click to expand)\n", + "# Copyright 2022 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": "fsv4jGuU89rX" + }, + "source": [ + "# Vertex AI Model Monitoring for custom tabular models with TensorFlow Serving container\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lA32H1oKGgpf" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use Vertex AI Model Monitoring for custom tabular models and a custom deployment container.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de998a3953c9" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests, for custom tabular models, using a custom deployment container. In this tutorial, the TensorFlow Serving is used as the custom deployment container.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Model Monitoring`\n", + "- `Vertex AI Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Download a pre-trained custom tabular model.\n", + "- Upload the pre-trained model as a `Model` resource.\n", + "- Deploying the `Model` resource to an `Endpoint` resource with `TensorFlow Serving` serving binary.\n", + "- Configure the `Endpoint` resource for model monitoring.\n", + "- Generate synthetic prediction requests for skew.\n", + "- Wait for email alert notification.\n", + "- Generate synthetic prediction requests for drift.\n", + "- Wait for email alert notification.\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "edba71dc9840" + }, + "source": [ + "### Model\n", + "\n", + "This tutorial uses a pre-trained model, where the model artifacts are stored in a public Cloud Storage bucket. \n", + "\n", + "The model is based on [the blog post](https://cloud.google.com/blog/topics/developers-practitioners/churn-prediction-game-developers-using-google-analytics-4-ga4-and-bigquery-ml). The idea behind this model is that your company has extensive log data describing how your game users have interacted with the site. The raw data contains the following categories of information:\n", + "\n", + "- identity - unique player identitity numbers\n", + "- demographic features - information about the player, such as the geographic region in which a player is located\n", + "- behavioral features - counts of the number of times a player has triggered certain game events, such as reaching a new level\n", + "- churn propensity - this is the label or target feature, it provides an estimated probability that this player may churn, i.e. stop being an active player." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "t6Cd51FkG09E" + }, + "source": [ + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* BigQuery\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertext AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8yVpQt-JHKPF" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step.\n", + "\n", + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3848df1e5b0" + }, + "source": [ + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b24b232ee039" + }, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "\n", + "assert sys.version_info.major == 3, \"This notebook requires Python 3.\"\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install required packages.\n", + "! pip3 install {USER_FLAG} --quiet --upgrade google-cloud-aiplatform \\\n", + " google-cloud-bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the SDK, you need to restart the notebook kernel so it can find the packages. You can restart kernel from *Kernel -> Restart Kernel*, or running the following:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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", + "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. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\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": "09021c90b34c" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "You can also change the `REGION` variable, which is used for operations throughout the rest of this notebook. Below are regions supported for Vertex AI.\n", + "\n", + "- Americas: `us-central1`\n", + "- Europe: `europe-west4`\n", + "- Asia Pacific: `asia-east1`\n", + "\n", + "**For this notebook, we recommend that you leave the region set to the default value us-central1**.\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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nUjIaIu0Kb0-" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42c8a7c56abd" + }, + "source": [ + "#### User Email\n", + "\n", + "Set your user email address to receive monitoring alerts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce2589511bb6" + }, + "outputs": [], + "source": [ + "USER_EMAIL = \"[your-user-email]\" # @param {type:\"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " USER_EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench notebooks**, your environment is already\n", + "authenticated.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click **Create**. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C6H1vZYjvT6w" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8RJ3_20etd31" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:custom" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "Set the name of your Cloud Storage bucket below, which you use in this tutorial to upload the `input schema` for the monitoring service.\n", + "\n", + "Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "a0d294ff6d10" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd7a633296eb" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "from google.cloud import bigquery\n", + "from google.cloud.aiplatform import model_monitoring" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "### Create BigQuery client\n", + "\n", + "In this tutorial, you use data from the same public BigQuery table that was used to train the pre-trained model. You create a client interface, which you subsequently use to access the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "accelerators:training,prediction" + }, + "source": [ + "#### Set hardware accelerators\n", + "\n", + "You can set hardware accelerators for prediction (e.g., GPUs) or choose not to use any (CPU). Hardware accelertors lower the latency response for a prediction request. When choosing a hardware accelerators, consider the additional cost trade-off over latency.\n", + "\n", + "Set the variables `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Tesla K80 GPUs allocated to each VM, you would specify:\n", + "\n", + " (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "See the [locations where accelerators are available](https://cloud.google.com/vertex-ai/docs/general/locations#accelerators).\n", + "\n", + "Otherwise specify `(None, None)` to use a container image to run on a CPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xd5PLXDTlugv" + }, + "outputs": [], + "source": [ + "GPU = False\n", + "if GPU:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 1)\n", + "else:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (None, None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for prediction.\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1u1mr18jlugv" + }, + "outputs": [], + "source": [ + "if GPU:\n", + " DEPLOY_VERSION = \"tf2-gpu.2-5\"\n", + "else:\n", + " DEPLOY_VERSION = \"tf2-cpu.2-5\"\n", + "\n", + "DEPLOY_IMAGE = \"{}-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(\n", + " REGION.split(\"-\")[0], DEPLOY_VERSION\n", + ")\n", + "\n", + "print(\"Deployment:\", DEPLOY_IMAGE, DEPLOY_GPU, DEPLOY_NGPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training,prediction" + }, + "source": [ + "#### Set machine types\n", + "\n", + "Next, set the machine types to use for training and prediction.\n", + "\n", + "- Set the variable `DEPLOY_COMPUTE` to configure your compute resources for prediction.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YAXwbqKKlugv" + }, + "outputs": [], + "source": [ + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "TRAIN_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", TRAIN_COMPUTE)\n", + "\n", + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "DEPLOY_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Deploy machine type\", DEPLOY_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gar_enable_api" + }, + "source": [ + "### Enable Artifact Registry API\n", + "\n", + "You must enable the Artifact Registry API service for your project.\n", + "\n", + "Learn more about [Enabling service](https://cloud.google.com/artifact-registry/docs/enable-service)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gar_enable_api" + }, + "outputs": [], + "source": [ + "! gcloud services enable artifactregistry.googleapis.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gar_create_repo" + }, + "source": [ + "## Create a private Docker repository\n", + "\n", + "Your first step is to create your own Docker repository in Google Artifact Registry.\n", + "\n", + "1. Run the `gcloud artifacts repositories create` command to create a new Docker repository with your region with the description \"docker repository\".\n", + "\n", + "2. Run the `gcloud artifacts repositories list` command to verify that your repository was created." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gar_create_repo" + }, + "outputs": [], + "source": [ + "PRIVATE_REPO = \"my-docker-repo\"\n", + "\n", + "! gcloud artifacts repositories create {PRIVATE_REPO} --repository-format=docker --location={REGION} --description=\"Docker repository\"\n", + "\n", + "! gcloud artifacts repositories list" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gar_auth" + }, + "source": [ + "### Configure authentication to your private repo\n", + "\n", + "Before you push or pull container images, configure Docker to use the `gcloud` command-line tool to authenticate requests to `Artifact Registry` for your region." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gar_auth" + }, + "outputs": [], + "source": [ + "! gcloud auth configure-docker {REGION}-docker.pkg.dev --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:tfserving" + }, + "source": [ + "#### Container (Docker) image for serving\n", + "\n", + "Set the TensorFlow Serving Docker container image for serving prediction.\n", + "\n", + " 1. Pull the corresponding CPU or GPU Docker image for TF Serving from Docker Hub.\n", + " 2. Create a tag for registering the image with Artifact Registry\n", + " 3. Register the image with Artifact Registry.\n", + "\n", + "Learn more about [TensorFlow Serving](https://www.tensorflow.org/tfx/serving/docker)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "container:tfserving" + }, + "outputs": [], + "source": [ + "# Executes in Vertex AI Workbench\n", + "if DEPLOY_GPU:\n", + " DEPLOY_IMAGE = (\n", + " f\"{REGION}-docker.pkg.dev/\"\n", + " + PROJECT_ID\n", + " + f\"/{PRIVATE_REPO}\"\n", + " + \"/tf_serving:gpu\"\n", + " )\n", + " TF_IMAGE = \"tensorflow/serving:2.5.4-gpu\"\n", + "else:\n", + " DEPLOY_IMAGE = (\n", + " f\"{REGION}-docker.pkg.dev/\"\n", + " + PROJECT_ID\n", + " + f\"/{PRIVATE_REPO}\"\n", + " + \"/tf_serving:cpu\"\n", + " )\n", + " TF_IMAGE = \"tensorflow/serving:2.5.4\"\n", + "\n", + "if not IS_COLAB:\n", + " if DEPLOY_GPU:\n", + " ! sudo docker pull tensorflow/serving:2.5.4-gpu\n", + " else:\n", + " ! sudo docker pull tensorflow/serving:2.5.4\n", + "\n", + " ! docker tag $TF_IMAGE $DEPLOY_IMAGE\n", + " ! docker push $DEPLOY_IMAGE\n", + "else:\n", + " # install docker daemon\n", + " ! apt-get -qq install docker.io\n", + "\n", + "print(\"Deployment:\", DEPLOY_IMAGE, DEPLOY_GPU, DEPLOY_NGPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6c14c96973c3" + }, + "source": [ + "*Executes in Colab*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2450b47cb86f" + }, + "outputs": [], + "source": [ + "%%bash -s $IS_COLAB $DEPLOY_IMAGE $TF_IMAGE\n", + "if [ $1 == \"False\" ]; then\n", + " exit 0\n", + "fi\n", + "set -x\n", + "dockerd -b none --iptables=0 -l warn &\n", + "for i in $(seq 5); do [ ! -S \"/var/run/docker.sock\" ] && sleep 2 || break; done\n", + "docker pull $3\n", + "docker tag tensorflow/serving $2\n", + "docker push $2\n", + "kill $(jobs -p)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b890e02cb4b0" + }, + "source": [ + "## Introduction to Vertex AI Model Monitoring\n", + "\n", + "Vertex AI Model Monitoring is supported for AutoML tabular models and custom tabular models. You can monitor for skew and drift detection of the features in the inbound prediction requests or skew and drift detection of the feature attributions (Explainable AI) in the outbound prediction response -- that is, the distribution of the attributions on how they contributed to the output (predictions).\n", + "\n", + "The following are the basic steps to enable model monitoring:\n", + "\n", + "1. Deploy a `Vertex AI` AutoML or custom tabular model to an `Vertex AI Endpoint`.\n", + "2. Configure a model monitoring specification.\n", + "3. Upload the model monitoring specification to the `Vertex AI Endpoint`.\n", + "4. Upload or automatic generation of the `input schema` for parsing.\n", + "5. For feature skew detection, upload the training data for automatic generation of the feature distribution.\n", + "6. For feature attributions, upload corresponding `Vertex AI Explainability` specification.\n", + "\n", + "Once configured, you can enable/disable monitoring, change alerts and update the model monitoring configuration. \n", + "\n", + "When model monitoring is enabled, the sampled incoming prediction requests are logged into a BigQuery table. The input feature values contained in the logged requests are then analyzed for skew or drift on an specified interval basis. You set a sampling rate to monitor a subset of the production inputs to a model, and the monitoring interval.\n", + "\n", + "The model monitoring service needs to know how to parse the feature values, which is referred to as the input schema. For AutoML tabular models, the input schema is automatically generated. For custom tabular models, the service attempts to automatically derive the input schema from the first 1000 prediction requests. Alternatively, one can upload the input schema.\n", + "\n", + "For skew detection, the monitoring service requires a baseline for the statistical distribution of values in the training data. For AutoML tabular models this is automatically derived. For custom tabular models, you upload the training data to the service, and have the service automatically derive the distribution.\n", + "\n", + "For feature attribution skew and drift detection, requires enabling your deployed model for `Vertex AI Explainability` for custom tabular models. For AutoML models, `Vertex AI Explainability` is automatically enabled.\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b92f7ea5007d" + }, + "source": [ + "### Copy model artifacts for TensorFlow Serving\n", + "\n", + "*Note:* For TF Serving, the MODEL_DIR must end in a subfolder that is a number, e.g., 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f071f9d872bf" + }, + "outputs": [], + "source": [ + "MODEL_ARTIFACT_URI = \"gs://mco-mm/churn\"\n", + "MODEL_DIR = BUCKET_URI + \"/model/1\"\n", + "\n", + "! gsutil cp -r $MODEL_ARTIFACT_URI $MODEL_DIR" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9bf06cd476e9" + }, + "source": [ + "### Upload the model artifacts as a `Vertex AI Model` resource\n", + "\n", + "First, you upload the pre-trained custom tabular model artifacts as a `Vertex AI Model` resource using the `upload()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Model` resource.\n", + "- `artifact_uri`: The Cloud Storage location of the model artifacts.\n", + "- `serving_container_image`: The serving container image to use when the model is deployed to a `Vertex AI \n", + "- `serving_container_command`: The serving binary (HTTP Server) to start up.\n", + "- `serving_container_args`: The arguments to pass to the serving binary. For TensorFlow Serving, the required arguments are:\n", + " - `--model_name`: The human readable name to assign to the model.\n", + " - `--model_base_name`: Where to store the model artifacts in the container. The Vertex service sets the variable $(AIP_STORAGE_URI) to where the service installed the model artifacts in the container.\n", + " - `--rest_api_port`: The port to which to send REST based prediction requests. Can either be 8080 or 8501 (default for TensorFlow Serving).\n", + " - `--port`: The port to which to send gRPC based prediction requests. Should be 8500 for TensorFlow Serving.\n", + "- `serving_container_health_route`: The URL for the service to periodically ping for a response to verify that the serving binary is running. For TensorFlow Serving, this will be /v1/models/\\.\n", + "- `serving_container_predict_route`: The URL for the service to route REST-based prediction requests to. For TF Serving, this will be /v1/models/[model_name]:predict.\n", + "- `serving_container_ports`: A list of ports for the HTTP server to listen for requests.\n", + "Endpoint` resource.\n", + "- `sync`: Whether to wait for the process to complete, or return immediately (async).\n", + "\n", + "Uploading a model into a Vertex Model resource returns a long running operation, since it may take a few moments. \n", + "\n", + "*Note:* You drop the ending number subfolder (e.g., /1) from the model path to upload. The Vertex service will upload the parent folder above the subfolder with the model artifacts -- which is what TensorFlow Serving binary expects.\n", + "\n", + "*Note:* When you upload the model artifacts to a `Vertex AI Model` resource, you specify the corresponding deployment container image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0193f247e216" + }, + "outputs": [], + "source": [ + "MODEL_NAME = \"churn_\" + UUID\n", + "\n", + "model = aiplatform.Model.upload(\n", + " display_name=\"churn_\" + UUID,\n", + " artifact_uri=MODEL_DIR[:-2],\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + " serving_container_health_route=\"/v1/models/\" + MODEL_NAME,\n", + " serving_container_predict_route=\"/v1/models/\" + MODEL_NAME + \":predict\",\n", + " serving_container_command=[\"/usr/bin/tensorflow_model_server\"],\n", + " serving_container_args=[\n", + " \"--model_name=\" + MODEL_NAME,\n", + " \"--model_base_path=\" + \"$(AIP_STORAGE_URI)\",\n", + " \"--rest_api_port=8080\",\n", + " \"--port=8500\",\n", + " \"--file_system_poll_wait_seconds=31540000\",\n", + " ],\n", + " serving_container_ports=[8080],\n", + " sync=True,\n", + ")\n", + "\n", + "print(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1069c6f0eba8" + }, + "source": [ + "### Deploy the `Vertex AI Model` resource to a `Vertex AI Endpoint` resource\n", + "\n", + "Next, you deploy your `Vertex AI Model` resource to a `Vertex AI Endpoint` resource using the `deploy()` method, with the following parameters:\n", + "\n", + "- `deploy_model_display`: The human reable name for the deployed model.\n", + "- `machine_type`: The machine type for each VM node instance.\n", + "- `min_replica_count`: The minimum number of nodes to provision for auto-scaling.\n", + "- `max_replica_count`: The maximum number of nodes to provision for auto-scaling.\n", + "- `accelerator_type`: The type, if any, of GPU accelators per provisioned node.\n", + "- `accelrator_count`: The number, if any, of GPU accelators per provisioned node." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b883402dda8c" + }, + "outputs": [], + "source": [ + "MIN_NODES = 1\n", + "MAX_NODES = 1\n", + "\n", + "if GPU:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=\"churn_\" + UUID,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " accelerator_type=DEPLOY_GPU.name,\n", + " accelerator_count=DEPLOY_NGPU,\n", + " )\n", + "else:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=\"churn_\" + UUID,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ba4a2924aec6" + }, + "source": [ + "## Configure a monitoring job\n", + "\n", + "Configuring the monitoring job consists of the following specifications:\n", + "\n", + "- `alert_config`: The email address(es) to send monitoring alerts to.\n", + "- `schedule_config`: The time window to analyze predictions.\n", + "- `logging_sampling_strategy`: The rate for sampling prediction requests. \n", + "- `drift_config`: The features and drift thresholds to monitor.\n", + "- `skew_config`: The features and skew thresholds to monitor." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "87abd93294c4" + }, + "source": [ + "### Configure the alerting specification\n", + "\n", + "First, you configure the `alerting_config` specification with the following settings:\n", + "\n", + "- `user_emails`: A list of one or more email to send alerts to.\n", + "- `enable_logging`: Streams detected anomalies to Cloud Logging. Default is False." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "be6137df0086" + }, + "outputs": [], + "source": [ + "# Create alerting configuration.\n", + "alerting_config = model_monitoring.EmailAlertConfig(\n", + " user_emails=[USER_EMAIL], enable_logging=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "66c7283276bc" + }, + "source": [ + "### Configure the monitoring interval specification\n", + "\n", + "Next, you configure the `schedule_config` specification with the following settings:\n", + "\n", + "- `monitor_interval`: Sets the model monitoring job scheduling interval in hours. Minimum time interval is 1 hour." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1230b92d1eed" + }, + "outputs": [], + "source": [ + "# Monitoring Interval\n", + "MONITOR_INTERVAL = 1 # @param {type:\"number\"}\n", + "\n", + "# Create schedule configuration\n", + "schedule_config = model_monitoring.ScheduleConfig(monitor_interval=MONITOR_INTERVAL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3bd8dd304191" + }, + "source": [ + "### Configure the sampling specification\n", + "\n", + "Next, you configure the `logging_sampling_strategy` specification with the following settings:\n", + "\n", + "- `sample_rate`: The rate as a percentage (between 0 and 1) to randomly sample prediction requests for monitoring. Selected samples are logged to a BigQuery table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3688c245a0e9" + }, + "outputs": [], + "source": [ + "# Sampling rate (optional, default=.8)\n", + "SAMPLE_RATE = 0.5 # @param {type:\"number\"}\n", + "\n", + "# Create sampling configuration\n", + "logging_sampling_strategy = model_monitoring.RandomSampleConfig(sample_rate=SAMPLE_RATE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c1bc3bc8992f" + }, + "source": [ + "### Configure the drift detection specification\n", + "\n", + "Next, you configure the `drift_config` specification with the following settings:\n", + "\n", + "- `drift_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for drift. The value is the detection threshold. When not specified, the default drift threshold for a feature is 0.3 (30%).\n", + "\n", + "*Note:* Enabling drift detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "128bdc05cb5b" + }, + "outputs": [], + "source": [ + "DRIFT_THRESHOLD_VALUE = 0.05\n", + "\n", + "DRIFT_THRESHOLDS = {\n", + " \"country\": DRIFT_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": DRIFT_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "drift_config = model_monitoring.DriftDetectionConfig(drift_thresholds=DRIFT_THRESHOLDS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "651b576aa037" + }, + "source": [ + "### Configure the skew detection specification\n", + "\n", + "Next, you configure the `skew_config` specification with the following settings:\n", + "\n", + "- `data_source`: The source of the dataset of the original training data. The format of the source defaults to a BigQuery table. Otherwise the setting `data_format` must be set to one of the values below. The location of the data must be a Cloud Storage location.\n", + " - `csv`: \n", + " - `jsonl`:\n", + " - `tf-record`:\n", + "- `skew_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for skew. The value is the detection threshold. When not specified, the default skew threshold for a feature is 0.3 (30%).\n", + "- `target_field`: The target label for the training dataset\n", + "\n", + "*Note:* Enabling skew detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4cb098c74d2c" + }, + "outputs": [], + "source": [ + "# URI to training dataset.\n", + "DATASET_BQ_URI = \"bq://mco-mm.bqmlga4.train\" # @param {type:\"string\"}\n", + "# Prediction target column name in training dataset.\n", + "TARGET = \"churned\"\n", + "\n", + "SKEW_THRESHOLD_VALUE = 0.5\n", + "\n", + "SKEW_THRESHOLDS = {\n", + " \"country\": SKEW_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": SKEW_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "skew_config = model_monitoring.SkewDetectionConfig(\n", + " data_source=DATASET_BQ_URI, skew_thresholds=SKEW_THRESHOLDS, target_field=TARGET\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8b6d5bd71ac9" + }, + "source": [ + "### Assemble the objective specification\n", + "\n", + "Finally, you assemble the objective specification `objective_config` with the following settings:\n", + "\n", + "- `skew_detection_config`: (Optional) The specification for the skew detection configuration.\n", + "- `drift_detection_config`: (Optional) The specification for the drift detection configuration.\n", + "- `explanation_config`: (Optional) The specification for explanations when enabling monitoring for feature attributions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d353205a8aec" + }, + "outputs": [], + "source": [ + "objective_config = model_monitoring.ObjectiveConfig(\n", + " skew_detection_config=skew_config,\n", + " drift_detection_config=drift_config,\n", + " explanation_config=None,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8ac30ffa72b5" + }, + "source": [ + "### Create the input schema\n", + "\n", + "The monitoring service needs to know the features and data types for the the feature inputs to the model, which is referred to as the `input schema`. The `input schema` can either be \n", + " - Preloaded to the monitoring service.\n", + " - Automatically generated by the monitoring service after receiving first 1000 prediction instances.\n", + " \n", + "In this tutorial, you preload the `input schema`.\n", + "\n", + "#### Create the predefined input schema\n", + "\n", + "The predefined `input schema` is specified as a YAML file. In this example, you retrieve the BigQuery schema for the training data, which includes the feature names and data types, to generate the YAML specification. The predefined `input schema` must be loade to a Cloud Storage location.\n", + "\n", + "Learn more about [Custom instance schemas for parsing input](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview#custom-input-schemas)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "59becb56ad34" + }, + "outputs": [], + "source": [ + "# Get the BQ table\n", + "\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "bq_table = bqclient.get_table(table)\n", + "\n", + "yaml = \"\"\"type: object\n", + "properties:\n", + "\"\"\"\n", + "\n", + "schema = bq_table.schema\n", + "for feature in schema:\n", + " if feature.name == TARGET:\n", + " continue\n", + " if feature.field_type == \"STRING\":\n", + " f_type = \"string\"\n", + " else:\n", + " f_type = \"integer\"\n", + " yaml += f\"\"\" {feature.name}:\n", + " type: {f_type}\n", + "\"\"\"\n", + "\n", + "yaml += \"\"\"required:\n", + "\"\"\"\n", + "for feature in schema:\n", + " if feature.name == TARGET:\n", + " continue\n", + " yaml += f\"\"\"- {feature.name}\n", + "\"\"\"\n", + "\n", + "print(yaml)\n", + "\n", + "with open(\"schema.yaml\", \"w\") as f:\n", + " f.write(yaml)\n", + "\n", + "! gsutil cp schema.yaml {BUCKET_URI}/schema.yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "82c7e7af7163" + }, + "source": [ + "### Create the monitoring job\n", + "\n", + "You create a monitoring job, with your monitoring specifications, using the `aiplatform.ModelDeploymentMonitoringJob.create()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the monitoring job.\n", + "- `project`: The project ID.\n", + "- `region`: The region.\n", + "- `endpoint`: The fully qualified resource name of the `Vertex AI Endpoint` to enable monitoring.\n", + "- `logging_sampling_strategy`: The specification for the sampling configuration.\n", + "- `schedule_config`: The specification for the scheduling configuration.\n", + "- `alert_config`: The specification for the alerting configuration.\n", + "- `objective_configs`: The specification for the objectives configuration.\n", + "- `analysis_instance_schema_uri`: The location of the YAML file containing the `input schema`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4b8dd381c5c3" + }, + "outputs": [], + "source": [ + "monitoring_job = aiplatform.ModelDeploymentMonitoringJob.create(\n", + " display_name=\"churn_\" + UUID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " endpoint=endpoint,\n", + " logging_sampling_strategy=logging_sampling_strategy,\n", + " schedule_config=schedule_config,\n", + " alert_config=alerting_config,\n", + " objective_configs=objective_config,\n", + " analysis_instance_schema_uri=f\"{BUCKET_URI}/schema.yaml\",\n", + ")\n", + "\n", + "print(monitoring_job)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3c6d3b620264" + }, + "source": [ + "#### Email notification of the monitoring job.\n", + "\n", + "An email notification is sent to the email address in the alerting configuration, notifying that the model monitoring job is now enabled.\n", + "\n", + "The contents will appear like:\n", + "\n", + "
\n", + "Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are using the Vertex AI Model Monitoring service.\n", + "This mail is to inform you that we received your request to set up drift or skew detection for the Prediction Endpoint listed below. Starting from now, incoming prediction requests will be sampled and logged for analysis.\n", + "Raw requests and responses will be collected from prediction service and saved in bq://[your-project-id].model_deployment_monitoring_[endpoint-id].serving_predict .\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dcc4aae9e20f" + }, + "source": [ + "#### Monitoring Job State\n", + "\n", + "After you start the `Vertex AI Model Monitoring` job, it will be in a `PENDING` state until `skew distribution baseline` is calculated. The monitoring service will initiate a batch job to generate the distribution baseline from the training data. \n", + "\n", + "Once the baseline distribution is generated, then the monitoring job will enter `OFFLINE` state. On the per interval basis -- e.g., once an hour, the monitoring job will enter `RUNNING` state while analyzing the sampled data. Once completed, it will return to an `OFFLINE` state while awaiting the next scheduled analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f640fb7f10cd" + }, + "outputs": [], + "source": [ + "jobs = monitoring_job.list(filter=f\"display_name=churn_{UUID}\")\n", + "job = jobs[0]\n", + "print(job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e385d103aba6" + }, + "source": [ + "### Automatic generation of the baseline distribution\n", + "\n", + "Next, the monitoring service creates a batch job to analyze the training data to generate the baseline distribution. Once completed, the monitoring service will starting monitoring on the specified interval." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "670b5bc98c2a" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Pause a bit for the baseline distribution to be calculated\n", + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(300)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "26bac245f6c5" + }, + "source": [ + "### Generate synthetic prediction requests for skew detection\n", + "\n", + "Next, you extract the first 1000 instances from the BigQuery training table to use for prediction requests. You modify the data (synthetic) to trigger the skew detection in the prediction requests from the training distribution versus serving distribution, as follows:\n", + "\n", + "- `country`: Set all values to Canada" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "\n", + "rows = bqclient.list_rows(table, max_results=1000)\n", + "\n", + "instances = []\n", + "for row in rows:\n", + " instance = {}\n", + " for key, value in row.items():\n", + " if key == TARGET:\n", + " continue\n", + " if value is None:\n", + " value = \"\"\n", + " if key == \"country\":\n", + " value = \"Canada\"\n", + " instance[key] = value\n", + " instances.append(instance)\n", + "\n", + "print(len(instances))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2b5859ea4ae9" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "Once the monitoring service has started, the sampled prediction requests will be logged to Cloud Storage. On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the first logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 500 entries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd177a8decbb" + }, + "outputs": [], + "source": [ + "while True:\n", + " time.sleep(180)\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 0:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aeaea3a7a194" + }, + "source": [ + "### Skew detection during monitoring\n", + "\n", + "The feature input skew detection will occur at the next monitoring interval. In this tutorial, you set the monitoring interval to one hour. So, in about an hour your monitoring job will go from `OFFLINE` to `RUNNING`. While running, it will analyze the logged sampled tables from the predictions during this interval and compare them to the baseline distribution.\n", + "\n", + "Once the analysis is completed, the monitoring job will send email notifications on the detected skew, in this case `country`, and the monitoring job will go into `OFFLINE` state until the next interval.\n", + "\n", + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert.\n", + "\n", + "The contents will appear like\n", + "\n", + "
\n", + " Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are subscribing to the Vertex AI Model Monitoring service.\n", + "This mail is just to inform you that there are some anomalies detected in your deployed models and may need your attention.\n", + "\n", + "\n", + "Basic Information:\n", + "\n", + "Endpoint Name: projects/[your-project-id]/locations/us-central1/endpoints/3315907167046860800\n", + "Monitoring Job: projects/[your-project-id]/locations/us-central1/modelDeploymentMonitoringJobs/8672170640054157312\n", + "Statistics and Anomalies Root Path(Google Cloud Storage): gs://cloud-ai-platform-773884b1-2a32-48d6-8b83-c03cde416b68/model_monitoring/job-8672170640054157312\n", + "BigQuery Command: SELECT * FROM `bq://[your-project-id].model_deployment_monitoring_3315907167046860800.serving_predict`\n", + "\n", + "\n", + "Training Prediction Skew Anomalies (Raw Feature):\n", + "\n", + "Anomalies Report Path(Google Cloud Storage): gs://cloud-ai-platform-773884b1-2a32-48d6-8b83-c03cde416b68/model_monitoring/job-8672170640054157312/serving/2022-08-25T00:00/stats_and_anomalies//anomalies/training_prediction_skew_anomalies\n", + "\n", + "For more information about the alert, please visit the model monitoring alert page.\n", + "\n", + "Deployed model id: \n", + "\n", + "Feature name\tAnomaly short description\tAnomaly long description\n", + "country\tHigh Linfty distance between training and serving\tThe Linfty distance between training and serving is 0.947563 (up to six significant digits), above the threshold 0.5. The feature value with maximum difference is: Canada\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b91a0e19ff8b" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 45)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "555642c341e1" + }, + "source": [ + "### Generate synthetic prediction requests for drift detection\n", + "\n", + "Next, you extract the same first 1000 instances from the BigQuery training table to use for prediction requests. You modify the data (synthetic) to trigger the drift detection in the prediction requests from the training distribution versus serving distribution, as follows:\n", + "\n", + "- `cnt_user_engagement`: increase the value 4x." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "\n", + "rows = bqclient.list_rows(table, max_results=1000)\n", + "\n", + "instances = []\n", + "for row in rows:\n", + " instance = {}\n", + " for key, value in row.items():\n", + " if key == TARGET:\n", + " continue\n", + " if value is None:\n", + " value = \"\"\n", + " elif key == \"cnt_user_engagement\":\n", + " value = int(value * 4)\n", + " instance[key] = value\n", + " instances.append(instance)\n", + "\n", + "print(len(instances))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5184c68e4c99" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the first logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 1000 entries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d9a2f9342b06" + }, + "outputs": [], + "source": [ + "while True:\n", + " time.sleep(180)\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 550:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "683ed0ba4ccd" + }, + "source": [ + "### Drift detection during monitoring\n", + "\n", + "The feature input drift detection will occur at the next monitoring interval. In this tutorial, you set the monitoring interval to one hour. So, in about an hour your monitoring job will go from `OFFLINE` to `RUNNING`. While running, it will analyze the logged sampled tables from the predictions during this interval and compare them to the previous monitoring interva distribution.\n", + "\n", + "Once the analysis is completed, the monitoring job will send email notifications on the detected drift, in this case `cnt_user_engagement`, and the monitoring job will go into `OFFLINE` state until the next interval.\n", + "\n", + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2e64ffaae2de" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 45)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "39cdad8fdcc5" + }, + "source": [ + "### Delete the monitoring job\n", + "\n", + "You can delete the monitoring job using the `delete()` method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ef1ddc1d6017" + }, + "outputs": [], + "source": [ + "monitoring_job.pause()\n", + "monitoring_job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c6280efab664" + }, + "source": [ + "#### Undeploy and delete the `Vertex AI Endpoint` resource\n", + "\n", + "Your `Vertex AI Endpoint` resource can be deleted using the `delete()` method. Prior to deleting, any model deployed to your `Vertex AI Endpoint` resource, must first be undeployed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ad0d28b762e5" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()\n", + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "18889460bd33" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c736a6bf1428" + }, + "outputs": [], + "source": [ + "delete_bucket = False\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -rf {BUCKET_URI}\n", + "\n", + "! rm -f schema.yaml\n", + "\n", + "! bq rm -f {PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "get_started_with_model_monitoring_custom_tf_serving.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/model_monitoring/get_started_with_model_monitoring_setup.ipynb b/notebooks/official/model_monitoring/get_started_with_model_monitoring_setup.ipynb new file mode 100644 index 000000000..ef87f5580 --- /dev/null +++ b/notebooks/official/model_monitoring/get_started_with_model_monitoring_setup.ipynb @@ -0,0 +1,1719 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# @title Copyright & License (click to expand)\n", + "# Copyright 2022 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": "fsv4jGuU89rX" + }, + "source": [ + "# Vertex AI Model Monitoring for setup for tabular models\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lA32H1oKGgpf" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to setup Vertex AI Model Monitoring for tabular models.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de998a3953c9" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn to setup the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Model Monitoring`\n", + "- `Vertex AI Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Download a pre-trained custom tabular model.\n", + "- Upload the pre-trained model as a `Model` resource.\n", + "- Deploy the `Model` resource to the `Endpoint` resource.\n", + "- Configure the `Endpoint` resource for model monitoring.\n", + " - Skew and drift detection for feature inputs.\n", + " - Skew and drift detection for feature attributions.\n", + "- Automatic generation of the `input schema` by sending 1000 prediction request.\n", + "- List, pause, resume and delete monitoring jobs.\n", + "- Restart monitoring job with predefined `input schema`.\n", + "- View logged monitored data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "edba71dc9840" + }, + "source": [ + "### Model\n", + "\n", + "This tutorial uses a pre-trained model, where the model artifacts are stored in a public Cloud Storage bucket. \n", + "\n", + "The model is based on [the blog post](https://cloud.google.com/blog/topics/developers-practitioners/churn-prediction-game-developers-using-google-analytics-4-ga4-and-bigquery-ml). The idea behind this model is that your company has extensive log data describing how your game users have interacted with the site. The raw data contains the following categories of information:\n", + "\n", + "- identity - unique player identitity numbers\n", + "- demographic features - information about the player, such as the geographic region in which a player is located\n", + "- behavioral features - counts of the number of times a player has triggered certain game events, such as reaching a new level\n", + "- churn propensity - this is the label or target feature, it provides an estimated probability that this player may churn, i.e. stop being an active player." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "t6Cd51FkG09E" + }, + "source": [ + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* BigQuery\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertext AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8yVpQt-JHKPF" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step.\n", + "\n", + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3848df1e5b0" + }, + "source": [ + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b24b232ee039" + }, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "\n", + "assert sys.version_info.major == 3, \"This notebook requires Python 3.\"\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install required packages.\n", + "! pip3 install {USER_FLAG} --quiet --upgrade google-cloud-aiplatform \\\n", + " google-cloud-bigquery \\\n", + " tensorflow==2.7" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the SDK, you need to restart the notebook kernel so it can find the packages. You can restart kernel from *Kernel -> Restart Kernel*, or running the following:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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", + "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. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\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": "09021c90b34c" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "You can also change the `REGION` variable, which is used for operations throughout the rest of this notebook. Below are regions supported for Vertex AI.\n", + "\n", + "- Americas: `us-central1`\n", + "- Europe: `europe-west4`\n", + "- Asia Pacific: `asia-east1`\n", + "\n", + "**For this notebook, we recommend that you leave the region set to the default value us-central1**.\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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nUjIaIu0Kb0-" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42c8a7c56abd" + }, + "source": [ + "#### User Email\n", + "\n", + "Set your user email address to receive monitoring alerts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce2589511bb6" + }, + "outputs": [], + "source": [ + "USER_EMAIL = \"[your-email-address]\" # @param {type:\"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " USER_EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench notebooks**, your environment is already\n", + "authenticated.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click **Create**. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C6H1vZYjvT6w" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8RJ3_20etd31" + }, + "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. 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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:custom" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "Set the name of your Cloud Storage bucket below, which you use in this tutorial to upload the `input schema` for the monitoring service.\n", + "\n", + "Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "a0d294ff6d10" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd7a633296eb" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "from google.cloud import bigquery\n", + "from google.cloud.aiplatform import model_monitoring\n", + "from google.cloud.aiplatform.explain.metadata.tf.v2 import \\\n", + " saved_model_metadata_builder" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "### Create BigQuery client\n", + "\n", + "In this tutorial, you use data from the same public BigQuery table that was used to train the pre-trained model. You create a client interface, which you subsequently use to access the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "accelerators:training,prediction" + }, + "source": [ + "#### Set hardware accelerators\n", + "\n", + "You can set hardware accelerators for prediction (e.g., GPUs) or choose not to use any (CPU). Hardware accelertors lower the latency response for a prediction request. When choosing a hardware accelerators, consider the additional cost trade-off over latency.\n", + "\n", + "Set the variables `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Tesla K80 GPUs allocated to each VM, you would specify:\n", + "\n", + " (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "See the [locations where accelerators are available](https://cloud.google.com/vertex-ai/docs/general/locations#accelerators).\n", + "\n", + "Otherwise specify `(None, None)` to use a container image to run on a CPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xd5PLXDTlugv" + }, + "outputs": [], + "source": [ + "GPU = False\n", + "if GPU:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80, 1)\n", + "else:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (None, None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for prediction.\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1u1mr18jlugv" + }, + "outputs": [], + "source": [ + "if GPU:\n", + " DEPLOY_VERSION = \"tf2-gpu.2-5\"\n", + "else:\n", + " DEPLOY_VERSION = \"tf2-cpu.2-5\"\n", + "\n", + "DEPLOY_IMAGE = \"{}-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(\n", + " REGION.split(\"-\")[0], DEPLOY_VERSION\n", + ")\n", + "\n", + "print(\"Deployment:\", DEPLOY_IMAGE, DEPLOY_GPU, DEPLOY_NGPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training,prediction" + }, + "source": [ + "#### Set machine types\n", + "\n", + "Next, set the machine types to use for training and prediction.\n", + "\n", + "- Set the variable `DEPLOY_COMPUTE` to configure your compute resources for prediction.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YAXwbqKKlugv" + }, + "outputs": [], + "source": [ + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "TRAIN_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", TRAIN_COMPUTE)\n", + "\n", + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "DEPLOY_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Deploy machine type\", DEPLOY_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b890e02cb4b0" + }, + "source": [ + "## Introduction to Vertex AI Model Monitoring\n", + "\n", + "Vertex AI Model Monitoring is supported for AutoML tabular models and custom tabular models. You can monitor for skew and drift detection of the features in the inbound prediction requests or skew and drift detection of the feature attributions (Explainable AI) in the outbound prediction response -- that is, the distribution of the attributions on how they contributed to the output (predictions).\n", + "\n", + "The following are the basic steps to enable model monitoring:\n", + "\n", + "1. Deploy a `Vertex AI` AutoML or custom tabular model to an `Vertex AI Endpoint`.\n", + "2. Configure a model monitoring specification.\n", + "3. Upload the model monitoring specification to the `Vertex AI Endpoint`.\n", + "4. Upload or automatic generation of the `input schema` for parsing.\n", + "5. For feature skew detection, upload the training data for automatic generation of the feature distribution.\n", + "6. For feature attributions, upload corresponding `Vertex AI Explainability` specification.\n", + "\n", + "Once configured, you can enable/disable monitoring, change alerts and update the model monitoring configuration. \n", + "\n", + "When model monitoring is enabled, the sampled incoming prediction requests are logged into a BigQuery table. The input feature values contained in the logged requests are then analyzed for skew or drift on an specified interval basis. You set a sampling rate to monitor a subset of the production inputs to a model, and the monitoring interval.\n", + "\n", + "The model monitoring service needs to know how to parse the feature values, which is referred to as the input schema. For AutoML tabular models, the input schema is automatically generated. For custom tabular models, the service attempts to automatically derive the input schema from the first 1000 prediction requests. Alternatively, one can upload the input schema.\n", + "\n", + "For skew detection, the monitoring service requires a baseline for the statistical distribution of values in the training data. For AutoML tabular models this is automatically derived. For custom tabular models, you upload the training data to the service, and have the service automatically derive the distribution.\n", + "\n", + "For feature attribution skew and drift detection, requires enabling your deployed model for `Vertex AI Explainability`\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1mhT_d_Bi-Kf" + }, + "source": [ + "### Generate explainable metadata for `Vertex Explainable AI`\n", + "\n", + "If you want to do skew and drift detection on feature attributions of the output predictions (response), you do the additional steps:\n", + "\n", + "- Specify the explainability specification for the model.\n", + "- When subsequently uploading the model as a `Vertex AI Model` resource, include the explainability specification.\n", + "- When subsequently uploading the model monitoring configuration specification to the corresponding `Vertex AI Endpoint` resource, include the explainability objective configuration.\n", + "\n", + "As the first step, you create the explainable AI specification for your model using the helper method `SavedModelMetadataBuilder()`.\n", + "\n", + "Learn more about [Introduction to Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "805ae9b01889" + }, + "outputs": [], + "source": [ + "MODEL_ARTIFACT_URI = \"gs://mco-mm/churn\"\n", + "\n", + "params = {\"sampled_shapley_attribution\": {\"path_count\": 10}}\n", + "explanation_parameters = aiplatform.explain.ExplanationParameters(params)\n", + "\n", + "builder = saved_model_metadata_builder.SavedModelMetadataBuilder(\n", + " model_path=MODEL_ARTIFACT_URI, outputs_to_explain=[\"churned_probs\"]\n", + ")\n", + "explanation_metadata = builder.get_metadata_protobuf()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9bf06cd476e9" + }, + "source": [ + "### Upload the model artifacts as a `Vertex AI Model` resource\n", + "\n", + "Next, you upload the pre-trained custom tabular model artifacts as a `Vertex AI Model` resource using the `upload()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Model` resource.\n", + "- `artifact_uri`: The Cloud Storage location of the model artifacts.\n", + "- `serving_container_image`: The serving container image to use when the model is deployed to a `Vertex AI Endpoint` resource.\n", + "- `explanation_parameters`: The parameters to configure explaining for the model's predictions.\n", + "- `explanation_metadata`: The metadata describing the model's input and output for explanation.\n", + "- `sync`: Whether to wait for the process to complete, or return immediately (async).\n", + "\n", + "Learn more about [Import models to Vertex AI](https://cloud.google.com/vertex-ai/docs/model-registry/import-model)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0193f247e216" + }, + "outputs": [], + "source": [ + "model = aiplatform.Model.upload(\n", + " display_name=\"churn_\" + UUID,\n", + " artifact_uri=MODEL_ARTIFACT_URI,\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + " explanation_parameters=explanation_parameters,\n", + " explanation_metadata=explanation_metadata,\n", + " sync=True,\n", + ")\n", + "\n", + "print(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1069c6f0eba8" + }, + "source": [ + "### Deploy the `Vertex AI Model` resource to a `Vertex AI Endpoint` resource\n", + "\n", + "Next, you deploy your `Vertex AI Model` resource to a `Vertex AI Endpoint` resource using the `deploy()` method, with the following parameters:\n", + "\n", + "- `deploy_model_display`: The human reable name for the deployed model.\n", + "- `machine_type`: The machine type for each VM node instance.\n", + "- `min_replica_count`: The minimum number of nodes to provision for auto-scaling.\n", + "- `max_replica_count`: The maximum number of nodes to provision for auto-scaling.\n", + "- `accelerator_type`: The type, if any, of GPU accelators per provisioned node.\n", + "- `accelrator_count`: The number, if any, of GPU accelators per provisioned node.\n", + "\n", + "Learn more about [Deploy a model using Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/deploy-model-api)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b883402dda8c" + }, + "outputs": [], + "source": [ + "MIN_NODES = 1\n", + "MAX_NODES = 1\n", + "\n", + "if GPU:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=\"churn_\" + UUID,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " accelerator_type=DEPLOY_GPU.name,\n", + " accelerator_count=DEPLOY_NGPU,\n", + " )\n", + "else:\n", + " endpoint = model.deploy(\n", + " deployed_model_display_name=\"churn_\" + UUID,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ba4a2924aec6" + }, + "source": [ + "## Configure a monitoring job\n", + "\n", + "Configuring the monitoring job consists of the following specifications:\n", + "\n", + "- `alert_config`: The email address(es) to send monitoring alerts to.\n", + "- `schedule_config`: The time window to analyze predictions.\n", + "- `logging_sampling_strategy`: The rate for sampling prediction requests. \n", + "- `drift_config`: The features and drift thresholds to monitor.\n", + "- `skew_config`: The features and skew thresholds to monitor.\n", + "\n", + "Learn more about [Monitor feature skew and drift](https://cloud.google.com/vertex-ai/docs/model-monitoring/using-model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "87abd93294c4" + }, + "source": [ + "### Configure the alerting specification\n", + "\n", + "First, you configure the `alerting_config` specification with the following settings:\n", + "\n", + "- `user_emails`: A list of one or more email to send alerts to.\n", + "- `enable_logging`: Stream detected anomalies to Cloud Logging. Default is False.\n", + "\n", + "Learn more about [Configure alerts for model monitoring jobs](https://cloud.google.com/vertex-ai/docs/model-monitoring/using-model-monitoring#monitor-job)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "be6137df0086" + }, + "outputs": [], + "source": [ + "# Create alerting configuration.\n", + "alerting_config = model_monitoring.EmailAlertConfig(\n", + " user_emails=[USER_EMAIL], enable_logging=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "66c7283276bc" + }, + "source": [ + "### Configure the monitoring interval specification\n", + "\n", + "Next, you configure the `schedule_config` specification with the following settings:\n", + "\n", + "- `monitor_interval`: Sets the model monitoring job scheduling interval in hours. Minimum time interval is 1 hour.\n", + "\n", + "*Note:* The REST API specifies the unit in seconds." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1230b92d1eed" + }, + "outputs": [], + "source": [ + "# Monitoring Interval\n", + "MONITOR_INTERVAL = 1 # @param {type:\"number\"}\n", + "\n", + "# Create schedule configuration\n", + "schedule_config = model_monitoring.ScheduleConfig(monitor_interval=MONITOR_INTERVAL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3bd8dd304191" + }, + "source": [ + "### Configure the sampling specification\n", + "\n", + "Next, you configure the `logging_sampling_strategy` specification with the following settings:\n", + "\n", + "- `sample_rate`: The rate as a percentage (between 0 and 1) to randomly sample predictions for monitoring. Select samples are logged to a BigQuery table.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3688c245a0e9" + }, + "outputs": [], + "source": [ + "# Sampling rate (optional, default=.8)\n", + "SAMPLE_RATE = 0.5 # @param {type:\"number\"}\n", + "\n", + "# Create sampling configuration\n", + "logging_sampling_strategy = model_monitoring.RandomSampleConfig(sample_rate=SAMPLE_RATE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c1bc3bc8992f" + }, + "source": [ + "### Configure the drift detection specification\n", + "\n", + "Next, you configure the `drift_config` specification with the following settings:\n", + "\n", + "- `drift_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for feature input drift. The value is the detection threshold. When not specified, the default drift threshold for a feature is 0.3 (30%).\n", + "- `attribute_drift_threshold`: A dictionary of key/value pairs where the keys are the input features for monitor for feature attribution drift. The value is the detection threshold. When not specified, the default drift threshold for a feature is 0.3 (30%).\n", + "\n", + "*Note:* Enabling drift detection for either feature inputs or feature attributions is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "128bdc05cb5b" + }, + "outputs": [], + "source": [ + "DRIFT_THRESHOLD_VALUE = 0.05\n", + "ATTRIBUTION_DRIFT_THRESHOLD_VALUE = 0.05\n", + "\n", + "DRIFT_THRESHOLDS = {\n", + " \"country\": DRIFT_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": DRIFT_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "ATTRIBUTION_DRIFT_THRESHOLDS = {\n", + " \"country\": ATTRIBUTION_DRIFT_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": ATTRIBUTION_DRIFT_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "drift_config = model_monitoring.DriftDetectionConfig(\n", + " drift_thresholds=DRIFT_THRESHOLDS,\n", + " attribute_drift_thresholds=ATTRIBUTION_DRIFT_THRESHOLDS,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "651b576aa037" + }, + "source": [ + "### Configure the skew detection specification\n", + "\n", + "Next, you configure the `skew_config` specification with the following settings:\n", + "\n", + "- `data_source`: The source of the dataset of the original training data. The format of the source defaults to a BigQuery table. Otherwise the setting `data_format` must be set to one of the values below. The location of the data must be a Cloud Storage location.\n", + " - `csv`: \n", + " - `jsonl`:\n", + " - `tf-record`:\n", + "- `skew_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for feature input skew. The value is the detection threshold. When not specified, the default skew threshold for a feature is 0.3 (30%).\n", + "- `attribute_skew_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for feature attribution skew. The value is the detection threshold. When not specified, the default skew threshold for a feature is 0.3 (30%).\n", + "- `target_field`: The target label for the training dataset\n", + "\n", + "*Note:* Enabling skew detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4cb098c74d2c" + }, + "outputs": [], + "source": [ + "# URI to training dataset.\n", + "DATASET_BQ_URI = \"bq://mco-mm.bqmlga4.train\" # @param {type:\"string\"}\n", + "# Prediction target column name in training dataset.\n", + "TARGET = \"churned\"\n", + "\n", + "SKEW_THRESHOLD_VALUE = 0.5\n", + "\n", + "SKEW_THRESHOLDS = {\n", + " \"country\": SKEW_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": SKEW_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "ATTRIBUTE_SKEW_THRESHOLDS = {\n", + " \"country\": SKEW_THRESHOLD_VALUE,\n", + " \"cnt_user_engagement\": SKEW_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "skew_config = model_monitoring.SkewDetectionConfig(\n", + " data_source=DATASET_BQ_URI,\n", + " skew_thresholds=SKEW_THRESHOLDS,\n", + " attribute_skew_thresholds=ATTRIBUTE_SKEW_THRESHOLDS,\n", + " target_field=TARGET,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8b6d5bd71ac9" + }, + "source": [ + "### Assemble the objective specification\n", + "\n", + "Finally, you assemble the objective specification `objective_config` with the following settings:\n", + "\n", + "- `skew_detection_config`: (Optional) The specification for the skew detection configuration.\n", + "- `drift_detection_config`: (Optional) The specification for the drift detection configuration.\n", + "- `explanation_config`: (Optional) The specification for explanations when enabling monitoring for feature attributions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d353205a8aec" + }, + "outputs": [], + "source": [ + "explanation_config = model_monitoring.ExplanationConfig()\n", + "\n", + "objective_config = model_monitoring.ObjectiveConfig(\n", + " skew_detection_config=skew_config,\n", + " drift_detection_config=drift_config,\n", + " explanation_config=explanation_config,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "82c7e7af7163" + }, + "source": [ + "### Create the monitoring job\n", + "\n", + "You create a monitoring job, with your monitoring specifications, using the `aiplatform.ModelDeploymentMonitoringJob.create()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the monitoring job.\n", + "- `project`: The project ID.\n", + "- `region`: The region.\n", + "- `endpoint`: The fully qualified resource name of the `Vertex AI Endpoint` to enable monitoring.\n", + "- `logging_sampling_strategy`: The specification for the sampling configuration.\n", + "- `schedule_config`: The specification for the scheduling configuration.\n", + "- `alert_config`: The specification for the alerting configuration.\n", + "- `objective_configs`: The specification for the objectives configuration." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "86f76670f439" + }, + "outputs": [], + "source": [ + "monitoring_job = aiplatform.ModelDeploymentMonitoringJob.create(\n", + " display_name=\"churn_\" + UUID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " endpoint=endpoint,\n", + " logging_sampling_strategy=logging_sampling_strategy,\n", + " schedule_config=schedule_config,\n", + " alert_config=alerting_config,\n", + " objective_configs=objective_config,\n", + ")\n", + "\n", + "print(monitoring_job.gca_resource)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3c6d3b620264" + }, + "source": [ + "#### Email notification of the monitoring job.\n", + "\n", + "An email notification is sent to the email address in the alerting configuration, notifying that the model monitoring job is now enabled.\n", + "\n", + "The contents will appear like:\n", + "\n", + "
\n", + "Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are using the Vertex AI Model Monitoring service.\n", + "This mail is to inform you that we received your request to set up drift or skew detection for the Prediction Endpoint listed below. Starting from now, incoming prediction requests will be sampled and logged for analysis.\n", + "Raw requests and responses will be collected from prediction service and saved in bq://[your-project-id].model_deployment_monitoring_[endpoint-id].serving_predict .\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dcc4aae9e20f" + }, + "source": [ + "#### Monitoring Job State\n", + "\n", + "After you start the `Vertex AI Model Monitoring` job, it will be in a `PENDING` state until the `input schema` and `skew distribution baselines` are calculated. The process happens sequentially. In this example where you use automatic generation of the `input schema`, the service stays in a `PENDING` state until the 1000 prediction request (discussed subsequently) is sent. \n", + "\n", + "Once the `input schema` has been generated, then a batch job will be initiated to generate the distribution baseline from the training data. Again, the service stays in a `PENDING` state until the baseline distribution is calculated.\n", + "\n", + "Once the baseline distribution is generated, then the monitoring job will enter `OFFLINE` state. On the per interval basis -- e.g., once an hour, the monitoring job will enter `RUNNING` state while analyzing the sampled data. Once completed, it will return to an `OFFLINE` state while awaiting the next scheduled analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f640fb7f10cd" + }, + "outputs": [], + "source": [ + "jobs = monitoring_job.list(filter=f\"display_name=churn_{UUID}\")\n", + "job = jobs[0]\n", + "print(job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3960076190ab" + }, + "source": [ + "## Initialize the parsing for automatically generating the input schema\n", + "\n", + "After your `Endpoint` receives a 1000 prediction requests, the modeling service will automatically parse and create the `input schema`.\n", + "\n", + "### Create the 1000 instance data\n", + "\n", + "In this example, the first 1000 entries in the BigQuery training data are used as the first 1000 prediction requests. \n", + "\n", + "*Note:* In this context, each instance is a prediction request. In otherwords, sending 1000 prediction requests of a single instance is the same as sending a single prediction request with 1000 instances." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "# Download the table.\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "\n", + "rows = bqclient.list_rows(table, max_results=1000)\n", + "\n", + "instances = []\n", + "for row in rows:\n", + " instance = {}\n", + " for key, value in row.items():\n", + " if key == TARGET:\n", + " continue\n", + " if value is None:\n", + " value = \"\"\n", + " instance[key] = value\n", + " instances.append(instance)\n", + "\n", + "print(len(instances))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the initial prediction request\n", + "\n", + "Next, you send the the 1000 prediction request to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "response = endpoint.predict(instances=instances)\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e990a8821178" + }, + "source": [ + "### Automatic generation of the input schema\n", + "\n", + "After the model monitoring service receives 1000 instances of prediction requests, the monitoring will start analyzing the prediction requests to automatically generate an `input schema` for the feature inputs.\n", + "\n", + "### Automatic generation of the baseline distribution\n", + "\n", + "After the `input schema` is generated, the monitoring service creates a batch job to analyze the training data to determine the baseline distribution. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "670b5bc98c2a" + }, + "outputs": [], + "source": [ + "# Pause a bit for the baseline distribution to be calculated\n", + "if os.getenv(\"IS_TESTING\"):\n", + " import time\n", + "\n", + " time.sleep(120)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "08f499f7adae" + }, + "source": [ + "#### The location of the BigQuery table for monitoring\n", + "\n", + "The BigQuery table for logging the sampled requests is located at:\n", + "\n", + " `.model_deployment_monitoring_`.serving_predict, \n", + " \n", + "Where is the numerical identifier for the `Vertex AI Endpoint` resource." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ae7b9b1ce8df" + }, + "outputs": [], + "source": [ + "ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + "BQ_MON_TABLE = f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + "\n", + "table = bigquery.TableReference.from_string(BQ_MON_TABLE)\n", + "bq_table = bqclient.get_table(table)\n", + "\n", + "print(bq_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "69147b259cbf" + }, + "source": [ + "### Pause the monitoring job\n", + "\n", + "You can pause and resume a monitoring job with the methods `pause()` and `resume()`, respectively." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2f4e99831237" + }, + "outputs": [], + "source": [ + "monitoring_job.pause()\n", + "monitoring_job.resume()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8c92eb3ffdeb" + }, + "source": [ + "### List monitoring jobs\n", + "\n", + "Next, you can get a list of all monitoring jobs using the `list()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7c4332598e13" + }, + "outputs": [], + "source": [ + "monitoring_jobs = aiplatform.ModelDeploymentMonitoringJob.list()\n", + "print(monitoring_jobs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a5c889257c9e" + }, + "source": [ + "### List monitoring jobs by a filter\n", + "\n", + "Alternatively, you can use a `filter` parameter to list a subset of jobs. In this example, you filter the list by the monitoring job's display name." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "39a45c1a7cea" + }, + "outputs": [], + "source": [ + "monitoring_jobs = aiplatform.ModelDeploymentMonitoringJob.list(\n", + " filter=f\"display_name=churn_{UUID}\"\n", + ")\n", + "\n", + "print(monitoring_jobs[0].gca_resource)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "39cdad8fdcc5" + }, + "source": [ + "### Delete the monitoring job\n", + "\n", + "You can delete the monitoring job using the `delete()` method. \n", + "\n", + "*Note:* You cannot delete a monitoring job when in a state of RUNNING. You must pause the job first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bdc44ad0471a" + }, + "outputs": [], + "source": [ + "monitoring_job.pause()\n", + "monitoring_job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "313b543dc772" + }, + "source": [ + "### Delete the logged sampled data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9a638ce66806" + }, + "outputs": [], + "source": [ + "# Delete the monitoring logged data BigQuery dataset\n", + "\n", + "! bq rm -r -f {PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "73fbeb1b68ba" + }, + "source": [ + "### Create a monitoring job with a predefined input schema\n", + "\n", + "Next, you create another monitoring job. This time you will load a predefined `input schema`. Once loaded, the monitoring service will use this `input schema` instead of automatically generating one from the first 1000 prediction instances.\n", + "\n", + "#### Create the predefined input schema\n", + "\n", + "The predefined `input schema` is specified as a YAML file. In this example, you retrieve the BigQuery schema for the training data, which includes the feature names and data types, to generate the YAML specification. The predefined `input schema` must be loaded to a Cloud Storage location.\n", + "\n", + "Learn more about [Custom instance schemas for parsing input](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview#custom-input-schemas)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "59becb56ad34" + }, + "outputs": [], + "source": [ + "# Get the BQ table\n", + "\n", + "table = bigquery.TableReference.from_string(DATASET_BQ_URI[5:])\n", + "bq_table = bqclient.get_table(table)\n", + "\n", + "yaml = \"\"\"type: object\n", + "properties:\n", + "\"\"\"\n", + "\n", + "schema = bq_table.schema\n", + "for feature in schema:\n", + " if feature.name == TARGET:\n", + " continue\n", + " if feature.field_type == \"STRING\":\n", + " f_type = \"string\"\n", + " else:\n", + " f_type = \"integer\"\n", + " yaml += f\"\"\" {feature.name}:\n", + " type: {f_type}\n", + "\"\"\"\n", + "\n", + "yaml += \"\"\"required:\n", + "\"\"\"\n", + "for feature in schema:\n", + " if feature.name == TARGET:\n", + " continue\n", + " yaml += f\"\"\"- {feature.name}\n", + "\"\"\"\n", + "\n", + "print(yaml)\n", + "\n", + "with open(\"schema.yaml\", \"w\") as f:\n", + " f.write(yaml)\n", + "\n", + "! gsutil cp schema.yaml {BUCKET_URI}/schema.yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "45df86099448" + }, + "source": [ + "### Create the monitoring job\n", + "\n", + "Finally, you create the monitoring job using the `create()` method, with the following additional parameter:\n", + "\n", + "- `analysis_instance_schema_uri`: The location of the YAML file containing the `input schema`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4b8dd381c5c3" + }, + "outputs": [], + "source": [ + "monitoring_job = aiplatform.ModelDeploymentMonitoringJob.create(\n", + " display_name=\"churn_\" + UUID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " endpoint=endpoint,\n", + " logging_sampling_strategy=logging_sampling_strategy,\n", + " schedule_config=schedule_config,\n", + " alert_config=alerting_config,\n", + " objective_configs=objective_config,\n", + " analysis_instance_schema_uri=f\"{BUCKET_URI}/schema.yaml\",\n", + ")\n", + "\n", + "print(monitoring_job)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "39cdad8fdcc5" + }, + "source": [ + "### Delete the monitoring job\n", + "\n", + "You can delete the monitoring job using the `delete()` method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ef1ddc1d6017" + }, + "outputs": [], + "source": [ + "monitoring_job.pause()\n", + "monitoring_job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c6280efab664" + }, + "source": [ + "#### Undeploy and delete the `Vertex AI Endpoint` resource\n", + "\n", + "Your `Vertex AI Endpoint` resource can be deleted using the `delete()` method. Prior to deleting, any model deployed to your `Vertex AI Endpoint` resource, must first be undeployed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ad0d28b762e5" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()\n", + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "448f3698d50f" + }, + "source": [ + "#### Delete the `Vertex AI Model` resource\n", + "\n", + "Your `Vertex AI Model` resource can be deleted using the `delete()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0feab0a0b5d7" + }, + "outputs": [], + "source": [ + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "18889460bd33" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8c1de58f049e" + }, + "outputs": [], + "source": [ + "delete_bucket = True\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -rf {BUCKET_URI}\n", + "\n", + "! rm -f schema.yaml\n", + "\n", + "! bq rm -r -f {PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "get_started_with_model_monitoring_setup.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/model_monitoring/get_started_with_model_monitoring_xgboost.ipynb b/notebooks/official/model_monitoring/get_started_with_model_monitoring_xgboost.ipynb new file mode 100644 index 000000000..2636f1709 --- /dev/null +++ b/notebooks/official/model_monitoring/get_started_with_model_monitoring_xgboost.ipynb @@ -0,0 +1,1489 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# @title Copyright & License (click to expand)\n", + "# Copyright 2022 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": "fsv4jGuU89rX" + }, + "source": [ + "# Vertex AI Model Monitoring for XGBoost models\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lA32H1oKGgpf" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use `Vertex AI Model Monitoring` for XGBoost models.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de998a3953c9" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn to use the `Vertex AI Model Monitoring` service to detect feature skew and drift in the input predict requests for XGBoost models.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Model Monitoring`\n", + "- `Vertex AI Prediction`\n", + "- `Vertex AI Model` resource\n", + "- `Vertex AI Endpoint` resource\n", + "\n", + "The steps performed include:\n", + "\n", + "- Download a pre-trained XGBoost model.\n", + "- Upload the pre-trained model as a `Model` resource.\n", + "- Deploy the `Model` resource to the `Endpoint` resource.\n", + "- Configure the `Endpoint` resource for model monitoring:\n", + " - drift detection only -- no access to training data.\n", + " - predefine the input schema to map feature alias names to the unnamed array input to the model.\n", + "- Generate synthetic prediction requests for drift.\n", + "\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "edba71dc9840" + }, + "source": [ + "### Model\n", + "\n", + "The model used for this tutorial is a pretrain XGBoost model that was trained on the [Iris dataset](https://www.tensorflow.org/datasets/catalog/iris) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview). The trained model predicts the type of Iris flower species from a class of three species: setosa, virginica, or versicolor." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "t6Cd51FkG09E" + }, + "source": [ + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* BigQuery\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertext AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8yVpQt-JHKPF" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step.\n", + "\n", + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to [setting up a Python development\n", + "environment](https://cloud.google.com/python/setup) and the [Jupyter\n", + "installation guide](https://jupyter.org/install) provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. [Install and initialize the Cloud SDK.](https://cloud.google.com/sdk/docs/)\n", + "\n", + "1. [Install Python 3.](https://cloud.google.com/python/setup#installing_python)\n", + "\n", + "1. [Install\n", + " virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv)\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3848df1e5b0" + }, + "source": [ + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b24b232ee039" + }, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "\n", + "assert sys.version_info.major == 3, \"This notebook requires Python 3.\"\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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", + "# Install required packages.\n", + "! pip3 install {USER_FLAG} --quiet --upgrade google-cloud-aiplatform \\\n", + " google-cloud-bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the SDK, you need to restart the notebook kernel so it can find the packages. You can restart kernel from *Kernel -> Restart Kernel*, or running the following:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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", + "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. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "riG_qUokg0XZ" + }, + "outputs": [], + "source": [ + "if PROJECT_ID == \"\" or not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\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": "09021c90b34c" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "\n", + "You can also change the `REGION` variable, which is used for operations throughout the rest of this notebook. Below are regions supported for Vertex AI.\n", + "\n", + "- Americas: `us-central1`\n", + "- Europe: `europe-west4`\n", + "- Asia Pacific: `asia-east1`\n", + "\n", + "**For this notebook, we recommend that you leave the region set to the default value us-central1**.\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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nUjIaIu0Kb0-" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42c8a7c56abd" + }, + "source": [ + "#### User Email\n", + "\n", + "Set your user email address to receive monitoring alerts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce2589511bb6" + }, + "outputs": [], + "source": [ + "USER_EMAIL = \"[your-email-addr]\" # @param {type:\"string\"}\n", + "\n", + "if os.getenv(\"IS_TESTING\"):\n", + " USER_EMAIL = \"noreply@google.com\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench notebooks**, your environment is already\n", + "authenticated.\n", + "\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click **Create**. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C6H1vZYjvT6w" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8RJ3_20etd31" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:custom" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "**The following steps are required, regardless of your notebook environment.**\n", + "\n", + "Set the name of your Cloud Storage bucket below, which you use in this tutorial to upload the `input schema` for the monitoring service.\n", + "\n", + "Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = \"gs://\" + BUCKET_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "create_bucket" + }, + "outputs": [], + "source": [ + "! 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": { + "id": "a0d294ff6d10" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bd7a633296eb" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform, bigquery\n", + "from google.cloud.aiplatform import model_monitoring" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_bq" + }, + "source": [ + "### Create BigQuery client\n", + "\n", + "In this tutorial, you use data from the same public BigQuery table that was used to train the pre-trained model. You create a client interface, which you subsequently use to access the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "init_bq" + }, + "outputs": [], + "source": [ + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for prediction.\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1u1mr18jlugv" + }, + "outputs": [], + "source": [ + "DEPLOY_VERSION = \"xgboost-cpu.1-1\"\n", + "\n", + "LOCATION = REGION.split(\"-\")[0]\n", + "\n", + "DEPLOY_IMAGE = f\"{LOCATION}-docker.pkg.dev/vertex-ai/prediction/{DEPLOY_VERSION}:latest\"\n", + "\n", + "print(\"Deployment:\", DEPLOY_IMAGE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training,prediction" + }, + "source": [ + "#### Set machine types\n", + "\n", + "Next, set the machine types to use for training and prediction.\n", + "\n", + "- Set the variable `DEPLOY_COMPUTE` to configure your compute resources for prediction.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YAXwbqKKlugv" + }, + "outputs": [], + "source": [ + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "TRAIN_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", TRAIN_COMPUTE)\n", + "\n", + "MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "DEPLOY_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Deploy machine type\", DEPLOY_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b890e02cb4b0" + }, + "source": [ + "## Introduction to Vertex AI Model Monitoring\n", + "\n", + "Vertex AI Model Monitoring is supported for AutoML tabular models and custom tabular models. You can monitor for skew and drift detection of the features in the inbound prediction requests or skew and drift detection of the feature attributions (Explainable AI) in the outbound prediction response -- that is, the distribution of the attributions on how they contributed to the output (predictions).\n", + "\n", + "The following are the basic steps to enable model monitoring:\n", + "\n", + "1. Deploy a `Vertex AI` AutoML or custom tabular model to an `Vertex AI Endpoint`.\n", + "2. Configure a model monitoring specification.\n", + "3. Upload the model monitoring specification to the `Vertex AI Endpoint`.\n", + "4. Upload or automatic generation of the `input schema` for parsing.\n", + "5. For feature skew detection, upload the training data for automatic generation of the feature distribution.\n", + "6. For feature attributions, upload corresponding `Vertex AI Explainability` specification.\n", + "\n", + "Once configured, you can enable/disable monitoring, change alerts and update the model monitoring configuration. \n", + "\n", + "When model monitoring is enabled, the sampled incoming prediction requests are logged into a BigQuery table. The input feature values contained in the logged requests are then analyzed for skew or drift on an specified interval basis. You set a sampling rate to monitor a subset of the production inputs to a model, and the monitoring interval.\n", + "\n", + "The model monitoring service needs to know how to parse the feature values, which is referred to as the input schema. For AutoML tabular models, the input schema is automatically generated. For custom tabular models, the service attempts to automatically derive the input schema from the first 1000 prediction requests. Alternatively, one can upload the input schema.\n", + "\n", + "For skew detection, the monitoring service requires a baseline for the statistical distribution of values in the training data. For AutoML tabular models this is automatically derived. For custom tabular models, you upload the training data to the service, and have the service automatically derive the distribution.\n", + "\n", + "For feature attribution skew and drift detection, requires enabling your deployed model for `Vertex AI Explainability` for custom tabular models. For AutoML models, `Vertex AI Explainability` is automatically enabled.\n", + "\n", + "Learn more about [Introduction to Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9bf06cd476e9" + }, + "source": [ + "### Upload the model artifacts as a `Vertex AI Model` resource\n", + "\n", + "First, you upload the pre-trained XGBoost tabular model artifacts as a `Vertex AI Model` resource using the `upload()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the `Model` resource.\n", + "- `artifact_uri`: The Cloud Storage location of the model artifacts.\n", + "- `serving_container_image`: The serving container image to use when the model is deployed to a `Vertex AI Endpoint` resource.\n", + "- `sync`: Whether to wait for the process to complete, or return immediately (async)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0193f247e216" + }, + "outputs": [], + "source": [ + "MODEL_ARTIFACT_URI = (\n", + " \"gs://cloud-samples-data/vertex-ai/model-deployment/models/xgboost_iris\"\n", + ")\n", + "\n", + "model = aiplatform.Model.upload(\n", + " display_name=\"xgboost_iris_\" + UUID,\n", + " artifact_uri=MODEL_ARTIFACT_URI,\n", + " serving_container_image_uri=DEPLOY_IMAGE,\n", + " sync=True,\n", + ")\n", + "\n", + "print(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1069c6f0eba8" + }, + "source": [ + "### Deploy the `Vertex AI Model` resource to a `Vertex AI Endpoint` resource\n", + "\n", + "Next, you deploy your `Vertex AI Model` resource to a `Vertex AI Endpoint` resource using the `deploy()` method, with the following parameters:\n", + "\n", + "- `deploy_model_display`: The human reable name for the deployed model.\n", + "- `machine_type`: The machine type for each VM node instance.\n", + "- `min_replica_count`: The minimum number of nodes to provision for auto-scaling.\n", + "- `max_replica_count`: The maximum number of nodes to provision for auto-scaling." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b883402dda8c" + }, + "outputs": [], + "source": [ + "MIN_NODES = 1\n", + "MAX_NODES = 1\n", + "\n", + "\n", + "endpoint = model.deploy(\n", + " deployed_model_display_name=\"xgboost_iris_\" + UUID,\n", + " machine_type=DEPLOY_COMPUTE,\n", + " min_replica_count=MIN_NODES,\n", + " max_replica_count=MAX_NODES,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ba4a2924aec6" + }, + "source": [ + "## Configure a monitoring job\n", + "\n", + "Configuring the monitoring job consists of the following specifications:\n", + "\n", + "- `alert_config`: The email address(es) to send monitoring alerts to.\n", + "- `schedule_config`: The time window to analyze predictions.\n", + "- `logging_sampling_strategy`: The rate for sampling prediction requests. \n", + "- `drift_config`: The features and drift thresholds to monitor.\n", + "- `skew_config`: The features and skew thresholds to monitor." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "87abd93294c4" + }, + "source": [ + "### Configure the alerting specification\n", + "\n", + "First, you configure the `alerting_config` specification with the following settings:\n", + "\n", + "- `user_emails`: A list of one or more email to send alerts to.\n", + "- `enable_logging`: Streams detected anomalies to Cloud Logging. Default is False." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "be6137df0086" + }, + "outputs": [], + "source": [ + "# Create alerting configuration.\n", + "alerting_config = model_monitoring.EmailAlertConfig(\n", + " user_emails=[USER_EMAIL], enable_logging=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "66c7283276bc" + }, + "source": [ + "### Configure the monitoring interval specification\n", + "\n", + "Next, you configure the `schedule_config` specification with the following settings:\n", + "\n", + "- `monitor_interval`: Sets the model monitoring job scheduling interval in hours. Minimum time interval is 1 hour. For example, at a one hour interval, the monitoring job will run once an hour." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1230b92d1eed" + }, + "outputs": [], + "source": [ + "# Monitoring Interval\n", + "MONITOR_INTERVAL = 1 # @param {type:\"number\"}\n", + "\n", + "# Create schedule configuration\n", + "schedule_config = model_monitoring.ScheduleConfig(monitor_interval=MONITOR_INTERVAL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3bd8dd304191" + }, + "source": [ + "### Configure the sampling specification\n", + "\n", + "Next, you configure the `logging_sampling_strategy` specification with the following settings:\n", + "\n", + "- `sample_rate`: The rate as a percentage (between 0 and 1) to randomly sample prediction requests for monitoring. Selected samples are logged to a BigQuery table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3688c245a0e9" + }, + "outputs": [], + "source": [ + "# Sampling rate (optional, default=.8)\n", + "SAMPLE_RATE = 0.5 # @param {type:\"number\"}\n", + "\n", + "# Create sampling configuration\n", + "logging_sampling_strategy = model_monitoring.RandomSampleConfig(sample_rate=SAMPLE_RATE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c1bc3bc8992f" + }, + "source": [ + "### Configure the drift detection specification\n", + "\n", + "Next, you configure the `drift_config` specification with the following settings:\n", + "\n", + "- `drift_thresholds`: A dictionary of key/value pairs where the keys are the input features for monitor for drift. The value is the detection threshold. When not specified, the default drift threshold for a feature is 0.3 (30%).\n", + "\n", + "*Note:* Enabling drift detection is optional." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "128bdc05cb5b" + }, + "outputs": [], + "source": [ + "DRIFT_THRESHOLD_VALUE = 0.05\n", + "\n", + "DRIFT_THRESHOLDS = {\n", + " \"sepal_length\": DRIFT_THRESHOLD_VALUE,\n", + " \"petal_length\": DRIFT_THRESHOLD_VALUE,\n", + "}\n", + "\n", + "drift_config = model_monitoring.DriftDetectionConfig(drift_thresholds=DRIFT_THRESHOLDS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8b6d5bd71ac9" + }, + "source": [ + "### Assemble the objective specification\n", + "\n", + "Finally, you assemble the objective specification `objective_config` with the following settings:\n", + "\n", + "- `skew_detection_config`: (Optional) The specification for the skew detection configuration.\n", + "- `drift_detection_config`: (Optional) The specification for the drift detection configuration.\n", + "- `explanation_config`: (Optional) The specification for explanations when enabling monitoring for feature attributions.\n", + "\n", + "*Note:* You don't configure skew detection, since the assumption is you don't have access to the training data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d353205a8aec" + }, + "outputs": [], + "source": [ + "objective_config = model_monitoring.ObjectiveConfig(\n", + " skew_detection_config=None,\n", + " drift_detection_config=drift_config,\n", + " explanation_config=None,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8ac30ffa72b5" + }, + "source": [ + "### Create the input schema\n", + "\n", + "The monitoring service needs to know the features and data types for the the feature inputs to the model, which is referred to as the `input schema`. The `input schema` can either be \n", + " - Preloaded to the monitoring service.\n", + " - Automatically generated by the monitoring service after receiving first 1000 prediction instances.\n", + " \n", + "In this tutorial, you preload the `input schema`.\n", + "\n", + "#### Create the predefined input schema\n", + "\n", + "The predefined `input schema` is specified as a YAML file. In this example, you generate the YAML specification according to the model's input layer. In this case, the input layer is an array of four floating point numeric values. In the schema, this is represented by:\n", + "\n", + "- `type: array`: Refers to the input is an array (list)\n", + "- `properties`: An ordered list of the inputs in the array\n", + "- `properties -> name`: The alias (e.g., sepal_length) for the corresponding value in the array.\n", + "- `properties -> type: number`: The value for the array element is floating point.\n", + "- `required`: The order of the values in the array specified by alias. \n", + "\n", + "The input schema then informs the model monitoring service how to map the unnamed input values to the corresponding feature alias names, which can then be specified in your model monitoring configuration.\n", + "\n", + "The predefined `input schema` must be loaded to a Cloud Storage location.\n", + "\n", + "Learn more about [Custom instance schemas for parsing input](https://cloud.google.com/vertex-ai/docs/model-monitoring/overview#custom-input-schemas)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "59becb56ad34" + }, + "outputs": [], + "source": [ + "yaml = \"\"\"type: array\n", + "properties:\n", + " sepal_length:\n", + " type: number\n", + " sepal_width:\n", + " type: number\n", + " petal_length:\n", + " type: number\n", + " petal_width:\n", + " type: number\n", + "required:\n", + " - sepal_length\n", + " - sepal_width\n", + " - petal_length\n", + " - petal_width\n", + "\"\"\"\n", + "\n", + "print(yaml)\n", + "\n", + "with open(\"schema.yaml\", \"w\") as f:\n", + " f.write(yaml)\n", + "\n", + "! gsutil cp schema.yaml {BUCKET_URI}/schema.yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "82c7e7af7163" + }, + "source": [ + "### Create the monitoring job\n", + "\n", + "You create a monitoring job, with your monitoring specifications, using the `aiplatform.ModelDeploymentMonitoringJob.create()` method, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the monitoring job.\n", + "- `project`: The project ID.\n", + "- `region`: The region.\n", + "- `endpoint`: The fully qualified resource name of the `Vertex AI Endpoint` to enable monitoring.\n", + "- `logging_sampling_strategy`: The specification for the sampling configuration.\n", + "- `schedule_config`: The specification for the scheduling configuration.\n", + "- `alert_config`: The specification for the alerting configuration.\n", + "- `objective_configs`: The specification for the objectives configuration.\n", + "- `analysis_instance_schema_uri`: The location of the YAML file containing the `input schema`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4b8dd381c5c3" + }, + "outputs": [], + "source": [ + "monitoring_job = aiplatform.ModelDeploymentMonitoringJob.create(\n", + " display_name=\"xgboost_iris_\" + UUID,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " endpoint=endpoint,\n", + " logging_sampling_strategy=logging_sampling_strategy,\n", + " schedule_config=schedule_config,\n", + " alert_config=alerting_config,\n", + " objective_configs=objective_config,\n", + " analysis_instance_schema_uri=f\"{BUCKET_URI}/schema.yaml\",\n", + ")\n", + "\n", + "print(monitoring_job)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3c6d3b620264" + }, + "source": [ + "#### Email notification of the monitoring job.\n", + "\n", + "An email notification is sent to the email address in the alerting configuration, notifying that the model monitoring job is now enabled.\n", + "\n", + "The contents will appear like:\n", + "\n", + "
\n", + "Hello Vertex AI Customer,\n", + "\n", + "You are receiving this mail because you are using the Vertex AI Model Monitoring service.\n", + "This mail is to inform you that we received your request to set up drift or skew detection for the Prediction Endpoint listed below. Starting from now, incoming prediction requests will be sampled and logged for analysis.\n", + "Raw requests and responses will be collected from prediction service and saved in bq://[your-project-id].model_deployment_monitoring_[endpoint-id].serving_predict .\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dcc4aae9e20f" + }, + "source": [ + "#### Monitoring Job State\n", + "\n", + "After you start the `Vertex AI Model Monitoring` job, there are three transition states the job may be in:\n", + "\n", + "- `PENDING`: The job is configured for skew detection and the `skew distribution baseline` is being calculated. The monitoring service will initiate a batch job to generate the distribution baseline from the training data. \n", + "\n", + "- `OFFLINE`: The monitoring job is between monitoring intervals.\n", + "\n", + "- `RUNNING`: The monitoring job on a per interval basis is analyzing the sampled data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f640fb7f10cd" + }, + "outputs": [], + "source": [ + "jobs = monitoring_job.list(filter=f\"display_name=xgboost_iris_{UUID}\")\n", + "job = jobs[0]\n", + "print(job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e385d103aba6" + }, + "source": [ + "pause for the monitoring job to be enabled" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "670b5bc98c2a" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "time.sleep(180)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "555642c341e1" + }, + "source": [ + "### Generate synthetic prediction requests for first baseline\n", + "\n", + "Next, you create a 1000 synthetic data items to use for prediction requests. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "instances = []\n", + "for _ in range(1000):\n", + " sepal_length = random.uniform(0.5, 3.5)\n", + " sepal_width = random.uniform(0.2, 2.0)\n", + " petal_length = random.uniform(0.5, 2.0)\n", + " petal_width = random.uniform(0.2, 1.5)\n", + " instances.append([sepal_length, sepal_width, petal_length, petal_width])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method.\n", + "\n", + "Note, the model outputs the class as a floating point value. For example, `0.0` is the label `0`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5184c68e4c99" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the first logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 500 entries.\n", + "\n", + "*Note*: This may take upto the length of the monitoring interval (e.g., one hour)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d9a2f9342b06" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "while True:\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 0:\n", + " break\n", + " time.sleep(180)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ec5f1e9b8cfc" + }, + "source": [ + "### Generate synthetic prediction requests for drift detection\n", + "\n", + "You modify the data (synthetic) to trigger the drift detection in the prediction requests from the previous basline distribution versus the current distribution, as follows:\n", + "\n", + "- `sepal_length`: increase the value 4x." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cb26c3dea306" + }, + "outputs": [], + "source": [ + "instances = []\n", + "for _ in range(1000):\n", + " sepal_length = random.uniform(0.5, 3.5) * 4.0\n", + " sepal_width = random.uniform(0.2, 2.0)\n", + " petal_length = random.uniform(0.5, 2.0)\n", + " petal_width = random.uniform(0.2, 1.5)\n", + " instances.append([sepal_length, sepal_width, petal_length, petal_width])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6d002569dadc" + }, + "source": [ + "### Make the prediction requests\n", + "\n", + "Next, you send the the 1000 prediction requests to your `Vertex AI Endpoint` resource using the `predict()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b2d69d89cd66" + }, + "outputs": [], + "source": [ + "for instance in instances:\n", + " response = endpoint.predict(instances=[instance])\n", + "\n", + "prediction = response[0]\n", + "\n", + "# print the prediction for the first instance\n", + "print(prediction[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "683ed0ba4ccd" + }, + "source": [ + "### Drift detection during monitoring\n", + "\n", + "The feature input drift detection will occur at the next monitoring interval. In this tutorial, you set the monitoring interval to one hour. So, in about an hour your monitoring job will go from `OFFLINE` to `RUNNING`. While running, it will analyze the logged sampled tables from the predictions during this interval and compare them to the previous monitoring interva distribution.\n", + "\n", + "Once the analysis is completed, the monitoring job will send email notifications on the detected drift, in this case `cnt_user_engagement`, and the monitoring job will go into `OFFLINE` state until the next interval.\n", + "\n", + "#### Wait for monitoring interval\n", + "\n", + "It can take upwards of 40 minutes from when the analyis occurred on the monitoring interval to when you receive an email alert." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2e64ffaae2de" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING\"):\n", + " time.sleep(60 * 45)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5184c68e4c99" + }, + "source": [ + "### Logging sampled requests\n", + "\n", + "On the next monitoring interval, the sampled predictions are then copied over to the BigQuery logging table. Once the entries are in the BigQuery table, the monitoring service will analyze the sampled data.\n", + "\n", + "Next, you wait for the second logged entres to appear in the BigQuery table used for logging prediction samples. Since you sent 1000 prediction requests, with 50% sampling, you should see around 1000 entries.\n", + "\n", + "*Note*: This may take upto the length of the monitoring interval (e.g., one hour)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d9a2f9342b06" + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "while True:\n", + "\n", + " ENDPOINT_ID = endpoint.resource_name.split(\"/\")[-1]\n", + "\n", + " table = bigquery.TableReference.from_string(\n", + " f\"{PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}.serving_predict\"\n", + " )\n", + " rows = bqclient.list_rows(table)\n", + " print(rows.total_rows)\n", + " if rows.total_rows > 950:\n", + " break\n", + " time.sleep(180)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "39cdad8fdcc5" + }, + "source": [ + "### Delete the monitoring job\n", + "\n", + "You can delete the monitoring job using the `delete()` method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ef1ddc1d6017" + }, + "outputs": [], + "source": [ + "monitoring_job.pause()\n", + "monitoring_job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c6280efab664" + }, + "source": [ + "#### Undeploy and delete the `Vertex AI Endpoint` resource\n", + "\n", + "Your `Vertex AI Endpoint` resource can be deleted using the `delete()` method. Prior to deleting, any model deployed to your `Vertex AI Endpoint` resource, must first be undeployed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ad0d28b762e5" + }, + "outputs": [], + "source": [ + "endpoint.undeploy_all()\n", + "endpoint.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "18889460bd33" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c736a6bf1428" + }, + "outputs": [], + "source": [ + "delete_bucket = False\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -rf {BUCKET_URI}\n", + "\n", + "! rm -f schema.yaml\n", + "\n", + "! bq rm -f {PROJECT_ID}.model_deployment_monitoring_{ENDPOINT_ID}" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "get_started_with_model_monitoring_xgboost.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/model_monitoring/model_monitoring.ipynb b/notebooks/official/model_monitoring/model_monitoring.ipynb index d17b8f602..63d14a6c5 100644 --- a/notebooks/official/model_monitoring/model_monitoring.ipynb +++ b/notebooks/official/model_monitoring/model_monitoring.ipynb @@ -80,7 +80,9 @@ "\n", "[Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview) adds another facet to model monitoring, which we call feature attribution monitoring. Explainable AI enables you to understand the relative contribution of each feature to a resulting prediction. In essence, it assesses the magnitude of each feature's influence.\n", "\n", - "If production traffic differs from training data, or varies substantially over time, **either in terms of model predictions or feature attributions**, that's likely to impact the quality of the answers your model produces. When that happens, you'd like to be alerted automatically and responsively, so that **you can anticipate problems before they affect your customer experiences or your revenue streams**." + "If production traffic differs from training data, or varies substantially over time, **either in terms of model predictions or feature attributions**, that's likely to impact the quality of the answers your model produces. When that happens, you'd like to be alerted automatically and responsively, so that **you can anticipate problems before they affect your customer experiences or your revenue streams**.\n", + "\n", + "Learn more about [Vertex AI Model Monitoring](https://cloud.google.com/vertex-ai/docs/model-monitoring)." ] }, { diff --git a/notebooks/official/model_registry/README.md b/notebooks/official/model_registry/README.md index 36d290d5c..256943dd2 100644 --- a/notebooks/official/model_registry/README.md +++ b/notebooks/official/model_registry/README.md @@ -1,14 +1,21 @@ [Deploy BiqQuery ML Model on Vertex AI Model Registry and make predictions](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/model_registry/bqml_vertexai_model_registry.ipynb) +``` Learn how to use `Vertex AI Model Registry` with `BigQuery ML` and make batch predictions: The steps performed include: - Train a model with `BigQuery ML` -- Upload the model to `Vertex AI Model Registry` +- Upload the model to `Vertex AI Model Registry` - Create a `Vertex AI Endpoint` resource - Deploy the `Model` resource to the `Endpoint` resource - Make `prediction` requests to the model endpoint - Run `batch prediction` job on the `Model` resource +``` + +   Learn more about [Vertex AI Model Registry](https://cloud.google.com/vertex-ai/docs/model-registry/introduction). + +   Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml). + diff --git a/notebooks/official/model_registry/bqml_vertexai_model_registry.ipynb b/notebooks/official/model_registry/bqml_vertexai_model_registry.ipynb index 8b9784bd4..f65caa77c 100644 --- a/notebooks/official/model_registry/bqml_vertexai_model_registry.ipynb +++ b/notebooks/official/model_registry/bqml_vertexai_model_registry.ipynb @@ -1,877 +1,885 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ur8xi4C7S06n" - }, - "outputs": [], - "source": [ - "# Copyright 2022 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": "JAPoU8Sm5E6e" - }, - "source": [ - "# Deploy BiqQuery ML Model on Vertex AI Model Registry and make predictions\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \"Colab Run in Colab\n", - " \n", - " \n", - " \n", - " \"GitHub\n", - " View on GitHub\n", - " \n", - " \n", - " \n", - " \"Vertex\n", - " Open in Vertex AI Workbench\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tvgnzT1CKxrO" - }, - "source": [ - "## Overview\n", - "\n", - "This tutorial demonstrates how to train a model with BigQuery ML and upload it on Vertex AI Model Registry, then make batch predictions.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "132a9ee68ba6" - }, - "source": [ - "### Objective\n", - "\n", - "In this tutorial, you learn how to use `Vertex AI Model Registry` with `BigQuery ML` and make batch predictions:\n", - "\n", - "This tutorial uses the following Google Cloud ML services and resources:\n", - "\n", - "- `Vertex AI Model Registry`\n", - "- `Vertex AI Endpoint` resources\n", - "- `BigQuery ML`\n", - "\n", - "\n", - "The steps performed include:\n", - "\n", - "- Train a model with `BigQuery ML`\n", - "- Upload the model to `Vertex AI Model Registry` \n", - "- Create a `Vertex AI Endpoint` resource\n", - "- Deploy the `Model` resource to the `Endpoint` resource\n", - "- Make `prediction` requests to the model endpoint\n", - "- Run `batch prediction` job on the `Model` resource \n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "2de0477b10ce" - }, - "source": [ - "### Dataset\n", - "\n", - "The dataset used for this tutorial is the Penguins dataset from BigQuery public datasets. This version of the dataset is used to predict the species of penguins from the available features like culmen-length, flipper-depth etc." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "76330e07673b" - }, - "source": [ - "### Costs \n", - "\n", - "This tutorial uses billable components of Google Cloud:\n", - "\n", - "* Vertex AI\n", - "* BigQuery ML\n", - "\n", - "Learn about Vertex AI\n", - "pricing and BigQuery pricing, and use the Pricing\n", - "Calculator\n", - "to generate a cost estimate based on your projected usage." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ze4-nDLfK4pw" - }, - "source": [ - "### Set up your local development environment\n", - "\n", - "**If you are using Colab or Vertex AI Workbench Notebooks**, your environment already meets\n", - "all the requirements to run this notebook. You can skip this step.\n", - "**Otherwise**, make sure your environment meets this notebook's requirements.\n", - "You need the following:\n", - "\n", - "* The Google Cloud SDK\n", - "* Git\n", - "* Python 3\n", - "* virtualenv\n", - "* Jupyter notebook running in a virtual environment with Python 3\n", - "\n", - "The Google Cloud guide to Setting up a Python development\n", - "environment and the Jupyter\n", - "installation guide provide detailed instructions\n", - "for meeting these requirements. The following steps provide a condensed set of\n", - "instructions:\n", - "\n", - "1. Install and initialize the Cloud SDK.\n", - "\n", - "1. Install Python 3.\n", - "\n", - "1. Install\n", - " virtualenv\n", - " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", - "\n", - "1. To install Jupyter, run `pip3 install jupyter` on the\n", - "command-line in a terminal shell.\n", - "\n", - "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", - "\n", - "1. Open this notebook in the Jupyter Notebook Dashboard." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "i7EUnXsZhAGF" - }, - "source": [ - "### Install additional packages\n", - "\n", - "Install the following packages required to execute this notebook. " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "2b4ef9b72d43" - }, - "outputs": [], - "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", - "\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 google-cloud-bigquery pyarrow {USER_FLAG} -q" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hhq5zEbGg0XX" - }, - "source": [ - "### Restart the kernel\n", - "\n", - "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EzrelQZ22IZj" - }, - "outputs": [], - "source": [ - "# Automatically restart kernel after installs\n", - "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": "lWEdiXsJg0XY" - }, - "source": [ - "## Before you begin" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BF1j6f9HApxa" - }, - "source": [ - "### 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. 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.\n", - "\n", - "1. Enable the Vertex AI and BigQuery APIs. \n", - "\n", - "1. If you are running this notebook locally, you will need to install the Cloud SDK.\n", - "\n", - "1. 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 `$` into these commands." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WReHDGG5g0XY" - }, - "source": [ - "#### Set your project ID\n", - "\n", - "**If you don't know your project ID**, you can get your project ID using `gcloud`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "o1AuQDpf_hS-" - }, - "outputs": [], - "source": [ - "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "RYbBU1jXAETD" - }, - "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" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "region" - }, - "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 might not be able to 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." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "vO3W8YdN2LuA" - }, - "outputs": [], - "source": [ - "REGION = \"[your-region]\" # @param {type: \"string\"}\n", - "\n", - "if REGION == \"[your-region]\":\n", - " REGION = \"us-central1\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "29e912d1b106" - }, - "source": [ - "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "id": "c704897922c0" - }, - "outputs": [], - "source": [ - "import random\n", - "import string\n", - "\n", - "\n", - "# Generate a uuid of a specifed length(default=8)\n", - "def generate_uuid(length: int = 8) -> str:\n", - " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", - "\n", - "\n", - "UUID = generate_uuid()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dr--iN2kAylZ" - }, - "source": [ - "### Authenticate your Google Cloud account\n", - "\n", - "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", - "authenticated.\n", - "**If you are using Colab**, run the cell below and follow the instructions\n", - "when prompted to authenticate your account via oAuth.\n", - "\n", - "**Otherwise**, follow these steps:\n", - "\n", - "1. In the Cloud Console, go to the Create service account key page.\n", - "\n", - "2. Click **Create service account**.\n", - "\n", - "3. In the **Service account name** field, enter a name, and\n", - " click **Create**.\n", - "\n", - "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", - "into the filter box, and select\n", - " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", - "\n", - "5. Click *Create*. A JSON file that contains your key downloads to your\n", - "local environment.\n", - "\n", - "6. Enter the path to your service account key as the\n", - "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "PyQmSRbKA8r-" - }, - "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 = \"google.colab\" in sys.modules\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", - " 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 ''" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "XoEqT2Y4DJmf" - }, - "source": [ - "### Import libraries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pRUOFELefqf1" - }, - "outputs": [], - "source": [ - "import google.cloud.aiplatform as aiplatform\n", - "from google.cloud import bigquery" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "init_aip:mbsdk,all" - }, - "source": [ - "### Initialize Vertex AI and BigQuery SDKs for Python\n", - "\n", - "Initialize the Vertex AI and Big Query SDKs for Python for your project and corresponding bucket." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "BgaYKz2-2LuC" - }, - "outputs": [], - "source": [ - "aiplatform.init(project=PROJECT_ID, location=REGION)\n", - "bqclient = bigquery.Client(project=PROJECT_ID)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "lUEtpimzL17Z" - }, - "source": [ - "## BigQuery ML introduction\n", - "\n", - "BigQuery ML (BQML) provides the capability to train ML tabular models, such as classification and regression, in BigQuery using SQL syntax.\n", - "\n", - "Learn more about BigQuery ML documentation." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "30adf1b74bf9" - }, - "source": [ - "### BigQuery table used for training" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3O7qlOGWNEU4" - }, - "outputs": [], - "source": [ - "# Define BigQuery table to be used for training\n", - "\n", - "BQ_TABLE = \"bigquery-public-data.ml_datasets.penguins\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "PKQD2e0eMg3M" - }, - "source": [ - "### Create BigQuery dataset resource\n", - "First, you create an empty dataset resource in your project." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "luqb-DBiMn-0" - }, - "outputs": [], - "source": [ - "BQ_DATASET_NAME = \"penguins\" + UUID\n", - "DATASET_QUERY = f\"\"\"CREATE SCHEMA {BQ_DATASET_NAME}\"\"\"\n", - "\n", - "job = bqclient.query(DATASET_QUERY)\n", - "job.result()\n", - "print(job.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "b-_8rZO8NIEb" - }, - "source": [ - "## Train BigQuery ML model and upload it to Vertex AI Model Registry\n", - "Next, you create and train a `BigQuery ML` tabular regression model from the public dataset penguins and store the model in your project `Vertex AI Model Registry` using the `CREATE MODEL` statement. The model configuration is specified in the `OPTIONS` statement as follows:\n", - "\n", - "- `model_type`: The type and archictecture of tabular model to train, e.g., LOGISTIC_REG.\n", - "\n", - "- `labels`: The column which are the labels.\n", - "\n", - "- `model_registry`: To register a BigQuery ML model to Vertex AI Model Registry, you must use `model_registry=\"vertex_ai\"`.\n", - "\n", - "Learn more about the CREATE MODEL statement.\n", - "\n", - "Learn more about Managing BigQuery ML models in the Vertex AI Model Registry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Q96rlZKRNPjU" - }, - "outputs": [], - "source": [ - "# Write the query to create Big Query ML model\n", - "\n", - "MODEL_NAME = \"penguins-lr\" + UUID\n", - "MODEL_QUERY = f\"\"\"\n", - "CREATE OR REPLACE MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", - "OPTIONS(\n", - " model_type='LOGISTIC_REG',\n", - " labels = ['species'],\n", - " model_registry='vertex_ai'\n", - " )\n", - "AS\n", - "SELECT *\n", - "FROM `{BQ_TABLE}`\n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "eee158e2a375" - }, - "source": [ - "### Create BigQuery ML Model\n", - "Create the BigQuery ML model using the query above and the BigQuery client that you created previously:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "LtdieY-BWILs" - }, - "outputs": [], - "source": [ - "# Run the model creation query using BigQuery client\n", - "\n", - "job = bqclient.query(MODEL_QUERY)\n", - "print(f\"Job state: {job.state}\\nJob Error:{job.errors}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "e4b007777e68" - }, - "source": [ - "Check the job status:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Y4C_3hTEXOE7" - }, - "outputs": [], - "source": [ - "job.result()\n", - "print(job.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "5nHvVttrYfQ8" - }, - "source": [ - "### Find the model in the Vertex Model Registry\n", - "\n", - "You can use the `Vertex AI Model()` method with `model_name` parameter to find the automatically registered model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "E08IwUX5YpAG" - }, - "outputs": [], - "source": [ - "model = aiplatform.Model(model_name=MODEL_NAME)\n", - "\n", - "print(model.gca_resource)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zgvXXlaZaYw3" - }, - "source": [ - "## Deploy Vertex AI Model resource to a Vertex AI Endpoint resource\n", - "You must deploy a model to an `endpoint` before that model can be used to serve online predictions; deploying a model associates physical resources with the model so it can serve online predictions with low latency. \n", - "\n", - "Learn more about Deploy a model using the Vertex AI API\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "N27z-_by5gti" - }, - "source": [ - "### Create a Vertex AI Endpoint resource\n", - "\n", - "If you are deploying a model to an existing endpoint, you can skip this cell.\n", - "\n", - "- `display_name`: Display name for the endpoint.\n", - "- `project`: The project ID on which you are creating an endpoint.\n", - "- `location`: The region where you are using Vertex AI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "XmmyCtW055Ya" - }, - "outputs": [], - "source": [ - "ENDPOINT_DISPLAY_NAME = \"bqml-lr-model-endpoint\" + UUID\n", - "\n", - "endpoint = aiplatform.Endpoint.create(\n", - " display_name=ENDPOINT_DISPLAY_NAME,\n", - " project=PROJECT_ID,\n", - " location=REGION,\n", - ")\n", - "\n", - "print(endpoint.display_name)\n", - "print(endpoint.resource_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "xSCIKdFo56YO" - }, - "source": [ - "### Deploy the Vertex AI Model resource to Vertex AI Endpoint resource" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "f7KfDgALE4aD" - }, - "outputs": [], - "source": [ - "DEPLOYED_NAME = \"bqml-lr-penguins\"\n", - "\n", - "model.deploy(endpoint=endpoint, deployed_model_display_name=DEPLOYED_NAME)\n", - "\n", - "print(model.display_name)\n", - "print(model.resource_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "H3K6SVplJ9Mg" - }, - "source": [ - "## Send prediction request to the Vertex AI Endpoint resource\n", - "\n", - "Now that your Vertex AI Model resource is deployed to a Vertex AI `Endpoint` resource, you can do online predictions by sending prediction requests to the `Endpoint` resource.\n", - "\n", - "Learn more about Get online predictions from custom-trained models" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2j7ioB3VKEtx" - }, - "outputs": [], - "source": [ - "instance = {\n", - " \"island\": \"Dream\",\n", - " \"culmen_length_mm\": 36.6,\n", - " \"culmen_depth_mm\": 18.4,\n", - " \"flipper_length_mm\": 184.0,\n", - " \"body_mass_g\": 3475.0,\n", - " \"sex\": \"FEMALE\",\n", - "}\n", - "\n", - "prediction = endpoint.predict([instance])\n", - "print(prediction)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "C39qOaBHZI1G" - }, - "source": [ - "## Batch Prediction on the BigQuery ML model\n", - "Here you request batch predictions directly from the BigQuery ML model; you don't need to deploy the model to an endpoint. For data types that support both batch and online predictions, use batch predictions when you don't require an immediate response and want to process accumulated data by using a single request.\n", - "\n", - "Learn more abount The ML.PREDICT function" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "_QxZb19_o6jx" - }, - "outputs": [], - "source": [ - "sql_ml_predict = f\"\"\"SELECT * FROM ML.PREDICT(MODEL `{PROJECT_ID}.{BQ_DATASET_NAME}.{MODEL_NAME}`, \n", - "(SELECT\n", - " *\n", - " FROM\n", - " `{BQ_TABLE}` LIMIT 10))\"\"\"\n", - "\n", - "job = bqclient.query(sql_ml_predict)\n", - "prediction_result = job.result().to_arrow().to_pandas()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "TVpsLI5nrVii" - }, - "outputs": [], - "source": [ - "display(prediction_result.head())" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TpV-iwP9qw9c" - }, - "source": [ - "## Cleaning up\n", - "\n", - "To clean up all Google Cloud resources used in this project, you can delete the Google Cloud\n", - "project you used for the tutorial.\n", - "\n", - "Learn more about Deleting BigQuery ML models from Vertex AI Model Registry\n", - "\n", - "Otherwise, you can delete the individual resources you created in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "sx_vKniMq9ZX" - }, - "outputs": [], - "source": [ - "# Delete the endpoint using the Vertex endpoint object\n", - "endpoint.undeploy_all()\n", - "endpoint.delete()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3c5c8dc2f597" - }, - "outputs": [], - "source": [ - "# Delete BigQuery ML model\n", - "\n", - "delete_query = f\"\"\"DROP MODEL `{PROJECT_ID}.{BQ_DATASET_NAME}.{MODEL_NAME}`\"\"\"\n", - "job = bqclient.query(delete_query)\n", - "job.result()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "85dfc88f5472" - }, - "outputs": [], - "source": [ - "# Delete the created BigQuery dataset\n", - "! bq rm -r -f $PROJECT_ID:$BQ_DATASET_NAME" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "name": "bqml_vertexai_model_registry.ipynb", - "toc_visible": true - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - } + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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." + ] }, - "nbformat": 4, - "nbformat_minor": 0 + { + "cell_type": "markdown", + "metadata": { + "id": "JAPoU8Sm5E6e" + }, + "source": [ + "# Deploy BiqQuery ML Model on Vertex AI Model Registry and make predictions\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to train a model with BigQuery ML and upload it on Vertex AI Model Registry, then make batch predictions.\n", + "\n", + "Learn more about [Vertex AI Model Registry](https://cloud.google.com/vertex-ai/docs/model-registry/introduction) and Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "132a9ee68ba6" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `Vertex AI Model Registry` with `BigQuery ML` and make batch predictions:\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- `Vertex AI Model Registry`\n", + "- `Vertex AI Endpoint` resources\n", + "- `BigQuery ML`\n", + "\n", + "\n", + "The steps performed include:\n", + "\n", + "- Train a model with `BigQuery ML`\n", + "- Upload the model to `Vertex AI Model Registry` \n", + "- Create a `Vertex AI Endpoint` resource\n", + "- Deploy the `Model` resource to the `Endpoint` resource\n", + "- Make `prediction` requests to the model endpoint\n", + "- Run `batch prediction` job on the `Model` resource \n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2de0477b10ce" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the Penguins dataset from BigQuery public datasets. This version of the dataset is used to predict the species of penguins from the available features like culmen-length, flipper-depth etc." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "76330e07673b" + }, + "source": [ + "### Costs \n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* BigQuery ML\n", + "\n", + "Learn about Vertex AI\n", + "pricing and BigQuery pricing, and use the Pricing\n", + "Calculator\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ze4-nDLfK4pw" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench Notebooks**, your environment already meets\n", + "all the requirements to run this notebook. You can skip this step.\n", + "**Otherwise**, make sure your environment meets this notebook's requirements.\n", + "You need the following:\n", + "\n", + "* The Google Cloud SDK\n", + "* Git\n", + "* Python 3\n", + "* virtualenv\n", + "* Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Google Cloud guide to Setting up a Python development\n", + "environment and the Jupyter\n", + "installation guide provide detailed instructions\n", + "for meeting these requirements. The following steps provide a condensed set of\n", + "instructions:\n", + "\n", + "1. Install and initialize the Cloud SDK.\n", + "\n", + "1. Install Python 3.\n", + "\n", + "1. Install\n", + " virtualenv\n", + " and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "1. To install Jupyter, run `pip3 install jupyter` on the\n", + "command-line in a terminal shell.\n", + "\n", + "1. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "1. Open this notebook in the Jupyter Notebook Dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "### Install additional packages\n", + "\n", + "Install the following packages required to execute this notebook. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "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", + "\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 google-cloud-bigquery pyarrow {USER_FLAG} -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hhq5zEbGg0XX" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EzrelQZ22IZj" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "lWEdiXsJg0XY" + }, + "source": [ + "## Before you begin" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "### 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. 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.\n", + "\n", + "1. Enable the Vertex AI and BigQuery APIs. \n", + "\n", + "1. If you are running this notebook locally, you will need to install the Cloud SDK.\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**If you don't know your project ID**, you can get your project ID using `gcloud`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "o1AuQDpf_hS-" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RYbBU1jXAETD" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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 might not be able to 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vO3W8YdN2LuA" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "29e912d1b106" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "c704897922c0" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dr--iN2kAylZ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", + "authenticated.\n", + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the Create service account key page.\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pRUOFELefqf1" + }, + "outputs": [], + "source": [ + "import google.cloud.aiplatform as aiplatform\n", + "from google.cloud import bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize Vertex AI and BigQuery SDKs for Python\n", + "\n", + "Initialize the Vertex AI and Big Query SDKs for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "BgaYKz2-2LuC" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)\n", + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lUEtpimzL17Z" + }, + "source": [ + "## BigQuery ML introduction\n", + "\n", + "BigQuery ML (BQML) provides the capability to train ML tabular models, such as classification and regression, in BigQuery using SQL syntax.\n", + "\n", + "Learn more about BigQuery ML documentation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "30adf1b74bf9" + }, + "source": [ + "### BigQuery table used for training" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3O7qlOGWNEU4" + }, + "outputs": [], + "source": [ + "# Define BigQuery table to be used for training\n", + "\n", + "BQ_TABLE = \"bigquery-public-data.ml_datasets.penguins\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PKQD2e0eMg3M" + }, + "source": [ + "### Create BigQuery dataset resource\n", + "First, you create an empty dataset resource in your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "luqb-DBiMn-0" + }, + "outputs": [], + "source": [ + "BQ_DATASET_NAME = \"penguins\" + UUID\n", + "DATASET_QUERY = f\"\"\"CREATE SCHEMA {BQ_DATASET_NAME}\"\"\"\n", + "\n", + "job = bqclient.query(DATASET_QUERY)\n", + "job.result()\n", + "print(job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b-_8rZO8NIEb" + }, + "source": [ + "## Train BigQuery ML model and upload it to Vertex AI Model Registry\n", + "Next, you create and train a `BigQuery ML` tabular regression model from the public dataset penguins and store the model in your project `Vertex AI Model Registry` using the `CREATE MODEL` statement. The model configuration is specified in the `OPTIONS` statement as follows:\n", + "\n", + "- `model_type`: The type and archictecture of tabular model to train, e.g., LOGISTIC_REG.\n", + "\n", + "- `labels`: The column which are the labels.\n", + "\n", + "- `model_registry`: To register a BigQuery ML model to Vertex AI Model Registry, you must use `model_registry=\"vertex_ai\"`.\n", + "\n", + "Learn more about the CREATE MODEL statement.\n", + "\n", + "Learn more about Managing BigQuery ML models in the Vertex AI Model Registry." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Q96rlZKRNPjU" + }, + "outputs": [], + "source": [ + "# Write the query to create Big Query ML model\n", + "\n", + "MODEL_NAME = \"penguins-lr\" + UUID\n", + "MODEL_QUERY = f\"\"\"\n", + "CREATE OR REPLACE MODEL `{BQ_DATASET_NAME}.{MODEL_NAME}`\n", + "OPTIONS(\n", + " model_type='LOGISTIC_REG',\n", + " labels = ['species'],\n", + " model_registry='vertex_ai'\n", + " )\n", + "AS\n", + "SELECT *\n", + "FROM `{BQ_TABLE}`\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eee158e2a375" + }, + "source": [ + "### Create BigQuery ML Model\n", + "Create the BigQuery ML model using the query above and the BigQuery client that you created previously:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "LtdieY-BWILs" + }, + "outputs": [], + "source": [ + "# Run the model creation query using BigQuery client\n", + "\n", + "job = bqclient.query(MODEL_QUERY)\n", + "print(f\"Job state: {job.state}\\nJob Error:{job.errors}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e4b007777e68" + }, + "source": [ + "Check the job status:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Y4C_3hTEXOE7" + }, + "outputs": [], + "source": [ + "job.result()\n", + "print(job.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5nHvVttrYfQ8" + }, + "source": [ + "### Find the model in the Vertex Model Registry\n", + "\n", + "You can use the `Vertex AI Model()` method with `model_name` parameter to find the automatically registered model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "E08IwUX5YpAG" + }, + "outputs": [], + "source": [ + "model = aiplatform.Model(model_name=MODEL_NAME)\n", + "\n", + "print(model.gca_resource)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zgvXXlaZaYw3" + }, + "source": [ + "## Deploy Vertex AI Model resource to a Vertex AI Endpoint resource\n", + "You must deploy a model to an `endpoint` before that model can be used to serve online predictions; deploying a model associates physical resources with the model so it can serve online predictions with low latency. \n", + "\n", + "Learn more about Deploy a model using the Vertex AI API\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "N27z-_by5gti" + }, + "source": [ + "### Create a Vertex AI Endpoint resource\n", + "\n", + "If you are deploying a model to an existing endpoint, you can skip this cell.\n", + "\n", + "- `display_name`: Display name for the endpoint.\n", + "- `project`: The project ID on which you are creating an endpoint.\n", + "- `location`: The region where you are using Vertex AI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XmmyCtW055Ya" + }, + "outputs": [], + "source": [ + "ENDPOINT_DISPLAY_NAME = \"bqml-lr-model-endpoint\" + UUID\n", + "\n", + "endpoint = aiplatform.Endpoint.create(\n", + " display_name=ENDPOINT_DISPLAY_NAME,\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + ")\n", + "\n", + "print(endpoint.display_name)\n", + "print(endpoint.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xSCIKdFo56YO" + }, + "source": [ + "### Deploy the Vertex AI Model resource to Vertex AI Endpoint resource" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f7KfDgALE4aD" + }, + "outputs": [], + "source": [ + "DEPLOYED_NAME = \"bqml-lr-penguins\"\n", + "\n", + "model.deploy(endpoint=endpoint, deployed_model_display_name=DEPLOYED_NAME)\n", + "\n", + "print(model.display_name)\n", + "print(model.resource_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "H3K6SVplJ9Mg" + }, + "source": [ + "## Send prediction request to the Vertex AI Endpoint resource\n", + "\n", + "Now that your Vertex AI Model resource is deployed to a Vertex AI `Endpoint` resource, you can do online predictions by sending prediction requests to the `Endpoint` resource.\n", + "\n", + "Learn more about Get online predictions from custom-trained models" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2j7ioB3VKEtx" + }, + "outputs": [], + "source": [ + "instance = {\n", + " \"island\": \"Dream\",\n", + " \"culmen_length_mm\": 36.6,\n", + " \"culmen_depth_mm\": 18.4,\n", + " \"flipper_length_mm\": 184.0,\n", + " \"body_mass_g\": 3475.0,\n", + " \"sex\": \"FEMALE\",\n", + "}\n", + "\n", + "prediction = endpoint.predict([instance])\n", + "print(prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C39qOaBHZI1G" + }, + "source": [ + "## Batch Prediction on the BigQuery ML model\n", + "Here you request batch predictions directly from the BigQuery ML model; you don't need to deploy the model to an endpoint. For data types that support both batch and online predictions, use batch predictions when you don't require an immediate response and want to process accumulated data by using a single request.\n", + "\n", + "Learn more abount The ML.PREDICT function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_QxZb19_o6jx" + }, + "outputs": [], + "source": [ + "sql_ml_predict = f\"\"\"SELECT * FROM ML.PREDICT(MODEL `{PROJECT_ID}.{BQ_DATASET_NAME}.{MODEL_NAME}`, \n", + "(SELECT\n", + " *\n", + " FROM\n", + " `{BQ_TABLE}` LIMIT 10))\"\"\"\n", + "\n", + "job = bqclient.query(sql_ml_predict)\n", + "prediction_result = job.result().to_arrow().to_pandas()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TVpsLI5nrVii" + }, + "outputs": [], + "source": [ + "display(prediction_result.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can delete the Google Cloud\n", + "project you used for the tutorial.\n", + "\n", + "Learn more about Deleting BigQuery ML models from Vertex AI Model Registry\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "# Delete the endpoint using the Vertex endpoint object\n", + "endpoint.undeploy_all()\n", + "endpoint.delete()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3c5c8dc2f597" + }, + "outputs": [], + "source": [ + "# Delete BigQuery ML model\n", + "\n", + "delete_query = f\"\"\"DROP MODEL `{PROJECT_ID}.{BQ_DATASET_NAME}.{MODEL_NAME}`\"\"\"\n", + "job = bqclient.query(delete_query)\n", + "job.result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "85dfc88f5472" + }, + "outputs": [], + "source": [ + "# Delete the created BigQuery dataset\n", + "! bq rm -r -f $PROJECT_ID:$BQ_DATASET_NAME" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "bqml_vertexai_model_registry.ipynb", + "toc_visible": true + }, + "environment": { + "kernel": "python3", + "name": "common-cpu.m95", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m95" + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/notebooks/official/pipelines/README.md b/notebooks/official/pipelines/README.md index 7c2e9a326..b8c802432 100644 --- a/notebooks/official/pipelines/README.md +++ b/notebooks/official/pipelines/README.md @@ -1,63 +1,7 @@ -[AutoML image classification pipelines using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb) - -Learn how to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` image classification model. - -The steps performed include: - -- Create a KFP pipeline: - - Create a `Dataset` resource. - - Train an AutoML image classification `Model` resource. - - Create an `Endpoint` resource. - - Deploys the `Model` resource to the `Endpoint` resource. -- Compile the KFP pipeline. -- Execute the KFP pipeline using `Vertex AI Pipelines` - - - -[Metrics visualization and run comparison using the KFP SDK](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/metrics_viz_run_compare_kfp.ipynb) - -Learn how to use the KFP SDK to build pipelines that generate evaluation metrics. - -The steps performed include: - -- Create KFP components: - - Generate ROC curve and confusion matrix visualizations for classification results - - Write metrics -- Create KFP pipelines. -- Execute KFP pipelines -- Compare metrics across pipeline runs - -[Lightweight Python function-based components, and component I/O](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/lightweight_functions_component_io_kfp.ipynb) - -Learn to use the KFP SDK to build lightweight Python function-based components, and then you learn to use `Vertex AI Pipelines` to execute the pipeline. - -The steps performed include: - -- Build Python function-based KFP components. -- Construct a KFP pipeline. -- Pass *Artifacts* and *parameters* between components, both by path reference and by value. -- Use the `kfp.dsl.importer` method. -- Compile the KFP pipeline. -- Execute the KFP pipeline using `Vertex AI Pipelines` - -[Custom training with pre-built Google Cloud Pipeline Components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/custom_model_training_and_batch_prediction.ipynb) - -Learn to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build a custom model. - -The steps performed include: - -- Create a KFP pipeline: - - Train a custom model. - - Upload the trained model as a `Model` resource. - - Create an `Endpoint` resource. - - Deploy the `Model` resource to the `Endpoint` resource. - - Make a batch prediction request. - - - [AutoML Tabular pipelines using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/automl_tabular_classification_beans.ipynb) +``` Learn to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` tabular classification model. The steps performed include: @@ -70,32 +14,102 @@ The steps performed include: - Compile the KFP pipeline. - Execute the KFP pipeline using `Vertex AI Pipelines` +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component). -[Training an acquisition-prediction model using Swivel, BigQuery ML and Vertex AI Pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_bqml_text.ipynb) +[Pipeline control structures using the KFP SDK](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/control_flow_kfp.ipynb) -Learn how to build a simple BigQuery ML pipeline using Vertex AI pipelines in order to calculate text embeddings of content from articles and classify them -into the *corporate acquisitions* category. +``` +Learn how to use the KFP SDK to build pipelines that use loops and conditionals, including nested examples. The steps performed include: -- Creating a component for Dataflow job that ingests data to BigQuery. -- Creating a component for preprocessing steps to run on the data in BigQuery. -- Creating a component for training a logistic regression model using BigQuery ML. -- Building and configuring a Kubeflow DSL pipeline with all the created components. -- Compiling and running the pipeline in Vertex AI Pipelines. +- Create a KFP pipeline: + - Use control flow components +- Compile the KFP pipeline. +- Execute the KFP pipeline using `Vertex AI Pipelines` -[Pipelines introduction for KFP](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/pipelines_intro_kfp.ipynb) +``` -Learn how to use the KFP SDK to build pipelines that generate evaluation metrics. +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + + +[Custom training with pre-built Google Cloud Pipeline Components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/custom_model_training_and_batch_prediction.ipynb) + +``` +Learn to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build a custom model. The steps performed include: -- Define and compile a `Vertex AI` pipeline. -- Specify which service account to use for a pipeline run. +- Create a KFP pipeline: + - Train a custom model. + - Upload the trained model as a `Model` resource. + - Create an `Endpoint` resource. + - Deploy the `Model` resource to the `Endpoint` resource. + - Make a batch prediction request. + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [Vertex AI Training components](https://cloud.google.com/vertex-ai/docs/training/create-training-pipeline). + + +[Training and batch prediction with BigQuery source and destinantion for a custom tabular classification model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/custom_tabular_train_batch_pred_bq_pipeline.ipynb) + +``` +In this tutorial, you train a scikit-learn tabular classification model and create batch prediction job for it through a Vertex AI pipeline using `google_cloud_pipeline_components`. + +The steps performed include: + +- Create a dataset in BigQuery. +- Set some data aside from the source dataset for batch prediction. +- Create a custom python package for training application. +- Upload the python package to Cloud Storage. +- Create a Vertex AI Pipeline that: + - creates a Vertex AI Dataset from the source dataset. + - trains a scikit-learn RandomForest classification model on the dataset. + - uploads the trained model to Vertex AI Model Registry. + - runs a batch prediction job with the model on the test data. +- Check the prediction results from the destination table in BigQuery. +- Clean up the resources created in this notebook. + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [Vertex AI Batch Prediction components](https://cloud.google.com/vertex-ai/docs/pipelines/batchprediction-component). + + +[AutoML image classification pipelines using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb) + +``` +Learn how to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` image classification model. + +The steps performed include: + +- Create a KFP pipeline: + - Create a `Dataset` resource. + - Train an AutoML image classification `Model` resource. + - Create an `Endpoint` resource. + - Deploys the `Model` resource to the `Endpoint` resource. +- Compile the KFP pipeline. +- Execute the KFP pipeline using `Vertex AI Pipelines` + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component). + [AutoML tabular regression pipelines using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_automl_tabular.ipynb) +``` Learn to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` tabular regression model. The steps performed include: @@ -108,45 +122,16 @@ The steps performed include: - Compile the KFP pipeline. - Execute the KFP pipeline using `Vertex AI Pipelines` +``` +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). -[Model upload, predict, and evaluate using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_model_upload_predict_evaluate.ipynb) +   Learn more about [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component). -Learn how to evaluate a custom model using a pipeline with components from `google_cloud_pipeline_components` and a custom pipeline component you build. - -The steps performed include: - -- Upload a pre-trained model as a `Model` resource. -- Run a `BatchPredictionJob` on the `Model` resource with ground truth data. -- Generate evaluation `Metrics` artifact about the `Model` resource. -- Compare the evaluation metrics to a threshold. - - -[Pipeline control structures using the KFP SDK](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/control_flow_kfp.ipynb) - -Learn how to use the KFP SDK to build pipelines that use loops and conditionals, including nested examples. - -The steps performed include: - -- Create a KFP pipeline: - - Use control flow components -- Compile the KFP pipeline. -- Execute the KFP pipeline using `Vertex AI Pipelines` - -[Loan eligibility prediction using `google-cloud-pipeline-components` and Spark ML](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_dataproc_tabular.ipynb) - -Learn how to build a Vertex AI pipeline and train a Random-forest model using Spark ML for loan-eligibility classification problem. - -The steps performed include: - -* Use the `DataprocPySparkBatchOp` to preprocess data. -* Create a Vertex AI dataset resource on the training data. -* Train a random forest model using Pyspark. -* Build a Vertex AI pipeline and run the training job. -* Use the Spark serving image in order to deploy a Spark model on Vertex AI Endpoint. [AutoML text classification pipelines using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_automl_text.ipynb) +``` Learn to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build an `AutoML` text classification model. The steps performed include: @@ -159,4 +144,165 @@ The steps performed include: - Compile the KFP pipeline. - Execute the KFP pipeline using `Vertex AI Pipelines` +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component). + + +[Training an acquisition-prediction model using Swivel, BigQuery ML and Vertex AI Pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_bqml_text.ipynb) + +``` +Learn how to build a simple BigQuery ML pipeline using Vertex AI pipelines in order to calculate text embeddings of content from articles and classify them +into the *corporate acquisitions* category. + +The steps performed include: + +- Creating a component for Dataflow job that ingests data to BigQuery. +- Creating a component for preprocessing steps to run on the data in BigQuery. +- Creating a component for training a logistic regression model using BigQuery ML. +- Building and configuring a Kubeflow DSL pipeline with all the created components. +- Compiling and running the pipeline in Vertex AI Pipelines. + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [BigQuery ML components](https://cloud.google.com/vertex-ai/docs/pipelines/bigqueryml-component). + + +[Loan eligibility prediction using `google-cloud-pipeline-components` and Spark ML](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_dataproc_tabular.ipynb) + +``` +Learn how to build a Vertex AI pipeline and train a random-forest model using Spark ML for loan-eligibility classification problem. + +The steps performed include: + +* Use the `DataprocPySparkBatchOp` to preprocess data. +* Create a Vertex AI dataset resource on the training data. +* Train a random forest model using PySpark. +* Build a Vertex AI pipeline and run the training job. +* Use the Spark serving image in order to deploy a Spark model on Vertex AI Endpoint. + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [Dataproc components](https://cloud.google.com/vertex-ai/docs/pipelines/dataproc-component). + + +[Model train, upload, and deploy using Google Cloud Pipeline Components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_model_train_upload_deploy.ipynb) + +``` +Learn how to use `Vertex AI Pipelines` and `Google Cloud Pipeline Components` to build and deploy a custom model. + +The steps performed include: + +- Create a KFP pipeline: + - Train a custom model. + - Uploads the trained model as a `Model` resource. + - Creates an `Endpoint` resource. + - Deploys the `Model` resource to the `Endpoint` resource. +- Compile the KFP pipeline. +- Execute the KFP pipeline using `Vertex AI Pipelines` + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [Vertex AI Training components](https://cloud.google.com/vertex-ai/docs/pipelines/customjob-component). + + +[Model upload, predict, and evaluate using google-cloud-pipeline-components](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_model_upload_predict_evaluate.ipynb) + +``` +Learn how to evaluate a custom model using a pipeline with components from `google_cloud_pipeline_components` and a custom pipeline component you build. + +The steps performed include: + +- Upload a pre-trained model as a `Model` resource. +- Run a `BatchPredictionJob` on the `Model` resource with ground truth data. +- Generate evaluation `Metrics` artifact about the `Model` resource. +- Compare the evaluation metrics to a threshold. + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + +   Learn more about [Vertex AI Model components](https://cloud.google.com/vertex-ai/docs/pipelines/model-endpoint-component). + + +[Lightweight Python function-based components, and component I/O](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/lightweight_functions_component_io_kfp.ipynb) + +``` +Learn to use the KFP SDK to build lightweight Python function-based components, and then you learn to use `Vertex AI Pipelines` to execute the pipeline. + +The steps performed include: + +- Build Python function-based KFP components. +- Construct a KFP pipeline. +- Pass *Artifacts* and *parameters* between components, both by path reference and by value. +- Use the `kfp.dsl.importer` method. +- Compile the KFP pipeline. +- Execute the KFP pipeline using `Vertex AI Pipelines` + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + + +[Metrics visualization and run comparison using the KFP SDK](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/metrics_viz_run_compare_kfp.ipynb) + +``` +Learn how to use the KFP SDK to build pipelines that generate evaluation metrics. + +The steps performed include: + +- Create KFP components: + - Generate ROC curve and confusion matrix visualizations for classification results + - Write metrics +- Create KFP pipelines. +- Execute KFP pipelines +- Compare metrics across pipeline runs + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + + +[Pipelines introduction for KFP](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/pipelines_intro_kfp.ipynb) + +``` +Learn how to use the KFP SDK to build pipelines that generate evaluation metrics. + +The steps performed include: + +- Define and compile a `Vertex AI` pipeline. +- Specify which service account to use for a pipeline run. + +``` + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + + +[BQML and AutoML - Experimenting with Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/rapid_prototyping_bqml_automl.ipynb) + +``` +Learn how to use `Vertex AI Predictions` for rapid prototyping a model. + +The steps performed include: + +- Creating a BigQuery and Vertex AI training dataset. +- Training a BigQuery ML and AutoML model. +- Extracting evaluation metrics from the BigQueryML and AutoML models. +- Selecting the best trained model. +- Deploying the best trained model. +- Testing the deployed model infrastructure. + +``` + +   Learn more about [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component). + +   Learn more about [BigQuery ML components](https://cloud.google.com/vertex-ai/docs/pipelines/bigqueryml-component). diff --git a/notebooks/official/pipelines/automl_tabular_classification_beans.ipynb b/notebooks/official/pipelines/automl_tabular_classification_beans.ipynb index a4eae743e..13e4091b0 100644 --- a/notebooks/official/pipelines/automl_tabular_classification_beans.ipynb +++ b/notebooks/official/pipelines/automl_tabular_classification_beans.ipynb @@ -44,7 +44,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -66,7 +66,9 @@ "\n", "You build a pipeline in this notebook that looks like this:\n", "\n", - "" + "\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component). Learn more about [Classification for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { diff --git a/notebooks/official/pipelines/control_flow_kfp.ipynb b/notebooks/official/pipelines/control_flow_kfp.ipynb index 0b3f331f0..90d0bade0 100644 --- a/notebooks/official/pipelines/control_flow_kfp.ipynb +++ b/notebooks/official/pipelines/control_flow_kfp.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebooks shows how to use [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/) to build [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) that use control structures." + "This notebooks shows how to use [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/) to build [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) that use control structures.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction)." ] }, { diff --git a/notebooks/official/pipelines/custom_model_training_and_batch_prediction.ipynb b/notebooks/official/pipelines/custom_model_training_and_batch_prediction.ipynb index 51cfc829c..15feadbd7 100644 --- a/notebooks/official/pipelines/custom_model_training_and_batch_prediction.ipynb +++ b/notebooks/official/pipelines/custom_model_training_and_batch_prediction.ipynb @@ -63,7 +63,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to use Vertex AI Pipelines with pre-built Google Cloud Pipeline Components for custom training." + "This tutorial demonstrates how to use Vertex AI Pipelines with pre-built Google Cloud Pipeline Components for custom training.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [Vertex AI Training components](https://cloud.google.com/vertex-ai/docs/training/create-training-pipeline)." ] }, { diff --git a/notebooks/official/pipelines/custom_tabular_train_batch_pred_bq_pipeline.ipynb b/notebooks/official/pipelines/custom_tabular_train_batch_pred_bq_pipeline.ipynb index f837e4dc0..d3aa1e723 100644 --- a/notebooks/official/pipelines/custom_tabular_train_batch_pred_bq_pipeline.ipynb +++ b/notebooks/official/pipelines/custom_tabular_train_batch_pred_bq_pipeline.ipynb @@ -34,18 +34,18 @@ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook demonstrates performing training and batch prediction for a custom tabular classification model inside a Vertex AI pipeline. The batch prediction job takes data from a BigQuery source and writes the results to a BigQuery destination." + "This notebook demonstrates performing training and batch prediction for a custom tabular classification model inside a Vertex AI pipeline. The batch prediction job takes data from a BigQuery source and writes the results to a BigQuery destination.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [Vertex AI Batch Prediction components](https://cloud.google.com/vertex-ai/docs/pipelines/batchprediction-component)." ] }, { diff --git a/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb b/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb index cae0e1e66..5a55824f0 100644 --- a/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb +++ b/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build an `AutoML` image classification workflow on [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines)." + "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build an `AutoML` image classification workflow on [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines).\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component)." ] }, { diff --git a/notebooks/official/pipelines/google_cloud_pipeline_components_automl_tabular.ipynb b/notebooks/official/pipelines/google_cloud_pipeline_components_automl_tabular.ipynb index af6e174a6..1f2f7b0fb 100644 --- a/notebooks/official/pipelines/google_cloud_pipeline_components_automl_tabular.ipynb +++ b/notebooks/official/pipelines/google_cloud_pipeline_components_automl_tabular.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build an AutoML tabular regression workflow on [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines)." + "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build an AutoML tabular regression workflow on Vertex AI Pipelines.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component). Learn more about [Regression for tabular data](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/overview)." ] }, { @@ -879,7 +881,7 @@ " dataset.delete()\n", " print(\"Deleted dataset:\", dataset)\n", "\n", - " \n", + "\n", "job.delete()\n", "\n", "\n", diff --git a/notebooks/official/pipelines/google_cloud_pipeline_components_automl_text.ipynb b/notebooks/official/pipelines/google_cloud_pipeline_components_automl_text.ipynb index 3927ae01a..bb9dce4b1 100644 --- a/notebooks/official/pipelines/google_cloud_pipeline_components_automl_text.ipynb +++ b/notebooks/official/pipelines/google_cloud_pipeline_components_automl_text.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build an AutoML text classification workflow on [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines)." + "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build an AutoML text classification workflow on [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines).\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component)." ] }, { diff --git a/notebooks/official/pipelines/google_cloud_pipeline_components_bqml_text.ipynb b/notebooks/official/pipelines/google_cloud_pipeline_components_bqml_text.ipynb index d9a8afe52..b0c472751 100644 --- a/notebooks/official/pipelines/google_cloud_pipeline_components_bqml_text.ipynb +++ b/notebooks/official/pipelines/google_cloud_pipeline_components_bqml_text.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -70,7 +70,9 @@ "3. Apply the Swivel model to generate embeddings of your document’s content.\n", "4. Train a Logistic regression model to classify if an article is about corporate acquisitions (`acq` category). \n", "5. Evaluate the model.\n", - "6. Apply the model to a dataset in order to generate predictions." + "6. Apply the model to a dataset in order to generate predictions.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [BigQuery ML components](https://cloud.google.com/vertex-ai/docs/pipelines/bigqueryml-component)." ] }, { diff --git a/notebooks/official/pipelines/google_cloud_pipeline_components_dataproc_tabular.ipynb b/notebooks/official/pipelines/google_cloud_pipeline_components_dataproc_tabular.ipynb index 77ec6a9b2..5605dc1ec 100644 --- a/notebooks/official/pipelines/google_cloud_pipeline_components_dataproc_tabular.ipynb +++ b/notebooks/official/pipelines/google_cloud_pipeline_components_dataproc_tabular.ipynb @@ -45,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook shows how to build a Spark ML pipeline using Spark MLlib and DataprocPySparkBatchOp component to determine the customer eligibility for a loan from a banking company. In particular, the pipeline covers a Spark MLib pipeline, from data preprocessing to hyperparameter tuning of a random forest classifier which predicts the probability of a customer being eligible for a loan. " + "This notebook shows how to build a Spark ML pipeline using Spark MLlib and DataprocPySparkBatchOp component to determine the customer eligibility for a loan from a banking company. In particular, the pipeline covers a Spark MLib pipeline, from data preprocessing to hyperparameter tuning of a random forest classifier which predicts the probability of a customer being eligible for a loan. \n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [Dataproc components](https://cloud.google.com/vertex-ai/docs/pipelines/dataproc-component)." ] }, { @@ -72,7 +74,7 @@ "source": [ "### Objective\n", "\n", - "In this notebook, you learn how to build a Vertex AI pipeline and train a Random-forest model using Spark ML for loan-eligibility classification problem. \n", + "In this notebook, you learn how to build a Vertex AI pipeline and train a random-forest model using Spark ML for loan-eligibility classification problem. \n", "\n", "This tutorial uses the following Google Cloud ML services and resources:\n", "\n", @@ -85,7 +87,7 @@ "\n", "* Use the `DataprocPySparkBatchOp` to preprocess data.\n", "* Create a Vertex AI dataset resource on the training data.\n", - "* Train a random forest model using Pyspark.\n", + "* Train a random forest model using PySpark.\n", "* Build a Vertex AI pipeline and run the training job.\n", "* Use the Spark serving image in order to deploy a Spark model on Vertex AI Endpoint." ] @@ -98,7 +100,7 @@ "source": [ "### Dataset\n", "\n", - "The dataset is a preprocessed version of the [loan eligiability dataset](https://datasetsearch.research.google.com/search?src=2&query=Loan%20Eligible%20Dataset&docid=L2cvMTFsajJrM3EzcA%3D%3D)." + "The dataset is a preprocessed version of the [loan eligibility dataset](https://datasetsearch.research.google.com/search?src=2&query=Loan%20Eligible%20Dataset&docid=L2cvMTFsajJrM3EzcA%3D%3D)." ] }, { @@ -671,7 +673,7 @@ "source": [ "### Load preprocessing data\n", "\n", - "The notebook uses a preprocessed set of data you would read from the Vertex AI Feature Store. " + "The notebook uses a preprocessed set of data you read from the Vertex AI Feature Store. " ] }, { @@ -726,7 +728,7 @@ "source": [ "### Create the Docker repository\n", "\n", - "You create a Docker repository in the Artefact Registry for the custom dataproc image that you are going to create." + "You create a Docker repository in the Artifact Registry for the custom dataproc image that you are going to create." ] }, { @@ -737,7 +739,7 @@ }, "outputs": [], "source": [ - "REPO_NAME = \"loan-eligiability-spark-demo\"\n", + "REPO_NAME = \"loan-eligibility-spark-demo\"\n", "\n", "!gcloud artifacts repositories create $REPO_NAME \\\n", " --repository-format=docker \\\n", @@ -769,8 +771,8 @@ "\n", "from google.cloud import aiplatform as vertex_ai\n", "from kfp.v2 import compiler, dsl\n", - "from kfp.v2.dsl import (Artifact, ClassificationMetrics, Condition, Input,\n", - " Metrics, Output, component)" + "from kfp.v2.dsl import (ClassificationMetrics, Condition, Metrics, Output,\n", + " component)" ] }, { @@ -791,7 +793,7 @@ "IMAGE_TAG = \"1.0.0\"\n", "\n", "# Pipeline\n", - "PIPELINE_NAME = \"pyspark-loan-eligiability-pipeline\"\n", + "PIPELINE_NAME = \"pyspark-loan-eligibility-pipeline\"\n", "PIPELINE_ROOT = f\"{BUCKET_URI}/pipelines\"\n", "PIPELINE_PACKAGE_PATH = str(BUILD_PATH / f\"pipeline_{UUID}.json\")\n", "RUNTIME_CONTAINER_IMAGE = f\"gcr.io/{PROJECT_ID}/{RUNTIME_IMAGE}:{IMAGE_TAG}\"\n", @@ -813,10 +815,6 @@ " PROCESSED_DATA_URI,\n", "]\n", "\n", - "# Dataset\n", - "DATASET_NAME = f\"preprocessed-dataset-{UUID}\"\n", - "GCS_PREPROCESSED_URI = f\"{PROCESSED_DATA_URI}/*/?.csv\"\n", - "\n", "# Training\n", "TRAINING_PYTHON_FILE_URI = f\"{BUCKET_URI}/src/model_training.py\"\n", "MODEL_URI = f\"{BUCKET_URI}/deliverables/model/rfor/{UUID}/train_model\"\n", @@ -861,6 +859,9 @@ " \"spark.jars.packages\": \"ml.combust.mleap:mleap-spark-base_2.12:0.20.0,ml.combust.mleap:mleap-spark_2.12:0.20.0\"\n", "}\n", "\n", + "# Experiment\n", + "EXPERIMENT_NAME = \"loan-eligibility\"\n", + "\n", "# Deploy\n", "SERVING_IMAGE_URI = f\"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPO_NAME}/spark-ml-serving\"" ] @@ -1120,11 +1121,11 @@ "source": [ "#### Create the source code for model-training\n", "\n", - "Create the `model_training.py` file for training a Random-forest classifier model on the training data. The training is performed using Spark ML inside a Spark session. The code fetches the training data from the Cloud storage bucket, processes it and trains the Random-forest model. The trained model and the metrics obtained from the trained model (like AUC-ROC, accuracy, precision etc.) are then saved to the provided output Cloud Storage path. This code accepts the following arguments:\n", + "Create the `model_training.py` file for training a random-forest classifier model on the training data. The training is performed using Spark ML inside a Spark session. The code fetches the training data from the Cloud storage bucket, processes it and trains the random-forest model. The trained model and the metrics obtained from the trained model (like AUC-ROC, accuracy, precision etc.) are then saved to the provided output Cloud Storage path. This code accepts the following arguments:\n", "\n", - "- `--train-path`: The GCS path of the training sample.\n", - "- `--model-path`: The GCS path to store the trained model.\n", - "- `--metrics-path`: The GCS path to store the metrics of model." + "- `--train-path`: The Cloud Storage path of the training sample.\n", + "- `--model-path`: The Cloud Storage path to store the trained model.\n", + "- `--metrics-path`: The Cloud Storage path to store the metrics of model." ] }, { @@ -1480,7 +1481,7 @@ "source": [ "#### Create the source code for hyperparameter-tuning\n", "\n", - "Create the `hp_tuning.py` file for tuning the hyperparameters of the Random-forest classifier model using crossvalidation. This code accepts the following arguments:\n", + "Create the `hp_tuning.py` file for tuning the hyperparameters of the random-forest classifier model using crossvalidation. This code accepts the following arguments:\n", "\n", "- `--train-path`: The GCS path of the training sample.\n", "- `--model-path`: The GCS path to store the trained model.\n", @@ -1889,9 +1890,9 @@ "source": [ "### Build a custom Dataproc Serverless container image\n", "\n", - "Dataproc Serverless provides [default runtime images](https://cloud.google.com/dataproc-serverless/docs/concepts/versions/spark-runtime-versions). You can also use custom container images for your Dataproc Serverless workloads. \n", + "Dataproc Serverless provides default runtime images. Learn more about the [Dataproc Serverless Spark runtime releases](https://cloud.google.com/dataproc-serverless/docs/concepts/versions/spark-runtime-versions).\n", "\n", - "The steps in this section builds a custom container image that includes additional dependencies. The custom container image can be specified when using the `DataprocPySparkBatchOp` component to launch the workload within a pipeline." + "You can also use custom container images for your Dataproc Serverless workloads. The steps in this section builds a custom container image that includes additional dependencies. The custom container image can be specified when using the `DataprocPySparkBatchOp` component to launch the workload within a pipeline." ] }, { @@ -2008,7 +2009,7 @@ "id": "ZXzI2xInqb3V" }, "source": [ - "#### Build the Dataproc Serverless custom runtime using Google Cloud Build\n", + "#### Build the Dataproc Serverless custom runtime using Cloud Build\n", "\n", "**Note:** this step may take approximately 5 to 10 minutes to complete." ] @@ -2032,15 +2033,8 @@ "source": [ "### Build custom components for pipeline arguments\n", "\n", - "In order to pass job arguments, you create some custom components for each step of the pipeline. Next, you create a `register_model` component in order to register the PySpark model in Vertex AI Metadata. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "sSzUGhjq1SrR" - }, - "source": [ + "In order to pass job arguments, you create some custom components for each step of the pipeline.\n", + "\n", "#### Create component for passing args to preprocessing component\n", "\n", "The following component passes the args `--train-data-path` and `--out-process-path` in the required format for the preprocessing function defined earlier." @@ -2084,9 +2078,7 @@ "outputs": [], "source": [ "@component(base_image=\"python:3.8-slim\")\n", - "def build_training_args(\n", - " dataset_uri: Input[Artifact], train_path: str, model_path: str, metrics_path: str\n", - ") -> list:\n", + "def build_training_args(train_path: str, model_path: str, metrics_path: str) -> list:\n", " return [\n", " \"--train-path\",\n", " train_path,\n", @@ -2103,7 +2095,7 @@ "id": "5VesQlnEm4qR" }, "source": [ - "#### Model Evaluation custom component\n", + "#### Create model evaluation custom component\n", "\n", "Define the component for processing the metrics for model evaluation. The `metrics_uri`, `metrics` and `plots` obtained as outputs from the model training component are further evaluated through this component." ] @@ -2134,7 +2126,7 @@ "\n", " # Variables --------------------------------------------------------------------------------------------------------------------------\n", " metrics_path = metrics_uri.replace(\"gs://\", \"/gcs/\")\n", - " labels = [\"not eligiable\", \"eligiable\"]\n", + " labels = [\"not eligible\", \"eligible\"]\n", "\n", " # Helpers --------------------------------------------------------------------------------------------------------------------------\n", " def calculate_roc(metrics, true, score):\n", @@ -2205,7 +2197,6 @@ "source": [ "@component(base_image=\"python:3.8-slim\")\n", "def build_hpt_args(\n", - " dataset_uri: Input[Artifact],\n", " train_path: str,\n", " model_path: str,\n", " metrics_path: str,\n", @@ -2256,7 +2247,7 @@ "source": [ "### Build the model serving container image\n", "\n", - "A *serving container image* is required to import your model into the Model Registry. The serving container image provides the model serving implementation for the model. The following replicates the instructions from [Serving Spark ML model using Vertex AI](https://cloud.google.com/architecture/spark-ml-model-with-vertexai) to build the serving container image.\n", + "A *serving container image* is required to import your model into the Model Registry. The serving container image provides the model serving implementation for the model. Learn more about [serving Spark ML models using Vertex AI](https://cloud.google.com/architecture/spark-ml-model-with-vertexai).\n", "\n", "**Note:** this step may take approximately 5 to 10 minutes to complete." ] @@ -2331,7 +2322,9 @@ "id": "0d83d9e80923" }, "source": [ - "The serving container requires the model schema in JSON format, which is read during container startup. See [Provide the model schema](https://cloud.google.com/architecture/spark-ml-model-with-vertexai#provide_the_model_schema) for more information.\n", + "### Define the schema for model serving\n", + "\n", + "The serving container requires the model schema in JSON format, which is read during container startup. Learn more about [providing the model schema](https://cloud.google.com/architecture/spark-ml-model-with-vertexai#provide_the_model_schema).\n", "\n", "Write the model schema file:" ] @@ -2415,7 +2408,9 @@ "id": "d0b88e26570a" }, "source": [ - "Copy the model schema configuration file to GCS. The serving container reads the model schema file location from the `AIP_STORAGE_URI` environment at startup. See [Import the model into Vertex AI](https://cloud.google.com/architecture/spark-ml-model-with-vertexai#import-the-model-into-vertex-ai) for more information." + "### Copy the model schema configuration file to GCS.\n", + "\n", + "The serving container reads the model schema file location from the `AIP_STORAGE_URI` environment at startup. See [Import the model into Vertex AI](https://cloud.google.com/architecture/spark-ml-model-with-vertexai#import-the-model-into-vertex-ai) for more information." ] }, { @@ -2435,9 +2430,9 @@ "id": "wQd9M1_9bif7" }, "source": [ - "### Define your workflow using Kubeflow Pipelines\n", + "### Define your workflow as a Vertex AI Pipeline\n", "\n", - "Below, you use the Kubelflow Pipelines' DSL package to build your pipeline using the defined components and containers." + "Use the Kubeflow Pipelines SDK to define your workflow as a machine learning pipeline. The pipeline uses the custom components defined earlier, in addition to components from the `google-cloud-pipeline-components` package." ] }, { @@ -2453,8 +2448,6 @@ " preprocessing_main_python_file_uri: str = PREPROCESSING_PYTHON_FILE_URI,\n", " train_data_path: str = FEATURES_TRAIN_URI,\n", " preprocessed_data_path: str = PROCESSED_DATA_URI,\n", - " dataset_name: str = DATASET_NAME,\n", - " dataset_uri: str = GCS_PREPROCESSED_URI,\n", " training_main_python_file_uri: str = TRAINING_PYTHON_FILE_URI,\n", " train_path: str = PROCESSED_DATA_URI,\n", " model_path: str = MODEL_URI,\n", @@ -2475,8 +2468,6 @@ "):\n", " from google_cloud_pipeline_components.v1.dataproc import \\\n", " DataprocPySparkBatchOp\n", - " from google_cloud_pipeline_components.v1.dataset import \\\n", - " TabularDatasetCreateOp\n", " from google_cloud_pipeline_components.v1.endpoint import (EndpointCreateOp,\n", " ModelDeployOp)\n", " from google_cloud_pipeline_components.v1.model import ModelUploadOp\n", @@ -2496,21 +2487,12 @@ " subnetwork_uri=subnetwork_uri,\n", " ).after(build_preprocessing_args_op)\n", "\n", - " # create dataset\n", - " create_dataset_op = TabularDatasetCreateOp(\n", - " display_name=dataset_name,\n", - " gcs_source=dataset_uri,\n", - " project=project_id,\n", - " location=location,\n", - " ).after(data_preprocessing_op)\n", - "\n", " # build training data args\n", " build_training_args_op = build_training_args(\n", - " dataset_uri=create_dataset_op.output,\n", " train_path=train_path,\n", " model_path=model_path,\n", " metrics_path=metrics_path,\n", - " ).after(create_dataset_op)\n", + " ).after(data_preprocessing_op)\n", "\n", " # training model\n", " model_training_op = DataprocPySparkBatchOp(\n", @@ -2533,7 +2515,6 @@ " ):\n", "\n", " build_hpt_args_op = build_hpt_args(\n", - " dataset_uri=create_dataset_op.output,\n", " train_path=train_path,\n", " model_path=hpt_model_path,\n", " metrics_path=hpt_metrics_path,\n", @@ -2618,7 +2599,9 @@ "source": [ "### Submit your pipeline run\n", "\n", - "Next, you use the Vertex AI Python SDK to submit and run your pipeline through Vertex AI Pipelines." + "Next, you use the Vertex AI Python SDK to submit and run your pipeline through Vertex AI Pipelines.\n", + "\n", + "The parameters, artifacts, and metrics produced from the pipeline run are automatically captured into Vertex AI Experiments as an experiment run." ] }, { @@ -2636,7 +2619,7 @@ " enable_caching=False,\n", ")\n", "\n", - "pipeline.submit(service_account=SERVICE_ACCOUNT)" + "pipeline.submit(service_account=SERVICE_ACCOUNT, experiment=EXPERIMENT_NAME)" ] }, { @@ -2661,6 +2644,33 @@ "pipeline.wait()" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "0574e2941aaf" + }, + "source": [ + "### (Optional) View experiment runs\n", + "\n", + "You can retrieve the parameters, artifacts, and metrics for all experiment runs as a pandas DataFrame. See [Compare and analyze runs](https://cloud.google.com/vertex-ai/docs/experiments/compare-analyze-runs) for more information on the topic." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4f5ab528a98e" + }, + "outputs": [], + "source": [ + "experiment_df = vertex_ai.get_experiment_df(experiment=EXPERIMENT_NAME)\n", + "\n", + "# Show successfully completed experiment runs, sorted by F1 score\n", + "experiment_df.query('state == \"COMPLETE\"').sort_values(\n", + " \"metric.Test_f1-score\", ascending=False\n", + ")" + ] + }, { "cell_type": "markdown", "metadata": { @@ -2671,15 +2681,10 @@ "\n", "You can request online predictions if the model was deployed to a Vertex AI endpoint. Use the `google-cloud-aiplatform` client library to request predictions, or you can use `curl`.\n", "\n", - "For this model, the prediction response contains the predicted label (`0 == not eligible`, `1 == eligible`) for each prediction instance that is sent to the endpoint." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4c311f9fc363" - }, - "source": [ + "For this model, the prediction response contains the predicted label (`0 == not eligible`, `1 == eligible`) for each prediction instance that is sent to the endpoint.\n", + "\n", + "#### Use `google-cloud-aiplatform` to request online predictions\n", + "\n", "The following cell demonstrates how to use the `google-cloud-aiplatform` client library to request predictions from one or more instances." ] }, @@ -2706,6 +2711,8 @@ "id": "1a2104c45e21" }, "source": [ + "#### Use `curl` to request online predictions\n", + "\n", "To use `curl`, first write the prediction instances to a file:" ] }, @@ -2784,12 +2791,7 @@ "# Delete model\n", "model_list = vertex_ai.Model.list(filter=f'display_name=\"{MODEL_NAME}\"')\n", "for model in model_list:\n", - " model.delete()\n", - "\n", - "# Delete dataset\n", - "dataset_list = vertex_ai.TabularDataset.list(filter=f'display_name=\"{DATASET_NAME}\"')\n", - "for dataset in dataset_list:\n", - " dataset.delete()" + " model.delete()" ] }, { diff --git a/notebooks/official/pipelines/google_cloud_pipeline_components_model_train_upload_deploy.ipynb b/notebooks/official/pipelines/google_cloud_pipeline_components_model_train_upload_deploy.ipynb index 7504a6bf7..a1c2f618a 100644 --- a/notebooks/official/pipelines/google_cloud_pipeline_components_model_train_upload_deploy.ipynb +++ b/notebooks/official/pipelines/google_cloud_pipeline_components_model_train_upload_deploy.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build a [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) workflow that trains a [custom model](https://cloud.google.com/vertex-ai/docs/training/containers-overview), uploads the model as a `Model` resource, creates an `Endpoint` resource, and deploys the `Model` resource to the `Endpoint` resource." + "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) to build a [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) workflow that trains a [custom model](https://cloud.google.com/vertex-ai/docs/training/containers-overview), uploads the model as a `Model` resource, creates an `Endpoint` resource, and deploys the `Model` resource to the `Endpoint` resource.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [Vertex AI Training components](https://cloud.google.com/vertex-ai/docs/pipelines/customjob-component)." ] }, { diff --git a/notebooks/official/pipelines/google_cloud_pipeline_components_model_upload_predict_evaluate.ipynb b/notebooks/official/pipelines/google_cloud_pipeline_components_model_upload_predict_evaluate.ipynb index 85ce197a0..5c4dda34a 100644 --- a/notebooks/official/pipelines/google_cloud_pipeline_components_model_upload_predict_evaluate.ipynb +++ b/notebooks/official/pipelines/google_cloud_pipeline_components_model_upload_predict_evaluate.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) in conjunction with an experimental `evaluation` method, to build a [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) workflow that uploads a tabular custom model as a `Model` resource, creates a `BatchPredictionJob` resource, and evaluates the `Model` resource with the `BatchPredictionJob` results to create an evaluation `system.Metrics` artifact." + "This notebook shows how to use the components defined in [`google_cloud_pipeline_components`](https://github.com/kubeflow/pipelines/tree/master/components/google-cloud) in conjunction with an experimental `evaluation` method, to build a [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) workflow that uploads a tabular custom model as a `Model` resource, creates a `BatchPredictionJob` resource, and evaluates the `Model` resource with the `BatchPredictionJob` results to create an evaluation `system.Metrics` artifact.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) and [Vertex AI Model components](https://cloud.google.com/vertex-ai/docs/pipelines/model-endpoint-component)." ] }, { diff --git a/notebooks/official/pipelines/lightweight_functions_component_io_kfp.ipynb b/notebooks/official/pipelines/lightweight_functions_component_io_kfp.ipynb index 00bbc5bbc..38461c376 100644 --- a/notebooks/official/pipelines/lightweight_functions_component_io_kfp.ipynb +++ b/notebooks/official/pipelines/lightweight_functions_component_io_kfp.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebooks shows how to use [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/) to build [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) that use lightweight Python function based components, as well as supporting component I/O using the KFP SDK." + "This notebooks shows how to use [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/) to build [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) that use lightweight Python function based components, as well as supporting component I/O using the KFP SDK.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction)." ] }, { diff --git a/notebooks/official/pipelines/metrics_viz_run_compare_kfp.ipynb b/notebooks/official/pipelines/metrics_viz_run_compare_kfp.ipynb index c6514f04f..c79dc6c5a 100644 --- a/notebooks/official/pipelines/metrics_viz_run_compare_kfp.ipynb +++ b/notebooks/official/pipelines/metrics_viz_run_compare_kfp.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook shows how to use [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/) to build [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) that generate model metrics and metrics visualizations, and comparing pipeline runs." + "This notebook shows how to use [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/) to build [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) that generate model metrics and metrics visualizations, and comparing pipeline runs.\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction)." ] }, { diff --git a/notebooks/official/pipelines/pipelines_intro_kfp.ipynb b/notebooks/official/pipelines/pipelines_intro_kfp.ipynb index b1410de20..ef816d98b 100644 --- a/notebooks/official/pipelines/pipelines_intro_kfp.ipynb +++ b/notebooks/official/pipelines/pipelines_intro_kfp.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook provides an introduction to using [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) with [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/)." + "This notebook provides an introduction to using [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines) with [the Kubeflow Pipelines (KFP) SDK](https://www.kubeflow.org/docs/components/pipelines/).\n", + "\n", + "Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction)." ] }, { @@ -205,7 +207,7 @@ }, "outputs": [], "source": [ - "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "PROJECT_ID = \"andy-1234-221921\" # @param {type:\"string\"}\n", "\n", "# Set the project id\n", "! gcloud config set project {PROJECT_ID}" @@ -588,8 +590,9 @@ "outputs": [], "source": [ "@component\n", - "def consumer(text1: str, text2: str, text3: str):\n", - " print(f\"text1: {text1}; text2: {text2}; text3: {text3}\")" + "def consumer(text1: str, text2: str, text3: str) -> str:\n", + " print(f\"text1: {text1}; text2: {text2}; text3: {text3}\")\n", + " return f\"text1: {text1}; text2: {text2}; text3: {text3}\"" ] }, { diff --git a/notebooks/official/structured_data/rapid_prototyping_bqml_automl.ipynb b/notebooks/official/pipelines/rapid_prototyping_bqml_automl.ipynb similarity index 98% rename from notebooks/official/structured_data/rapid_prototyping_bqml_automl.ipynb rename to notebooks/official/pipelines/rapid_prototyping_bqml_automl.ipynb index 06c22ea25..af27ecf8f 100644 --- a/notebooks/official/structured_data/rapid_prototyping_bqml_automl.ipynb +++ b/notebooks/official/pipelines/rapid_prototyping_bqml_automl.ipynb @@ -33,19 +33,19 @@ "\n", "\n", " \n", "\n", " \n", " \n", " \n", "
\n", - " \n", + " \n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -64,7 +64,9 @@ "This tutorial demonstrates how to use Vertex AI Pipelines to rapid prototype a model using both AutoML and BQML, do an evaluation comparison, for a baseline, before progressing to a custom model.\n", "\n", "\n", - "" + "\n", + "\n", + "Learn more about [AutoML components](https://cloud.google.com/vertex-ai/docs/pipelines/vertex-automl-component) and [BigQuery ML components](https://cloud.google.com/vertex-ai/docs/pipelines/bigqueryml-component)." ] }, { diff --git a/notebooks/official/prediction/README.md b/notebooks/official/prediction/README.md new file mode 100644 index 000000000..0c7fde9bb --- /dev/null +++ b/notebooks/official/prediction/README.md @@ -0,0 +1,16 @@ + +[Custom model batch prediction with feature filtering](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/prediction/custom_batch_prediction_feature_filter.ipynb) + +``` +Learn how to create a custom-trained model from a Python script in a Docker container using the Vertex AI SDK for Python, and then run a batch prediction job by including or excluding a list of features. + +The steps performed include: + +- Create a Vertex AI custom `TrainingPipeline` for training a model. +- Train a TensorFlow model. +- Send batch prediction job. + +``` + +   Learn more about [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions). + diff --git a/notebooks/official/prediction/custom_batch_prediction_feature_filter.ipynb b/notebooks/official/prediction/custom_batch_prediction_feature_filter.ipynb new file mode 100644 index 000000000..803e34e77 --- /dev/null +++ b/notebooks/official/prediction/custom_batch_prediction_feature_filter.ipynb @@ -0,0 +1,1487 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title" + }, + "source": [ + "# Custom model batch prediction with feature filtering \n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:custom" + }, + "source": [ + "**_NOTE_**: This notebook has been tested in the following environment:\n", + "\n", + "* Python version = 3.9" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mEXYaDoTjmpR" + }, + "source": [ + "## Overview\n", + "\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI SDK for Python to train a custom tabular classification model and perform batch prediction with feature filtering. This means that you can run batch prediction on a list of selected features or exclude a list of features from prediction.\n", + "\n", + "Learn more about [Vertex AI Batch Prediction](https://cloud.google.com/vertex-ai/docs/tabular-data/classification-regression/get-batch-predictions)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:custom,training,online_prediction" + }, + "source": [ + "### Objective\n", + "\n", + "In this notebook, you learn how to create a custom-trained model from a Python script in a Docker container using the Vertex AI SDK for Python, and then run a batch prediction job by including or excluding a list of features. \n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- BigQuery\n", + "- Cloud Storage\n", + "- Vertex AI managed Datasets\n", + "- Vertex AI Training\n", + "- Vertex AI BatchPrediction\n", + "\n", + "The steps performed include:\n", + "\n", + "- Create a Vertex AI custom `TrainingPipeline` for training a model.\n", + "- Train a TensorFlow model.\n", + "- Send batch prediction job." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:custom,cifar10,icn" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the penguins dataset from [BigQuery public datasets](https://cloud.google.com/bigquery/public-data). This dataset has the following fields: `culmen_length_mm`, `culmen_depth_mm`, `flipper_length_mm`, `body_mass_g` from the dataset to predict the penguins species (`species`)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "costs" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "* BigQuery\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), [BigQuery pricing](https://cloud.google.com/bigquery/pricing) and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "install_aip" + }, + "source": [ + "## Installation\n", + "\n", + "Install the following packages required to execute this notebook. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1fd00fa70a2a" + }, + "outputs": [], + "source": [ + "# Install the packages\n", + "! pip3 install --upgrade google-cloud-aiplatform \\\n", + " google-cloud-storage \\\n", + " google-cloud-bigquery \\\n", + " pyarrow -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bzPxhxS5lugp" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d2qpIurSjmpT" + }, + "source": [ + "## Before you begin\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 API, Cloud Resource Manager API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,cloudresourcemanager.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "project_id" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wsePm9c4jmpT" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a54f9d7c1876" + }, + "source": [ + "#### Region\n", + "\n", + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3aaadaaf9b30" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5c0404984792" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x2n5SeAAjmpU" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6FDh38swjmpU" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Nt8cEM2GjmpU" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XUSL_JcpjmpU" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_2zemfGvjmpU" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TCPJ38n7jmpU" + }, + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:custom" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "Create a storage bucket to store intermediate artifacts such as datasets.\n", + "\n", + "When you submit a training job using the Cloud SDK, you upload a Python package\n", + "containing your training code to a Cloud Storage bucket. Vertex AI runs\n", + "the code from this package. In this tutorial, Vertex AI also saves the\n", + "trained model that results from your job in the same bucket. Using this model artifact, you can then\n", + "create Vertex AI Model resource and use for prediction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "outputs": [], + "source": [ + "BUCKET_URI = \"gs://your-bucket-name-unique\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Oz8J0vmSlugt" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "import_aip" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cNEiwLd0lugu" + }, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "\n", + "import numpy as np\n", + "from google.cloud import aiplatform, bigquery" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "750d53e37094" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c9d3ac73dfbc" + }, + "outputs": [], + "source": [ + "# Initialize the Vertex AI SDK\n", + "aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7c163842eabd" + }, + "source": [ + "### Initialize BigQuery Client\n", + "\n", + "Initialize the BigQuery Python client for your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fad2ba1ad7c3" + }, + "outputs": [], + "source": [ + "# Set up BigQuery client\n", + "bqclient = bigquery.Client(project=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "### Set pre-built containers\n", + "\n", + "Vertex AI provides pre-built containers to run training and prediction.\n", + "\n", + "For the latest list, see [Pre-built containers for training](https://cloud.google.com/vertex-ai/docs/training/pre-built-containers) and [Pre-built containers for prediction](https://cloud.google.com/vertex-ai/docs/predictions/pre-built-containers)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1u1mr18jlugv" + }, + "outputs": [], + "source": [ + "TRAIN_VERSION = \"tf-cpu.2-8\"\n", + "DEPLOY_VERSION = \"tf2-cpu.2-8\"\n", + "\n", + "TRAIN_IMAGE = \"us-docker.pkg.dev/vertex-ai/training/{}:latest\".format(TRAIN_VERSION)\n", + "DEPLOY_IMAGE = \"us-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(DEPLOY_VERSION)\n", + "\n", + "print(\"Training:\", TRAIN_IMAGE)\n", + "print(\"Deployment:\", DEPLOY_IMAGE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "59f24e7d2269" + }, + "source": [ + "## Prepare the data\n", + "\n", + "To improve the convergence of the custom deep learning model, normalize the data. To prepare for this, calculate the mean and standard deviation for each numeric column.\n", + "\n", + "Pass these summary statistics to the training script to normalize the data before training. Later, during prediction, use these summary statistics again to normalize the testing data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8e52b7832cd3" + }, + "outputs": [], + "source": [ + "# Calculate mean and std across all rows\n", + "\n", + "# Define NA values\n", + "NA_VALUES = [\"NA\", \".\"]\n", + "\n", + "\n", + "# Download a table\n", + "def download_table(bq_table_uri: str):\n", + " # Remove bq:// prefix if present\n", + " prefix = \"bq://\"\n", + " if bq_table_uri.startswith(prefix):\n", + " bq_table_uri = bq_table_uri[len(prefix) :]\n", + "\n", + " table = bigquery.TableReference.from_string(bq_table_uri)\n", + " rows = bqclient.list_rows(\n", + " table,\n", + " )\n", + " return rows.to_dataframe()\n", + "\n", + "\n", + "# Remove NA values\n", + "def clean_dataframe(df):\n", + " return df.replace(to_replace=NA_VALUES, value=np.NaN).dropna()\n", + "\n", + "\n", + "def calculate_mean_and_std(df):\n", + " # Calculate mean and std for each applicable column\n", + " mean_and_std = {}\n", + " dtypes = list(zip(df.dtypes.index, map(str, df.dtypes)))\n", + " # Normalize numeric columns.\n", + " for column, dtype in dtypes:\n", + " if dtype == \"float32\" or dtype == \"float64\":\n", + " mean_and_std[column] = {\n", + " \"mean\": df[column].mean(),\n", + " \"std\": df[column].std(),\n", + " }\n", + "\n", + " return mean_and_std" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "yi_10xgYjmpW" + }, + "outputs": [], + "source": [ + "# Define the BigQuery source dataset\n", + "BQ_SOURCE = \"bq://bigquery-public-data.ml_datasets.penguins\"\n", + "\n", + "dataframe = download_table(BQ_SOURCE)\n", + "dataframe = clean_dataframe(dataframe)\n", + "mean_and_std = calculate_mean_and_std(dataframe)\n", + "print(f\"The mean and stds for each column are: {str(mean_and_std)}\")\n", + "\n", + "# Write to a file\n", + "MEAN_AND_STD_JSON_FILE = \"mean_and_std.json\"\n", + "\n", + "with open(MEAN_AND_STD_JSON_FILE, \"w\") as outfile:\n", + " json.dump(mean_and_std, outfile)\n", + "\n", + "# Save to the staging bucket\n", + "! gsutil cp {MEAN_AND_STD_JSON_FILE} {BUCKET_URI}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5c7732822757" + }, + "source": [ + "## Create a Vertex AI tabular Dataset from BigQuery dataset\n", + "\n", + "Your first step in training the model is to create a Vertex AI tabular dataset resource." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1d26b159106f" + }, + "outputs": [], + "source": [ + "DATASET_DISPLAY_NAME = \"sample-penguins-unique\"\n", + "\n", + "dataset = aiplatform.TabularDataset.create(\n", + " display_name=DATASET_DISPLAY_NAME, bq_source=BQ_SOURCE\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "train_custom_model" + }, + "source": [ + "## Train a model\n", + "\n", + "There are two ways you can train a model using a container image:\n", + "\n", + "- **Use a Vertex AI pre-built container**. If you use a pre-built training container, you must additionally specify a Python package to install into the container image. This Python package contains your training code.\n", + "\n", + "- **Use your own custom container image**. If you use your own container, the container image must contain your training code." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "train_custom_job_args" + }, + "source": [ + "### Define the command args for the training script\n", + "\n", + "Prepare the command-line arguments to pass to your training script.\n", + "* `args`: The command line arguments to pass to the corresponding Python module. In this example, they are:\n", + " * `--epochs`: The number of epochs for training.\n", + " * `--batch_size`: The number of batch size for training.\n", + " * `--distribute` : The training distribution strategy to use for single or distributed training.\n", + " * `\"single\"`: single device.\n", + " * `\"mirror\"`: all GPU devices on a single compute instance.\n", + " * `\"multi\"`: all GPU devices on all compute instances.\n", + " * `--mean_and_std_json_file`: The file on Cloud Storage with pre-calculated means and standard deviations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1npiDcUtlugw" + }, + "outputs": [], + "source": [ + "JOB_NAME = \"penquins-custom-job-unique\"\n", + "EPOCHS = 20\n", + "BATCH_SIZE = 10\n", + "TRAIN_STRATEGY = \"single\"\n", + "\n", + "CMDARGS = [\n", + " \"--epochs=\" + str(EPOCHS),\n", + " \"--batch_size=\" + str(BATCH_SIZE),\n", + " \"--distribute=\" + TRAIN_STRATEGY,\n", + " \"--mean_and_std_json_file=\" + f\"{BUCKET_URI}/{MEAN_AND_STD_JSON_FILE}\",\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "taskpy_contents" + }, + "source": [ + "### Training script\n", + "\n", + "In the next cell, write the contents of the training script, `task.py`. In summary, the script does the following:\n", + "\n", + "- Loads the data from the BigQuery table using the BigQuery Python client library.\n", + "- Loads the pre-calculated mean and standard deviation from the Cloud Storage bucket.\n", + "- Builds a model using TF.Keras model API.\n", + "- Compiles the model by calling `compile()`.\n", + "- Sets a training distribution strategy according to the argument `args.distribute`.\n", + "- Trains the model by calling `fit()` with epochs and batch size according to the arguments `args.epochs` and `args.batch_size`\n", + "- Gets the directory where to save the model artifacts from the environment variable `AIP_MODEL_DIR`. This variable is [set by the training service](https://cloud.google.com/vertex-ai/docs/training/code-requirements#environment-variables).\n", + "- Saves the trained model to the model directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "72rUqXNFlugx" + }, + "outputs": [], + "source": [ + "%%writefile task.py\n", + "\n", + "import argparse\n", + "import os\n", + "from typing import Tuple, Optional\n", + "\n", + "import pandas as pd\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "\n", + "from google.cloud import bigquery\n", + "from google.cloud import storage\n", + "\n", + "# Read environmental variables\n", + "training_data_uri = os.getenv(\"AIP_TRAINING_DATA_URI\")\n", + "validation_data_uri = os.getenv(\"AIP_VALIDATION_DATA_URI\")\n", + "test_data_uri = os.getenv(\"AIP_TEST_DATA_URI\")\n", + "\n", + "# Read args\n", + "parser = argparse.ArgumentParser()\n", + "parser.add_argument('--epochs', dest='epochs',\n", + " default=10, type=int,\n", + " help='Number of epochs.')\n", + "parser.add_argument('--batch_size', dest='batch_size',\n", + " default=10, type=int,\n", + " help='Batch size.')\n", + "parser.add_argument('--distribute', dest='distribute', type=str, default='single',\n", + " help='Distributed training strategy.')\n", + "parser.add_argument('--mean_and_std_json_file', dest='mean_and_std_json_file', type=str,\n", + " help='GCS URI to the JSON file with pre-calculated column means and standard deviations.')\n", + "args = parser.parse_args()\n", + "\n", + "# Set up BigQuery clients\n", + "bqclient = bigquery.Client()\n", + "\n", + "\n", + "def download_blob(\n", + " bucket_name: str, \n", + " source_blob_name: str, \n", + " destination_file_name: str\n", + " ) -> None:\n", + " \"\"\"Downloads a blob from the bucket to a local path.\n", + " Args:\n", + " - bucket_name: \"your-bucket-name\"\n", + " - source_blob_name: \"storage-object-name\"\n", + " - destination_file_name: \"local/path/to/file\"\n", + " \"\"\"\n", + "\n", + " storage_client = storage.Client()\n", + " bucket = storage_client.bucket(bucket_name)\n", + "\n", + " # Construct a client side representation of a blob.\n", + " # Note `Bucket.blob` differs from `Bucket.get_blob` as it doesn't retrieve\n", + " # any content from Cloud Storage. As we don't need additional data,\n", + " # using `Bucket.blob` is preferred here.\n", + " blob = bucket.blob(source_blob_name)\n", + " blob.download_to_filename(destination_file_name)\n", + "\n", + " print(\n", + " \"Blob {} downloaded to {}.\".format(\n", + " source_blob_name, destination_file_name\n", + " )\n", + " )\n", + "\n", + "def extract_bucket_and_prefix_from_gcs_path(gcs_path: str) -> Tuple[str, Optional[str]]:\n", + " \"\"\"Given a complete GCS path, return the bucket name and prefix as a tuple.\n", + "\n", + " Example Usage:\n", + "\n", + " bucket, prefix = extract_bucket_and_prefix_from_gcs_path(\n", + " \"gs://example-bucket/path/to/folder\"\n", + " )\n", + "\n", + " # bucket = \"example-bucket\"\n", + " # prefix = \"path/to/folder\"\n", + "\n", + " Args:\n", + " gcs_path (str):\n", + " Required. A full path to a Cloud Storage folder or resource.\n", + " Can optionally include \"gs://\" prefix or end in a trailing slash \"/\".\n", + "\n", + " Returns:\n", + " Tuple[str, Optional[str]]\n", + " A (bucket, prefix) pair from provided GCS path. If a prefix is not\n", + " present, None is returned in its place.\n", + " \"\"\"\n", + " if gcs_path.startswith(\"gs://\"):\n", + " gcs_path = gcs_path[5:]\n", + " if gcs_path.endswith(\"/\"):\n", + " gcs_path = gcs_path[:-1]\n", + "\n", + " gcs_parts = gcs_path.split(\"/\", 1)\n", + " gcs_bucket = gcs_parts[0]\n", + " gcs_blob_prefix = None if len(gcs_parts) == 1 else gcs_parts[1]\n", + "\n", + " return (gcs_bucket, gcs_blob_prefix)\n", + "\n", + "\n", + "# Download means and std\n", + "def download_mean_and_std(mean_and_std_json_file):\n", + " \"\"\"Download mean and std for each column\"\"\"\n", + " import json\n", + " \n", + " bucket, file_path = extract_bucket_and_prefix_from_gcs_path(mean_and_std_json_file)\n", + " download_blob(bucket_name=bucket, source_blob_name=file_path, destination_file_name=file_path)\n", + " \n", + " with open(file_path, 'r') as file:\n", + " return json.loads(file.read())\n", + "\n", + " \n", + "# # Download a table\n", + "def download_table(bq_table_uri: str):\n", + " # Remove bq:// prefix if present\n", + " prefix = \"bq://\"\n", + " if bq_table_uri.startswith(prefix):\n", + " bq_table_uri = bq_table_uri[len(prefix):]\n", + "\n", + " table = bigquery.TableReference.from_string(bq_table_uri)\n", + " rows = bqclient.list_rows(table)\n", + " \n", + " return rows.to_dataframe(create_bqstorage_client=False)\n", + "\n", + "\n", + "def standardize(df, mean_and_std):\n", + " \"\"\"Scales numerical columns using their means and standard deviation to get\n", + " z-scores: the mean of each numerical column becomes 0, and the standard\n", + " deviation becomes 1. This can help the model converge during training.\n", + "\n", + " Args:\n", + " df: Pandas df\n", + "\n", + " Returns:\n", + " Input df with the numerical columns scaled to z-scores\n", + " \"\"\"\n", + " dtypes = list(zip(df.dtypes.index, map(str, df.dtypes)))\n", + " # Normalize numeric columns.\n", + " for column, dtype in dtypes:\n", + " if dtype == \"float32\":\n", + " df[column] -= mean_and_std[column][\"mean\"]\n", + " df[column] /= mean_and_std[column][\"std\"]\n", + " return df\n", + "\n", + "\n", + "def preprocess(df):\n", + " \"\"\"Converts categorical features to numeric. Removes unused columns.\n", + "\n", + " Args:\n", + " df: Pandas df with raw data\n", + "\n", + " Returns:\n", + " df with preprocessed data\n", + " \"\"\"\n", + " df = df.drop(columns=UNUSED_COLUMNS)\n", + "\n", + " # Drop rows with NaN's\n", + " df = df.dropna()\n", + "\n", + " # Convert integer valued (numeric) columns to floating point\n", + " numeric_columns = df.select_dtypes([\"int32\", \"float32\", \"float64\"]).columns\n", + " df[numeric_columns] = df[numeric_columns].astype(\"float32\")\n", + "\n", + " # Convert categorical columns to numeric\n", + " cat_columns = df.select_dtypes([\"object\"]).columns\n", + "\n", + " df[cat_columns] = df[cat_columns].apply(\n", + " lambda x: x.astype(_CATEGORICAL_TYPES[x.name])\n", + " )\n", + " df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)\n", + " return df\n", + "\n", + "\n", + "def convert_dataframe_to_dataset(\n", + " df_train,\n", + " df_validation,\n", + " mean_and_std\n", + "):\n", + " df_train = preprocess(df_train)\n", + " df_validation = preprocess(df_validation)\n", + "\n", + " df_train_x, df_train_y = df_train, df_train.pop(LABEL_COLUMN)\n", + " df_validation_x, df_validation_y = df_validation, df_validation.pop(LABEL_COLUMN)\n", + "\n", + " # Join train_x and eval_x to normalize on overall means and standard\n", + " # deviations. Then separate them again.\n", + " all_x = pd.concat([df_train_x, df_validation_x], keys=[\"train\", \"eval\"])\n", + " all_x = standardize(all_x, mean_and_std)\n", + " df_train_x, df_validation_x = all_x.xs(\"train\"), all_x.xs(\"eval\")\n", + "\n", + " y_train = np.asarray(df_train_y).astype(\"float32\")\n", + " y_validation = np.asarray(df_validation_y).astype(\"float32\")\n", + "\n", + " # Convert to numpy representation\n", + " x_train = np.asarray(df_train_x)\n", + " x_test = np.asarray(df_validation_x)\n", + "\n", + " # Convert to one-hot representation\n", + " y_train = tf.keras.utils.to_categorical(y_train, num_classes=len(SPECIES))\n", + " y_validation = tf.keras.utils.to_categorical(y_validation, num_classes=len(SPECIES))\n", + "\n", + " dataset_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))\n", + " dataset_validation = tf.data.Dataset.from_tensor_slices((x_test, y_validation))\n", + " return (dataset_train, dataset_validation)\n", + "\n", + "\n", + "# Remove NA values\n", + "def clean_dataframe(df):\n", + " return df.replace(to_replace=NA_VALUES, value=np.NaN).dropna()\n", + "\n", + "\n", + "def create_model(num_features):\n", + " # Create model\n", + " Dense = tf.keras.layers.Dense\n", + " model = tf.keras.Sequential(\n", + " [\n", + " Dense(\n", + " 100,\n", + " activation=tf.nn.relu,\n", + " kernel_initializer=\"uniform\",\n", + " input_dim=num_features,\n", + " ),\n", + " Dense(75, activation=tf.nn.relu),\n", + " Dense(50, activation=tf.nn.relu),\n", + " Dense(25, activation=tf.nn.relu),\n", + " Dense(3, activation=tf.nn.softmax),\n", + " ]\n", + " )\n", + " \n", + " # Compile Keras model\n", + " optimizer = tf.keras.optimizers.RMSprop(lr=0.001)\n", + " model.compile(\n", + " loss=\"categorical_crossentropy\", metrics=[\"accuracy\"], optimizer=optimizer\n", + " )\n", + " \n", + " return model\n", + "\n", + "\n", + "mean_and_std = download_mean_and_std(args.mean_and_std_json_file)\n", + "\n", + "# Single Machine, single compute device\n", + "if args.distribute == 'single':\n", + " if tf.test.is_gpu_available():\n", + " strategy = tf.distribute.OneDeviceStrategy(device=\"/gpu:0\")\n", + " else:\n", + " strategy = tf.distribute.OneDeviceStrategy(device=\"/cpu:0\")\n", + "# Single Machine, multiple compute device\n", + "elif args.distribute == 'mirror':\n", + " strategy = tf.distribute.MirroredStrategy()\n", + "# Multiple Machine, multiple compute device\n", + "elif args.distribute == 'multi':\n", + " strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()\n", + "\n", + "# Set up training variables\n", + "LABEL_COLUMN = \"species\"\n", + "UNUSED_COLUMNS = []\n", + "NA_VALUES = [\"NA\", \".\"]\n", + "\n", + "# Possible categorical values\n", + "SPECIES = ['Adelie Penguin (Pygoscelis adeliae)',\n", + " 'Chinstrap penguin (Pygoscelis antarctica)',\n", + " 'Gentoo penguin (Pygoscelis papua)']\n", + "ISLANDS = ['Dream', 'Biscoe', 'Torgersen']\n", + "SEXES = ['FEMALE', 'MALE']\n", + "\n", + "df_train = download_table(training_data_uri)\n", + "df_validation = download_table(validation_data_uri)\n", + "df_test = download_table(test_data_uri)\n", + "\n", + "df_train = clean_dataframe(df_train)\n", + "df_validation = clean_dataframe(df_validation)\n", + "\n", + "_CATEGORICAL_TYPES = {\n", + " \"island\": pd.api.types.CategoricalDtype(categories=ISLANDS),\n", + " \"species\": pd.api.types.CategoricalDtype(categories=SPECIES),\n", + " \"sex\": pd.api.types.CategoricalDtype(categories=SEXES),\n", + "}\n", + "\n", + "# Create datasets\n", + "dataset_train, dataset_validation = convert_dataframe_to_dataset(\n", + " df_train, \n", + " df_validation, \n", + " mean_and_std\n", + ")\n", + "\n", + "# Shuffle train set\n", + "dataset_train = dataset_train.shuffle(len(df_train))\n", + "\n", + "# Create the model\n", + "with strategy.scope():\n", + " model = create_model(num_features=dataset_train._flat_shapes[0].dims[0].value)\n", + "\n", + "# Set up datasets\n", + "NUM_WORKERS = strategy.num_replicas_in_sync\n", + "# Here the batch size scales up by number of workers since\n", + "# `tf.data.Dataset.batch` expects the global batch size.\n", + "GLOBAL_BATCH_SIZE = args.batch_size * NUM_WORKERS\n", + "dataset_train = dataset_train.batch(GLOBAL_BATCH_SIZE)\n", + "dataset_validation = dataset_validation.batch(GLOBAL_BATCH_SIZE)\n", + "\n", + "# Train the model\n", + "model.fit(dataset_train, epochs=args.epochs, validation_data=dataset_validation)\n", + "\n", + "tf.saved_model.save(model, os.getenv(\"AIP_MODEL_DIR\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "train_custom_job" + }, + "source": [ + "### Train the model\n", + "\n", + "Define your custom `TrainingPipeline` on Vertex AI.\n", + "\n", + "Use the `CustomTrainingJob` class to define the `TrainingPipeline`. The class takes the following parameters:\n", + "\n", + "- `display_name`: The user-defined name of this training pipeline.\n", + "- `script_path`: The local path to the training script.\n", + "- `container_uri`: The URI of the training container image.\n", + "- `requirements`: The list of Python package dependencies of the script.\n", + "- `model_serving_container_image_uri`: The URI of a container that can serve predictions for your model — either a pre-built container or a custom container.\n", + "\n", + "Use the `run` function to start training. The function takes the following parameters:\n", + "\n", + "- `dataset`: Vertex AI Dataset to fit this training against.\n", + "- `model_display_name`: The display name of the `Model` if the script produces a managed `Model`.\n", + "- `bigquery_destination`: The BigQuery project location where the training data is to be written to.\n", + "- `args`: The command line arguments to be passed to the Python script.\n", + "\n", + "The `run` function creates a training pipeline that trains and creates a `Model` object. After the training pipeline completes, the `run` function returns the `Model` object." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mxIxvDdglugx" + }, + "outputs": [], + "source": [ + "job = aiplatform.CustomTrainingJob(\n", + " display_name=JOB_NAME,\n", + " script_path=\"task.py\",\n", + " container_uri=TRAIN_IMAGE,\n", + " requirements=[\"google-cloud-bigquery>=2.20.0\", \"db-dtypes\"],\n", + " model_serving_container_image_uri=DEPLOY_IMAGE,\n", + ")\n", + "\n", + "MODEL_DISPLAY_NAME = \"penguins-unique\"\n", + "\n", + "# Start the training\n", + "model = job.run(\n", + " dataset=dataset,\n", + " model_display_name=MODEL_DISPLAY_NAME,\n", + " bigquery_destination=f\"bq://{PROJECT_ID}\",\n", + " args=CMDARGS,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "make_prediction" + }, + "source": [ + "## Send Batch Prediction job request with feature filtering (instanceConfig field)\n", + "\n", + "Now that the model is ready, you can send batch prediction request directly from the model resource without needing to deploy the model to an endpoint. \n", + "\n", + "Sometimes, your input data does not match the data format that the predictor accepts. Feature filtering lets you either exclude certain fields (such as identifiers or metadata) that are in the input data from your prediction request, or include only a subset of fields from the input data in your prediction request, without having to do any custom pre/post-processing in the prediction container.\n", + "You can filter and/or transform your batch input \n", + "\n", + "In this notebook you learn how to send batch prediction request by including or excluding a list of features by specifying `instanceConfig` in your `BatchPredictionJob` request (**v1beta1 only**).\n", + "\n", + "Learn more about [Prediction on Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/overview)
\n", + "Learn more about [feature filtering](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions#filter_and_transform_input_data_preview)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "get_test_item:test" + }, + "source": [ + "### Prepare test data\n", + "\n", + "Prepare test data by normalizing it and converting categorical values to numeric values.\n", + "You must normalize these values in the same way that your normalized training data.\n", + "\n", + "In this example, we add an extra column called `id` to the test dataset which was not used for training. We show how to exclude this feature at prediction. \n", + "Here, you perform testing with the same dataset that you used for training. In practice, you generally want to use a separate test dataset to verify your results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e3a2449cfcf1" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from google.cloud import bigquery\n", + "\n", + "UNUSED_COLUMNS = []\n", + "LABEL_COLUMN = \"species\"\n", + "\n", + "# Possible categorical values\n", + "SPECIES = [\n", + " \"Adelie Penguin (Pygoscelis adeliae)\",\n", + " \"Chinstrap penguin (Pygoscelis antarctica)\",\n", + " \"Gentoo penguin (Pygoscelis papua)\",\n", + "]\n", + "ISLANDS = [\"Dream\", \"Biscoe\", \"Torgersen\"]\n", + "SEXES = [\"FEMALE\", \"MALE\"]\n", + "\n", + "_CATEGORICAL_TYPES = {\n", + " \"island\": pd.api.types.CategoricalDtype(categories=ISLANDS),\n", + " \"species\": pd.api.types.CategoricalDtype(categories=SPECIES),\n", + " \"sex\": pd.api.types.CategoricalDtype(categories=SEXES),\n", + "}\n", + "\n", + "\n", + "def standardize(df, mean_and_std):\n", + " \"\"\"Scales numerical columns using their means and standard deviation to get\n", + " z-scores: the mean of each numerical column becomes 0, and the standard\n", + " deviation becomes 1. This can help the model converge during training.\n", + "\n", + " Args:\n", + " df: Pandas df\n", + "\n", + " Returns:\n", + " Input df with the numerical columns scaled to z-scores\n", + " \"\"\"\n", + " dtypes = list(zip(df.dtypes.index, map(str, df.dtypes)))\n", + " # Normalize numeric columns.\n", + " for column, dtype in dtypes:\n", + " if dtype == \"float32\":\n", + " df[column] -= mean_and_std[column][\"mean\"]\n", + " df[column] /= mean_and_std[column][\"std\"]\n", + " return df\n", + "\n", + "\n", + "def preprocess(df, mean_and_std):\n", + " \"\"\"Converts categorical features to numeric. Removes unused columns.\n", + "\n", + " Args:\n", + " df: Pandas df with raw data\n", + "\n", + " Returns:\n", + " df with preprocessed data\n", + " \"\"\"\n", + " df = df.drop(columns=UNUSED_COLUMNS)\n", + "\n", + " # Drop rows with NaN's\n", + " df = df.dropna()\n", + "\n", + " # Convert integer valued (numeric) columns to floating point\n", + " numeric_columns = df.select_dtypes([\"int32\", \"float32\", \"float64\"]).columns\n", + " df[numeric_columns] = df[numeric_columns].astype(\"float32\")\n", + "\n", + " # Convert categorical columns to numeric\n", + " cat_columns = df.select_dtypes([\"object\"]).columns\n", + "\n", + " df[cat_columns] = df[cat_columns].apply(\n", + " lambda x: x.astype(_CATEGORICAL_TYPES[x.name])\n", + " )\n", + " df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)\n", + " return df\n", + "\n", + "\n", + "def convert_dataframe_to_list(df, mean_and_std):\n", + " df = preprocess(df, mean_and_std)\n", + "\n", + " df_x, df_y = df, df.pop(LABEL_COLUMN)\n", + "\n", + " # Normalize on overall means and standard deviations.\n", + " df = standardize(df, mean_and_std)\n", + "\n", + " y = np.asarray(df_y).astype(\"float32\")\n", + "\n", + " # Convert to numpy representation\n", + " x = np.asarray(df_x)\n", + "\n", + " # Convert to one-hot representation\n", + " return x.tolist(), y.tolist(), df_x\n", + "\n", + "\n", + "x_test, y_test, df_x = convert_dataframe_to_list(dataframe, mean_and_std)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VO2klROGjmpX" + }, + "outputs": [], + "source": [ + "# Add id column to the test dataframe\n", + "ID_COLUMN_NAME = \"id\"\n", + "df_x_with_id = df_x.copy()\n", + "df_x_with_id[ID_COLUMN_NAME] = [i for i in range(0, df_x_with_id.shape[0])]\n", + "\n", + "# Print columns of the datafram\n", + "print(f\"Test dataset columns: {df_x_with_id.columns}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PKyddetDjmpX" + }, + "source": [ + "### Upload the test DataFrame to BigQuery " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PCXSaQ2OjmpX" + }, + "outputs": [], + "source": [ + "def save_dataframe_to_bigquery(\n", + " dataframe: pd.DataFrame, dataset_name: str, table_name: str\n", + ") -> str:\n", + " \"\"\"This function loads a dataframe to a new bigquery table\n", + "\n", + " Args:\n", + " dataframe (pd.Dataframe): dataframe to be loaded to bigquery\n", + " dataset_name (str): name of the BigQuery dataset for storing the data\n", + " table_name (str): name of the BigQuery table that is being created\n", + "\n", + " Returns:\n", + " str: table id of the destination bigquery table\n", + " \"\"\"\n", + " client = bigquery.Client(PROJECT_ID)\n", + "\n", + " bq_dataset = bigquery.Dataset(f\"{PROJECT_ID}.{dataset_name}\")\n", + " bq_dataset = client.create_dataset(bq_dataset, exists_ok=True)\n", + "\n", + " job_config = bigquery.LoadJobConfig(\n", + " # Optionally, set the write disposition. BigQuery appends loaded rows\n", + " # to an existing table by default, but with WRITE_TRUNCATE write\n", + " # disposition it replaces the table with the loaded data.\n", + " write_disposition=\"WRITE_TRUNCATE\",\n", + " )\n", + "\n", + " # Reference: https://cloud.google.com/bigquery/docs/samples/bigquery-load-table-dataframe\n", + " job = client.load_table_from_dataframe(\n", + " dataframe=dataframe,\n", + " destination=f\"{PROJECT_ID}.{dataset_name}.{table_name}\",\n", + " job_config=job_config,\n", + " )\n", + "\n", + " job.result()\n", + "\n", + " return str(job.destination)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cAluSCrsjmpX" + }, + "outputs": [], + "source": [ + "# Upload the Dataframe to a BigQuery table\n", + "\n", + "DATASET_NAME = \"test_dataset\"\n", + "TABLE_NAME = \"test-data-unique\"\n", + "\n", + "TABLE_ID = save_dataframe_to_bigquery(\n", + " dataframe=df_x_with_id, dataset_name=DATASET_NAME, table_name=TABLE_NAME\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "send_prediction_request:image" + }, + "source": [ + "### Send the BatchPredictionJob request using REST API\n", + "\n", + "Now that you have test data, you can use it to send a batch prediction request using REST API. To do that you need to create a `JSON` request with the following information:\n", + "\n", + "- `BATCH_JOB_NAME`: Display name for the batch prediction job.\n", + "- `MODEL_URI`: The URI for the Model resource to use for making predictions.\n", + "- `INPUT_FORMAT`: The format of your input data: bigquery, jsonl, csv, tf-record, tf-record-gzip, or file-list.\n", + "- `INPUT_URI`: Cloud Storage URI of your input data. May contain wildcards.\n", + "- `OUTPUT_URI`: Cloud Storage URI of a directory where you want Vertex AI to save output.\n", + "- `MACHINE_TYPE`: The machine resources to be used for this batch prediction job.\n", + "\n", + "In this example, we create two versions of the same JSON request: one with `excludedFields` and the other with `includeFields` to show how to include or exclude certain features. Note that these two requests do the same job in this example!\n", + "\n", + "Learn more about [request a batch prediction](https://cloud.google.com/vertex-ai/docs/predictions/get-predictions#api_1)
\n", + "Learn more about [instanceconfig](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.batchPredictionJobs#instanceconfig)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ofwR2WTcjmpY" + }, + "outputs": [], + "source": [ + "BATCH_JOB_NAME = \"penguins-test\"\n", + "MODEL_URI = model.resource_name\n", + "INPUT_FORMAT = \"bigquery\"\n", + "INPUT_URI = f\"bq://{TABLE_ID}\"\n", + "OUTPUT_FORMAT = \"bigquery\"\n", + "OUTPUT_URI = f\"bq://{PROJECT_ID}\"\n", + "MACHINE_TYPE = \"n1-standard-2\"\n", + "EXCLUDED_FIELDS = [ID_COLUMN_NAME]\n", + "\n", + "# Create a list of columns to be included\n", + "ALL_COLUMNS = list(df_x_with_id.columns)\n", + "INCLUDED_FIELDS = ALL_COLUMNS.copy()\n", + "INCLUDED_FIELDS.remove(ID_COLUMN_NAME)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YJdI9L5fjmpY" + }, + "source": [ + "### Create JSON body requests" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hfVWSzwkjmpY" + }, + "outputs": [], + "source": [ + "import json\n", + "\n", + "request_with_excluded_fields = {\n", + " \"displayName\": f\"{BATCH_JOB_NAME}-excluded_fields\",\n", + " \"model\": MODEL_URI,\n", + " \"inputConfig\": {\n", + " \"instancesFormat\": INPUT_FORMAT,\n", + " \"bigquerySource\": {\"inputUri\": INPUT_URI},\n", + " },\n", + " \"outputConfig\": {\n", + " \"predictionsFormat\": OUTPUT_FORMAT,\n", + " \"bigqueryDestination\": {\"outputUri\": OUTPUT_URI},\n", + " },\n", + " \"dedicatedResources\": {\n", + " \"machineSpec\": {\n", + " \"machineType\": MACHINE_TYPE,\n", + " }\n", + " },\n", + " \"instanceConfig\": {\"excludedFields\": EXCLUDED_FIELDS},\n", + "}\n", + "\n", + "with open(\"request_with_excluded_fields.json\", \"w\") as outfile:\n", + " json.dump(request_with_excluded_fields, outfile)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e95Rk92fjmpZ" + }, + "outputs": [], + "source": [ + "request_with_included_fields = {\n", + " \"displayName\": f\"{BATCH_JOB_NAME}-included_fields\",\n", + " \"model\": MODEL_URI,\n", + " \"inputConfig\": {\n", + " \"instancesFormat\": INPUT_FORMAT,\n", + " \"bigquerySource\": {\"inputUri\": INPUT_URI},\n", + " },\n", + " \"outputConfig\": {\n", + " \"predictionsFormat\": OUTPUT_FORMAT,\n", + " \"bigqueryDestination\": {\"outputUri\": OUTPUT_URI},\n", + " },\n", + " \"dedicatedResources\": {\n", + " \"machineSpec\": {\n", + " \"machineType\": MACHINE_TYPE,\n", + " }\n", + " },\n", + " \"instanceConfig\": {\"includedFields\": INCLUDED_FIELDS},\n", + "}\n", + "\n", + "with open(\"request_with_included_fields.json\", \"w\") as outfile:\n", + " json.dump(request_with_included_fields, outfile)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jPIYouoVjmpZ" + }, + "source": [ + "### Send the requests\n", + "\n", + "To send the requests, specify the API version you want to use. In this case you use `v1beta1` to be able to use `instanceConfig`.\n", + "\n", + "#### Exclude fields\n", + "\n", + "Here, we send the request with `excludedFields`. After running the follwing cell you should receive a JSON response with your provided information. Then wait for the job to complete (you can check your job status on your Vertex AI Batch Predictions menu or use the Python SDK)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ykduvrX3jmpZ" + }, + "outputs": [], + "source": [ + "! curl \\\n", + " -X POST \\\n", + " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + " -H \"Content-Type: application/json\" \\\n", + " -d @request_with_excluded_fields.json \\\n", + " https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/batchPredictionJobs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QPK1jQRejmpZ" + }, + "source": [ + "#### Include fields\n", + "\n", + "Here, we send the request with `includedFields`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1vXC7fNBjmpZ" + }, + "outputs": [], + "source": [ + "! curl \\\n", + " -X POST \\\n", + " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", + " -H \"Content-Type: application/json\" \\\n", + " -d @request_with_included_fields.json \\\n", + " https://{REGION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{REGION}/batchPredictionJobs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup:custom" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this notebook:\n", + "\n", + "- Training Job\n", + "- Model\n", + "- Cloud Storage Bucket\n", + "- BigQuery Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NNmebHf7lug0" + }, + "outputs": [], + "source": [ + "# Warning: Setting this to true deletes everything in your bucket\n", + "delete_bucket = True\n", + "\n", + "# Delete the training job\n", + "job.delete()\n", + "\n", + "# Delete the model\n", + "model.delete()\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -r $BUCKET_URI\n", + "\n", + "# Delete the created BigQuery dataset\n", + "! bq rm -r -f $PROJECT_ID:$DATASET_NAME" + ] + } + ], + "metadata": { + "colab": { + "name": "custom_batch_prediction_feature_filter.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/pytorch/README.md b/notebooks/official/pytorch/README.md new file mode 100644 index 000000000..4b2c2d34d --- /dev/null +++ b/notebooks/official/pytorch/README.md @@ -0,0 +1,20 @@ + +[Training, tuning and deploying a PyTorch text sentiment classification model on Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pytorch/pytorch-text-sentiment-classification-custom-train-deploy.ipynb) + +``` +Learn to build, train, tune and deploy a PyTorch model on [Vertex AI](https://cloud. + +The steps performed include: + +- Create training package for the text classification model. +- Train the model with custom training on Vertex AI. +- Check the created model artifacts. +- Create a custom container for predictions. +- Deploy the trained model to a Vertex AI Endpoint using the custom container for predictions. +- Send online prediction requests to the deployed model and validate. +- Clean up the resources created in this notebook. + +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + diff --git a/notebooks/official/pytorch/pytorch-text-sentiment-classification-custom-train-deploy.ipynb b/notebooks/official/pytorch/pytorch-text-sentiment-classification-custom-train-deploy.ipynb index d713689c9..84c9e5b8d 100644 --- a/notebooks/official/pytorch/pytorch-text-sentiment-classification-custom-train-deploy.ipynb +++ b/notebooks/official/pytorch/pytorch-text-sentiment-classification-custom-train-deploy.ipynb @@ -44,7 +44,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -63,7 +63,9 @@ "\n", "This notebook demonstrates building and deploying a text sentiment classification model by fine-tuing a pre-trained [BERT](https://huggingface.co/bert-base-cased) model using Vertex AI and Pytorch SDK. This example is inspired by the Hugging Face [Token_Classification](https://github.com/huggingface/notebooks/blob/master/examples/token_classification.ipynb) and [Run_Glue](https://github.com/huggingface/transformers/blob/v2.5.0/examples/run_glue.py) notebooks. \n", "\n", - "You can find more details about the model at [Hugging Face Hub](https://huggingface.co/bert-base-cased). For more notebooks with the state of the art PyTorch/Tensorflow/JAX, you can explore [Hugging FaceNotebooks](https://huggingface.co/transformers/notebooks.html).\n" + "You can find more details about the model at [Hugging Face Hub](https://huggingface.co/bert-base-cased). For more notebooks with the state of the art PyTorch/Tensorflow/JAX, you can explore [Hugging FaceNotebooks](https://huggingface.co/transformers/notebooks.html).\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/reduction_server/README.md b/notebooks/official/reduction_server/README.md index f9043f5c0..11e6ca2c8 100644 --- a/notebooks/official/reduction_server/README.md +++ b/notebooks/official/reduction_server/README.md @@ -1,6 +1,7 @@ [PyTorch distributed training with Vertex AI Reduction Server](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/reduction_server/pytorch_distributed_training_reduction_server.ipynb) +``` Learn how to create a PyTorch distributed training job that uses PyTorch distributed training framework and tools, and run the training job on the Vertex AI Training service with Reduction Server. The steps performed include: @@ -8,4 +9,11 @@ The steps performed include: * Create a PyTorch distributed training application * Package the training application with pre-built containers * Create a custom job on Vertex AI with Reduction Server -* Submit and monitor the job +* Submit and monitor the job + +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + +   Learn more about [Vertex AI Reduction Server](https://cloud.google.com/blog/topics/developers-practitioners/optimize-training-performance-reduction-server-vertex-ai). + diff --git a/notebooks/official/reduction_server/pytorch_distributed_training_reduction_server.ipynb b/notebooks/official/reduction_server/pytorch_distributed_training_reduction_server.ipynb index 0a10c7215..f3f8e4575 100644 --- a/notebooks/official/reduction_server/pytorch_distributed_training_reduction_server.ipynb +++ b/notebooks/official/reduction_server/pytorch_distributed_training_reduction_server.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "When you run a distributed training job across multiple nodes using GPUs, communicating gradients between nodes can contribute significant latency. Reduction Server is an all-reduce algorithm that can increase throughput and reduce latency for distributed training. This notebook demonstrates how to run a PyTorch distributed training job with Reduction Server on Vertex AI. The training job is created to fine-tune pretrained model `bert-large-cased` from the Hugging Face Transformers library on the `imdb` dataset for sentiment classification." + "When you run a distributed training job across multiple nodes using GPUs, communicating gradients between nodes can contribute significant latency. Reduction Server is an all-reduce algorithm that can increase throughput and reduce latency for distributed training. This notebook demonstrates how to run a PyTorch distributed training job with Reduction Server on Vertex AI. The training job is created to fine-tune pretrained model `bert-large-cased` from the Hugging Face Transformers library on the `imdb` dataset for sentiment classification.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training) and [Vertex AI Reduction Server](https://cloud.google.com/blog/topics/developers-practitioners/optimize-training-performance-reduction-server-vertex-ai)." ] }, { diff --git a/notebooks/official/sdk/README.md b/notebooks/official/sdk/README.md index 45d17c66a..c3e5f6d1c 100644 --- a/notebooks/official/sdk/README.md +++ b/notebooks/official/sdk/README.md @@ -1,6 +1,7 @@ [AutoML Video Classification Example](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/sdk/SDK_AutoML_Video_Classification.ipynb) +``` The objective of this notebook is to build a AutoML Video Classification Model. The steps performed include the following: @@ -13,9 +14,14 @@ The steps performed include the following: - Copy AutoML Video Demo Prediction Data for creating batch prediction job - Perform batch prediction job on the model +``` + +   Learn more about [AutoML Video](https://cloud.google.com/vertex-ai/docs/tutorials/video-classification-automl/training). + [Custom training using Python package, managed text dataset, and TF Serving container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/sdk/SDK_Custom_Training_Python_Package_Managed_Text_Dataset_Tensorflow_Serving_Container.ipynb) +``` Learn how to create a Custom Model using Custom Python Package Training and you learn how to serve the model using TensorFlow-Serving Container for online prediction. The steps performed include: @@ -29,3 +35,8 @@ The steps performed include: - Deploy a Model and Create an Endpoint on Vertex AI - Predict on the Endpoint - Create a Batch Prediction Job on the Model + +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + diff --git a/notebooks/official/sdk/SDK_AutoML_Video_Classification.ipynb b/notebooks/official/sdk/SDK_AutoML_Video_Classification.ipynb index 0e0c25a90..e90c6fb5f 100644 --- a/notebooks/official/sdk/SDK_AutoML_Video_Classification.ipynb +++ b/notebooks/official/sdk/SDK_AutoML_Video_Classification.ipynb @@ -62,7 +62,9 @@ "\n", "This notebook demonstrates how to create an AutoML Video Classification Model, with a Vertex AI video dataset, and how to serve the model for batch prediction. It requires you provide a bucket where the dataset will be stored.\n", "\n", - "Note: you may incur charges for training, prediction, storage or usage of other GCP products in connection with testing this SDK." + "Note: you may incur charges for training, prediction, storage or usage of other GCP products in connection with testing this SDK.\n", + "\n", + "Learn more about [AutoML Video](https://cloud.google.com/vertex-ai/docs/tutorials/video-classification-automl/training)." ] }, { diff --git a/notebooks/official/sdk/SDK_Custom_Training_Python_Package_Managed_Text_Dataset_Tensorflow_Serving_Container.ipynb b/notebooks/official/sdk/SDK_Custom_Training_Python_Package_Managed_Text_Dataset_Tensorflow_Serving_Container.ipynb index f4222c8b1..242e5b7c9 100644 --- a/notebooks/official/sdk/SDK_Custom_Training_Python_Package_Managed_Text_Dataset_Tensorflow_Serving_Container.ipynb +++ b/notebooks/official/sdk/SDK_Custom_Training_Python_Package_Managed_Text_Dataset_Tensorflow_Serving_Container.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -62,7 +62,9 @@ "\n", "This notebook demonstrates how to create a Custom Model using Custom Python Package Training, with a Vertex AI Dataset, and how to serve the model using TensorFlow-Serving Container for online prediction, and batch prediction. It requires you to provide a bucket where the dataset will be stored.\n", "\n", - "Note: You may incur charges for training, prediction, storage or usage of other GCP products in connection with testing this SDK.\n" + "Note: You may incur charges for training, prediction, storage or usage of other GCP products in connection with testing this SDK.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/structured_data/README.md b/notebooks/official/structured_data/README.md deleted file mode 100644 index c3bbf1e6d..000000000 --- a/notebooks/official/structured_data/README.md +++ /dev/null @@ -1,28 +0,0 @@ - -[BQML and AutoML - Experimenting with Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/master/notebooks/official/structured_data/rapid_prototyping_bqml_automl.ipynb) - -Learn how to use `Vertex AI Predictions` for rapid prototyping a model. - -The steps performed include: - -- Creating a BigQuery and Vertex AI training dataset. -- Training a BigQuery ML and AutoML model. -- Extracting evaluation metrics from the BigQueryML and AutoML models. -- Selecting the best trained model. -- Deploying the best trained model. -- Testing the deployed model infrastructure. - - - - - - - - - - - - - - - diff --git a/notebooks/official/tabnet/README.md b/notebooks/official/tabnet/README.md index d2e41c2a3..cf964df13 100644 --- a/notebooks/official/tabnet/README.md +++ b/notebooks/official/tabnet/README.md @@ -1,6 +1,7 @@ [Vertex AI Explainations with TabNet models](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tabnet/ai-explanations-tabnet-algorithm.ipynb) +``` Learn how to provide a sample plotting tool to visualize the output of TabNet, which is helpful in explaining the algorithm. The steps performed are: @@ -9,8 +10,14 @@ The steps performed are: * Visualize and understand the feature importance based on the masks output. * Clean up the resource created by this tutorial. +``` + +   Learn more about [Tabular Workflow for TabNet](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/tabnet). + + [Vertex AI TabNet](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tabnet/tabnet_vertex_tutorial.ipynb) +``` Learn how to run TabNet model on Vertex AI. The steps performed are: @@ -20,3 +27,8 @@ The steps performed are: 4. **Hyperparameter tuning**: Running a hyperparameter tuning job. 5. **Hyperparameter on Vertex AI Training with BigQuery input**: Submitting a training job using BigQuery input. 6. **Cleaning up**: Deleting resources created by this tutorial. + +``` + +   Learn more about [Tabular Workflow for TabNet](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/tabnet). + diff --git a/notebooks/official/tabnet/ai-explanations-tabnet-algorithm.ipynb b/notebooks/official/tabnet/ai-explanations-tabnet-algorithm.ipynb index cb9031c84..46fe88d9c 100644 --- a/notebooks/official/tabnet/ai-explanations-tabnet-algorithm.ipynb +++ b/notebooks/official/tabnet/ai-explanations-tabnet-algorithm.ipynb @@ -63,7 +63,9 @@ "\n", "Vertex AI provides a algorithm called on [TabNet] (https://arxiv.org/abs/1908.07442). TabNet is an interpretable deep learning architecture for tabular (structured) data, the most common data type among enterprises. TabNet combines the best of two worlds: it is explainable, like simpler tree-based models, and can achieve the high accuracy of complex black-box models and ensembles, meaning it is precise without obscuring how the model works. This makes TabNet well-suited for a wide range of tabular data tasks where model explainability is just as important as accuracy.\n", "\n", - "The goal of the tutorial is to provide a sample plotting tool to visualize the output of TabNet, which is helpful in explaining the algorithm.\n" + "The goal of the tutorial is to provide a sample plotting tool to visualize the output of TabNet, which is helpful in explaining the algorithm.\n", + "\n", + "Learn more about [Tabular Workflow for TabNet](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/tabnet)." ] }, { @@ -76,6 +78,13 @@ "\n", "In this tutorial, you learn how to provide a sample plotting tool to visualize the output of TabNet, which is helpful in explaining the algorithm. \n", "\n", + "\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex Explainable AI\n", + "- TabNet builtin algorithm\n", + "\n", "The steps performed are:\n", "* Setup the the project.\n", "* Download the prediction data of pretrain model onf Syn2 data.\n", diff --git a/notebooks/official/tabnet/tabnet_vertex_tutorial.ipynb b/notebooks/official/tabnet/tabnet_vertex_tutorial.ipynb index f5f2900c7..1a1856f56 100644 --- a/notebooks/official/tabnet/tabnet_vertex_tutorial.ipynb +++ b/notebooks/official/tabnet/tabnet_vertex_tutorial.ipynb @@ -65,7 +65,9 @@ "\n", "TabNet combines the best of two worlds: it is explainable (similar to simpler tree-based models) while benefiting from high performance (similar to deep neural networks). This makes it great for retailers, finance and insurance industry applications such as predicting credit scores, fraud detection and forecasting. \n", "\n", - "TabNet uses a machine learning technique called sequential attention to select which model features to reason from at each step in the model. This mechanism makes it possible to explain how the model arrives at its predictions and helps it learn more accurate models. Thanks to this design, TabNet not only outperforms other neural networks and decision trees but also provides interpretable feature attributions. Releasing TabNet as a First Party Trainer in Vertex AI means you'll be able to easily take advantage of TabNet's architecture and explainability and use it to train models on your own data. " + "TabNet uses a machine learning technique called sequential attention to select which model features to reason from at each step in the model. This mechanism makes it possible to explain how the model arrives at its predictions and helps it learn more accurate models. Thanks to this design, TabNet not only outperforms other neural networks and decision trees but also provides interpretable feature attributions. Releasing TabNet as a First Party Trainer in Vertex AI means you'll be able to easily take advantage of TabNet's architecture and explainability and use it to train models on your own data. \n", + "\n", + "Learn more about [Tabular Workflow for TabNet](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/tabnet)." ] }, { @@ -78,6 +80,13 @@ "\n", "In this notebook, you learn how to run TabNet model on Vertex AI.\n", "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Training\n", + "- Vertex AI Hyperparameter Tuning\n", + "- TabNet builtin algorithm\n", + "- BigQuery\n", + "\n", "The steps performed are:\n", "1. **Setup**: Importing the required libraries and setting your global variables.\n", "2. **Configure parameters**: Setting the appropriate parameter values for the training job.\n", diff --git a/notebooks/official/tabular_workflows/README.md b/notebooks/official/tabular_workflows/README.md index 788237f67..18a017496 100644 --- a/notebooks/official/tabular_workflows/README.md +++ b/notebooks/official/tabular_workflows/README.md @@ -1,6 +1,7 @@ [TabNet Pipeline](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tabular_workflows/tabnet_on_vertex_pipelines.ipynb) +``` Learn how to create two classification models using Vertex AI TabNet Tabular Workflows. The steps performed include: @@ -8,10 +9,14 @@ The steps performed include: - Create a TabNet CustomJob. This is the best option if you know which hyperparameters to use for training. - Create a TabNet HyperparameterTuningJob. This allows you to get the best set of hyperparameters for your dataset. +``` + +   Learn more about [Tabular Workflow for TabNet](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/tabnet). [Wide & Deep Pipeline](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tabular_workflows/wide_and_deep_on_vertex_pipelines.ipynb) +``` Learn how to create two classification models using Vertex AI Wide & Deep Tabular Workflows. The steps performed include: @@ -19,4 +24,7 @@ The steps performed include: - Create a Wide & Deep CustomJob. This is the best option if you know which hyperparameters to use for training. - Create a Wide & Deep HyperparameterTuningJob. This allows you to get the best set of hyperparameters for your dataset. +``` + +   Learn more about [Tabular Workflow for Wide & Deep](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/wide-and-deep). diff --git a/notebooks/official/tabular_workflows/prophet_on_vertex_pipelines.ipynb b/notebooks/official/tabular_workflows/prophet_on_vertex_pipelines.ipynb new file mode 100644 index 000000000..f463e161d --- /dev/null +++ b/notebooks/official/tabular_workflows/prophet_on_vertex_pipelines.ipynb @@ -0,0 +1,1348 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "q-4-TPc1bz3l" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "72YmFPs0b63B" + }, + "source": [ + "# Train a Prophet Model using Vertex AI Tabular Workflows\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:automl" + }, + "source": [ + "## Overview\n", + "\n", + "In this tutorial, you take on the role of a store planner who must determine how much inventory they need to order for each of their products and stores for November 2019. You accomplish this by fitting a Prophet model to your historical sales data using Vertex AI Tabular Workflows.\n", + "\n", + "Prophet is a forecasting model maintained by Meta. It can handle both univariate and multivariate time series, as long as covariates are available when making a forecast. See the Prophet [paper](https://peerj.com/preprints/3190/) for algorithm details and the [documentation](https://facebook.github.io/prophet/) for more information about the library.\n", + "\n", + "Like [BigQuery ML ARIMA_PLUS](https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-create-time-series), Prophet attempts to decompose each time series into trends, seasons, and holidays, producing a forecast using the aggregation of these models' predictions. One of many differences, however, is that BQML ARIMA+ uses ARIMA to model the trend component, while Prophet attempts to fit a curve using a piecewise logistic or linear model.\n", + "\n", + "Google Cloud offers a pipeline for Prophet model training and another for Prophet batch prediction. Both pipelines are instances of [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction) from [Google Cloud Pipeline Components](https://cloud.google.com/vertex-ai/docs/pipelines/components-introduction) (GCPC).\n", + "\n", + "The model training pipeline offers support for multiple time series. Because each Prophet model is designed for a single time series, the pipeline uses a [Vertex AI Custom Training Job](https://cloud.google.com/vertex-ai/docs/training/create-custom-job) and [Dataflow](https://cloud.google.com/dataflow) to train multiple Prophet models in parallel. The model training pipeline performs hyperparameter tuning using [grid search](https://en.wikipedia.org/wiki/Hyperparameter_optimization#Grid_search) and Prophet's built-in backtesting logic.\n", + "\n", + "Integration of Prophet with Vertex AI means that you can:\n", + "\n", + " * Use Vertex AI [data splitting](https://cloud.google.com/vertex-ai/docs/tabular-data/data-splits#forecasting) and [windowing strategies](https://cloud.google.com/vertex-ai/docs/tabular-data/bp-tabular#context-window).\n", + " * Read data from either BigQuery tables or CSVs stored in Cloud Storage. Vertex AI expects each row to have the same format as for [Vertex AI Forecasting](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting/prepare-data).\n", + "\n", + "Although Prophet is a multivariate model, Vertex AI does not yet have support for external regressors, so it can only be used as a univariate model.\n", + "\n", + "Learn more about [Google Cloud Pipeline Components](https://cloud.google.com/vertex-ai/docs/pipelines/components-introduction)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:automl,training,batch_prediction" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to create several Prophet models using a training Vertex AI Pipeline from Google Cloud Pipeline Components (GCPC), and then do a batch prediction using the corresponding prediction pipeline.\n", + "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- BigQuery\n", + "- Cloud Storage\n", + "- Vertex AI\n", + "- Dataflow\n", + "\n", + "The steps performed are:\n", + "\n", + "1. Train the Prophet models.\n", + "1. View the evaluation metrics.\n", + "1. Make a batch prediction with the Prophet models.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:covid,forecast" + }, + "source": [ + "### Dataset\n", + "\n", + "This tutorial uses a synthetic dataset where product sales are dependent on a variety of factors such as advertisements, holidays, and locations." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "costs" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "* BigQuery\n", + "* Dataflow\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), [Dataflow\n", + "pricing](https://cloud.google.com/dataflow/pricing), and [BigQuery pricing](https://cloud.google.com/bigquery/pricing) and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_local" + }, + "source": [ + "### Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench Notebooks**, your environment already meets all the requirements to run this notebook. You can skip this step.\n", + "\n", + "**Otherwise**, make sure your environment meets this notebook's requirements. You need the following:\n", + "\n", + "- The Cloud Storage SDK\n", + "- Python 3\n", + "- virtualenv\n", + "- Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "The Cloud Storage guide to [Setting up a Python development environment](https://cloud.google.com/python/setup) and the [Jupyter installation guide](https://jupyter.org/install) provide detailed instructions for meeting these requirements. The following steps provide a condensed set of instructions:\n", + "\n", + "1. [Install and initialize the SDK](https://cloud.google.com/sdk/docs/).\n", + "\n", + "2. [Install Python 3](https://cloud.google.com/python/setup#installing_python).\n", + "\n", + "3. [Install virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv) and create a virtual environment that uses Python 3. Activate the virtual environment.\n", + "\n", + "4. To install Jupyter, run `pip3 install jupyter` on the command-line in a terminal shell.\n", + "\n", + "5. To launch Jupyter, run `jupyter notebook` on the command-line in a terminal shell.\n", + "\n", + "6. Open this notebook in the Jupyter Notebook Dashboard.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "install_aip:mbsdk" + }, + "source": [ + "## Install additional packages\n", + "\n", + "Install the latest version of the Google Cloud Pipeline Components (GCPC) SDK." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pZCCaJsYQEH4" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Google Cloud Notebook\n", + "if os.path.exists(\"/opt/deeplearning/metadata/env_version\"):\n", + " USER_FLAG = \"--user\"\n", + "else:\n", + " USER_FLAG = \"\"\n", + "\n", + "! (pip3 install --upgrade $USER_FLAG \\\n", + " google-cloud-aiplatform==1.21.0 \\\n", + " google-cloud-bigquery[pandas]==2.34.4 \\\n", + " google-cloud-pipeline-components==1.0.33)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "restart" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "Once you've installed the additional packages, you need to restart the notebook kernel so it can find the packages.\n", + "\n", + "**Note: You may get a message saying \"Your session crashed for an unknown reason.\", this is expected. Once this cell has finished running, continue on. You do not need to re-run any of the cells above.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PMiYln_IQEH5" + }, + "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:nogpu" + }, + "source": [ + "## Before you begin\n", + "\n", + "### GPU runtime\n", + "\n", + "This tutorial does not require a GPU runtime.\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=ml.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", + "6. (optional) You may also specify a service account to use to run Vertex Pipelines in the project.\n", + "\n", + "**Note**: Jupyter runs lines prefixed with `!` as shell commands, and it interpolates Python variables prefixed with `$`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JDzPOakHF1d2" + }, + "source": [ + "### Set your project ID\n", + "\n", + "Set your project ID below. If you know know your project ID, leave the field blank and the following cells may be able to find it. Optionally, you may also set a service account in the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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)\n", + "\n", + "print(PROJECT_ID)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_gcloud_project_id" + }, + "outputs": [], + "source": [ + "! gcloud config set project $PROJECT_ID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Region\n", + "All BigQuery operations (`DATA_REGION`) are set to run in the `US` multi-region. This is required by the training pipeline because the data you're using is stored in this region. All destination tables are also be stored in this region.\n", + "\n", + "You may change the `REGION` variable, which is used for Vertex Forecasting 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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2dw8q9fdQEH5" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "DATA_REGION = \"US\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "timestamp" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "84Vdv7R-QEH6" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gcp_authenticate" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Google Cloud 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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ssKjl9KrQEH6" + }, + "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 = \"google.colab\" in sys.modules\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", + " 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 '[your-service-account-key-path]'" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "outputs": [], + "source": [ + "BUCKET_URI = \"gs://[your-bucket-name]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4FxNxXwW3inJ" + }, + "source": [ + "Create the bucket if it doesn't already exist." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "autoset_bucket" + }, + "outputs": [], + "source": [ + "if BUCKET_URI == \"\" or BUCKET_URI is None or BUCKET_URI == \"gs://[your-bucket-name]\":\n", + " BUCKET_URI = \"gs://\" + PROJECT_ID + \"aip-\" + UUID\n", + "\n", + "! gsutil ls -b $BUCKET_URI || 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": "9axiWxVBQEH7" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "iqpjQqNa4ZW4" + }, + "source": [ + "### Service Account\n", + "You use a service account to create Vertex AI Pipeline jobs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YJ9pu3XH4ubY" + }, + "outputs": [], + "source": [ + "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "14Pprl_54v0S" + }, + "outputs": [], + "source": [ + "if (\n", + " SERVICE_ACCOUNT == \"\"\n", + " or SERVICE_ACCOUNT is None\n", + " or SERVICE_ACCOUNT == \"[your-service-account]\"\n", + "):\n", + " # Get your service account from gcloud\n", + " if not IS_COLAB:\n", + " shell_output = !gcloud auth list 2>/dev/null\n", + " SERVICE_ACCOUNT = shell_output[2].replace(\"*\", \"\").strip()\n", + "\n", + " else: # IS_COLAB:\n", + " shell_output = ! gcloud projects describe $PROJECT_ID\n", + " project_number = shell_output[-1].split(\":\")[1].strip().replace(\"'\", \"\")\n", + " SERVICE_ACCOUNT = f\"{project_number}-compute@developer.gserviceaccount.com\"\n", + "\n", + " print(\"Service Account:\", SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2xFEd87I47cl" + }, + "source": [ + "#### Set service account access for Vertex AI Pipelines\n", + "Run the following commands to grant your service account access to read and write pipeline artifacts in the bucket that you created in the previous step. You only need to run this step once per service account." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lnB_My88493b" + }, + "outputs": [], + "source": [ + "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator $BUCKET_URI\n", + "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer $BUCKET_URI\n", + "! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/dataflow.developer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "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 json\n", + "import urllib\n", + "\n", + "from google.cloud import aiplatform, bigquery\n", + "from google_cloud_pipeline_components.experimental.automl.forecasting import \\\n", + " utils" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk" + }, + "source": [ + "## Initialize Vertex SDK for Python\n", + "\n", + "Initialize the Vertex SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Fm4Pyn1dQEH7" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XOQaE_r3rTJX" + }, + "source": [ + "## Define train and prediction data" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jumkmlpYrUoY" + }, + "source": [ + "### Location of BigQuery destination table.\n", + "\n", + "#### Create two datasets, one for each model you train. To make things simpler, create the datasets in the same region as the training data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "D8GexGGOrV_F" + }, + "outputs": [], + "source": [ + "dataset_name = f\"forecasting_demo_prophet_{UUID}\"\n", + "\n", + "dataset_path = \".\".join([PROJECT_ID, dataset_name])\n", + "\n", + "# Must be same region as TRAINING_DATASET_BQ_PATH.\n", + "client = bigquery.Client(project=PROJECT_ID)\n", + "bq_dataset = bigquery.Dataset(dataset_path)\n", + "bq_dataset.location = DATA_REGION\n", + "bq_dataset = client.create_dataset(bq_dataset)\n", + "print(f\"Created bigquery dataset {dataset_path} in {DATA_REGION}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "alc0utVZrX0n" + }, + "source": [ + "### Location of BigQuery training data.\n", + "\n", + "Before training a model, you must first generate our dataset of store sales. This dataset includes multiple products and stores, and it also simulates factors such as advertisements and holiday effects. The data is be split into `TRAIN`, `VALIDATE`, `TEST`, and `PREDICT` sets, where the last three sets are all 1 month in duration.\n", + "\n", + "#### Begin by defining the subqueries that create this base sales data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1MtXaVFKrY5T" + }, + "outputs": [], + "source": [ + "base_data_query = \"\"\"\n", + " WITH\n", + "\n", + " -- Create time series for each product + store with some covariates.\n", + " time_series AS (\n", + " SELECT\n", + " CONCAT(\"id_\", store_id, \"_\", product_id) AS id,\n", + " CONCAT('store_', store_id) AS store,\n", + " CONCAT('product_', product_id) AS product,\n", + " date,\n", + " -- Advertise 1/100 products.\n", + " IF(\n", + " ABS(MOD(FARM_FINGERPRINT(CONCAT(product_id, date)), 100)) = 0,\n", + " 1,\n", + " 0\n", + " ) AS advertisement,\n", + " -- Mark Thanksgiving sales as holiday sales.\n", + " IF(\n", + " EXTRACT(DAYOFWEEK FROM date) = 6\n", + " AND EXTRACT(MONTH FROM date) = 11\n", + " AND EXTRACT(DAY FROM date) BETWEEN 23 AND 29,\n", + " 1,\n", + " 0\n", + " ) AS holiday,\n", + " -- Set when each data split ends.\n", + " CASE\n", + " WHEN date < '2019-09-01' THEN 'TRAIN'\n", + " WHEN date < '2019-10-01' THEN 'VALIDATE'\n", + " WHEN date < '2019-11-01' THEN 'TEST'\n", + " ELSE 'PREDICT'\n", + " END AS split,\n", + " -- Generate the sales with one SKU per date.\n", + " FROM\n", + " UNNEST(GENERATE_DATE_ARRAY('2017-01-01', '2019-12-01')) AS date\n", + " CROSS JOIN\n", + " UNNEST(GENERATE_ARRAY(0, 10)) AS product_id\n", + " CROSS JOIN\n", + " UNNEST(GENERATE_ARRAY(0, 3)) AS store_id\n", + " ),\n", + "\n", + " -- Randomly determine factors that contribute to how syntheic sales are calculated.\n", + " time_series_sales_factors AS (\n", + " SELECT\n", + " *,\n", + " ABS(MOD(FARM_FINGERPRINT(product), 10)) AS product_factor,\n", + " ABS(MOD(FARM_FINGERPRINT(store), 10)) AS store_factor,\n", + " [1.6, 0.6, 0.8, 1.0, 1.2, 1.8, 2.0][\n", + " ORDINAL(EXTRACT(DAYOFWEEK FROM date))] AS day_of_week_factor,\n", + " 1 + SIN(EXTRACT(MONTH FROM date) * 2.0 * 3.14 / 24.0) AS month_factor,\n", + " -- Advertised products have increased sales factors for 5 days.\n", + " CASE\n", + " WHEN LAG(advertisement, 0) OVER w = 1.0 THEN 1.2\n", + " WHEN LAG(advertisement, 1) OVER w = 1.0 THEN 1.8\n", + " WHEN LAG(advertisement, 2) OVER w = 1.0 THEN 2.4\n", + " WHEN LAG(advertisement, 3) OVER w = 1.0 THEN 3.0\n", + " WHEN LAG(advertisement, 4) OVER w = 1.0 THEN 1.4\n", + " ELSE 1.0\n", + " END AS advertisement_factor,\n", + " IF(holiday = 1.0, 2.0, 1.0) AS holiday_factor,\n", + " 0.001 * ABS(MOD(FARM_FINGERPRINT(CONCAT(product, store, date)), 100)) AS noise_factor\n", + " FROM\n", + " time_series\n", + " WINDOW w AS (PARTITION BY id ORDER BY date)\n", + " ),\n", + "\n", + " -- Use factors to calculate synthetic sales for each time series.\n", + " base_data AS (\n", + " SELECT\n", + " id,\n", + " store,\n", + " product,\n", + " date,\n", + " split,\n", + " advertisement,\n", + " holiday,\n", + " (\n", + " (1 + store_factor)\n", + " * (1 + product_factor)\n", + " * (1 + month_factor + day_of_week_factor)\n", + " * (\n", + " 1.0\n", + " + 2.0 * advertisement_factor\n", + " + 3.0 * holiday_factor\n", + " + 5.0 * noise_factor\n", + " )\n", + " ) AS sales\n", + " FROM\n", + " time_series_sales_factors\n", + " )\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0CFrF4hprb2e" + }, + "source": [ + "Next, convert this base sales data into a dataset you use to train a model, and a dataset you pass to a trained model at serving time. The training dataset includes the `TRAIN`, `VALIDATE`, and `TEST` splits, while the prediction dataset includes the `PREDICT` split and also the `TEST` split to provide context information." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KjdVaRsnrgDY" + }, + "outputs": [], + "source": [ + "TRAINING_DATASET_BQ_PATH = f\"bq://{dataset_path}.train\"\n", + "PREDICTION_DATASET_BQ_PATH = f\"bq://{dataset_path}.pred\"\n", + "\n", + "train_query = f\"\"\"\n", + " CREATE OR REPLACE TABLE `{dataset_path}.train` AS\n", + " {base_data_query}\n", + " SELECT *\n", + " FROM base_data\n", + " WHERE split != 'PREDICT'\n", + "\"\"\"\n", + "client.query(train_query).result()\n", + "print(f\"Created {TRAINING_DATASET_BQ_PATH}.\")\n", + "\n", + "pred_query = f\"\"\"\n", + " CREATE OR REPLACE TABLE `{dataset_path}.pred` AS\n", + " {base_data_query}\n", + " SELECT *\n", + " FROM base_data\n", + " WHERE split = 'TEST'\n", + "\n", + " UNION ALL\n", + "\n", + " SELECT * EXCEPT (sales), NULL AS sales\n", + " FROM base_data\n", + " WHERE split = 'PREDICT'\n", + "\"\"\"\n", + "client.query(pred_query).result()\n", + "print(f\"Created {PREDICTION_DATASET_BQ_PATH}.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ySuRn2i0rjLH" + }, + "source": [ + "You can take a look at the sales data that was generated. Later in this tutorial, we visualize the time series along with our forecast.\n", + "\n", + "The model is trained with data from January 2017 to October 2019 inclusive.\n", + "\n", + "#### Look at the training data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1rk7ivBzrlBT" + }, + "outputs": [], + "source": [ + "query = f\"SELECT * FROM `{dataset_path}.train` LIMIT 10\"\n", + "client.query(query).to_dataframe().head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QURXka0wrmT_" + }, + "source": [ + "The table used for prediction contains data from November 2019. It also includes actuals from October 2019 as context information.\n", + "\n", + "#### Look at the prediction data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "I0ovZu0UrqND" + }, + "outputs": [], + "source": [ + "query = f\"SELECT * FROM `{dataset_path}.pred` LIMIT 10\"\n", + "client.query(query).to_dataframe().head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SxbOCSYh0OUI" + }, + "source": [ + "## Create a Prophet model\n", + "\n", + "Use GCPC to get the Prophet pipeline to start an `aiplatform.PipelineJob`.\n", + "\n", + "Because Prophet models can only fit a single time series, this training pipeline uses a [Vertex AI Custom Training Job](https://cloud.google.com/vertex-ai/docs/training/create-custom-job) to train multiple Prophet models in parallel. The number of models trained equals the number of unique values in the `time_series_identifier_column` multiplied by the number of hyperparameter tuning trials determined by `max_num_trials`. [Dataflow](https://cloud.google.com/dataflow/docs/about-dataflow) is used to parallelize these model trainings.\n", + "\n", + "For hyperparameter tuning, the Prophet training job performs a deterministic [grid search](https://en.wikipedia.org/wiki/Hyperparameter_optimization#Grid_search) over the [parameters](https://facebook.github.io/prophet/docs/diagnostics.html#hyperparameter-tuning) recommended by the Prophet documentation. The metric used for tuning is specified by the `optimization_objective` parameter, and is calculated using Prophet's `cross_validation` function over the validation split." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7odv91m3wrah" + }, + "source": [ + "### Create the training job\n", + "\n", + "Use the `get_prophet_train_pipeline_and_parameters` function to configure your training job. Here, you can configure the [data splitting](https://cloud.google.com/vertex-ai/docs/tabular-data/data-splits#forecasting) and [windowing](https://cloud.google.com/vertex-ai/docs/tabular-data/bp-tabular#context-window) strategies, hyperparameter tuning trials, and the Dataflow job for parallelizing model training.\n", + "\n", + "The following parameters are used to configure splitting:\n", + "- `predefined_split_key` (str): The predefined_split column name. Other splitting options include fractional splitting on a time column.\n", + "- `training_fraction` (float): The percentage of the data that belongs to the training set. Set this value if you are using a fraction split or a timestamp split.\n", + "- `training_fraction` (float): The percentage of the data that belongs to the validation set. Set this value if you are using a fraction split or a timestamp split.\n", + "- `training_fraction` (float): The percentage of the data that belongs to the test set. Set this value if you are using a fraction split or a timestamp split.\n", + "- `timestamp_split_key` (str): The name of the column containing the timestamps for the data split. Set this value if you are using a timestamp split.\n", + "\n", + "The following parameters are used to configure windowing:\n", + "- `window_column` (str): Name of the column that should be used to filter input rows. The column should contain either booleans or string booleans; if the value of the row is True, generate a sliding window from that row.\n", + "- `window_stride_length` (int): Step length used to generate input examples. Every window_stride_length rows is used to generate a sliding window. Other windowing options include using a predefined column or setting a maximum number to downsample to.\n", + "- `window_max_count` (int): Number of rows that should be used to generate input examples. If the total row count is larger than this number, the input data will be randomly sampled to hit the count.\n", + "\n", + "For more information on how the pipeline parameters relate to splitting and windowing, see the [Prophet on Vertex AI documentation](https://cloud.google.com/vertex-ai/docs/tabular-data/forecasting-prophet).\n", + "\n", + "Other parameters used by the training job below include:\n", + "- `project` (str): The GCP project that runs the pipeline components.\n", + "- `location` (str): The GCP region for Vertex AI.\n", + "- `root_dir` (str): The Cloud Storage location to store the output.\n", + "- `time_column` (str): Name of the column that identifies time order in the time series.\n", + "- `time_series_identifier_column` (str): Name of the column that identifies the time series.\n", + "- `target_column` (str): Name of the column that the model is to predict values for.\n", + "- `forecast_horizon` (int): The number of time periods into the future for which forecasts are created. Future periods start after the latest timestamp for each time series.\n", + "- `optimization_objective` (str): Optimization objective for tuning. Supported metrics come from Prophet's performance_metrics function. These are mse, rmse, mae, mape, mdape, smape, and coverage.\n", + "- `data_granularity_unit` (str): String representing the units of time for the time column.\n", + "- `data_source_bigquery_table_path` (str): The BigQuery table path of format bq://bq_project.bq_dataset.bq_table\n", + "- `max_num_trials` (int): Maximum number of tuning trials to perform per time series.\n", + "- `trainer_dataflow_machine_type` (str): The dataflow machine type used for training.\n", + "- `trainer_dataflow_max_num_workers` (int): The maximum number of Dataflow workers used for training.\n", + "- `dataflow_service_account` (str): Custom service account to run dataflow jobs. The dataflow job can also be configured to use private IPs and a specific VPC subnet.\n", + "\n", + "For a full list of parameters, see the GCPC SDK [documentation](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.33/google_cloud_pipeline_components.experimental.automl.forecasting.html#google_cloud_pipeline_components.experimental.automl.forecasting.utils.get_prophet_train_pipeline_and_parameters).\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "khVlI5tNsirq" + }, + "outputs": [], + "source": [ + "time_column = \"date\" # @param {type: \"string\"}\n", + "time_series_identifier_column = \"id\" # @param {type: \"string\"}\n", + "target_column = \"sales\" # @param {type: \"string\"}\n", + "forecast_horizon = 30 # @param {type: \"integer\"}\n", + "optimization_objective = \"rmse\" # @param {type: \"string\"}\n", + "data_granularity_unit = \"day\" # @param {type: \"string\"}\n", + "split_column = \"split\" # @param {type: \"string\"}\n", + "window_stride_length = 1 # @param {type: \"integer\"}\n", + "\n", + "(\n", + " train_job_spec_path,\n", + " train_parameter_values,\n", + ") = utils.get_prophet_train_pipeline_and_parameters(\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " root_dir=os.path.join(BUCKET_URI, \"pipeline_root\"),\n", + " time_column=time_column,\n", + " time_series_identifier_column=time_series_identifier_column,\n", + " target_column=target_column,\n", + " forecast_horizon=forecast_horizon,\n", + " optimization_objective=optimization_objective,\n", + " data_granularity_unit=data_granularity_unit,\n", + " predefined_split_key=split_column,\n", + " data_source_bigquery_table_path=TRAINING_DATASET_BQ_PATH,\n", + " window_stride_length=window_stride_length,\n", + " max_num_trials=2,\n", + " trainer_dataflow_machine_type=\"n1-standard-2\",\n", + " trainer_dataflow_max_num_workers=50,\n", + " dataflow_service_account=SERVICE_ACCOUNT,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JOeUSSUKsmR8" + }, + "source": [ + "### Run the training pipeline\n", + "\n", + "Use the Vertex AI Python SDK to kick off a training pipeline run. Once the run has started, the following cell outputs a link that allows you to monitor the run. The link should look like this:\n", + "\n", + "`https://console.cloud.google.com/vertex-ai/locations/[REGION]/pipelines/runs/[DISPLAY_NAME]`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4CulHM46nWv7" + }, + "outputs": [], + "source": [ + "# The display name should be unique even if this cell is rerun.\n", + "DISPLAY_NAME = f\"forecasting-demo-train-{generate_uuid()}\"\n", + "\n", + "job = aiplatform.PipelineJob(\n", + " job_id=DISPLAY_NAME,\n", + " display_name=DISPLAY_NAME,\n", + " pipeline_root=os.path.join(BUCKET_URI, DISPLAY_NAME),\n", + " template_path=train_job_spec_path,\n", + " parameter_values=train_parameter_values,\n", + ")\n", + "job.run(service_account=SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_mW24XOGi2-o" + }, + "source": [ + "If you ever want to reuse an existing run, the above command can be replaced with:\n", + "\n", + "```\n", + "job = aiplatform.PipelineJob.get('projects/[PROJECT_NUMBER]/locations/[REGION]/pipelineJobs/[PIPELINE_RUN_NAME]')\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4b3Sn7vwvb6D" + }, + "source": [ + "## Review model evaluation scores\n", + "After your model has finished training, you can review the evaluation scores for it.\n", + "\n", + "#### Metrics are always reported via the `metrics` table in the destination dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9uxJxYZB72hq" + }, + "outputs": [], + "source": [ + "for task_detail in job.gca_resource.job_detail.task_details:\n", + " if task_detail.task_name == \"model-evaluation\":\n", + " metrics = task_detail.outputs[\"evaluation_metrics\"].artifacts[0].metadata\n", + " break\n", + "else:\n", + " raise ValueError(\"Couldn't find the model evaluation task.\")\n", + "\n", + "print(\"Evaluation metrics:\\n\")\n", + "dict(metrics)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "93cAnX81x4_Y" + }, + "source": [ + "## Create and run prediction job\n", + "\n", + "### Create prediction job\n", + "\n", + "Like with the training job, get the prediction pipeline from GCPC and use it to create an `aiplatform.PipelineJob`.\n", + "\n", + "Because there is one Prophet model per time series ID, the Prophet prediction server expects inputs to be aggregated by time series ID and outputs predictions using the same aggregation. This prediction pipeline automates the process of aggregating inputs and disaggregating the outputs from batch prediction.\n", + "\n", + "The prediction job expects the following parameters:\n", + "- `project` (str): The GCP project that runs the pipeline components.\n", + "- `location` (str): The GCP region for Vertex AI.\n", + "- `model_name` (str): The name of the Model resource, in a form of\n", + " projects/{project}/locations/{location}/models/{model}.\n", + "- `time_column` (str): Name of the column that identifies time order in the time series.\n", + "- `time_series_identifier_column` (str): Name of the column that identifies the time series.\n", + "- `target_column` (str): Name of the column that the model is to predict values for.\n", + "- `data_source_csv_filenames` (str): A string that represents a list of comma separated CSV filenames.\n", + "- `data_source_bigquery_table_path` (str): The BigQuery table path of format bq://bq_project.bq_dataset.bq_table\n", + "- `bigquery_destination_uri` (str): URI of the desired destination dataset. If not specified, resources are created under a new dataset in the project.\n", + "- `machine_type` (str): The machine type used for batch prediction.\n", + "- `max_num_workers` (int): The maximum number of workers used for batch prediction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Z3_6LWhE9syV" + }, + "outputs": [], + "source": [ + "# Get the model name programmatically, you can find this by looking at the\n", + "# execution graph in Vertex AI Pipelines.\n", + "for task_detail in job.gca_resource.job_detail.task_details:\n", + " if task_detail.task_name == \"model-upload\":\n", + " model = task_detail.outputs[\"model\"].artifacts[0].metadata[\"resourceName\"]\n", + " break\n", + "else:\n", + " raise ValueError(\"Couldn't find the model training task.\")\n", + "\n", + "# Use the model when creating the pipeline parameters.\n", + "(\n", + " prediction_job_spec_path,\n", + " prediction_parameter_values,\n", + ") = utils.get_prophet_prediction_pipeline_and_parameters(\n", + " project=PROJECT_ID,\n", + " location=REGION,\n", + " model_name=model,\n", + " time_column=time_column,\n", + " time_series_identifier_column=time_series_identifier_column,\n", + " target_column=target_column,\n", + " data_source_bigquery_table_path=PREDICTION_DATASET_BQ_PATH,\n", + " bigquery_destination_uri=dataset_path,\n", + " machine_type=\"n1-standard-2\",\n", + " max_num_workers=50,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2OJ3UIz090Ga" + }, + "source": [ + "### Run the prediction pipeline\n", + "\n", + "Use the Vertex AI Python SDK to kick off a prediction pipeline run. Once the run has started, the following cell outputs a link that allows you to monitor the run. The link should look like this:\n", + "\n", + "`https://console.cloud.google.com/vertex-ai/locations/[REGION]/pipelines/runs/[DISPLAY_NAME]`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Gqdojn8F8z7x" + }, + "outputs": [], + "source": [ + "# The display name should be unique even if this cell is rerun.\n", + "DISPLAY_NAME = f\"forecasting-demo-predict-{generate_uuid()}\"\n", + "\n", + "job = aiplatform.PipelineJob(\n", + " job_id=DISPLAY_NAME,\n", + " display_name=DISPLAY_NAME,\n", + " pipeline_root=os.path.join(BUCKET_URI, DISPLAY_NAME),\n", + " template_path=prediction_job_spec_path,\n", + " parameter_values=prediction_parameter_values,\n", + ")\n", + "job.run(service_account=SERVICE_ACCOUNT)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5r22uk_599II" + }, + "source": [ + "### Get the predictions\n", + "\n", + "Next, get the results from the completed batch prediction job. These are always written to a table called `predictions` under the output dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OAZF2bcX9-S_" + }, + "outputs": [], + "source": [ + "# Get the prediction table programmatically, you can find this by looking at the\n", + "# execution graph in Vertex AI Pipelines.\n", + "for task_detail in job.gca_resource.job_detail.task_details:\n", + " if task_detail.task_name == \"bigquery-query-job-2\":\n", + " pred_table = (\n", + " task_detail.outputs[\"destination_table\"].artifacts[0].metadata[\"tableId\"]\n", + " )\n", + " break\n", + "else:\n", + " raise ValueError(\"Couldn't find the prediction task.\")\n", + "\n", + "query = f\"SELECT * FROM `{dataset_path}.{pred_table}`\"\n", + "preds = client.query(query).to_dataframe()\n", + "preds.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cva3knm3-ALI" + }, + "source": [ + "## Visualize the forecasts\n", + "\n", + "Lastly, follow the given link to visualize the generated forecasts in [Data Studio](https://support.google.com/datastudio/answer/6283323?hl=en).\n", + "The code block included in this section dynamically generates a Data Studio link that specifies the template, the location of the forecasts, and the query to generate the chart. The data is populated from the forecasts generated earlier.\n", + "\n", + "You can inspect the used template at https://datastudio.google.com/c/u/0/reporting/067f70d2-8cd6-4a4c-a099-292acd1053e8. This was created by Google specifically to view forecasting predictions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OmxAs_H9-CQB" + }, + "outputs": [], + "source": [ + "def _sanitize_bq_uri(bq_uri: str):\n", + " if bq_uri.startswith(\"bq://\"):\n", + " bq_uri = bq_uri[5:]\n", + " return bq_uri.replace(\":\", \".\")\n", + "\n", + "\n", + "def get_data_studio_link(\n", + " batch_prediction_bq_input_uri: str,\n", + " batch_prediction_bq_output_uri: str,\n", + " time_column: str,\n", + " time_series_identifier_column: str,\n", + " target_column: str,\n", + "):\n", + " \"\"\"Creates a link that fills in the demo Data Studio template.\"\"\"\n", + " batch_prediction_bq_input_uri = _sanitize_bq_uri(batch_prediction_bq_input_uri)\n", + " batch_prediction_bq_output_uri = _sanitize_bq_uri(batch_prediction_bq_output_uri)\n", + " query = f\"\"\"\n", + " SELECT\n", + " CAST(input.{time_column} as DATETIME) timestamp_col,\n", + " CAST(input.{time_series_identifier_column} as STRING) time_series_identifier_col,\n", + " CAST(input.{target_column} as NUMERIC) historical_values,\n", + " CAST(predicted_{target_column}.value as NUMERIC) predicted_values,\n", + " FROM `{batch_prediction_bq_input_uri}` input\n", + " LEFT JOIN `{batch_prediction_bq_output_uri}` output\n", + " ON\n", + " TIMESTAMP(input.{time_column}) = TIMESTAMP(output.{time_column})\n", + " AND CAST(input.{time_series_identifier_column} as STRING) = CAST(\n", + " output.{time_series_identifier_column} as STRING)\n", + " \"\"\"\n", + " params = {\n", + " \"templateId\": \"067f70d2-8cd6-4a4c-a099-292acd1053e8\",\n", + " \"ds0.connector\": \"BIG_QUERY\",\n", + " \"ds0.projectId\": PROJECT_ID,\n", + " \"ds0.billingProjectId\": PROJECT_ID,\n", + " \"ds0.type\": \"CUSTOM_QUERY\",\n", + " \"ds0.sql\": query,\n", + " }\n", + " base_url = \"https://datastudio.google.com/c/u/0/reporting\"\n", + " url_params = urllib.parse.urlencode({\"params\": json.dumps(params)})\n", + " return f\"{base_url}?{url_params}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IsoJH2KL-DSF" + }, + "outputs": [], + "source": [ + "actuals_table = f\"{dataset_path}.actuals\"\n", + "query = f\"\"\"\n", + " CREATE OR REPLACE TABLE `{actuals_table}` AS\n", + " {base_data_query}\n", + " SELECT *\n", + " FROM base_data\n", + " WHERE split != 'TRAIN'\n", + "\"\"\"\n", + "client.query(query).result()\n", + "print(f\"Created {actuals_table}.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3_UWJ4cE-Edf" + }, + "outputs": [], + "source": [ + "print(\"Click the link below to view ARIMA predictions:\")\n", + "print(\n", + " get_data_studio_link(\n", + " batch_prediction_bq_input_uri=actuals_table,\n", + " batch_prediction_bq_output_uri=f\"{dataset_path}.{pred_table}\",\n", + " time_column=time_column,\n", + " time_series_identifier_column=time_series_identifier_column,\n", + " target_column=target_column,\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f8Eia1VqwuVB" + }, + "source": [ + "## Clean up Vertex AI and BigQuery resources\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:\n", + "\n", + "- Model\n", + "- Cloud Storage Bucket\n", + "- BigQuery tables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VhWTeiZUwweR" + }, + "outputs": [], + "source": [ + "# Delete the model\n", + "aiplatform.Model(model).delete()\n", + "\n", + "# Delete output datasets\n", + "client.delete_dataset(dataset_path, delete_contents=True, not_found_ok=True)\n", + "\n", + "delete_bucket = False\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil -m rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "prophet_on_vertex_pipelines.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/tabular_workflows/tabnet_on_vertex_pipelines.ipynb b/notebooks/official/tabular_workflows/tabnet_on_vertex_pipelines.ipynb index dd8fbd68c..3d2595044 100644 --- a/notebooks/official/tabular_workflows/tabnet_on_vertex_pipelines.ipynb +++ b/notebooks/official/tabular_workflows/tabnet_on_vertex_pipelines.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook showcases how to run the TabNet algorithm using Vertex AI Tabular Workflows.\n" + "This notebook showcases how to run the TabNet algorithm using Vertex AI Tabular Workflows.\n", + "\n", + "Learn more about [Tabular Workflow for TabNet](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/tabnet)." ] }, { @@ -97,7 +99,7 @@ "### Dataset\n", "\n", "The dataset you will be using is [Bank Marketing](https://archive.ics.uci.edu/ml/datasets/bank+marketing).\n", - "The data is for direct marketing campaigns (phone calls) of a Portuguese banking institution. The binary classification goal is to predict if a client subscribe a term deposit. For this notebook, you randomly selected 90% of the rows in the original dataset and saved them in a train.csv file hosted on Cloud Storage. To download the file, click [here](https://storage.googleapis.com/cloud-samples-data/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv)." + "The data is for direct marketing campaigns (phone calls) of a Portuguese banking institution. The binary classification goal is to predict if a client subscribe a term deposit. For this notebook, you randomly selected 90% of the rows in the original dataset and saved them in a train.csv file hosted on Cloud Storage. To download the file, click [here](https://storage.googleapis.com/cloud-samples-data-us-central1/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv)." ] }, { @@ -128,7 +130,7 @@ "source": [ "### Set up your local development environment\n", "\n", - "**If you are using Colab or Vertex AI SDK Workbench Notebooks**, your environment already meets\n", + "**If you are using Colab or Vertex AI Workbench Notebooks**, your environment already meets\n", "all the requirements to run this notebook. You can skip this step.\n", "\n", "**Otherwise**, make sure your environment meets this notebook's requirements.\n", @@ -170,7 +172,7 @@ "source": [ "## Installation\n", "\n", - "Install the following packages required to execute this notebook. " + "Install the following packages required to execute this notebook." ] }, { @@ -194,8 +196,7 @@ "if IS_WORKBENCH_NOTEBOOK:\n", " USER_FLAG = \"--user\"\n", "\n", - "! pip3 install --upgrade google-cloud-aiplatform {USER_FLAG} -q\n", - "! pip3 install --upgrade google-cloud-pipeline-components -q" + "! pip3 install --upgrade google-cloud-aiplatform google-cloud-pipeline-components {USER_FLAG} -q\n" ] }, { @@ -376,7 +377,7 @@ "### Authenticate your Google Cloud account\n", "\n", "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", - "authenticated. \n", + "authenticated.\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", @@ -601,7 +602,6 @@ "outputs": [], "source": [ "# Import required modules\n", - "import json\n", "from typing import Any, Dict, List\n", "\n", "from google.cloud import aiplatform, storage\n", @@ -615,9 +615,9 @@ "id": "c0423f260423" }, "source": [ - "## Initialize Vertex SDK for Python\n", + "## Initialize Vertex AI SDK for Python\n", "\n", - "Initialize the Vertex SDK for Python for your project." + "Initialize the Vertex AI SDK for Python for your project." ] }, { @@ -637,7 +637,18 @@ "id": "3LWH3PRF5o2v" }, "source": [ - "### Define helper functions" + "### Define helper functions", + "\n", + "Define the following helper functions:\n", + "\n", + "- `get_model_artifacts_path`: Get the model artifacts path from task details.\n", + "- `get_model_uri`: Get the model uri from the task details..\n", + "- `get_bucket_name_and_path`: Get the bucket name and path.\n", + "- `download_from_gcs`: Download the content from the bucket.\n", + "- `write_to_gcs`: Upload content into the bucket.\n", + "- `get_task_detail`: Get the task details by using task name.\n", + "- `get_model_name`: Get the model name from pipeline job ID.\n", + "- `get_evaluation_metrics`: Get the evaluation metrics from pipeline task details.\n" ] }, { @@ -648,7 +659,7 @@ }, "outputs": [], "source": [ - "# Get the mdoel artifacts path from task details.\n", + "# Get the model artifacts path from task details.\n", "def get_model_artifacts_path(task_details: List[Dict[str, Any]], task_name: str) -> str:\n", " task = get_task_detail(task_details, task_name)\n", " return task.outputs[\"unmanaged_container_model\"].artifacts[0].uri\n", @@ -678,7 +689,7 @@ " return blob.download_as_string()\n", "\n", "\n", - "# Upload content in to the bucket.\n", + "# Upload content into the bucket.\n", "def write_to_gcs(uri: str, content: str):\n", " bucket_name, path = get_bucket_name_and_path(uri)\n", " storage_client = storage.Client()\n", @@ -696,7 +707,7 @@ " return task_detail\n", "\n", "\n", - "# Get the model name from pipeline task details.\n", + "# Get the model name from pipeline job ID.\n", "def get_model_name(job_id: str) -> str:\n", " pipeline_task_details = aiplatform.PipelineJob.get(\n", " job_id\n", @@ -721,7 +732,7 @@ "id": "gvNFMRmBegZq" }, "source": [ - "## Define training specification" + "## Define the training specification" ] }, { @@ -730,12 +741,14 @@ "id": "7a7332a3f8e2" }, "source": [ - "### Configure dataset\n", + "### Configure the dataset\n", "\n", "You define either of the following parameters:\n", "\n", "- `data_source_csv_filenames`: The CSV data source.\n", - "- `data_source_bigquery_table_path`: The BigQuery data source.\n" + "- `data_source_bigquery_table_path`: The BigQuery data source.\n", + "\n", + "***Notes***: Please note that the dataset's location has to be the same as the same as the service location (i.e., `REGION`) set for launching the training pipeline.\n" ] }, { @@ -746,7 +759,7 @@ }, "outputs": [], "source": [ - "data_source_csv_filenames = \"gs://cloud-samples-data/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv\"\n", + "data_source_csv_filenames = \"gs://cloud-samples-data-us-central1/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv\"\n", "data_source_bigquery_table_path = (\n", " None # @param {type:\"string\"}, format: bq://bq_project.bq_dataset.bq_table\n", ")" @@ -760,9 +773,20 @@ "source": [ "### Configure feature transformation\n", "\n", - "Transformations can be specified using Feature Transform Engine (FTE) specific configurations. Below, you configure full auto transformations (i.e., `auto_transform_config`). FTE automatically configures a set of built-in transformations for each input column based on its data statistics. \n", + "Transformations can be specified using Feature Transform Engine (FTE) specific configurations. FTE supports both TensorFlow-based row-level and BigQuery-based dataset-level transformations.\n", "\n", - "For a complete list of supported feature transformation configs and examples, please go [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.15/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.FeatureTransformEngineOp)." + "* TensorFlow-based row-level transformations:\n", + " * Full automatic transformations: FTE automatically configures a set of built-in transformations for each input column based on its data statistics. This can be set via `tf_auto_transform_features` in the training pipeline.\n", + " * Fully specified transformations: All transformations on input columns are explicitly specified with FTE's built-in transformations. Chaining of multiple transformations on a single column is also supported. These transformations can be saved to JSON configuration file and specified via `tf_transformations_path` argument of the training pipeline.\n", + " * Custom transformations: Custom, bring-your-own transform function, where you can define and import your own transform function and use it with other FTE's built-in transformations. You can specify custom transformations as an array of JSON object and pass through the `tf_custom_transformation_definitions` argument of the training pipeline.\n", + "\n", + "* BigQuery-based dataset-level transformations:\n", + " * Fully specified transformations: All transformations on input columns are explicitly specified with FTE's built-in transformations. These transformations can be specified as an array of JSON objects via `dataset_level_transformations` argument of the training pipeline.\n", + " * Custom transformations: Custom, bring-your-own transform function, where you can define and import your own transform function and use it with other FTE's built-in transformations. You can specify custom transformations as an array of JSON object and pass through the `dataset_level_custom_transformation_definitions` argument of the training pipeline.\n", + "\n", + "Below, you configure full automatic transformations by specifying a list of input features to pass to the `tf_auto_transform_features` argument of the training pipeline.\n", + "\n", + "For a complete list of supported feature transformation configurations and examples, please go [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.31/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.FeatureTransformEngineOp)." ] }, { @@ -773,7 +797,7 @@ }, "outputs": [], "source": [ - "features = [\n", + "auto_transform_features = [\n", " \"age\",\n", " \"job\",\n", " \"marital\",\n", @@ -790,9 +814,39 @@ " \"pdays\",\n", " \"previous\",\n", " \"poutcome\",\n", - "]\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-t1fAaCFs8Os" + }, + "source": [ + "### Configure feature selection\n", "\n", - "auto_transform_config = {\"auto_transforms\": features}" + "In addition to transformations, you can also apply feature selection via Feature Transform Engine to use only highly ranked features, evaluated by supported algorithms. If enabled, it will be applied right after dataset level transformations, and exclude any feature that's not selected.\n", + "\n", + "To enable it, you need to set `run_feature_selection` to True.\n", + "\n", + "To configure the algorihtm to use, and number of features to be selected, you need to configure both `feature_selection_algorithm` and `max_selected_features` parameter.\n", + "\n", + "For a complete list of supported feature selection algorithms and configurations, please go [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.31/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.FeatureTransformEngineOp)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YroYjOTJwytk" + }, + "outputs": [], + "source": [ + "RUN_FEATURE_SELECTION = True # @param {type:\"boolean\"}\n", + "\n", + "FEATURE_SELECTION_ALGORITHM = \"AMI\" # @param {type:\"string\"}\n", + "\n", + "MAX_SELECTED_FEATURES = 10 # @param {type:\"integer\"}" ] }, { @@ -808,7 +862,6 @@ "- `target_column`: The target column name.\n", "- `prediction_type`: The type of prediction the model is to produce.\n", " 'classification' or 'regression'.\n", - "- `transform_config`: The path to a GCS file containing the transformations to apply.\n", "- `predefined_split_key`: The predefined_split column name.\n", "- `timestamp_split_key`: The timestamp_split column name.\n", "- `stratified_split_key`: The stratified_split column name.\n", @@ -848,9 +901,7 @@ " validation_fraction = None\n", " test_fraction = None\n", "\n", - "weight_column = None\n", - "\n", - "transform_config = auto_transform_config" + "weight_column = None" ] }, { @@ -902,7 +953,7 @@ "source": [ "## Customize TabNet CustomJob configuration and create pipeline\n", "\n", - "This is best choice if you know exactly which hyperparameter values to use for model training. It uses fewer training resources than a HyperparameterTuningJob. \n", + "This is best choice if you know exactly which hyperparameter values to use for model training. It uses fewer training resources than a HyperparameterTuningJob.\n", "\n", "In the example below, you configure the following:\n", "\n", @@ -934,9 +985,6 @@ "\n", "learning_rate = 0.01\n", "\n", - "transform_config_path = os.path.join(pipeline_job_root_dir, \"transform_config.json\")\n", - "write_to_gcs(transform_config_path, json.dumps(transform_config))\n", - "\n", "worker_pool_specs_override = [\n", " {\"machine_spec\": {\"machine_type\": \"c2-standard-16\"}} # Override for TF chief node\n", "]\n", @@ -965,7 +1013,10 @@ " learning_rate=learning_rate,\n", " target_column=target_column,\n", " prediction_type=prediction_type,\n", - " transform_config=transform_config_path,\n", + " tf_auto_transform_features=auto_transform_features,\n", + " run_feature_selection=RUN_FEATURE_SELECTION,\n", + " feature_selection_algorithm=FEATURE_SELECTION_ALGORITHM,\n", + " max_selected_features=MAX_SELECTED_FEATURES,\n", " training_fraction=training_fraction,\n", " validation_fraction=validation_fraction,\n", " test_fraction=test_fraction,\n", @@ -1029,7 +1080,7 @@ "source": [ "## Customize TabNet HyperparameterTuningJob configuration and create pipeline\n", "\n", - "To get the best set of hyperparameters for your dataset, you recommend running a HyperparameterTuningJob.\n", + "To get the best set of hyperparameters for your dataset, it is recommended to run a HyperparameterTuningJob.\n", "\n", "Hyperparameters that can be tuned are set in the optional `study_spec_parameters_override` parameter. you provide a helper function called `get_tabnet_study_spec_parameters_override` to get these hyperparameters. You provide `dataset_size_bucket` (one of 'small' (< 1M rows), 'medium' (1M - 100M rows), or 'large' (> 100M rows)), `training_budget_bucket` (one of 'small' (< \\\\$600), 'medium' (\\\\$600 - \\\\$2400), or 'large' (> \\\\$2400)), and `prediction_type` and Vertex AI returns a list of hyperparameters and ranges. `study_spec_parameters_override` can be empty or one or more of these hyperparameters can be specified. For hyperparameters not specified in `study_spec_parameters_override`, you set ranges in the pipeline. For a full list of hyperparameters available for tuning, see [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.23/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.utils.get_tabnet_trainer_pipeline_and_parameters).\n", "\n", @@ -1047,7 +1098,7 @@ "\n", "For a full list of HyperparameterTuningJob parameters, see [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.23/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.utils.get_tabnet_hyperparameter_tuning_job_pipeline_and_parameters).\n", "\n", - "Multiple trials can be configured. The pipeline returns the best trial based on the metric configured in `study_spec_metrics`. In the example below, you return the trial with the lowest loss value. " + "Multiple trials can be configured. The pipeline returns the best trial based on the metric configured in `study_spec_metrics`. In the example below, you return the trial with the lowest loss value." ] }, { @@ -1101,7 +1152,10 @@ " root_dir=pipeline_job_root_dir,\n", " target_column=target_column,\n", " prediction_type=prediction_type,\n", - " transform_config=transform_config_path,\n", + " tf_auto_transform_features=auto_transform_features,\n", + " run_feature_selection=RUN_FEATURE_SELECTION,\n", + " feature_selection_algorithm=FEATURE_SELECTION_ALGORITHM,\n", + " max_selected_features=MAX_SELECTED_FEATURES,\n", " training_fraction=training_fraction,\n", " validation_fraction=validation_fraction,\n", " test_fraction=test_fraction,\n", diff --git a/notebooks/official/tabular_workflows/wide_and_deep_on_vertex_pipelines.ipynb b/notebooks/official/tabular_workflows/wide_and_deep_on_vertex_pipelines.ipynb index 8b7f9cb57..c148bd0b4 100644 --- a/notebooks/official/tabular_workflows/wide_and_deep_on_vertex_pipelines.ipynb +++ b/notebooks/official/tabular_workflows/wide_and_deep_on_vertex_pipelines.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook showcases how to run the Wide & Deep algorithm using Vertex AI Tabular Workflows.\n" + "This notebook showcases how to run the Wide & Deep algorithm using Vertex AI Tabular Workflows.\n", + "\n", + "Learn more about [Tabular Workflow for Wide & Deep](https://cloud.google.com/vertex-ai/docs/tabular-data/tabular-workflows/wide-and-deep)." ] }, { @@ -97,7 +99,7 @@ "### Dataset\n", "\n", "The dataset you will be using is [Bank Marketing](https://archive.ics.uci.edu/ml/datasets/bank+marketing).\n", - "The data is for direct marketing campaigns (phone calls) of a Portuguese banking institution. The binary classification goal is to predict if a client will subscribe a term deposit. For this notebook, we randomly selected 90% of the rows in the original dataset and saved them in a train.csv file hosted on Cloud Storage. To download the file, click [here](https://storage.googleapis.com/cloud-samples-data/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv)." + "The data is for direct marketing campaigns (phone calls) of a Portuguese banking institution. The binary classification goal is to predict if a client will subscribe a term deposit. For this notebook, we randomly selected 90% of the rows in the original dataset and saved them in a train.csv file hosted on Cloud Storage. To download the file, click [here](https://storage.googleapis.com/cloud-samples-data-us-central1/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv)." ] }, { @@ -170,7 +172,7 @@ "source": [ "## Installation\n", "\n", - "Install the following packages required to execute this notebook. " + "Install the following packages required to execute this notebook." ] }, { @@ -194,8 +196,7 @@ "if IS_WORKBENCH_NOTEBOOK:\n", " USER_FLAG = \"--user\"\n", "\n", - "! pip3 install --upgrade google-cloud-aiplatform {USER_FLAG} -q\n", - "! pip3 install --upgrade google-cloud-pipeline-components -q" + "! pip3 install --upgrade google-cloud-aiplatform google-cloud-pipeline-components {USER_FLAG} -q\n" ] }, { @@ -376,7 +377,7 @@ "### Authenticate your Google Cloud account\n", "\n", "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", - "authenticated. \n", + "authenticated.\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", @@ -530,7 +531,6 @@ "outputs": [], "source": [ "# Import required modules\n", - "import json\n", "from typing import Any, Dict, List\n", "\n", "from google.cloud import aiplatform, storage\n", @@ -544,9 +544,9 @@ "id": "c0423f260423" }, "source": [ - "## Initialize Vertex SDK for Python\n", + "## Initialize Vertex AI SDK for Python\n", "\n", - "Initialize the Vertex SDK for Python for your project." + "Initialize the Vertex AI SDK for Python for your project." ] }, { @@ -566,7 +566,18 @@ "id": "3LWH3PRF5o2v" }, "source": [ - "### Define helper functions" + "### Define helper functions", + "\n", + "Define the following helper functions:\n", + "\n", + "- `get_model_artifacts_path`: Get the model artifacts path from task details.\n", + "- `get_model_uri`: Get the model uri from the task details..\n", + "- `get_bucket_name_and_path`: Get the bucket name and path.\n", + "- `download_from_gcs`: Download the content from the bucket.\n", + "- `write_to_gcs`: Upload content into the bucket.\n", + "- `get_task_detail`: Get the task details by using task name.\n", + "- `get_model_name`: Get the model name from pipeline job ID.\n", + "- `get_evaluation_metrics`: Get the evaluation metrics from pipeline task details.\n" ] }, { @@ -642,7 +653,7 @@ "id": "gvNFMRmBegZq" }, "source": [ - "## Define training specification" + "## Define the training specification" ] }, { @@ -651,12 +662,14 @@ "id": "7a7332a3f8e2" }, "source": [ - "### Configure dataset\n", + "### Configure the dataset\n", "\n", "You define either of the following parameters:\n", "\n", "- `data_source_csv_filenames`: The CSV data source.\n", - "- `data_source_bigquery_table_path`: The BigQuery data source.\n" + "- `data_source_bigquery_table_path`: The BigQuery data source.\n", + "\n", + "***Notes***: Please note that the dataset's location has to be the same as the same as the service location (i.e., `REGION`) set for launching the training pipeline.\n" ] }, { @@ -667,7 +680,7 @@ }, "outputs": [], "source": [ - "data_source_csv_filenames = \"gs://cloud-samples-data/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv\"\n", + "data_source_csv_filenames = \"gs://cloud-samples-data-us-central1/vertex-ai/tabular-workflows/datasets/bank-marketing/train.csv\"\n", "data_source_bigquery_table_path = (\n", " None # @param {type:\"string\"}, format: bq://bq_project.bq_dataset.bq_table\n", ")" @@ -681,9 +694,20 @@ "source": [ "### Configure feature transformation\n", "\n", - "Transformations can be specified using Feature Transform Engine (FTE) specific configurations. Below, we configure full auto transformations (i.e., `auto_transform_config`). FTE automatically configures a set of built-in transformations for each input column based on its data statistics. \n", + "Transformations can be specified using Feature Transform Engine (FTE) specific configurations. FTE supports both TensorFlow-based row-level and BigQuery-based dataset-level transformations.\n", "\n", - "For a complete list of supported feature transformation configs and examples, please go [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.15/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.FeatureTransformEngineOp)." + "* TensorFlow-based row-level transformations:\n", + " * Full automatic transformations: FTE automatically configures a set of built-in transformations for each input column based on its data statistics. This can be set via `tf_auto_transform_features` in the training pipeline.\n", + " * Fully specified transformations: All transformations on input columns are explicitly specified with FTE's built-in transformations. Chaining of multiple transformations on a single column is also supported. These transformations can be saved to JSON configuration file and specified via `tf_transformations_path` argument of the training pipeline.\n", + " * Custom transformations: Custom, bring-your-own transform function, where you can define and import your own transform function and use it with other FTE's built-in transformations. You can specify custom transformations as an array of JSON object and pass through the `tf_custom_transformation_definitions` argument of the training pipeline.\n", + "\n", + "* BigQuery-based dataset-level transformations:\n", + " * Fully specified transformations: All transformations on input columns are explicitly specified with FTE's built-in transformations. These transformations can be specified as an array of JSON objects via `dataset_level_transformations` argument of the training pipeline.\n", + " * Custom transformations: Custom, bring-your-own transform function, where you can define and import your own transform function and use it with other FTE's built-in transformations. You can specify custom transformations as an array of JSON object and pass through the `dataset_level_custom_transformation_definitions` argument of the training pipeline.\n", + "\n", + "Below, you configure full automatic transformations by specifying a list of input features to pass to the `tf_auto_transform_features` argument of the training pipeline.\n", + "\n", + "For a complete list of supported feature transformation configurations and examples, please go [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.31/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.FeatureTransformEngineOp)." ] }, { @@ -694,7 +718,7 @@ }, "outputs": [], "source": [ - "features = [\n", + "auto_transform_features = [\n", " \"age\",\n", " \"job\",\n", " \"marital\",\n", @@ -711,9 +735,39 @@ " \"pdays\",\n", " \"previous\",\n", " \"poutcome\",\n", - "]\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dgmd7dHi21Sb" + }, + "source": [ + "### Configure feature selection\n", "\n", - "auto_transform_config = {\"auto_transforms\": features}" + "In addition to transformations, you can also apply feature selection via Feature Transform Engine to use only highly ranked features, evaluated by supported algorithms. If enabled, it will be applied right after dataset level transformations, and exclude any feature that's not selected.\n", + "\n", + "To enable it, you need to set `run_feature_selection` to True.\n", + "\n", + "To configure the algorihtm to use, and number of features to be selected, you need to configure both `feature_selection_algorithm` and `max_selected_features` parameter.\n", + "\n", + "For a complete list of supported feature selection algorithms and configs, please go [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.31/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.FeatureTransformEngineOp)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "drdGfJ4824pZ" + }, + "outputs": [], + "source": [ + "RUN_FEATURE_SELECTION = True # @param {type:\"boolean\"}\n", + "\n", + "FEATURE_SELECTION_ALGORITHM = \"AMI\" # @param {type:\"string\"}\n", + "\n", + "MAX_SELECTED_FEATURES = 10 # @param {type:\"integer\"}" ] }, { @@ -729,7 +783,6 @@ "- `target_column`: The target column name.\n", "- `prediction_type`: The type of prediction the model is to produce.\n", " 'classification' or 'regression'.\n", - "- `transform_config`: The path to a GCS file containing the transformations to apply.\n", "- `predefined_split_key`: The predefined_split column name.\n", "- `timestamp_split_key`: The timestamp_split column name.\n", "- `stratified_split_key`: The stratified_split column name.\n", @@ -769,9 +822,7 @@ " validation_fraction = None\n", " test_fraction = None\n", "\n", - "weight_column = None\n", - "\n", - "transform_config = auto_transform_config" + "weight_column = None" ] }, { @@ -823,7 +874,7 @@ "source": [ "## Customize Wide & Deep CustomJob configuration and create pipeline\n", "\n", - "This is best choice if you know exactly which hyperparameter values to use for model training. It uses fewer training resources than a HyperparameterTuningJob. \n", + "This is best choice if you know exactly which hyperparameter values to use for model training. It uses fewer training resources than a HyperparameterTuningJob.\n", "\n", "In the example below, you configure the following:\n", "\n", @@ -858,9 +909,6 @@ "learning_rate = 0.01\n", "dnn_learning_rate = 0.01\n", "\n", - "transform_config_path = os.path.join(pipeline_job_root_dir, \"transform_config.json\")\n", - "write_to_gcs(transform_config_path, json.dumps(transform_config))\n", - "\n", "worker_pool_specs_override = [\n", " {\"machine_spec\": {\"machine_type\": \"c2-standard-16\"}} # Override for TF chief node\n", "]\n", @@ -890,7 +938,10 @@ " dnn_learning_rate=dnn_learning_rate,\n", " target_column=target_column,\n", " prediction_type=prediction_type,\n", - " transform_config=transform_config_path,\n", + " tf_auto_transform_features=auto_transform_features,\n", + " run_feature_selection=RUN_FEATURE_SELECTION,\n", + " feature_selection_algorithm=FEATURE_SELECTION_ALGORITHM,\n", + " max_selected_features=MAX_SELECTED_FEATURES,\n", " training_fraction=training_fraction,\n", " validation_fraction=validation_fraction,\n", " test_fraction=test_fraction,\n", @@ -956,7 +1007,7 @@ "source": [ "## Customize Wide & Deep HyperparameterTuningJob configuration and create pipeline\n", "\n", - "To get the best set of hyperparameters for your dataset, we recommend running a HyperparameterTuningJob.\n", + "To get the best set of hyperparameters for your dataset, it isrecommended to run a HyperparameterTuningJob.\n", "\n", "Hyperparameters that can be tuned are set in the optional `study_spec_parameters_override` parameter. We provide a helper function called `get_wide_and_deep_study_spec_parameters_override` to get these hyperparameters. The function returns a list of hyperparameters and ranges. `study_spec_parameters_override` can be empty or one or more of these hyperparameters can be specified. For hyperparameters not specified in `study_spec_parameters_override`, we set ranges in the pipeline. For a full list of hyperparameters available for tuning, see [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.23/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.utils.get_wide_and_deep_trainer_pipeline_and_parameters).\n", "\n", @@ -974,7 +1025,7 @@ "\n", "For a full list of HyperparameterTuningJob parameters, see [here](https://google-cloud-pipeline-components.readthedocs.io/en/google-cloud-pipeline-components-1.0.23/google_cloud_pipeline_components.experimental.automl.tabular.html#google_cloud_pipeline_components.experimental.automl.tabular.utils.get_wide_and_deep_hyperparameter_tuning_job_pipeline_and_parameters).\n", "\n", - "Multiple trials can be configured. The pipeline returns the best trial based on the metric configured in `study_spec_metrics`. In the example below, we return the trial with the lowest loss value. " + "Multiple trials can be configured. The pipeline returns the best trial based on the metric configured in `study_spec_metrics`. In the example below, we return the trial with the lowest loss value." ] }, { @@ -1026,7 +1077,10 @@ " root_dir=pipeline_job_root_dir,\n", " target_column=target_column,\n", " prediction_type=prediction_type,\n", - " transform_config=transform_config_path,\n", + " tf_auto_transform_features=auto_transform_features,\n", + " run_feature_selection=RUN_FEATURE_SELECTION,\n", + " feature_selection_algorithm=FEATURE_SELECTION_ALGORITHM,\n", + " max_selected_features=MAX_SELECTED_FEATURES,\n", " training_fraction=training_fraction,\n", " validation_fraction=validation_fraction,\n", " test_fraction=test_fraction,\n", diff --git a/notebooks/official/tensorboard/README.md b/notebooks/official/tensorboard/README.md index db045439b..b9508734f 100644 --- a/notebooks/official/tensorboard/README.md +++ b/notebooks/official/tensorboard/README.md @@ -1,17 +1,7 @@ -[Vertex AI TensorBoard custom training with prebuilt container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tensorboard/tensorboard_custom_training_with_prebuilt_container.ipynb) - -Learn how to create a custom training job using prebuilt containers, and monitor your training process on Vertex AI TensorBoard in near real time. - -The steps performed include: - -* Setup service account and Google Cloud Storage buckets. -* Write your customized training code. -* Package and upload your training code to Google Cloud Storage. -* Create & launch your custom training job with Tensorboard enabled for near real time monitorning. - -[Vertex AI TensorBoard Custom Training with Custom Container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tensorboard/tensorboard_custom_training_with_custom_container.ipynb) +[Vertex AI TensorBoard Custom Training with custom container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tensorboard/tensorboard_custom_training_with_custom_container.ipynb) +``` Learn how to create a custom training job using custom containers, and monitor your training process on Vertex AI TensorBoard in near real time. The steps performed include: @@ -21,13 +11,63 @@ The steps performed include: * Setup service account and Google Cloud Storage buckets. * Create & launch your custom training job with your custom container. -[Profile model training performance using Profiler](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tensorboard/tensorboard_profiler_custom_training.ipynb) +``` +   Learn more about [Vertex AI TensorBoard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Vertex AI TensorBoard custom training with prebuilt container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tensorboard/tensorboard_custom_training_with_prebuilt_container.ipynb) + +``` +Learn how to create a custom training job using prebuilt containers, and monitor your training process on Vertex AI TensorBoard in near real time. + +The steps performed include: + +* Setup service account and Google Cloud Storage buckets. +* Write your customized training code. +* Package and upload your training code to Google Cloud Storage. +* Create & launch your custom training job with Tensorboard enabled for near real time monitorning. + +``` + +   Learn more about [Vertex AI TensorBoard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Profile model training performance using Vertex AI TensorBoard Profiler](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tensorboard/tensorboard_profiler_custom_training.ipynb) + +``` Learn how to enable Vertex AI TensorBoard Profiler for custom training jobs. The steps performed include: -* Setup a service account and a Cloud Storage bucket -* Create a TensorBoard instance -* Create and run a custom training job that enables TensorBoard Profiler -* View the TensorBoard Profiler dashboard to debug your model training performance +- Setup a service account and a Cloud Storage bucket +- Create a TensorBoard instance +- Create and run a custom training job that enables TensorBoard Profiler +- View the TensorBoard Profiler dashboard to debug your model training performance + +``` + +   Learn more about [Vertex AI TensorBoard Profiler](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-profiler). + + +[Vertex AI TensorBoard integration with Vertex AI Pipelines](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/tensorboard/tensorboard_vertex_ai_pipelines_integration.ipynb) + +``` +Learn how to create a training pipeline using the KFP SDK, execute the pipeline in Vertex AI Pipelines, and monitor your training process on Vertex AI TensorBoard in near real time. + +The steps performed include: + +* Setup a service account and Google Cloud Storage buckets. +* Construct a KFP pipeline with your custom training code. +* Compile and execute the KFP pipeline in Vertex AI Pipelines with Tensorboard enabled for near real time monitorning. + +``` + +   Learn more about [Vertex AI TensorBoard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview). + +   Learn more about [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction). + diff --git a/notebooks/official/tensorboard/tensorboard_custom_training_with_custom_container.ipynb b/notebooks/official/tensorboard/tensorboard_custom_training_with_custom_container.ipynb index d9cd89acc..047962c88 100644 --- a/notebooks/official/tensorboard/tensorboard_custom_training_with_custom_container.ipynb +++ b/notebooks/official/tensorboard/tensorboard_custom_training_with_custom_container.ipynb @@ -29,7 +29,7 @@ "id": "ed2pOXQMb8fY" }, "source": [ - "# Vertex AI TensorBoard Custom Training with Custom Container\n", + "# Vertex AI TensorBoard Custom Training with custom container\n", "\n", "\n", " \n", " \n", " \n", " \n", "
\n", @@ -89,7 +89,9 @@ "* Enterprise-grade security, privacy, and compliance\n", "\n", "With Vertex AI TensorBoard, you can track, visualize, and compare\n", - "ML experiments and share them with your team.\n" + "ML experiments and share them with your team.\n", + "\n", + "Learn more about [Vertex AI TensorBoard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { @@ -102,6 +104,11 @@ "\n", "In this tutorial, you learn how to create a custom training job using custom containers, and monitor your training process on Vertex AI TensorBoard in near real time.\n", "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Training\n", + "- Vertex AI TensorBoard\n", + "\n", "The steps performed include:\n", "\n", "* Create docker repository & config.\n", diff --git a/notebooks/official/tensorboard/tensorboard_custom_training_with_prebuilt_container.ipynb b/notebooks/official/tensorboard/tensorboard_custom_training_with_prebuilt_container.ipynb index 7a888ab92..9236363cc 100644 --- a/notebooks/official/tensorboard/tensorboard_custom_training_with_prebuilt_container.ipynb +++ b/notebooks/official/tensorboard/tensorboard_custom_training_with_prebuilt_container.ipynb @@ -89,7 +89,9 @@ "* Enterprise-grade security, privacy, and compliance\n", "\n", "With Vertex AI TensorBoard, you can track, visualize, and compare\n", - "ML experiments and share them with your team." + "ML experiments and share them with your team.\n", + "\n", + "Learn more about [Vertex AI TensorBoard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { @@ -102,6 +104,11 @@ "\n", "In this tutorial, you learn how to create a custom training job using prebuilt containers, and monitor your training process on Vertex AI TensorBoard in near real time.\n", "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Training\n", + "- Vertex AI TensorBoard\n", + "\n", "The steps performed include:\n", "\n", "* Setup service account and Google Cloud Storage buckets.\n", diff --git a/notebooks/official/tensorboard/tensorboard_hyperparameter_tuning_with_hparams.ipynb b/notebooks/official/tensorboard/tensorboard_hyperparameter_tuning_with_hparams.ipynb new file mode 100644 index 000000000..b8fe17208 --- /dev/null +++ b/notebooks/official/tensorboard/tensorboard_hyperparameter_tuning_with_hparams.ipynb @@ -0,0 +1,794 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "JAPoU8Sm5E6e" + }, + "source": [ + "# Vertex AI TensorBoard Hyperparameter Tuning with the HParams Dashboard\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "24743cf4a1e1" + }, + "source": [ + "**_NOTE_**: This notebook has been tested in the following environments:\n", + "\n", + "* Python version = 3.8" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "### What is Vertex AI TensorBoard\n", + "\n", + "[Open source TensorBoard](https://www.tensorflow.org/tensorboard/get_started)\n", + "(TB) is a Google open source project for machine learning experiment\n", + "visualization. Vertex AI TensorBoard is an enterprise-ready managed\n", + "version of TensorBoard.\n", + "\n", + "Vertex AI TensorBoard provides various detailed visualizations, including the following:\n", + "\n", + "* Tracking and visualizing metrics, such as loss and accuracy over time.\n", + "* Visualizing model computational graphs (ops and layers).\n", + "* Viewing histograms of weights, biases, or other tensors as they change over time.\n", + "* Projecting embeddings to a lower dimensional space.\n", + "* Displaying image, text, and audio samples.\n", + "\n", + "In addition to the powerful visualizations from\n", + "TensorBoard, Vertex AI TensorBoard provides the following benefits:\n", + "\n", + "* A persistent, shareable link to your experiment's dashboard.\n", + "\n", + "* A searchable list of all experiments in a project.\n", + "\n", + "* Integrations with Vertex AI services for model training.\n", + "\n", + "* Enterprise-grade security, privacy, and compliance.\n", + "\n", + "With Vertex AI TensorBoard, you can track, visualize, and compare\n", + "ML experiments and share them with your team.\n", + "\n", + "Learn more about [Vertex AI TensorBoard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d975e698c9a4" + }, + "source": [ + "### Objective\n", + "\n", + "This tutorial shows you how to log hyperparameter experiment results in TensorFlow and visualize the results in TensorBoard's Hparams dashboard.\n", + "\n", + "This tutorial uses the following Vertex AI services and resources:\n", + "\n", + "- Vertex AI TensorBoard\n", + "\n", + "The steps performed include:\n", + "\n", + "* Adapt TensorFlow runs to log hyperparameters and metrics.\n", + "* Start runs and log them all under one parent directory.\n", + "* Visualize the results in TensorBoard's HParams dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "08d289fa873f" + }, + "source": [ + "### Dataset\n", + "\n", + "This tutorial uses the [FashionMNIST](https://github.com/zalandoresearch/fashion-mnist) dataset.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aed92deeb4a0" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses the following billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing),\n", + "and use the [Pricing Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1fD9UZaygyPG" + }, + "source": [ + "## Set up your local development environment\n", + "\n", + "**If you are using Colab or Vertex AI Workbench**, your environment already meets all the requirements to run this notebook. You can skip this step.\n", + "\n", + "Otherwise, make sure your environment meets this notebook's requirements. You need the following:\n", + "\n", + "- Git\n", + "- Python 3\n", + "- virtualenv\n", + "- Jupyter notebook running in a virtual environment with Python 3\n", + "\n", + "To quickly set up your environment to meet the requirements of this tutorial, perform the following:\n", + "\n", + "1. [Install and initialize the SDK](https://cloud.google.com/sdk/docs/).\n", + "\n", + "2. [Install Python 3](https://cloud.google.com/python/setup#installing_python).\n", + "\n", + "3. [Install virtualenv](https://cloud.google.com/python/setup#installing_and_using_virtualenv) and create a virtual environment that uses Python 3 and activate the virtual environment.\n", + "\n", + "4. Install Jupyter by running the following command in a terminal shell:\n", + "
`pip3 install jupyter`\n", + "\n", + "5. Launch Jupyter by running the following command in a terminal shell:
`jupyter notebook`\n", + "\n", + "6. Open this tutorial notebook in the Jupyter Notebook Dashboard." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i7EUnXsZhAGF" + }, + "source": [ + "## Install dependencies\n", + "\n", + "Install the following packages required to run this tutorial notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "th7tWguZiSN2" + }, + "outputs": [], + "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", + "\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] tensorflow==2.7 {USER_FLAG} -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58707a750154" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f200f10a1da3" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BF1j6f9HApxa" + }, + "source": [ + "## Before you begin\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 Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WReHDGG5g0XY" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oM1iC_MfAts1" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "source": [ + "#### Set the region\n", + "\n", + "**Optional**: Update the 'REGION' variable to specify the region that you want to use. Learn more about [Vertex AI regions](https://cloud.google.com/vertex-ai/docs/general/locations)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nsN5NJKSu-GU" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type: \"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sBCra4QMA2wR" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "To authenticate your Google Cloud account, follow the instructions for your Jupyter environment:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "74ccc9e52986" + }, + "source": [ + "* **Vertex AI Workbench**\n", + "
You are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "de775a3773ba" + }, + "source": [ + "* **Local JupyterLab instance**\n", + "
Uncomment and run the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "254614fa0c46" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ef21552ccea8" + }, + "source": [ + "* **Colab**\n", + "
Uncomment and run the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "603adbbf0532" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "960505627ddf" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PyQmSRbKA8r-" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk,all" + }, + "source": [ + "### Initialize the Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KllitKlIu-GW" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WjWD61gONRkw" + }, + "source": [ + "### Load TensorBoard and TensorFlow components\n", + "\n", + "Load the TensorBoard notebook extension and import TensorFlow and the TensorBoard HParams plugin.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KSayPNqxfJC_" + }, + "outputs": [], + "source": [ + "# Load the TensorBoard notebook extension\n", + "%load_ext tensorboard\n", + "\n", + "# Clear any logs from previous runs\n", + "!rm -rf ./logs/\n", + "\n", + "# Import TensorFlow and the TensorBoard HParams plugin\n", + "import tensorflow as tf\n", + "from tensorboard.plugins.hparams import api as hp" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KJ4zE7rYfcvb" + }, + "source": [ + "### Download dataset\n", + "\n", + "Download the [FashionMNIST](https://github.com/zalandoresearch/fashion-mnist) dataset and scale it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vHME9wnnfiMr" + }, + "outputs": [], + "source": [ + "fashion_mnist = tf.keras.datasets.fashion_mnist\n", + "\n", + "(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()\n", + "x_train, x_test = x_train / 255.0, x_test / 255.0" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ofGSMru5r4kP" + }, + "source": [ + "## Set up the experiment\n", + "\n", + "Run an experiment by specifying values for the following hyperparameters:\n", + "\n", + "* Number of units in the first dense layer\n", + "* Dropout rate in the dropout layer\n", + "* Optimizer\n", + "\n", + "Specify the hyperparameter values for the experiment in TensorBoard.\n", + "\n", + "*Optional*: For more fine grained filtering of hyperparameters in the UI, provide domain information and specify which metrics should be displayed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IG5sPLBAcDRy" + }, + "outputs": [], + "source": [ + "HP_NUM_UNITS = hp.HParam(\"num_units\", hp.Discrete([16, 32]))\n", + "HP_DROPOUT = hp.HParam(\"dropout\", hp.RealInterval(0.1, 0.2))\n", + "HP_OPTIMIZER = hp.HParam(\"optimizer\", hp.Discrete([\"adam\", \"sgd\"]))\n", + "\n", + "METRIC_ACCURACY = \"accuracy\"\n", + "\n", + "with tf.summary.create_file_writer(\"logs/hparam_tuning\").as_default():\n", + " hp.hparams_config(\n", + " hparams=[HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER],\n", + " metrics=[hp.Metric(METRIC_ACCURACY, display_name=\"Accuracy\")],\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cLNgBNA6srlk" + }, + "source": [ + "## Adapt TensorFlow runs to log hyperparameters and metrics\n", + "\n", + "The model will be quite simple: two dense layers with a dropout layer between them. The training code will look familiar, although the hyperparameters are no longer hardcoded. Instead, the hyperparameters are provided in an `hparams` dictionary and used throughout the training function:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C-RSsrF4u-Fq" + }, + "outputs": [], + "source": [ + "def train_test_model(hparams):\n", + " model = tf.keras.models.Sequential(\n", + " [\n", + " tf.keras.layers.Flatten(),\n", + " tf.keras.layers.Dense(hparams[HP_NUM_UNITS], activation=tf.nn.relu),\n", + " tf.keras.layers.Dropout(hparams[HP_DROPOUT]),\n", + " tf.keras.layers.Dense(10, activation=tf.nn.softmax),\n", + " ]\n", + " )\n", + " model.compile(\n", + " optimizer=hparams[HP_OPTIMIZER],\n", + " loss=\"sparse_categorical_crossentropy\",\n", + " metrics=[\"accuracy\"],\n", + " )\n", + "\n", + " model.fit(\n", + " x_train, y_train, epochs=1\n", + " ) # Run with 1 epoch to speed things up for demo purposes\n", + " _, accuracy = model.evaluate(x_test, y_test)\n", + " return accuracy" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Esz3uqqCvLoK" + }, + "source": [ + "For each run, log an hparams summary with the hyperparameters and final accuracy:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "HwR1PAv1vPER" + }, + "outputs": [], + "source": [ + "def run(run_dir, hparams):\n", + " with tf.summary.create_file_writer(run_dir).as_default():\n", + " hp.hparams(hparams) # record the values used in this trial\n", + " accuracy = train_test_model(hparams)\n", + " tf.summary.scalar(METRIC_ACCURACY, accuracy, step=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0V_8soFFvU7b" + }, + "source": [ + "## Start runs and log them all under one parent directory\n", + "\n", + "You can now try multiple experiments, training each one with a different set of hyperparameters.\n", + "\n", + "For simplicity, use a grid search: try all combinations of the discrete parameters and just the lower and upper bounds of the real-valued parameter. For more complex scenarios, it might be more effective to choose each hyperparameter value randomly (this is called a random search). There are more advanced methods that can be used.\n", + "\n", + "Run a few experiments, which will take a few minutes:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6r2oO_PVvbdL" + }, + "outputs": [], + "source": [ + "session_num = 0\n", + "\n", + "for num_units in HP_NUM_UNITS.domain.values:\n", + " for dropout_rate in (HP_DROPOUT.domain.min_value, HP_DROPOUT.domain.max_value):\n", + " for optimizer in HP_OPTIMIZER.domain.values:\n", + " hparams = {\n", + " HP_NUM_UNITS: num_units,\n", + " HP_DROPOUT: dropout_rate,\n", + " HP_OPTIMIZER: optimizer,\n", + " }\n", + " run_name = \"run-%d\" % session_num\n", + " print(\"--- Starting trial: %s\" % run_name)\n", + " print({h.name: hparams[h] for h in hparams})\n", + " run(\"logs/hparam_tuning/\" + run_name, hparams)\n", + " session_num += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6FJJwCclvslF" + }, + "source": [ + "## Visualize the results in Vertex AI TensorBoard's HParams tab" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BkbB5GEI3Ge3" + }, + "source": [ + "### Create Vertex AI Tensorboard\n", + "A Vertex AI TensorBoard instance, which is a regionalized resource storing your Vertex AI TensorBoard experiments, must be created before the experiments can be visualized. You can create multiple instances in a project. [documentation instructions](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview).\n", + "\n", + "Create a TensorBoard instance to be used by the training job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lQ-d3j-I3ZWV" + }, + "outputs": [], + "source": [ + "TENSORBOARD_NAME = \"[your-tensorboard-name]\" # @param {type:\"string\"}\n", + "\n", + "if (\n", + " TENSORBOARD_NAME == \"\"\n", + " or TENSORBOARD_NAME is None\n", + " or TENSORBOARD_NAME == \"[your-tensorboard-name]\"\n", + "):\n", + " TENSORBOARD_NAME = PROJECT_ID + \"-tb-\"\n", + "\n", + "tensorboard = aiplatform.Tensorboard.create(\n", + " display_name=TENSORBOARD_NAME, project=PROJECT_ID, location=REGION\n", + ")\n", + "TENSORBOARD_RESOURCE_NAME = tensorboard.gca_resource.name\n", + "print(\"TensorBoard resource name:\", TENSORBOARD_RESOURCE_NAME)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "27rERDqeJ2nE" + }, + "source": [ + "Set your TensorBoard Experiment name." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4OU4TMtFCn0_" + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "EXPERIMENT_NAME = \"[your-experiment-run-name]\" # @param {type:\"string\"}\n", + "\n", + "if (\n", + " EXPERIMENT_NAME == \"\"\n", + " or EXPERIMENT_NAME is None\n", + " or EXPERIMENT_NAME == \"[your-experiment-run-name]\"\n", + "):\n", + " EXPERIMENT_NAME = \"experiment\" + datetime.now().strftime(\"%H-%M-%S\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f1D2oU3K8Ys0" + }, + "source": [ + "Upload the log to your Vertex AI TensorBoard" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TyXFVQuRv0-X" + }, + "outputs": [], + "source": [ + "!tb-gcp-uploader --one_shot=True --tensorboard_resource_name=$TENSORBOARD_RESOURCE_NAME --logdir=\"logs/hparam_tuning/\" --experiment_name=$EXPERIMENT_NAME" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OFe3qRyh9Wjl" + }, + "source": [ + "Click the generated TensorBoard link and click on \"HParams\" at the top.\n", + "\n", + "The left pane of the dashboard provides filtering capabilities that are active across all the views in the HParams dashboard:\n", + "\n", + "- Filter which hyperparameters/metrics are shown in the dashboard\n", + "- Filter which hyperparameter/metrics values are shown in the dashboard\n", + "- Filter on run status (running, success, ...)\n", + "- Sort by hyperparameter/metric in the table view\n", + "- Number of session groups to show (useful for performance when there are many experiments)\n", + "\n", + "The HParams dashboard has three different views, with various useful information:\n", + "\n", + "* The **Table View** lists the runs, their hyperparameters, and their metrics.\n", + "* The **Parallel Coordinates View** shows each run as a line going through an axis for each hyperparemeter and metric. Click and drag the mouse on any axis to mark a region which will highlight only the runs that pass through it. This can be useful for identifying which groups of hyperparameters are most important. The axes themselves can be re-ordered by dragging them.\n", + "* The **Scatter Plot View** shows plots comparing each hyperparameter/metric with each metric. This can help identify correlations. Click and drag to select a region in a specific plot and highlight those sessions across the other plots.\n", + "\n", + "A table row, a parallel coordinates line, and a scatter plot market can be clicked to see a plot of the metrics as a function of training steps for that session (although in this tutorial only one step is used for each run)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sx_vKniMq9ZX" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Delete endpoint resource\n", + "# e.g. `endpoint.delete()`\n", + "\n", + "# Delete model resource\n", + "# e.g. `model.delete()`\n", + "\n", + "# Delete Cloud Storage objects that were created\n", + "delete_bucket = False\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil -m rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "tensorboard_hyperparameter_tuning_with_hparams.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/tensorboard/tensorboard_profiler_custom_training.ipynb b/notebooks/official/tensorboard/tensorboard_profiler_custom_training.ipynb index b0d216dda..5f1655dc2 100644 --- a/notebooks/official/tensorboard/tensorboard_profiler_custom_training.ipynb +++ b/notebooks/official/tensorboard/tensorboard_profiler_custom_training.ipynb @@ -1,35 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "l2mMvIUG9meX" - }, - "source": [ - "# Profile model training performance using Profiler\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \"Colab Run in Colab\n", - " \n", - " \n", - " \n", - " \"GitHub\n", - " View on GitHub\n", - " \n", - " \n", - " \n", - " \"Vertex\n", - " Open in Vertex AI Workbench\n", - " \n", - "
" - ] - }, { "cell_type": "code", "execution_count": null, @@ -53,6 +23,36 @@ "# limitations under the License." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "l2mMvIUG9meX" + }, + "source": [ + "# Profile model training performance using Vertex AI TensorBoard Profiler\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, { "cell_type": "markdown", "metadata": { @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "Vertex AI TensorBoard Profiler lets you monitor and optimize your model training performance by helping you understand the resource consumption of training operations. This tutorial demonstrates how to enable Vertex AI TensorBoard Profiler so you can debug model training performance for your custom training jobs.\n" + "Vertex AI TensorBoard Profiler lets you monitor and optimize your model training performance by helping you understand the resource consumption of training operations. This tutorial demonstrates how to enable Vertex AI TensorBoard Profiler so you can debug model training performance for your custom training jobs.\n", + "\n", + "Learn more about [Vertex AI TensorBoard Profiler](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-profiler)." ] }, { @@ -331,22 +333,16 @@ "! gcloud projects add-iam-policy-binding $PROJECT_ID \\\n", " --member=\"serviceAccount:$SERVICE_ACCOUNT\" \\\n", " --role=\"roles/storage.admin\" \\\n", - " --quiet" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "S_8_5jm-Gk6w" - }, - "outputs": [], - "source": [ + " --quiet\n", + "\n", "# Grant AI Platform permission.\n", "! gcloud projects add-iam-policy-binding $PROJECT_ID \\\n", " --member=\"serviceAccount:$SERVICE_ACCOUNT\" \\\n", " --role=\"roles/aiplatform.user\" \\\n", - " --quiet" + " --quiet\n", + "\n", + "! gcloud projects get-iam-policy $PROJECT_ID \\\n", + " --filter=bindings.members:serviceAccount:$SERVICE_ACCOUNT" ] }, { @@ -679,6 +675,18 @@ "\n", "\n", "def main(args):\n", + " # Initialize the profiler.\n", + " print('Initialize the profiler ...')\n", + " \n", + " try:\n", + " cloud_profiler.init()\n", + " except:\n", + " ex_type, ex_value, ex_traceback = sys.exc_info()\n", + " print(\"*** Unexpected:\", ex_type.__name__, ex_value)\n", + " traceback.print_tb(ex_traceback, limit=10, file=sys.stdout)\n", + " \n", + " print('The profiler initiated.')\n", + " \n", " print('Loading and preprocessing data ...')\n", " mnist = tf.keras.datasets.mnist\n", "\n", @@ -694,18 +702,6 @@ " metrics=[\"accuracy\"],\n", " )\n", "\n", - " # Initialize the profiler.\n", - " print('Initialize the profiler ...')\n", - " \n", - " try:\n", - " cloud_profiler.init()\n", - " except:\n", - " ex_type, ex_value, ex_traceback = sys.exc_info()\n", - " print(\"*** Unexpected:\", ex_type.__name__, ex_value)\n", - " traceback.print_tb(ex_traceback, limit=10, file=sys.stdout)\n", - " \n", - " print('The profiler initiated.')\n", - "\n", " log_dir = \"logs\"\n", " if 'AIP_TENSORBOARD_LOG_DIR' in os.environ:\n", " log_dir = os.environ['AIP_TENSORBOARD_LOG_DIR']\n", @@ -768,7 +764,7 @@ "WORKDIR /root\n", "\n", "# Installs additional packages as you need.\n", - "RUN pip3 install google-cloud-aiplatform[cloud_profiler]\n", + "RUN pip3 install \"google-cloud-aiplatform[cloud_profiler]>=1.20.0\"\n", "\n", "# Copies the trainer code to the docker image.\n", "RUN mkdir /root/trainer\n", @@ -798,7 +794,7 @@ "IMAGE_NAME = \"tensorboard-custom-container\"\n", "IMAGE_URI = f\"{REGION}-docker.pkg.dev/{PROJECT_ID}/{DOCKER_REPOSITORY}/{IMAGE_NAME}\"\n", "\n", - "! gcloud builds submit --project {PROJECT_ID} --region={REGION} --tag {IMAGE_URI} --timeout=60m --quiet" + "! gcloud builds submit --project {PROJECT_ID} --region={REGION} --tag {IMAGE_URI} --timeout=3600s --quiet" ] }, { diff --git a/notebooks/official/tensorboard/tensorboard_profiler_custom_training_with_prebuilt_container.ipynb b/notebooks/official/tensorboard/tensorboard_profiler_custom_training_with_prebuilt_container.ipynb new file mode 100644 index 000000000..ebd744755 --- /dev/null +++ b/notebooks/official/tensorboard/tensorboard_profiler_custom_training_with_prebuilt_container.ipynb @@ -0,0 +1,869 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "l2mMvIUG9meX" + }, + "source": [ + "# Profile model training performance using Vertex AI TensorBoard Profiler in custom training with prebuilt container\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + " Open in Vertex AI Workbench\n", + " \n", + "
" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "The TensorFlow Profiler is a powerful tool that can help you to diagnose and debug performance bottlenecks, and make your model train faster. This tutorial demonstrates how to enable the TensorBoard Profiler in Vertex AI for custom training with a prebuilt container.\n", + "\n", + "Learn more about [Vertex AI TensorBoard Profiler](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-profiler)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "dmfmQL6w84pS" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to enable the TensorBoard Profiler in Vertex AI for custom training jobs with a prebuilt container.\n", + "\n", + "This tutorial uses the following Google Cloud AI services:\n", + "\n", + "- Vertex AI Training\n", + "- Vertex AI TensorBoard\n", + "\n", + "The steps performed include:\n", + "\n", + "- Prepare your custom training code and load your training code as a Python package to a prebuilt container\n", + "- Create and run a custom training job that enables the TensorBoard Profiler\n", + "- View the TensorBoard Profiler dashboard to debug your model training performance\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zfXf0r-K81Y-" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the [mnist dataset](https://www.tensorflow.org/datasets/catalog/mnist) from [TensorFlow Datasets](https://www.tensorflow.org/datasets/catalog/overview).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I3KFLvpq87rs" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "* Vertex AI\n", + "* Cloud Storage\n", + "\n", + "Learn about [Vertex AI\n", + "pricing](https://cloud.google.com/vertex-ai/pricing) and [Cloud Storage\n", + "pricing](https://cloud.google.com/storage/pricing), and use the [Pricing\n", + "Calculator](https://cloud.google.com/products/calculator/)\n", + "to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ze4-nDLfK4pw" + }, + "source": [ + "## Installation\n", + "\n", + "Install the following packages required to execute this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2b4ef9b72d43" + }, + "outputs": [], + "source": [ + "! pip3 install --upgrade --quiet google-cloud-aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aUw6ibN-n5Za" + }, + "source": [ + "### Colab only: Uncomment the following cell to restart the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FM12wbWhn7w0" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs so that your environment can access the new packages\n", + "# import IPython\n", + "\n", + "# app = IPython.Application.instance()\n", + "# app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LgFWLeJfoGQu" + }, + "source": [ + "## Before you begin\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 Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "4. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8ckyxpX_oSzD" + }, + "source": [ + "#### Set your project ID\n", + "\n", + "**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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zY8DKBoVoVy3" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", + "\n", + "# Set the project id\n", + "! gcloud config set project {PROJECT_ID}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mSQjVQmMosMl" + }, + "source": [ + "#### Region\n", + "\n", + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Se9FWWhLotvB" + }, + "outputs": [], + "source": [ + "REGION = \"us-central1\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IfJRIMBpo5Pg" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "Depending on your Jupyter environment, you may have to manually authenticate. Follow the relevant instructions below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "acFN0s3So9-Y" + }, + "source": [ + "**1. Vertex AI Workbench**\n", + "* Do nothing as you are already authenticated." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dQ_mNwuapE5T" + }, + "source": [ + "**2. Local JupyterLab instance, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cR_MzpknpGgM" + }, + "outputs": [], + "source": [ + "# ! gcloud auth login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h-MuVI_ypJfw" + }, + "source": [ + "**3. Colab, uncomment and run:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "BeaQlCwMpQUT" + }, + "outputs": [], + "source": [ + "# from google.colab import auth\n", + "# auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3ivZkPUjpaFz" + }, + "source": [ + "**4. Setup service account and permissions**\n", + "\n", + "A service account will be used to create custom training jobs. If you do not want to use your project's Compute Engine service account, set SERVICE_ACCOUNT to another service account ID. You can create a service account by following the [instructions](https://cloud.google.com/iam/docs/creating-managing-service-accounts#creating)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vYE3b942wza4" + }, + "outputs": [], + "source": [ + "SERVICE_ACCOUNT = \"[your-service-account]\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WWIxsCJFCg5Z" + }, + "outputs": [], + "source": [ + "# Grant Cloud Storage permission.\n", + "! gcloud projects add-iam-policy-binding $PROJECT_ID \\\n", + " --member=\"serviceAccount:$SERVICE_ACCOUNT\" \\\n", + " --role=\"roles/storage.admin\" \\\n", + " --quiet\n", + "\n", + "# Grant AI Platform permission.\n", + "! gcloud projects add-iam-policy-binding $PROJECT_ID \\\n", + " --member=\"serviceAccount:$SERVICE_ACCOUNT\" \\\n", + " --role=\"roles/aiplatform.user\" \\\n", + " --quiet\n", + "\n", + "! gcloud projects get-iam-policy $PROJECT_ID \\\n", + " --filter=bindings.members:serviceAccount:$SERVICE_ACCOUNT" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OKtKGmr9pfr6" + }, + "source": [ + "### Create a Cloud Storage bucket\n", + "\n", + "Create a storage bucket to store intermediate artifacts such as datasets." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "In3aQanwYjFB" + }, + "outputs": [], + "source": [ + "BUCKET_URI = \"gs://your-bucket-name-unique\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GOaOsIjxp0oB" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Wn5QiIl2p16e" + }, + "outputs": [], + "source": [ + "! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ankcS-vtp7Wv" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WffSImMvp-Po" + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OMrAJ8RGqBQu" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AWRzBFExqERG" + }, + "outputs": [], + "source": [ + "aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-ayTbNdi62_t" + }, + "source": [ + "### Create a TensorBoard instance\n", + "\n", + "A Vertex AI TensorBoard instance, which is a regionalized resource storing your Vertex AI TensorBoard experiments, must be created before the experiments can be visualized. You can create multiple instances in a project. You can use command `gcloud ai tensorboards list` to get a list of your existing TensorBoard instances." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9c3QrDTZdaxk" + }, + "source": [ + "#### Set your TensorBoard instance display name\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "azlwb__AX8gs" + }, + "outputs": [], + "source": [ + "TENSORBOARD_NAME = \"your-tensorboard-unique\" # @param {type:\"string\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vJrWKK0mY7H7" + }, + "source": [ + "#### Create a TensorBoard instance\n", + "\n", + "If you don't have a TensorBoard instance, create one by running the following cell:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "JqVNsRFrc_78" + }, + "outputs": [], + "source": [ + "tensorboard = aiplatform.Tensorboard.create(\n", + " display_name=TENSORBOARD_NAME, project=PROJECT_ID, location=REGION\n", + ")\n", + "\n", + "TENSORBOARD_INSTANCE_NAME = tensorboard.resource_name\n", + "print(\"TensorBoard instance name:\", TENSORBOARD_INSTANCE_NAME)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "yoR29gW2S24w" + }, + "source": [ + "## Train a model\n", + "\n", + "To train a model using your custom training code, choose one of the following options:\n", + "\n", + "- **Prebuilt container**: Load your custom training code as a Python package to a prebuilt container image from Google Cloud.\n", + "\n", + "- **Custom container**: Create your own container image that contains your custom training code.\n", + "\n", + "In this tutorial, you will train a custom model using a prebuilt container." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "syw3GabNGgJz" + }, + "source": [ + "### Examine the training package\n", + "\n", + "#### Package layout\n", + "\n", + "Before you start the training, let's take a look at how a Python package is assembled for a custom training job. When extracted, the package contains the following:\n", + "\n", + "- PKG-INFO\n", + "- README.md\n", + "- setup.cfg\n", + "- setup.py\n", + "- trainer\n", + " - \\_\\_init\\_\\_.py\n", + " - task.py\n", + "\n", + "The files `setup.cfg` and `setup.py` are the instructions for installing the package into the operating environment of the docker image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b58ZAbysGkRo" + }, + "outputs": [], + "source": [ + "PYTHON_PACKAGE_APPLICATION_DIR = \"app\"\n", + "\n", + "source_package_file_name = f\"{PYTHON_PACKAGE_APPLICATION_DIR}/dist/trainer-0.1.tar.gz\"\n", + "python_package_gcs_uri = f\"{BUCKET_URI}/trainer-0.1.tar.gz\"\n", + "\n", + "# Make folder for Python training script\n", + "! rm -rf {PYTHON_PACKAGE_APPLICATION_DIR}\n", + "! mkdir {PYTHON_PACKAGE_APPLICATION_DIR}\n", + "\n", + "# Add package information\n", + "! touch {PYTHON_PACKAGE_APPLICATION_DIR}/README.md\n", + "\n", + "# Make the training subfolder\n", + "! mkdir {PYTHON_PACKAGE_APPLICATION_DIR}/trainer\n", + "! touch {PYTHON_PACKAGE_APPLICATION_DIR}/trainer/__init__.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lj7hIeAXGrzg" + }, + "outputs": [], + "source": [ + "%%writefile ./{PYTHON_PACKAGE_APPLICATION_DIR}/setup.py\n", + "\n", + "from setuptools import find_packages\n", + "from setuptools import setup\n", + "import setuptools\n", + "\n", + "from distutils.command.build import build as _build\n", + "import subprocess\n", + "\n", + "REQUIRED_PACKAGES = [\n", + " 'google-cloud-aiplatform[cloud_profiler]>=1.20.0',\n", + "]\n", + "\n", + "setup(\n", + " install_requires=REQUIRED_PACKAGES,\n", + " packages=find_packages(),\n", + " include_package_data=True,\n", + " name='trainer',\n", + " version='0.1',\n", + " url=\"wwww.google.com\",\n", + " description='Vertex AI | Training | Python Package'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hyAwgsoQmaYI" + }, + "source": [ + "#### Prepare the training script\n", + "\n", + "The file `trainer/task.py` is the Python script for executing the custom training job.\n", + "\n", + "Your training code must be configured to write TensorBoard logs to a Cloud Storage bucket, the location of which Vertex AI Training automatically makes available through a predefined environment variable, `AIP_TENSORBOARD_LOG_DIR`. This can usually be done by providing `os.environ['AIP_TENSORBOARD_LOG_DIR']` as the log directory to the open source TensorBoard log writing APIs. For example, in TensorFlow 2.x, you can use following code to create a `tensorboard_callback`:\n", + "\n", + " tensorboard_callback = tf.keras.callbacks.TensorBoard(\n", + " log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'],\n", + " histogram_freq=1)\n", + "`AIP_TENSORBOARD_LOG_DIR` is in the `BASE_OUTPUT_DIR` that you provide when creating the custom training job.\n", + "\n", + "To enable Vertex AI TensorBoard Profiler for your training job, add the following to your training script:\n", + "\n", + "Add the cloud_profiler import at your top level imports:\n", + "\n", + " from google.cloud.aiplatform.training_utils import cloud_profiler\n", + "\n", + "\n", + "Initialize the cloud_profiler plugin by adding:\n", + "\n", + "\n", + " cloud_profiler.init()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8JCgWW7Au1w8" + }, + "outputs": [], + "source": [ + "%%writefile ./{PYTHON_PACKAGE_APPLICATION_DIR}/trainer/task.py\n", + "\n", + "import tensorflow as tf\n", + "import argparse\n", + "import os\n", + "import sys, traceback\n", + "from google.cloud.aiplatform.training_utils import cloud_profiler\n", + "\n", + "\"\"\"Train an mnist model and use cloud_profiler for profiling.\"\"\"\n", + "\n", + "def _create_model():\n", + " model = tf.keras.models.Sequential(\n", + " [\n", + " tf.keras.layers.Flatten(input_shape=(28, 28)),\n", + " tf.keras.layers.Dense(128, activation=\"relu\"),\n", + " tf.keras.layers.Dropout(0.2),\n", + " tf.keras.layers.Dense(10),\n", + " ]\n", + " )\n", + " return model\n", + "\n", + "\n", + "def main(args):\n", + " print('Initialize the profiler ...')\n", + " cloud_profiler.init()\n", + " print('The profiler initiated.')\n", + "\n", + " print('Loading and preprocessing data ...')\n", + " mnist = tf.keras.datasets.mnist\n", + "\n", + " (x_train, y_train), (x_test, y_test) = mnist.load_data()\n", + " x_train, x_test = x_train / 255.0, x_test / 255.0\n", + "\n", + " print('Creating and training model ...')\n", + "\n", + " model = _create_model()\n", + " model.compile(\n", + " optimizer=\"adam\",\n", + " loss=tf.keras.losses.sparse_categorical_crossentropy,\n", + " metrics=[\"accuracy\"],\n", + " )\n", + "\n", + " log_dir = \"logs\"\n", + " if 'AIP_TENSORBOARD_LOG_DIR' in os.environ:\n", + " log_dir = os.environ['AIP_TENSORBOARD_LOG_DIR']\n", + "\n", + " print('Setting up the TensorBoard callback ...')\n", + " tensorboard_callback = tf.keras.callbacks.TensorBoard(\n", + " log_dir=log_dir,\n", + " histogram_freq=1)\n", + "\n", + " print('Training model ...')\n", + " model.fit(\n", + " x_train,\n", + " y_train,\n", + " epochs=args.epochs,\n", + " verbose=0,\n", + " callbacks=[tensorboard_callback],\n", + " )\n", + " print('Training completed.')\n", + "\n", + " print('Saving model ...')\n", + "\n", + " model_dir = \"model\"\n", + " if 'AIP_MODEL_DIR' in os.environ:\n", + " model_dir = os.environ['AIP_MODEL_DIR']\n", + " tf.saved_model.save(model, model_dir)\n", + "\n", + " print('Model saved at ' + model_dir)\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " parser = argparse.ArgumentParser()\n", + " parser.add_argument(\n", + " \"--epochs\", type=int, default=100, help=\"Number of epochs to run model.\"\n", + " )\n", + "\n", + " args = parser.parse_args()\n", + " main(args)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ihYFahRAr6sj" + }, + "source": [ + "#### Create a source distribution\n", + "\n", + "You create a source distribution with your training application and upload the source distribution to your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-XhccshCHQeb" + }, + "outputs": [], + "source": [ + "!cd {PYTHON_PACKAGE_APPLICATION_DIR} && python3 setup.py sdist --formats=gztar\n", + "\n", + "!gsutil cp {source_package_file_name} {python_package_gcs_uri}\n", + "\n", + "!gsutil ls -l {python_package_gcs_uri}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k4e6OYmimqTR" + }, + "source": [ + "### Create and run the custom training job\n", + "\n", + "Configure a [custom job](https://cloud.google.com/vertex-ai/docs/training/create-custom-job) with the [pre-built container](https://cloud.google.com/vertex-ai/docs/training/pre-built-containers) image for training code packaged as Python source distribution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "t8GeVXjWHxuZ" + }, + "outputs": [], + "source": [ + "JOB_NAME = \"tensorboard-job-unique\"\n", + "MACHINE_TYPE = \"n1-standard-4\"\n", + "TRAIN_IMAGE = \"us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-9:latest\"\n", + "base_output_dir = f\"{BUCKET_URI}/{JOB_NAME}\"\n", + "python_module_name = \"trainer.task\"\n", + "\n", + "EPOCHS = 20\n", + "training_args = [\n", + " \"--epochs=\" + str(EPOCHS),\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "B3JC7T3bH9Vy" + }, + "outputs": [], + "source": [ + "job = aiplatform.CustomPythonPackageTrainingJob(\n", + " display_name=JOB_NAME,\n", + " python_package_gcs_uri=python_package_gcs_uri,\n", + " python_module_name=python_module_name,\n", + " container_uri=TRAIN_IMAGE,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "51hKGTbU32Eg" + }, + "source": [ + "#### Run the custom training job\n", + "\n", + "Next, you run the custom job to start the training job by invoking the method `run`.\n", + "\n", + "**NOTE:** When using Vertex AI SDK for Python for submitting a training job, it creates a [training pipeline](https://cloud.google.com/vertex-ai/docs/training/create-training-pipeline) which launches the custom job on Vertex AI Training service." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oIyfos1rIAx2" + }, + "outputs": [], + "source": [ + "job.run(\n", + " replica_count=1,\n", + " machine_type=MACHINE_TYPE,\n", + " base_output_dir=base_output_dir,\n", + " tensorboard=TENSORBOARD_INSTANCE_NAME,\n", + " service_account=SERVICE_ACCOUNT,\n", + " args=training_args,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JkEe2Nb_85UD" + }, + "source": [ + "## View the TensorBoard Profiler dashboard\n", + "\n", + "When the custom job state switches to `Running`, you can access the Vertex AI TensorBoard Profiler dashboard through the Custom jobs page or the Experiments page on the Google Cloud console.\n", + "\n", + "The Google Cloud guide to [Profile model training performance using Profiler](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-profiler) provides detailed instructions for accessing the Vertex AI TensorBoard Profiler dashboard and capturing a profiling session.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TpV-iwP9qw9c" + }, + "source": [ + "## Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WR-ZhQ9XwpRI" + }, + "outputs": [], + "source": [ + "delete_bucket = False\n", + "\n", + "job.delete()\n", + "tensorboard.delete()\n", + "\n", + "if delete_bucket and \"BUCKET_URI\" in globals():\n", + " ! gsutil -m rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "tensorboard_profiler_custom_training_with_prebuilt_container.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/tensorboard/tensorboard_vertex_ai_pipelines_integration.ipynb b/notebooks/official/tensorboard/tensorboard_vertex_ai_pipelines_integration.ipynb index 7cda99ca6..f0f5adaef 100644 --- a/notebooks/official/tensorboard/tensorboard_vertex_ai_pipelines_integration.ipynb +++ b/notebooks/official/tensorboard/tensorboard_vertex_ai_pipelines_integration.ipynb @@ -88,7 +88,9 @@ "* Enterprise-grade security, privacy, and compliance.\n", "\n", "With Vertex AI TensorBoard, you can track, visualize, and compare\n", - "ML experiments and share them with your team." + "ML experiments and share them with your team.\n", + "\n", + "Learn more about [Vertex AI TensorBoard](https://cloud.google.com/vertex-ai/docs/experiments/tensorboard-overview) and [Vertex AI Pipelines](https://cloud.google.com/vertex-ai/docs/pipelines/introduction)." ] }, { @@ -101,6 +103,12 @@ "\n", "In this tutorial, you learn how to create a training pipeline using the KFP SDK, execute the pipeline in Vertex AI Pipelines, and monitor your training process on Vertex AI TensorBoard in near real time.\n", "\n", + "This tutorial uses the following Google Cloud ML services and resources:\n", + "\n", + "- Vertex AI Training\n", + "- Vertex AI TensorBoard\n", + "- Vertex AI Pipelines\n", + "\n", "The steps performed include:\n", "\n", "* Setup a service account and Google Cloud Storage buckets.\n", diff --git a/notebooks/official/training/README.md b/notebooks/official/training/README.md index d8d5867d8..492c8f740 100644 --- a/notebooks/official/training/README.md +++ b/notebooks/official/training/README.md @@ -1,6 +1,41 @@ +[Get started with Vertex AI Distributed Training](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/training/get_started_with_vertex_distributed_training.ipynb) + +``` +Learn how to use `Vertex AI Distributed Training` for when training with `Vertex AI`. + +The steps performed include: + +- `MirroredStrategy`: Train on a single VM with multiple GPUs. +- `MultiWorkerMirroredStrategy`: Train on multiple VMs with automatic setup of replicas. +- `MultiWorkerMirroredStrategy`: Train on multiple VMs with fine grain control of replicas. +- `ReductionServer`: Train on multiple VMS and sync updates across VMS with `Vertex AI Reduction Server`. +- `TPUTraining`: Train with multiple Cloud TPUs. + +``` + +   Learn more about [Vertex AI Distributed Training](https://cloud.google.com/vertex-ai/docs/training/distributed-training). + + +[Run hyperparameter tuning for a TensorFlow model](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/training/hyperparameter_tuning_tensorflow.ipynb) + +``` +Learn how to run a Vertex AI Hyperparameter Tuning job for a TensorFlow model. + +The steps performed include: + +* Modify training application code for automated hyperparameter tuning. +* Containerize training application code. +* Configure and launch a hyperparameter tuning job with the Vertex AI Python SDK. + +``` + +   Learn more about [Vertex AI Hyperparameter Tuning](https://cloud.google.com/vertex-ai/docs/training/hyperparameter-tuning-overview). + + [PyTorch image classification multi-node distributed data parallel training on cpu using Vertex training with custom container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/training/multi_node_ddp_gloo_vertex_training_with_custom_container.ipynb) +``` Learn how to create a distributed PyTorch training job using Vertex AI SDK for Python and custom containers. The steps performed include: @@ -11,8 +46,14 @@ The steps performed include: - Create a Vertex AI tensorboard instance to store your Vertex AI experiment - Run a Vertex AI SDK CustomContainerTrainingJob +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + [PyTorch Image Classification Multi-Node Distributed Data Parallel Training on GPU using Vertex AI Training with Custom Container](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/training/multi_node_ddp_nccl_vertex_training_with_custom_container.ipynb) +``` Learn how to create a distributed PyTorch training job using Vertex AI SDK for Python and custom containers. The steps performed include: @@ -22,3 +63,25 @@ The steps performed include: - Building Custom Container using Artifact Registry and Docker - Create a Vertex AI Tensorboard Instance to store your Vertex AI experiment - Run a Vertex AI SDK CustomContainerTrainingJob + +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Create a distributed custom training job](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/training/xgboost_data_parallel_training_on_cpu_using_dask.ipynb) + +``` +Learn how to create a distributed training job using Vertex AI SDK for Python. + +The steps performed include: + +- Configure the `PROJECT_ID` and `REGION` variables for your Google Cloud project. +- Create a Cloud Storage bucket to store your model artifacts. +- Build a custom Docker container that hosts your training code and push the container image to Artifact Registry. +- Run a Vertex AI SDK CustomContainerTrainingJob + +``` + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + diff --git a/notebooks/official/training/get_started_with_vertex_distributed_training.ipynb b/notebooks/official/training/get_started_with_vertex_distributed_training.ipynb new file mode 100644 index 000000000..6f94208b7 --- /dev/null +++ b/notebooks/official/training/get_started_with_vertex_distributed_training.ipynb @@ -0,0 +1,2006 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "copyright" + }, + "outputs": [], + "source": [ + "# Copyright 2022 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": "title:generic,gcp" + }, + "source": [ + "# Get started with Vertex AI Distributed Training\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + " \n", + " \"GitHub\n", + " View on GitHub\n", + " \n", + " \n", + " \n", + " \"Vertex\n", + "Open in Vertex AI Workbench\n", + " \n", + "
\n", + "


" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "overview:mlops" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial demonstrates how to use the Vertex AI Python client library to do distrbuted training of a TensorFlow model.\n", + "\n", + "*Note:* There are incompatibilities between Colab and Docker and the Docker section may not work until resolved by the platform.\n", + "\n", + "Learn more about [Vertex AI Distributed Training](https://cloud.google.com/vertex-ai/docs/training/distributed-training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "objective:mlops,stage2,get_started_vertex_distributed_training" + }, + "source": [ + "### Objective\n", + "\n", + "In this tutorial, you learn how to use `Vertex AI Distributed Training` when training with `Vertex AI`.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Distributed Training`\n", + "- `Vertex AI Reduction Server`\n", + "\n", + "The steps performed include:\n", + "\n", + "- `MirroredStrategy`: Train on a single VM with multiple GPUs.\n", + "- `MultiWorkerMirroredStrategy`: Train on multiple VMs with automatic setup of replicas.\n", + "- `MultiWorkerMirroredStrategy`: Train on multiple VMs with fine grain control of replicas.\n", + "- `ReductionServer`: Train on multiple VMS and sync updates across VMS with `Vertex AI Reduction Server`.\n", + "- `TPUTraining`: Train with multiple Cloud TPUs." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "recommendation:mlops,stage2,vertex,distributed_training" + }, + "source": [ + "### Recommendations\n", + "\n", + "When doing E2E MLOps on Google Cloud, the following are best practices for when to use Vertex AI Distributed Training:\n", + "\n", + "**Single VM / Single Device (OneDeviceStrategy)**\n", + "\n", + "You are experimenting and the total training data and number of model parameters is small.\n", + "\n", + "If the number of model parameters is very small, you may not get much benefit from a GPU and may consider using the VM's CPU.\n", + "\n", + "**Single VM / Multiple Compute Devices (MirroredStrategy)**\n", + "\n", + "The number of model parameters is very large, but the total training data is small.\n", + "\n", + "**Multiple VM / Multiple Compute Devices (MultiWorkerMirroredStrategy)**\n", + "\n", + "The number of model parameters is very large and the total training data is very large.\n", + "\n", + "**ReductionServer**\n", + "\n", + "While training across a large number of VMs and the model parameters updates to sync is very large." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dataset:custom,boston,lrg" + }, + "source": [ + "### Dataset\n", + "\n", + "The dataset used for this tutorial is the [Boston Housing Prices dataset](https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html). The version of the dataset you use in this tutorial is built into TensorFlow. The trained model predicts the median price of a house in units of 1K USD." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d10166df7141" + }, + "source": [ + "### 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/),\n", + " to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XkYpRvOQyVYb" + }, + "source": [ + "## Installation\n", + "\n", + "Install the packages required for executing this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xs_Kt8RcyXTC" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# The Vertex AI Workbench Notebook product has specific requirements\n", + "IS_WORKBENCH_NOTEBOOK = os.getenv(\"DL_ANACONDA_HOME\") and not os.getenv(\"VIRTUAL_ENV\")\n", + "IS_USER_MANAGED_WORKBENCH_NOTEBOOK = os.path.exists(\n", + " \"/opt/deeplearning/metadata/env_version\"\n", + ")\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 {USER_FLAG} --upgrade google-cloud-aiplatform -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oQhwq1iozAxh" + }, + "source": [ + "### Restart the kernel\n", + "\n", + "After you install the additional packages, you need to restart the notebook kernel so it can find the packages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zo3YFZXLzCRJ" + }, + "outputs": [], + "source": [ + "# Automatically restart kernel after installs\n", + "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": "84cd83853240" + }, + "source": [ + "## Before you begin\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", + "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, BigQuery, Compute Engine and Cloud Storage APIs](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com,bigquery,compute_component,storage_component).\n", + "\n", + "1. If you are running this notebook locally, you need to install the [Cloud SDK](https://cloud.google.com/sdk).\n", + "\n", + "1. 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 `$` into these commands." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "project_id" + }, + "source": [ + "#### 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`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "set_project_id" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "region" + }, + "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)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qohAA9fJulvP" + }, + "outputs": [], + "source": [ + "REGION = \"[your-region]\" # @param {type: \"string\"}\n", + "\n", + "if REGION == \"[your-region]\":\n", + " REGION = \"us-central1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "06571eb4063b" + }, + "source": [ + "#### UUID\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 uuid for each instance session, and append it onto the name of resources you create in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "4e166d927e36" + }, + "outputs": [], + "source": [ + "import random\n", + "import string\n", + "\n", + "\n", + "# Generate a uuid of a specifed length(default=8)\n", + "def generate_uuid(length: int = 8) -> str:\n", + " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n", + "\n", + "\n", + "UUID = generate_uuid()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "poKeKYG8ulvQ" + }, + "source": [ + "### Authenticate your Google Cloud account\n", + "\n", + "**If you are using Vertex AI Workbench Notebooks**, your environment is already\n", + "authenticated. Skip this step." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MIpJGzF9ulvQ" + }, + "source": [ + "**If you are using Colab**, run the cell below and follow the instructions\n", + "when prompted to authenticate your account via oAuth.\n", + "\n", + "**Otherwise**, follow these steps:\n", + "\n", + "1. In the Cloud Console, go to the [**Create service account key**\n", + " page](https://console.cloud.google.com/apis/credentials/serviceaccountkey).\n", + "\n", + "2. Click **Create service account**.\n", + "\n", + "3. In the **Service account name** field, enter a name, and\n", + " click **Create**.\n", + "\n", + "4. In the **Grant this service account access to project** section, click the **Role** drop-down list. Type \"Vertex AI\"\n", + "into the filter box, and select\n", + " **Vertex AI Administrator**. Type \"Storage Object Admin\" into the filter box, and select **Storage Object Admin**.\n", + "\n", + "5. Click *Create*. A JSON file that contains your key downloads to your\n", + "local environment.\n", + "\n", + "6. Enter the path to your service account key as the\n", + "`GOOGLE_APPLICATION_CREDENTIALS` variable in the cell below and run the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Vh6KDXB5ulvQ" + }, + "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 ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bucket:mbsdk" + }, + "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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bucket" + }, + "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-\" + UUID\n", + " BUCKET_URI = f\"gs://{BUCKET_NAME}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_bucket" + }, + "source": [ + "**Only if your bucket doesn't already exist**: Run the following cell to create your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Moosy2rOulvR" + }, + "outputs": [], + "source": [ + "! 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": "56irx2CvulvS" + }, + "outputs": [], + "source": [ + "! gsutil ls -al $BUCKET_URI" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "setup_vars" + }, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "init_aip:mbsdk" + }, + "source": [ + "### Initialize Vertex AI SDK for Python\n", + "\n", + "Initialize the Vertex AI SDK for Python for your project and corresponding bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wbvYPSTDulvS" + }, + "outputs": [], + "source": [ + "aip.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "accelerators:training,prediction,ngpu,mbsdk" + }, + "source": [ + "#### Set hardware accelerators\n", + "\n", + "You can set hardware accelerators for training and prediction.\n", + "\n", + "Set the variables `TRAIN_GPU/TRAIN_NGPU` and `DEPLOY_GPU/DEPLOY_NGPU` to use a container image supporting a GPU and the number of GPUs allocated to the virtual machine (VM) instance. For example, to use a GPU container image with 4 Nvidia Telsa K80 GPUs allocated to each VM, you would specify:\n", + "\n", + " (aip.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "\n", + "Otherwise specify `(None, None)` to use a container image to run on a CPU.\n", + "\n", + "Learn more about [hardware accelerator support for your region](https://cloud.google.com/vertex-ai/docs/general/locations#accelerators).\n", + "\n", + "*Note*: TF releases before 2.3 for GPU support will fail to load the custom model in this tutorial. It is a known issue and fixed in TF 2.3. This is caused by static graph ops that are generated in the serving function. If you encounter this issue on your own custom models, use a container image for TF 2.3 with GPU support." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PryARdnoulvT" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TRAIN_GPU\"):\n", + " TRAIN_GPU, TRAIN_NGPU = (\n", + " aip.gapic.AcceleratorType.NVIDIA_TESLA_K80,\n", + " int(os.getenv(\"IS_TESTING_TRAIN_GPU\")),\n", + " )\n", + "else:\n", + " TRAIN_GPU, TRAIN_NGPU = (aip.gapic.AcceleratorType.NVIDIA_TESLA_K80, 4)\n", + "\n", + "if os.getenv(\"IS_TESTING_DEPLOY_GPU\"):\n", + " DEPLOY_GPU, DEPLOY_NGPU = (\n", + " aip.gapic.AcceleratorType.NVIDIA_TESLA_K80,\n", + " int(os.getenv(\"IS_TESTING_DEPLOY_GPU\")),\n", + " )\n", + "else:\n", + " DEPLOY_GPU, DEPLOY_NGPU = (None, None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "container:training,prediction" + }, + "source": [ + "#### Set pre-built containers\n", + "\n", + "Set the pre-built Docker container image for training and prediction.\n", + "\n", + "\n", + "For the latest list, see [Pre-built containers for training](https://cloud.google.com/ai-platform-unified/docs/training/pre-built-containers).\n", + "\n", + "\n", + "For the latest list, see [Pre-built containers for prediction](https://cloud.google.com/ai-platform-unified/docs/predictions/pre-built-containers)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "LhhUFw2nulvT" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TF\"):\n", + " TF = os.getenv(\"IS_TESTING_TF\")\n", + "else:\n", + " TF = \"2.5\".replace(\".\", \"-\")\n", + "\n", + "if TF[0] == \"2\":\n", + " if TRAIN_GPU:\n", + " TRAIN_VERSION = \"tf-gpu.{}\".format(TF)\n", + " else:\n", + " TRAIN_VERSION = \"tf-cpu.{}\".format(TF)\n", + " if DEPLOY_GPU:\n", + " DEPLOY_VERSION = \"tf2-gpu.{}\".format(TF)\n", + " else:\n", + " DEPLOY_VERSION = \"tf2-cpu.{}\".format(TF)\n", + "else:\n", + " if TRAIN_GPU:\n", + " TRAIN_VERSION = \"tf-gpu.{}\".format(TF)\n", + " else:\n", + " TRAIN_VERSION = \"tf-cpu.{}\".format(TF)\n", + " if DEPLOY_GPU:\n", + " DEPLOY_VERSION = \"tf-gpu.{}\".format(TF)\n", + " else:\n", + " DEPLOY_VERSION = \"tf-cpu.{}\".format(TF)\n", + "\n", + "TRAIN_IMAGE = \"{}-docker.pkg.dev/vertex-ai/training/{}:latest\".format(\n", + " REGION.split(\"-\")[0], TRAIN_VERSION\n", + ")\n", + "DEPLOY_IMAGE = \"{}-docker.pkg.dev/vertex-ai/prediction/{}:latest\".format(\n", + " REGION.split(\"-\")[0], DEPLOY_VERSION\n", + ")\n", + "\n", + "print(\"Training:\", TRAIN_IMAGE, TRAIN_GPU, TRAIN_NGPU)\n", + "print(\"Deployment:\", DEPLOY_IMAGE, DEPLOY_GPU, DEPLOY_NGPU)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "machine:training" + }, + "source": [ + "#### Set machine type\n", + "\n", + "Next, set the machine type to use for training.\n", + "\n", + "- Set the variable `TRAIN_COMPUTE` to configure the compute resources for the VMs you will use for for training.\n", + " - `machine type`\n", + " - `n1-standard`: 3.75GB of memory per vCPU.\n", + " - `n1-highmem`: 6.5GB of memory per vCPU\n", + " - `n1-highcpu`: 0.9 GB of memory per vCPU\n", + " - `vCPUs`: number of \\[2, 4, 8, 16, 32, 64, 96 \\]\n", + "\n", + "*Note: The following is not supported for training:*\n", + "\n", + " - `standard`: 2 vCPUs\n", + " - `highcpu`: 2, 4 and 8 vCPUs\n", + "\n", + "*Note: You may also use n2 and e2 machine types for training and deployment, but they do not support GPUs*." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vytMaukeulvT" + }, + "outputs": [], + "source": [ + "if os.getenv(\"IS_TESTING_TRAIN_MACHINE\"):\n", + " MACHINE_TYPE = os.getenv(\"IS_TESTING_TRAIN_MACHINE\")\n", + "else:\n", + " MACHINE_TYPE = \"n1-standard\"\n", + "\n", + "VCPU = \"4\"\n", + "TRAIN_COMPUTE = MACHINE_TYPE + \"-\" + VCPU\n", + "print(\"Train machine type\", TRAIN_COMPUTE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mirrored_intro" + }, + "source": [ + "## Mirrored Strategy\n", + "\n", + "When training on a single VM, one can either train was a single compute device or with multiple compute devices on the same VM. With Vertex AI Distributed Training you can specify both the number of compute devices for the VM instance and type of compute devices: CPU, GPU.\n", + "\n", + "Vertex AI Distributed Training supports `tf.distribute.MirroredStrategy' for TensorFlow models. To enable training across multiple compute devices on the same VM, you do the following additional steps in your Python training script:\n", + "\n", + "1. Set the tf.distribute.MirrorStrategy\n", + "2. Compile the model within the scope of tf.distribute.MirrorStrategy. *Note:* Tells MirroredStrategy which variables to mirror across your compute devices.\n", + "3. Increase the batch size for each compute device to num_devices * batch size.\n", + "\n", + "During transitions, the distribution of batches will be synchronized as well as the updates to the model parameters." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_custom_pp_training_job:mbsdk" + }, + "source": [ + "### Create and run custom training job\n", + "\n", + "\n", + "To train a custom model, you perform two steps: 1) create a custom training job, and 2) run the job.\n", + "\n", + "#### Create custom training job\n", + "\n", + "A custom training job is created with the `CustomTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the custom training job.\n", + "- `container_uri`: The training container image.\n", + "\n", + "- `python_package_gcs_uri`: The location of the Python training package as a tarball.\n", + "- `python_module_name`: The relative path to the training script in the Python package.\n", + "- `model_serving_container_uri`: The container image for deploying the model.\n", + "\n", + "*Note:* There is no requirements parameter. You specify any requirements in the `setup.py` script in your Python package." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mhw34XoOulvU" + }, + "outputs": [], + "source": [ + "DISPLAY_NAME = \"boston_\" + UUID\n", + "\n", + "job = aip.CustomPythonPackageTrainingJob(\n", + " display_name=DISPLAY_NAME,\n", + " python_package_gcs_uri=f\"{BUCKET_URI}/trainer_boston.tar.gz\",\n", + " python_module_name=\"trainer.task\",\n", + " container_uri=TRAIN_IMAGE,\n", + " model_serving_container_image_uri=DEPLOY_IMAGE,\n", + " project=PROJECT_ID,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "examine_training_package" + }, + "source": [ + "### Examine the training package\n", + "\n", + "#### Package layout\n", + "\n", + "Before you start the training, you will look at how a Python package is assembled for a custom training job. When unarchived, the package contains the following directory/file layout.\n", + "\n", + "- PKG-INFO\n", + "- README.md\n", + "- setup.cfg\n", + "- setup.py\n", + "- trainer\n", + " - \\_\\_init\\_\\_.py\n", + " - task.py\n", + "\n", + "The files `setup.cfg` and `setup.py` are the instructions for installing the package into the operating environment of the Docker image.\n", + "\n", + "The file `trainer/task.py` is the Python script for executing the custom training job. *Note*, when we referred to it in the worker pool specification, we replace the directory slash with a dot (`trainer.task`) and dropped the file suffix (`.py`).\n", + "\n", + "#### Package Assembly\n", + "\n", + "In the following cells, you will assemble the training package." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IAaZpZyyulvU" + }, + "outputs": [], + "source": [ + "# Make folder for Python training script\n", + "! rm -rf custom\n", + "! mkdir custom\n", + "\n", + "# Add package information\n", + "! touch custom/README.md\n", + "\n", + "setup_cfg = \"[egg_info]\\n\\ntag_build =\\n\\ntag_date = 0\"\n", + "! echo \"$setup_cfg\" > custom/setup.cfg\n", + "\n", + "setup_py = \"import setuptools\\n\\nsetuptools.setup(\\n\\n install_requires=[\\n\\n 'tensorflow==2.5.0',\\n\\n 'tensorflow_datasets==1.3.0',\\n\\n ],\\n\\n packages=setuptools.find_packages())\"\n", + "! echo \"$setup_py\" > custom/setup.py\n", + "\n", + "pkg_info = \"Metadata-Version: 1.0\\n\\nName: Boston Housing cloud\\n\\nVersion: 0.0.0\\n\\nSummary: Demostration training script\\n\\nHome-page: www.google.com\\n\\nAuthor: Google\\n\\nAuthor-email: aferlitsch@google.com\\n\\nLicense: Public\\n\\nDescription: Demo\\n\\nPlatform: Vertex\"\n", + "! echo \"$pkg_info\" > custom/PKG-INFO\n", + "\n", + "# Make the training subfolder\n", + "! mkdir custom/trainer\n", + "! touch custom/trainer/__init__.py" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "taskpy_contents:mirrored,boston" + }, + "source": [ + "#### Task.py contents\n", + "\n", + "In the next cell, you write the contents of the training script task.py. I won't go into detail, it's just there for you to browse. In summary:\n", + "\n", + "- Get the directory where to save the model artifacts from the command line (`--model_dir`), and if not specified, then from the environment variable `AIP_MODEL_DIR`.\n", + "- Loads Boston Housing dataset from TF.Keras builtin datasets\n", + "- Builds a simple deep neural network model using TF.Keras model API.\n", + "- Compiles the model (`compile()`).\n", + "- Sets a training distribution strategy according to the argument `args.distribute`.\n", + "- Trains the model (`fit()`) with epochs specified by `args.epochs`.\n", + "- Saves the trained model (`save(args.model_dir)`) to the specified model directory.\n", + "- Saves the maximum value for each feature `f.write(str(params))` to the specified parameters file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zKzddzl6ulvV" + }, + "outputs": [], + "source": [ + "%%writefile custom/trainer/task.py\n", + "# Single, Mirrored and MultiWorker Distributed Training\n", + "\n", + "import tensorflow_datasets as tfds\n", + "import tensorflow as tf\n", + "from tensorflow.python.client import device_lib\n", + "import numpy as np\n", + "import argparse\n", + "import os\n", + "import sys\n", + "import logging\n", + "\n", + "parser = argparse.ArgumentParser()\n", + "parser.add_argument('--model-dir', dest='model_dir',\n", + " default=os.getenv('AIP_MODEL_DIR'), type=str, help='Model dir.')\n", + "parser.add_argument('--lr', dest='lr',\n", + " default=0.001, type=float,\n", + " help='Learning rate.')\n", + "parser.add_argument('--epochs', dest='epochs',\n", + " default=10, type=int,\n", + " help='Number of epochs.')\n", + "parser.add_argument('--steps', dest='steps',\n", + " default=100, type=int,\n", + " help='Number of steps per epoch.')\n", + "parser.add_argument('--batch_size', dest='batch_size',\n", + " default=16, type=int,\n", + " help='Size of a batch.')\n", + "parser.add_argument('--distribute', dest='distribute', type=str, default='single',\n", + " help='distributed training strategy')\n", + "parser.add_argument('--param-file', dest='param_file',\n", + " default='/tmp/param.txt', type=str,\n", + " help='Output file for parameters')\n", + "args = parser.parse_args()\n", + "\n", + "logging.info('DEVICES' + str(device_lib.list_local_devices()))\n", + "\n", + "# Single Machine, single compute device\n", + "if args.distribute == 'single':\n", + " if tf.test.is_gpu_available():\n", + " strategy = tf.distribute.OneDeviceStrategy(device=\"/gpu:0\")\n", + " else:\n", + " strategy = tf.distribute.OneDeviceStrategy(device=\"/cpu:0\")\n", + " logging.info(\"Single device training\")\n", + "# Single Machine, multiple compute device\n", + "elif args.distribute == 'mirrored':\n", + " strategy = tf.distribute.MirroredStrategy()\n", + " logging.info(\"Mirrored Strategy distributed training\")\n", + "# Multi Machine, multiple compute device\n", + "elif args.distribute == 'multiworker':\n", + " strategy = tf.distribute.MultiWorkerMirroredStrategy()\n", + " logging.info(\"Multi-worker Strategy distributed training\")\n", + " logging.info('TF_CONFIG = {}'.format(os.environ.get('TF_CONFIG', 'Not found')))\n", + " # Single Machine, multiple TPU devices\n", + "elif args.distribute == 'tpu':\n", + " cluster_resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu=\"local\")\n", + " tf.config.experimental_connect_to_cluster(cluster_resolver)\n", + " tf.tpu.experimental.initialize_tpu_system(cluster_resolver)\n", + " strategy = tf.distribute.TPUStrategy(cluster_resolver)\n", + " print(\"All devices: \", tf.config.list_logical_devices('TPU'))\n", + "\n", + "logging.info('num_replicas_in_sync = {}'.format(strategy.num_replicas_in_sync))\n", + "\n", + "def _is_chief(task_type, task_id):\n", + " ''' Check for primary if multiworker training\n", + " '''\n", + " return (task_type == 'chief') or (task_type == 'worker' and task_id == 0) or task_type is None\n", + "\n", + "\n", + "def get_data():\n", + " # Scaling Boston Housing data features\n", + " def scale(feature):\n", + " max = np.max(feature)\n", + " feature = (feature / max).astype(np.float)\n", + " return feature, max\n", + "\n", + " (x_train, y_train), (x_test, y_test) = tf.keras.datasets.boston_housing.load_data(\n", + " path=\"boston_housing.npz\", test_split=0.2, seed=113\n", + " )\n", + "\n", + " params = []\n", + " for _ in range(13):\n", + " x_train[_], max = scale(x_train[_])\n", + " x_test[_], _ = scale(x_test[_])\n", + " params.append(max)\n", + "\n", + " # store the normalization (max) value for each feature\n", + " with tf.io.gfile.GFile(args.param_file, 'w') as f:\n", + " f.write(str(params))\n", + " return (x_train, y_train), (x_test, y_test)\n", + "\n", + "def get_model():\n", + " model = tf.keras.Sequential([\n", + " tf.keras.layers.Dense(128, activation='relu', input_shape=(13,)),\n", + " tf.keras.layers.Dense(128, activation='relu'),\n", + " tf.keras.layers.Dense(1, activation='linear')\n", + " ])\n", + "\n", + " model.compile(\n", + " loss='mse',\n", + " optimizer=tf.keras.optimizers.RMSprop(learning_rate=args.lr)\n", + " )\n", + " return model\n", + "\n", + "def train(model, x_train, y_train):\n", + " NUM_WORKERS = strategy.num_replicas_in_sync\n", + " # Here the batch size scales up by number of workers since\n", + " # `tf.data.Dataset.batch` expects the global batch size.\n", + " GLOBAL_BATCH_SIZE = args.batch_size * NUM_WORKERS\n", + "\n", + " model.fit(x_train, y_train, epochs=args.epochs, batch_size=GLOBAL_BATCH_SIZE)\n", + "\n", + " if args.distribute == 'multiworker':\n", + " task_type, task_id = (strategy.cluster_resolver.task_type,\n", + " strategy.cluster_resolver.task_id)\n", + " else:\n", + " task_type, task_id = None, None\n", + "\n", + " if args.distribute==\"tpu\":\n", + " save_locally = tf.saved_model.SaveOptions(experimental_io_device='/job:localhost')\n", + " model.save(args.model_dir, options=save_locally)\n", + " # single, mirrored or primary for multiworker\n", + " elif _is_chief(task_type, task_id):\n", + " model.save(args.model_dir)\n", + " # non-primary workers for multi-workers\n", + " else:\n", + " # each worker saves their model instance to a unique temp location\n", + " worker_dir = args.model_dir + '/workertemp_' + str(task_id)\n", + " tf.io.gfile.makedirs(worker_dir)\n", + " model.save(worker_dir)\n", + "\n", + "with strategy.scope():\n", + " # Creation of dataset, and model building/compiling need to be within\n", + " # `strategy.scope()`.\n", + " model = get_model()\n", + "\n", + "(x_train, y_train), (x_test, y_test) = get_data()\n", + "\n", + "train(model, x_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tarball_training_script" + }, + "source": [ + "#### Store training script on your Cloud Storage bucket\n", + "\n", + "Next, you package the training folder into a compressed tar ball, and then store it in your Cloud Storage bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "LFUHioqTulvV" + }, + "outputs": [], + "source": [ + "! rm -f custom.tar custom.tar.gz\n", + "! tar cvf custom.tar custom\n", + "! gzip custom.tar\n", + "! gsutil cp custom.tar.gz $BUCKET_URI/trainer_boston.tar.gz" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_custom_pp_training_job:mirrored" + }, + "source": [ + "#### Run the custom Python package training job\n", + "\n", + "Next, you run the custom job to start the training job by invoking the method `run()`. The parameters are the same as when running a CustomTrainingJob." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "LnUX0UkvulvV" + }, + "outputs": [], + "source": [ + "MODEL_DIR = BUCKET_URI\n", + "\n", + "CMDARGS = [\"--epochs=5\", \"--batch_size=16\", \"--distribute=mirrored\"]\n", + "\n", + "model = job.run(\n", + " model_display_name=\"boston_\" + UUID,\n", + " args=CMDARGS,\n", + " replica_count=1,\n", + " machine_type=TRAIN_COMPUTE,\n", + " accelerator_type=TRAIN_GPU.name,\n", + " accelerator_count=TRAIN_NGPU,\n", + " base_output_dir=MODEL_DIR,\n", + " sync=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "delete_job" + }, + "source": [ + "### Delete a custom training job\n", + "\n", + "After a training job is completed, you can delete the training job with the method `delete()`. Prior to completion, a training job can be canceled with the method `cancel()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "iUWHFpPoulvW" + }, + "outputs": [], + "source": [ + "job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "model_delete:mbsdk" + }, + "source": [ + "#### Delete the model\n", + "\n", + "The method 'delete()' will delete the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-0gqCUTEulvW" + }, + "outputs": [], + "source": [ + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "multiworker_intro" + }, + "source": [ + "## Multi-Worker Mirrored Strategy\n", + "\n", + "With Vertex AI Distributed Training you can train with multiple VM instances\n", + "\n", + "Vertex AI Distributed Training supports `tf.distribute.MultiWorkerMirroredStrategy' for TensorFlow and PyTorch models. To enable training across multiple VMS, you do the following additional steps in your Python training script:\n", + "\n", + "1. All the additional steps for MirroredStrategy, except that MultiWorkerStrategy is set in place of MirroredStrategy.\n", + "2. Setup the worker pools.\n", + "3. Alter the saving of the model so that the non-primary workers save their model instance to a unique temporary directory each.\n", + "\n", + "*Note:* You do not need to construct the TF_CONFIG environment variable. It is automatically constructed by Vertex AI Distributed Training.\n", + "\n", + "Learn more about [Distributed Training](https://cloud.google.com/vertex-ai/docs/training/distributed-training)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "worker_pools" + }, + "source": [ + "### Worker pools\n", + "\n", + "If you run a distributed training job with Vertex AI, you specify multiple machines (nodes) in a training cluster. The training service allocates the resources for the machine types you specify. Your running job on a given node is called a replica. A group of replicas with the same configuration is called a worker pool.\n", + "\n", + "Each replica in the training cluster is given a single role or task in distributed training. For example:\n", + "\n", + "- **Primary replica**: Exactly one replica is designated the primary replica. This task manages the others and reports status for the job as a whole.\n", + "\n", + "- **Worker(s)**: One or more replicas may be designated as workers. These replicas do their portion of the work as you designate in your job configuration.\n", + "\n", + "- Parameter server(s): If supported by your ML framework, one or more replicas may be designated as parameter servers. These replicas store model parameters and coordinate shared model state between the workers.\n", + "\n", + "Evaluator(s): If supported by your ML framework, one or more replicas may be designated as evaluators. These replicas can be used to evaluate your model. If you are using TensorFlow, note that TensorFlow generally expects that you use no more than one evaluator.\n", + "\n", + "To configure a distributed training job, define your list of worker pools (workerPoolSpecs[]), designating one WorkerPoolSpec for each type of task:\n", + "\n", + "*Note:* The worker pool is order dependent (0..3):\n", + "\n", + "**workerPoolSpecs[0]**: Primary, chief, scheduler, or \"master\"\n", + "\n", + "**workerPoolSpecs[1]**: Secondary, replicas, workers\n", + "\n", + "**workerPoolSpecs[2]**: Parameter servers, Reduction Server\n", + "\n", + "**workerPoolSpecs[2]**: Evaluators" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "multiworker_methods" + }, + "source": [ + "### Distributed training options for Multi-Worker Mirrored Strategy\n", + "\n", + "How you setup the worker pools is dependent on the Vertex AI method you use for training.\n", + "\n", + "**CustomTrainingJob** / **CustomContainerTrainingJob** / **CustomPythonPackageTrainingJob**\n", + "\n", + "The `replica_count` includes the primary and secondary (replica_count-1), and share the same machine type and accelerators.\n", + "\n", + "You cannot specify a parameter server or evaluation node.\n", + "\n", + "**CustomJob**\n", + "\n", + "You specify a `worker_pool_spec`, where you can specify detailed settings for each of the four worker pools." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aXvPN8P6ulvX" + }, + "source": [ + "### Create and run custom training job\n", + "\n", + "\n", + "To train a custom model, you perform two steps: 1) create a custom training job, and 2) run the job.\n", + "\n", + "#### Create custom training job\n", + "\n", + "A custom training job is created with the `CustomTrainingJob` class, with the following parameters:\n", + "\n", + "- `display_name`: The human readable name for the custom training job.\n", + "- `container_uri`: The training container image.\n", + "\n", + "- `python_package_gcs_uri`: The location of the Python training package as a tarball.\n", + "- `python_module_name`: The relative path to the training script in the Python package.\n", + "- `model_serving_container_uri`: The container image for deploying the model.\n", + "\n", + "*Note:* There is no requirements parameter. You specify any requirements in the `setup.py` script in your Python package." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kYcFsVSEulvX" + }, + "outputs": [], + "source": [ + "DISPLAY_NAME = \"boston_\" + UUID\n", + "\n", + "job = aip.CustomPythonPackageTrainingJob(\n", + " display_name=DISPLAY_NAME,\n", + " python_package_gcs_uri=f\"{BUCKET_URI}/trainer_boston.tar.gz\",\n", + " python_module_name=\"trainer.task\",\n", + " container_uri=TRAIN_IMAGE,\n", + " model_serving_container_image_uri=DEPLOY_IMAGE,\n", + " project=PROJECT_ID,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_custom_pp_training_job:multiworker" + }, + "source": [ + "#### Run the custom Python package training job\n", + "\n", + "Next, you run the custom job to start the training job by invoking the method `run()`. The parameters are the same as when running a CustomTrainingJob." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GHRxPU32ulvX" + }, + "outputs": [], + "source": [ + "MODEL_DIR = BUCKET_URI\n", + "\n", + "CMDARGS = [\"--epochs=5\", \"--batch_size=16\", \"--distribute=multiworker\"]\n", + "\n", + "try:\n", + " model = job.run(\n", + " model_display_name=\"boston_\" + UUID,\n", + " args=CMDARGS,\n", + " replica_count=4,\n", + " machine_type=TRAIN_COMPUTE,\n", + " accelerator_type=TRAIN_GPU.name,\n", + " accelerator_count=TRAIN_NGPU,\n", + " base_output_dir=MODEL_DIR,\n", + " sync=True,\n", + " )\n", + "except Exception as e:\n", + " # may fail duing model.save() -- seems to be some issue when merging checkpoints from the workers\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "92D_hbuVulvX" + }, + "source": [ + "### Delete a custom training job\n", + "\n", + "After a training job is completed, you can delete the training job with the method `delete()`. Prior to completion, a training job can be canceled with the method `cancel()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CqrfWkB3ulvX" + }, + "outputs": [], + "source": [ + "job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "customjob_intro:multiworker" + }, + "source": [ + "### Multiworker distributed training with CustomJob\n", + "\n", + "Multiworker distributed training with `CustomJob` has the advantages of fine detail control of the primary replica and optionally specifying worker pools for parameter server and evaluators. Creating a `CustomJob` includes the following steps:\n", + "\n", + "\n", + "1. Specify individual details for each worker pool.\n", + "2. Embed training package into Docker image." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "create_docker_container:training" + }, + "source": [ + "### Create a Docker file\n", + "\n", + "To use your own custom training container, you build a Docker file and embed into the container your training scripts." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "write_docker_file:training,multiworker" + }, + "source": [ + "#### Write the Docker file contents\n", + "\n", + "Your first step in containerizing your code is to create a Docker file. In your Docker you’ll include all the commands needed to run your container image. It’ll install all the libraries you’re using and set up the entry point for your training code.\n", + "\n", + "1. Install a pre-defined container image from TensorFlow repository for deep learning images.\n", + "2. Copies in the Python training code, to be shown subsequently.\n", + "3. Sets the entry into the Python training script as `trainer/task.py`. Note, the `.py` is dropped in the ENTRYPOINT command, as it is implied." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pGI2viDAulvY" + }, + "outputs": [], + "source": [ + "%%writefile custom/Dockerfile\n", + "\n", + "FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-5\n", + "\n", + "WORKDIR /\n", + "\n", + "# Copies the trainer code to the docker image.\n", + "COPY trainer /trainer\n", + "\n", + "# Sets up the entry point to invoke the trainer.\n", + "ENTRYPOINT [\"python\", \"-m\", \"trainer.task\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "name_container:training" + }, + "source": [ + "#### Build the container locally\n", + "\n", + "Next, you will provide a name for your customer container that you will use when you submit it to the Google Container Registry." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7P8cdlFtulvY" + }, + "outputs": [], + "source": [ + "TRAIN_IMAGE = \"gcr.io/\" + PROJECT_ID + \"/boston:v1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "build_container:training" + }, + "source": [ + "Next, build the container." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jmw5cakNulvY" + }, + "outputs": [], + "source": [ + "if not IS_COLAB:\n", + " ! docker build custom -t $TRAIN_IMAGE\n", + "else:\n", + " # install docker daemon\n", + " ! apt-get -qq install docker.io" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "test_container:training" + }, + "source": [ + "#### Test the container locally\n", + "\n", + "Run the container within your notebook instance to ensure it’s working correctly. You will run it for 5 epochs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jJGLjU-TulvZ" + }, + "outputs": [], + "source": [ + "if not IS_COLAB:\n", + " ! docker run $TRAIN_IMAGE --epochs=5 --model-dir=./" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "register_container:training" + }, + "source": [ + "#### Register the custom container\n", + "\n", + "When you’ve finished running the container locally, push it to Google Container Registry." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GAXGjae7ulvZ" + }, + "outputs": [], + "source": [ + "if not IS_COLAB:\n", + " ! docker push $TRAIN_IMAGE" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f50e9c553fb7" + }, + "source": [ + "*Executes in Colab*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a7e8c98f1e56" + }, + "outputs": [], + "source": [ + "%%bash -s $IS_COLAB $TRAIN_IMAGE\n", + "if [ $1 == \"False\" ]; then\n", + " exit 0\n", + "fi\n", + "set -x\n", + "dockerd -b none --iptables=0 -l warn &\n", + "for i in $(seq 5); do [ ! -S \"/var/run/docker.sock\" ] && sleep 2 || break; done\n", + "docker build custom -t $2\n", + "docker run $2 --epochs=5 --model-dir=./\n", + "docker push $2\n", + "kill $(jobs -p)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "worker_pool_primary" + }, + "source": [ + "#### Primary worker pool\n", + "\n", + "The primary worker pool (index 0) coordinates the work done by all the other replicas. Set the replicaCount to 1. Since the worker is coordinating and not training, use a general purpose CPU, instead of a GPU.\n", + "\n", + "Learn more about [Machine Types for Training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CEAnXBzCulvZ" + }, + "outputs": [], + "source": [ + "PRIMARY_COMPUTE = \"n2-highcpu-64\"\n", + "\n", + "MODEL_DIR = BUCKET_URI\n", + "\n", + "CMDARGS = [\n", + " \"--model-dir=\" + MODEL_DIR,\n", + " \"--epochs=5\",\n", + " \"--batch_size=16\",\n", + " \"--distribute=multiworker\",\n", + "]\n", + "\n", + "CONTAINER_SPEC = {\"image_uri\": TRAIN_IMAGE, \"command\": \"trainer.task\", \"args\": CMDARGS}\n", + "\n", + "PRIMARY_WORKER_POOL = {\n", + " \"replica_count\": 1,\n", + " \"machine_spec\": {\"machine_type\": PRIMARY_COMPUTE, \"accelerator_count\": 0},\n", + " \"container_spec\": CONTAINER_SPEC,\n", + "}\n", + "\n", + "WORKER_POOL_SPECS = [PRIMARY_WORKER_POOL]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "worker_pool_training" + }, + "source": [ + "#### Training worker pool\n", + "\n", + "The secondary worker pool (index 1) performs model training. Each of the replicas will have an instance of the your training package installed on it.\n", + "\n", + "Each replica may have one (single device training) or multiple (mirrored) compute devices for training." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6dchPSfNulvZ" + }, + "outputs": [], + "source": [ + "TRAIN_WORKER_POOL = {\n", + " \"replica_count\": 4,\n", + " \"machine_spec\": {\n", + " \"machine_type\": TRAIN_COMPUTE,\n", + " \"accelerator_count\": TRAIN_NGPU,\n", + " \"accelerator_type\": TRAIN_GPU,\n", + " },\n", + " \"container_spec\": CONTAINER_SPEC,\n", + "}\n", + "\n", + "WORKER_POOL_SPECS.append(TRAIN_WORKER_POOL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "custom_job:worker_pool" + }, + "source": [ + "### Create CustomJob with worker pool specifications\n", + "\n", + "Next, you create a `CustomJob` for the multi-worker distributed training job:\n", + "\n", + "-`display_name`: The display name for the custom job.\n", + "\n", + "-`worker_pool_specs`: The detailed specifications for each worker pool." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "m2VgmqEOulva" + }, + "outputs": [], + "source": [ + "DISPLAY_NAME = \"boston_\" + UUID\n", + "\n", + "job = aip.CustomJob(display_name=DISPLAY_NAME, worker_pool_specs=WORKER_POOL_SPECS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "run_custom_job:multiworker" + }, + "source": [ + "### Run the CustomJob\n", + "\n", + "Next, you run the custom job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hg8vnI_Wulva" + }, + "outputs": [], + "source": [ + "try:\n", + " job.run(sync=True)\n", + "except Exception as e:\n", + " # may fail in multi-worker to find startup script\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WT76Sc-culva" + }, + "source": [ + "### Delete a custom training job\n", + "\n", + "After a training job is completed, you can delete the training job with the method `delete()`. Prior to completion, a training job can be canceled with the method `cancel()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "I_IxVfuDulva" + }, + "outputs": [], + "source": [ + "job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "reduction_server_intro" + }, + "source": [ + "## Reduction Server\n", + "\n", + "To speed up training of large models, many engineering teams are adopting distributed training using scale-out clusters of ML accelerators. However, distributed training at scale brings its own set of challenges. Specifically, limited network bandwidth between nodes makes optimizing performance of distributed training inherently difficult, particularly for large cluster configurations.\n", + "\n", + "Vertex AI Reduction Server optimizes bandwidth and latency of multi-node distributed training on NVIDIA GPUs for synchronous data parallel algorithms. Synchronous data parallelism is the foundation of many widely adopted distributed training frameworks, including TensorFlow’s MultiWorkerMirroredStrategy, Horovod, and PyTorch Distributed. By optimizing bandwidth usage and latency of the all-reduce collective operation used by these frameworks, Reduction Server can decrease both the time and cost of large training jobs.\n", + "\n", + "Learn more about [Optimizing training performance using Vertex Reduction Server](https://cloud.google.com/blog/topics/developers-practitioners/optimize-training-performance-reduction-server-vertex-ai)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "worker_pool_reduction_server" + }, + "outputs": [], + "source": [ + "reduction_server_count = 1\n", + "reduction_server_machine_type = \"n1-highcpu-16\"\n", + "reduction_server_image_uri = (\n", + " \"us-docker.pkg.dev/vertex-ai-restricted/training/reductionserver:latest\"\n", + ")\n", + "\n", + "PARAMETER_POOL = {\n", + " \"replica_count\": reduction_server_count,\n", + " \"machine_spec\": {\n", + " \"machine_type\": reduction_server_machine_type,\n", + " },\n", + " \"container_spec\": {\"image_uri\": reduction_server_image_uri},\n", + "}\n", + "WORKER_POOL_SPECS.append(PARAMETER_POOL)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "L8Av8ATVulvb" + }, + "source": [ + "### Create CustomJob with worker pool specifications\n", + "\n", + "Next, you create a `CustomJob` for the multi-worker distributed training job:\n", + "\n", + "-`display_name`: The display name for the custom job.\n", + "\n", + "-`worker_pool_specs`: The detailed specifications for each worker pool." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TUWEP1Lmulvb" + }, + "outputs": [], + "source": [ + "DISPLAY_NAME = \"boston_\" + UUID\n", + "\n", + "job = aip.CustomJob(display_name=DISPLAY_NAME, worker_pool_specs=WORKER_POOL_SPECS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_95FH8jeulvb" + }, + "source": [ + "### Run the CustomJob\n", + "\n", + "Next, you run the custom job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IEbrY05Gulvb" + }, + "outputs": [], + "source": [ + "try:\n", + " job.run(sync=True)\n", + "except Exception as e:\n", + " # may fail in multi-worker to find startup script\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8R2Bnmwmulvb" + }, + "source": [ + "### Delete a custom training job\n", + "\n", + "After a training job is completed, you can delete the training job with the method `delete()`. Prior to completion, a training job can be canceled with the method `cancel()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "s1geVE3Lulvb" + }, + "outputs": [], + "source": [ + "job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tpu_intro" + }, + "source": [ + "## Cloud TPU Training\n", + "\n", + "To further speed up trainig, your organization can utilize Google's Cloud Tensor Processing Units (TPU) pods.\n", + "\n", + "Cloud TPU is the custom-designed machine learning ASIC that powers Google products like Translate, Photos, Search, Assistant, and Gmail. Cloud TPU is designed to run cutting-edge machine learning models with AI services on Google Cloud. And its custom high-speed network offers over 100 petaflops of performance in a single pod.\n", + "\n", + "Learn more about [Cloud TPU](https://cloud.google.com/tpu)\n", + "\n", + "*Note*: TPU VM Training is currently an opt-in feature. Your GCP project must first be added to the feature allowlist. Please email your project information(project id/number) to vertex-ai-tpu-vm-training-support@google.com for the allowlist. You will receive an email as soon as your project is ready." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "docker_write:tpu" + }, + "source": [ + "### Write Docker file for TPU training\n", + "\n", + "Currently, there is no pre-built Vertex AI Docker image for training with TPUs. No problems, you can make your own, as follows:\n", + "\n", + "1. Create a vanilla Python 3 image (e.g., `python3:8`).\n", + "2. Get and install the TPU library (`libtpu.so`).\n", + "3. Copy in your training package" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nQVPtknpulvb" + }, + "outputs": [], + "source": [ + "%%writefile custom/Dockerfile\n", + "FROM python:3.8\n", + "\n", + "WORKDIR /\n", + "\n", + "# Copies the trainer code to the docker image.\n", + "COPY trainer /trainer\n", + "\n", + "RUN pip3 install tensorflow-datasets\n", + "\n", + "# Install TPU Tensorflow and dependencies.\n", + "# libtpu.so must be under the '/lib' directory.\n", + "RUN wget https://storage.googleapis.com/cloud-tpu-tpuvm-artifacts/libtpu/20210525/libtpu.so -O /lib/libtpu.so\n", + "RUN chmod 777 /lib/libtpu.so\n", + "\n", + "RUN wget https://storage.googleapis.com/cloud-tpu-tpuvm-artifacts/tensorflow/20210525/tf_nightly-2.6.0-cp38-cp38-linux_x86_64.whl\n", + "RUN pip3 install tf_nightly-2.6.0-cp38-cp38-linux_x86_64.whl\n", + "RUN rm tf_nightly-2.6.0-cp38-cp38-linux_x86_64.whl\n", + "# Sets up the entry point to invoke the trainer.\n", + "ENTRYPOINT [\"python\", \"-m\", \"trainer.task\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "docker_push:tpu" + }, + "source": [ + "### Build and push the Docker image to the Artifact Registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "J_d_zEXUulvc" + }, + "outputs": [], + "source": [ + "TRAIN_IMAGE = \"gcr.io/\" + PROJECT_ID + \"/tpu-train:latest\"\n", + "\n", + "os.chdir(\"custom\")\n", + "! docker build --quiet --tag={TRAIN_IMAGE} .\n", + "! docker push {TRAIN_IMAGE}\n", + "os.chdir(\"..\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "worker_pool_tpu" + }, + "source": [ + "### TPU worker specification pool\n", + "\n", + "Next, you create the worker specification pool. For TPUs, you do:\n", + "\n", + "- Create only one worker pool (Primary).\n", + "- Set the machine type to `cloud-tpu`.\n", + "- Set the accelerator type to a `TPU`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d514eU7lulvc" + }, + "outputs": [], + "source": [ + "# Use TPU Accelerators. Temporarily using numeric codes, until types are added to the SDK\n", + "# 6 = TPU_V2\n", + "# 7 = TPU_V3\n", + "TRAIN_TPU, TRAIN_NTPU = (7, 8)\n", + "TRAIN_COMPUTE = \"cloud-tpu\"\n", + "\n", + "\n", + "if not TRAIN_NTPU or TRAIN_NTPU < 2:\n", + " TRAIN_STRATEGY = \"single\"\n", + "else:\n", + " TRAIN_STRATEGY = \"tpu\"\n", + "print(TRAIN_STRATEGY)\n", + "\n", + "EPOCHS = 20\n", + "STEPS = 10000\n", + "\n", + "TRAINER_ARGS = [\n", + " \"--epochs=\" + str(EPOCHS),\n", + " \"--steps=\" + str(STEPS),\n", + " \"--distribute=\" + TRAIN_STRATEGY,\n", + "]\n", + "\n", + "\n", + "WORKER_POOL_SPECS = [\n", + " {\n", + " \"container_spec\": {\n", + " \"args\": TRAINER_ARGS,\n", + " \"image_uri\": TRAIN_IMAGE,\n", + " },\n", + " \"replica_count\": 1,\n", + " \"machine_spec\": {\n", + " \"machine_type\": TRAIN_COMPUTE,\n", + " \"accelerator_type\": TRAIN_TPU,\n", + " \"accelerator_count\": TRAIN_NTPU,\n", + " },\n", + " }\n", + "]\n", + "\n", + "print(WORKER_POOL_SPECS[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RruSqNfrulvc" + }, + "source": [ + "### Create CustomJob with worker pool specifications\n", + "\n", + "Next, you create a `CustomJob` for the multi-worker distributed training job:\n", + "\n", + "-`display_name`: The display name for the custom job.\n", + "\n", + "-`worker_pool_specs`: The detailed specifications for each worker pool." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2QvSqbbHulvc" + }, + "outputs": [], + "source": [ + "DISPLAY_NAME = \"boston_\" + UUID\n", + "\n", + "job = aip.CustomJob(display_name=DISPLAY_NAME, worker_pool_specs=WORKER_POOL_SPECS)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Iw4L3UIfulvd" + }, + "source": [ + "### Run the CustomJob\n", + "\n", + "Next, you run the custom job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zmqCNS78ulvd" + }, + "outputs": [], + "source": [ + "try:\n", + " job.run(sync=True)\n", + "except Exception as e:\n", + " # may fail in multi-worker to find startup script\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gWZoH9QKulvd" + }, + "source": [ + "### Delete a custom training job\n", + "\n", + "After a training job is completed, you can delete the training job with the method `delete()`. Prior to completion, a training job can be canceled with the method `cancel()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Lt8BJ4iBulvd" + }, + "outputs": [], + "source": [ + "job.delete()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cleanup" + }, + "source": [ + "# Cleaning up\n", + "\n", + "To clean up all Google Cloud resources used in this project, you can [delete the Google Cloud\n", + "project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#shutting_down_projects) you used for the tutorial.\n", + "\n", + "Otherwise, you can delete the individual resources you created in this tutorial:\n", + "\n", + "\n", + "- Cloud Storage Bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "U98Wzc01ulvd" + }, + "outputs": [], + "source": [ + "# Set this to true only if you'd like to delete your bucket\n", + "delete_bucket = False\n", + "\n", + "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", + " ! gsutil rm -r $BUCKET_URI" + ] + } + ], + "metadata": { + "colab": { + "name": "get_started_with_vertex_distributed_training.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/official/training/hyperparameter_tuning_tensorflow.ipynb b/notebooks/official/training/hyperparameter_tuning_tensorflow.ipynb index 9b1da75fc..ab7be1232 100644 --- a/notebooks/official/training/hyperparameter_tuning_tensorflow.ipynb +++ b/notebooks/official/training/hyperparameter_tuning_tensorflow.ipynb @@ -65,7 +65,9 @@ "\n", "And it’s not just about tracking the results from all these trials. You also want a way to efficiently search the space of possible values so you don’t waste as much time trying out combinations that yield low accuracy scores.\n", "\n", - "Vertex AI Training includes a hyperparameter tuning service. A Vertex AI Hyperparameter tuning job will run multiple trials of your training code. On each trial, it will use different values for your chosen hyperparameters, set within limits you specify. By default, the service uses Bayesian optimization to search the space of possible hyperparameter values. This means that information from prior experiments is used to select the next set of values, making the search more efficient. " + "Vertex AI Training includes a hyperparameter tuning service. A Vertex AI Hyperparameter tuning job will run multiple trials of your training code. On each trial, it will use different values for your chosen hyperparameters, set within limits you specify. By default, the service uses Bayesian optimization to search the space of possible hyperparameter values. This means that information from prior experiments is used to select the next set of values, making the search more efficient. \n", + "\n", + "Learn more about [Vertex AI Hyperparameter Tuning](https://cloud.google.com/vertex-ai/docs/training/hyperparameter-tuning-overview)." ] }, { diff --git a/notebooks/official/training/multi_node_ddp_gloo_vertex_training_with_custom_container.ipynb b/notebooks/official/training/multi_node_ddp_gloo_vertex_training_with_custom_container.ipynb index 6d87c949e..351f85671 100644 --- a/notebooks/official/training/multi_node_ddp_gloo_vertex_training_with_custom_container.ipynb +++ b/notebooks/official/training/multi_node_ddp_gloo_vertex_training_with_custom_container.ipynb @@ -62,7 +62,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to create a distributed PyTorch training job using Vertex AI SDK for Python and custom containers. This can help your training job scale to handle a large amount of data.\n" + "This tutorial demonstrates how to create a distributed PyTorch training job using Vertex AI SDK for Python and custom containers. This can help your training job scale to handle a large amount of data.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/training/multi_node_ddp_nccl_vertex_training_with_custom_container.ipynb b/notebooks/official/training/multi_node_ddp_nccl_vertex_training_with_custom_container.ipynb index 98a638cd0..69be69902 100644 --- a/notebooks/official/training/multi_node_ddp_nccl_vertex_training_with_custom_container.ipynb +++ b/notebooks/official/training/multi_node_ddp_nccl_vertex_training_with_custom_container.ipynb @@ -70,7 +70,9 @@ "## Overview\n", "\n", "\n", - "This tutorial demonstrates how to create a multi-node, distributed image classification using PyTorch on Vertex AI SDK with GPU. This can help your training job scale to handle large amounts of data." + "This tutorial demonstrates how to create a multi-node, distributed image classification using PyTorch on Vertex AI SDK with GPU. This can help your training job scale to handle large amounts of data.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/training/xgboost_data_parallel_training_on_cpu_using_dask.ipynb b/notebooks/official/training/xgboost_data_parallel_training_on_cpu_using_dask.ipynb index 8401e064e..7107ceafa 100644 --- a/notebooks/official/training/xgboost_data_parallel_training_on_cpu_using_dask.ipynb +++ b/notebooks/official/training/xgboost_data_parallel_training_on_cpu_using_dask.ipynb @@ -29,6 +29,8 @@ "id": "eoXf8TfQoVth" }, "source": [ + "# Create a distributed custom training job\n", + "\n", "\n", "\n", " \n", "
\n", @@ -43,7 +45,7 @@ " \n", " \n", - " \n", + " \n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -51,25 +53,32 @@ "
" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "54c20a90a87c" + }, + "source": [ + "## Overview\n", + "\n", + "This tutorial shows you how to create a distributed custom training job on Vertex AI that can handle large amounts of training data.\n", + "\n", + "Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." + ] + }, { "cell_type": "markdown", "metadata": { "id": "AksIKBzZ-nre" }, "source": [ - "# Create a distributed custom training job\n", - "## Overview\n", - "\n", - "This tutorial shows you how to create a distributed custom training job on Vertex AI that can handle large amounts of training data. \n", - "\n", "### Objective\n", "\n", "In this tutorial, you learn how to create a distributed training job using Vertex AI SDK for Python. You build a custom docker container with simple Dask configuration to run a custom training job.\n", "\n", "This tutorial uses the following Google Cloud ML services:\n", "\n", - "- `Vertex AI SDK`\n", - "- `CustomContainerTrainingJob`\n", + "- `Vertex AI Training`\n", "- `Artifact Registry`\n", "\n", "The steps performed include:\n", @@ -77,15 +86,28 @@ "- Configure the `PROJECT_ID` and `REGION` variables for your Google Cloud project.\n", "- Create a Cloud Storage bucket to store your model artifacts.\n", "- Build a custom Docker container that hosts your training code and push the container image to Artifact Registry.\n", - "- Run a Vertex AI SDK CustomContainerTrainingJob\n", - "\n", - "\n", - "### Data \n", - "\n", - "This tutorial uses the IRIS dataset, which consists of different types of irises. \n", + "- Run a Vertex AI SDK CustomContainerTrainingJob" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e6fca200d52f" + }, + "source": [ + "### Dataset\n", "\n", + "This tutorial uses the IRIS dataset, which predicts the iris species.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a110a9c9923b" + }, + "source": [ "### Costs\n", - " \n", + "\n", "This tutorial uses billable components of Google Cloud:\n", "\n", "* Vertex AI\n", @@ -454,7 +476,7 @@ "id": "Xx_z9JQlrNwG" }, "source": [ - "# Create a custom training Python package \n", + "# Create a custom training Python package\n", "\n", "Before you can perform local training, you must a create a training script file and a docker file.\n", "\n", @@ -469,17 +491,7 @@ }, "outputs": [], "source": [ - "PYTHON_PACKAGE_APPLICATION_DIR = \"trainer\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "yjeHKqHwr4rV" - }, - "outputs": [], - "source": [ + "PYTHON_PACKAGE_APPLICATION_DIR = \"trainer\"\n", "!mkdir -p $PYTHON_PACKAGE_APPLICATION_DIR" ] }, @@ -551,14 +563,28 @@ " \"\"\"\n", " return subprocess.check_call(cmd, stdout=sys.stdout, stderr=sys.stderr, shell=True)\n", "\n", + "\n", "def get_chief_ip(cluster_config_dict):\n", - " ip_address = cluster_config_dict['cluster']['workerpool0'][0].split(\":\")[0]\n", + " if 'workerpool0' in cluster_config_dict['cluster']:\n", + " ip_address = cluster_config_dict['cluster']['workerpool0'][0].split(\":\")[0]\n", + " else:\n", + " # if the job is not distributed, 'chief' will be populated instead of\n", + " # workerpool0.\n", + " ip_address = cluster_config_dict['cluster']['chief'][0].split(\":\")[0]\n", + "\n", " print('The ip address of workerpool 0 is : {}'.format(ip_address))\n", " return ip_address\n", "\n", "def get_chief_port(cluster_config_dict):\n", - " print(\"The open port is: {}\".format(cluster_config_dict['open_ports'][0]))\n", - " return cluster_config_dict['open_ports'][0]\n", + "\n", + " if \"open_ports\" in cluster_config_dict:\n", + " port = cluster_config_dict['open_ports'][0]\n", + " else:\n", + " # Use any port for the non-distributed job.\n", + " port = 7777\n", + " print(\"The open port is: {}\".format(port))\n", + "\n", + " return port\n", "\n", "if __name__ == '__main__':\n", " cluster_config_str = os.environ.get('CLUSTER_SPEC')\n", @@ -576,7 +602,7 @@ " proc_scheduler = launch('dask-scheduler --dashboard --dashboard-address 8888 --port {} &'.format(chief_port))\n", " print('Done the dask scheduler.', flush=True)\n", "\n", - " client = Client(chief_address)\n", + " client = Client(chief_address, timeout=1200)\n", " print('Waiting the scheduler to be connected.', flush=True)\n", " client.wait_for_workers(1)\n", "\n", @@ -587,7 +613,7 @@ " wait(X)\n", " wait(y)\n", " dtrain = DaskDMatrix(client, X, y)\n", - " \n", + "\n", " output = xgb.dask.train(client, XGB_PARAMS, dtrain, num_boost_round=100, evals=[(dtrain, 'train')])\n", " print(\"Output: {}\".format(output), flush=True)\n", " print(\"Saving file to: {}\".format(MODEL_FILE), flush=True)\n", @@ -600,6 +626,8 @@ " blob.upload_from_filename(MODEL_FILE)\n", " print(\"Saved file to: {}/{}\".format(MODEL_DIR, MODEL_FILE), flush=True)\n", "\n", + " # Waiting 10 mins to connect the Dask dashboard\n", + " time.sleep(60 * 10)\n", " client.shutdown()\n", "\n", " else:\n", @@ -607,7 +635,10 @@ " client = Client(chief_address, timeout=1200)\n", " print('client: {}.'.format(client), flush=True)\n", " launch('dask-worker {}'.format(chief_address))\n", - " print('Done with the dask worker.', flush=True)\n" + " print('Done with the dask worker.', flush=True)\n", + "\n", + " # Waiting 10 mins to connect the Dask dashboard\n", + " time.sleep(60 * 10)\n" ] }, { @@ -616,7 +647,8 @@ "id": "MxsT4Vaos2W5" }, "source": [ - "### Write the docker file" + "### Write the docker file\n", + "The docker file is used to build the custom training container and passed to the Vertex Training." ] }, { @@ -631,14 +663,20 @@ "FROM us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-9:latest\n", "WORKDIR /root\n", "\n", + "# Update the keyring in order to run apt-get update.\n", + "RUN rm -rf /usr/share/keyrings/cloud.google.gpg\n", + "RUN rm -rf /etc/apt/sources.list.d/google-cloud-sdk.list\n", + "RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -\n", + "RUN echo \"deb https://packages.cloud.google.com/apt cloud-sdk main\" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list\n", + "\n", "RUN apt-get update\n", "RUN apt-get install -y telnet netcat iputils-ping net-tools\n", - "RUN python3.8 -m pip install dask==2022.7.1 distributed==2022.7.1 bokeh==2.1.1 dask-cuda --upgrade\n", - "RUN python3.8 -m pip install 'xgboost>=1.4.2' 'dask-ml[complete]==2022.5.27' #'dask[complete]==2022.7,1' --upgrade\n", + "RUN python3.8 -m pip install 'xgboost>=1.4.2' 'dask-ml[complete]==2022.5.27' 'dask[complete]==2022.7.1' --upgrade\n", + "RUN python3.8 -m pip install dask==2022.7.1 distributed==2022.7.1 bokeh==2.4.3 dask-cuda==22.8.0 --upgrade\n", "RUN python3.8 -m pip install gcsfs --upgrade\n", "\n", "\n", - "## Make sure gsutil will use the default service account\n", + "# Make sure gsutil will use the default service account\n", "RUN echo '[GoogleCompute]\\nservice_account = default' > /etc/boto.cfg\n", "\n", "# Copies the trainer code\n", @@ -713,10 +751,10 @@ }, "outputs": [], "source": [ - "DEPLOY_IMAGE = (\n", + "TRAIN_IMAGE = (\n", " f\"{REGION}-docker.pkg.dev/\" + PROJECT_ID + f\"/{PRIVATE_REPO}\" + \"/dask_support\"\n", ")\n", - "print(\"Deployment:\", DEPLOY_IMAGE)" + "print(\"Deployment:\", TRAIN_IMAGE)" ] }, { @@ -765,8 +803,8 @@ "outputs": [], "source": [ "if not IS_COLAB:\n", - " ! docker build -t $DEPLOY_IMAGE -f Dockerfile .\n", - " ! docker push $DEPLOY_IMAGE" + " ! docker build -t $TRAIN_IMAGE -f Dockerfile .\n", + " ! docker push $TRAIN_IMAGE" ] }, { @@ -789,7 +827,7 @@ "outputs": [], "source": [ "if IS_COLAB:\n", - " ! gcloud builds submit --timeout=1800s --region={REGION} --tag $DEPLOY_IMAGE" + " ! gcloud builds submit --timeout=1800s --region={REGION} --tag $TRAIN_IMAGE" ] }, { @@ -837,11 +875,12 @@ "replica_count = 2\n", "machine_type = \"n1-standard-4\"\n", "display_name = \"test_display_name\"\n", + "DEPLOY_IMAGE = \"us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest\"\n", "\n", "custom_container_training_job = aiplatform.CustomContainerTrainingJob(\n", " display_name=display_name,\n", - " model_serving_container_image_uri=\"us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest\",\n", - " container_uri=DEPLOY_IMAGE,\n", + " model_serving_container_image_uri=DEPLOY_IMAGE,\n", + " container_uri=TRAIN_IMAGE,\n", ")\n", "\n", "custom_container_training_job.run(\n", @@ -863,6 +902,157 @@ "print(f\"GCS Output URI Prefix: {gcs_output_uri_prefix}\")" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "tVktIbToRpmR" + }, + "source": [ + "### Access the Dask dashboard" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uVvxLj8GRsM6" + }, + "source": [ + "You can also create a training job with gcloud command. With gcloud command, you can specify the field enableWebAccess and enableDashboardAccess. enableWebAccess enables the interactive shell for the job and enableDashboardAccess allows the dask dashboard to be accessed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pkOQtyDsRwsS" + }, + "outputs": [], + "source": [ + "%%bash -s \"$BUCKET_URI/output\" \"$TRAIN_IMAGE\"\n", + "\n", + "cat <config.yaml\n", + "enableDashboardAccess: true\n", + "enableWebAccess: true\n", + "# Creates two worker pool. The first worker pool is a chief and the second is\n", + "# a worker.\n", + "workerPoolSpecs:\n", + " - machineSpec:\n", + " machineType: n1-standard-8\n", + " replicaCount: 1\n", + " containerSpec:\n", + " imageUri: $2\n", + " - machineSpec:\n", + " machineType: n1-standard-8\n", + " replicaCount: 1\n", + " containerSpec:\n", + " imageUri: $2\n", + "baseOutputDirectory:\n", + " outputUriPrefix: $1\n", + "EOF\n", + "cat config.yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d5FLoTWzSNw7" + }, + "source": [ + "The following command creates a training job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1MPj-NnpSQ1U" + }, + "outputs": [], + "source": [ + "! gcloud ai custom-jobs create --region=us-central1 --config=config.yaml --display-name={display_name}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "onb40Ge0SVKh" + }, + "source": [ + "Once the job is created. You can use the output `gcloud ai custom-jobs describe` command to print the field webAccessUris. The interactive shell has the key with the format \"workerpool0-0\", while the dashboard uri has the key with the format \"workerpool0-0:\" + port number. Note: You have to access the links while the job is running." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FqFwDvWCSYFX" + }, + "source": [ + "#### Troubleshooting" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MjbPElukSiZt" + }, + "source": [ + "The [interactive shell](https://cloud.google.com/vertex-ai/docs/training/monitor-debug-interactive-shell) can be used to debugging the access of the dask dashboard. You can get the dashboard point by the following command." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z9eNOtYUTzJW" + }, + "outputs": [], + "source": [ + "# Note the following command should run inside the interactive shell.\n", + "# printenv | grep AIP_DASHBOARD_PORT" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2SCRLCkpUDNM" + }, + "source": [ + "Then you can check if there are dashboard monitoring the port." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fK74qU78ULPS" + }, + "outputs": [], + "source": [ + "# Note the following command should run inside the interactive shell.\n", + "# netstat -ntlp" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8ucKHMGFUUF4" + }, + "source": [ + "You can manually turn up the dashboard instance." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gJrjiePvUip0" + }, + "outputs": [], + "source": [ + "# Note the following command should run inside the interactive shell.\n", + "# dask-scheduler --dashboard-address :port_number" + ] + }, { "cell_type": "markdown", "metadata": { @@ -896,7 +1086,8 @@ "\n", "Otherwise, you can delete the individual resources you created in this tutorial:\n", "\n", - "- Cloud Storage Bucket" + "- Cloud Storage Bucket\n", + "- Cloud Vertex Training Job" ] }, { @@ -913,13 +1104,14 @@ "! gsutil rm -rf $gcs_output_uri_prefix\n", "\n", "if delete_bucket or os.getenv(\"IS_TESTING\"):\n", - " ! gsutil rm -r $BUCKET_URI" + " ! gsutil rm -r $BUCKET_URI\n", + "\n", + "custom_container_training_job.delete()" ] } ], "metadata": { "colab": { - "collapsed_sections": [], "name": "xgboost_data_parallel_training_on_cpu_using_dask.ipynb", "toc_visible": true }, diff --git a/notebooks/official/vizier/README.md b/notebooks/official/vizier/README.md index 794d65032..f7d6b84fc 100644 --- a/notebooks/official/vizier/README.md +++ b/notebooks/official/vizier/README.md @@ -1,6 +1,12 @@ [Optimizing multiple objectives with Vertex AI Vizier](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/vizier/gapic-vizier-multi-objective-optimization.ipynb) +``` Learn how to use `Vertex AI Vizier` to optimize a multi-objective study. + +``` + +   Learn more about [Vertex AI Vizier](https://cloud.google.com/vertex-ai/docs/vizier/overview). + diff --git a/notebooks/official/vizier/gapic-vizier-multi-objective-optimization.ipynb b/notebooks/official/vizier/gapic-vizier-multi-objective-optimization.ipynb index 2fc91dce8..95ddd5397 100644 --- a/notebooks/official/vizier/gapic-vizier-multi-objective-optimization.ipynb +++ b/notebooks/official/vizier/gapic-vizier-multi-objective-optimization.ipynb @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This tutorial demonstrates [Vertex AI Vizier](https://cloud.google.com/vertex-ai/docs/vizier/overview) multi-objective optimization. Multi-objective optimization is concerned with mathematical optimization problems involving more than one objective function to be optimized simultaneously" + "This tutorial demonstrates [Vertex AI Vizier](https://cloud.google.com/vertex-ai/docs/vizier/overview) multi-objective optimization. Multi-objective optimization is concerned with mathematical optimization problems involving more than one objective function to be optimized simultaneously.\n", + "\n", + "Learn more about [Vertex AI Vizier](https://cloud.google.com/vertex-ai/docs/vizier/overview)." ] }, { diff --git a/notebooks/official/workbench/README.md b/notebooks/official/workbench/README.md new file mode 100644 index 000000000..fea7e5b6b --- /dev/null +++ b/notebooks/official/workbench/README.md @@ -0,0 +1,298 @@ + +[Train a multi-class classification model for ads-targeting](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/ads_targetting/training-multi-class-classification-model-for-ads-targeting-usecase.ipynb) + +``` +Learn how to collect data from BigQuery, preprocess it, and train a multi-class classification model on an e-commerce dataset. + +The steps performed include: + +- Fetch the required data from BigQuery +- Preprocess the data +- Train a TensorFlow (>=2.4) classification model +- Evaluate the loss for the trained model +- Automate the notebook execution using the executor feature +- Save the model to a Cloud Storage path +- Clean up the created resources + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Taxi fare prediction using the Chicago Taxi Trips dataset](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/chicago_taxi_fare_prediction/chicago_taxi_fare_prediction.ipynb) + +``` +The goal of this notebook is to provide an overview on the latest Vertex AI features like **Explainable AI** and **BigQuery in Notebooks** by trying to solve a taxi fare prediction problem. + +The steps performed include: + +- Loading the dataset using "BigQuery in Notebooks". +- Performing exploratory data analysis on the dataset. +- Feature selection and preprocessing. +- Building a linear regression model using scikit-learn. +- Configuring the model for Vertex Explainable AI. +- Deploying the model to Vertex AI. +- Testing the deployed model. +- Clean up. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). + + +[Forecasting retail demand with Vertex AI and BigQuery ML](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/demand_forecasting/forecasting-retail-demand.ipynb) + +``` +Learn how to build ARIMA (Autoregressive integrated moving average) model from BigQuery ML on retail data + +The steps performed include: + +* Explore data +* Model with BigQuery and the ARIMA model +* Evaluate the model +* Evaluate the model results using BigQuery ML (on training data) +* Evalute the model results - MAE, MAPE, MSE, RMSE (on test data) +* Use the executor feature + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [BigQuery ML](https://cloud.google.com/bigquery-ml/docs/managing-models-vertex). + + +[Interactive exploratory analysis of BigQuery data in a notebook](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/exploratory_data_analysis/explore_data_in_bigquery_with_workbench.ipynb) + +``` +Learn about various ways to explore and gain insights from BigQuery data in a Jupyter notebook environment. + +The steps performed include: + +- Using Python & SQL to query public data in BigQuery +- Exploring the dataset using BigQuery INFORMATION_SCHEMA +- Creating interactive elements to help explore interesting parts of the data +- Doing some exploratory correlation and time series analysis +- Creating static and interactive outputs (data tables and plots) in the notebook +- Saving some outputs to Cloud Storage + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml). + + +[Build a fraud detection model on Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/fraud_detection/fraud-detection-model.ipynb) + +``` +This tutorial demonstrates data analysis and model-building using a synthetic financial dataset. + +The steps performed include: + +- Installation of required libraries +- Reading the dataset from a Cloud Storage bucket +- Performing exploratory analysis on the dataset +- Preprocessing the dataset +- Training a random forest model using scikit-learn +- Saving the model to a Cloud Storage bucket +- Creating a Vertex AI model resource and deploying to an endpoint +- Running the What-If Tool on test data +- Un-deploying the model and cleaning up the model resources + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Churn prediction for game developers using Google Analytics 4 and BigQuery ML](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/gaming_churn_prediction/churn_prediction_for_game_developers.ipynb) + +``` +Learn how to train, evaluate a propensity model in BigQuery ML. + +The steps performed include: + +* Explore an export of Google Analytics 4 data on BigQuery. +* Prepare the training data using demographic, behavioral data, and labels (churn/not-churn). +* Train an XGBoost model using BigQuery ML. +* Evaluate a model using BigQuery ML. +* Make predictions on which users will churn using BigQuery ML. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml). + + +[Inventory prediction on ecommerce data using Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/inventory-prediction/inventory_prediction.ipynb) + +``` +This tutorial shows you how to do exploratory data analysis, preprocess data, train model, evaluate model, deploy model, configure What-If Tool. + +The steps performed include: + +* Load the dataset from BigQuery using the "BigQuery in Notebooks" integration. +* Analyze the dataset. +* Preprocess the features in the dataset. +* Build a random forest classifier model that predicts whether a product will get sold in the next 60 days. +* Evaluate the model. +* Deploy the model using Vertex AI. +* Configure and test with the What-If Tool. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Predictive Maintenance using Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/predictive_maintainance/predictive_maintenance_usecase.ipynb) + +``` +Learn how to the executor feature of Vertex AI Workbench to automate a workflow to train and deploy a model. + +The steps performed are: + +- Loading the required dataset from a Cloud Storage bucket. +- Analyzing the fields present in the dataset. +- Selecting the required data for the predictive maintenance model. +- Training an XGBoost regression model for predicting the remaining useful life. +- Evaluating the model. +- Running the notebook end-to-end as a training job using Executor. +- Deploying the model on Vertex AI. +- Clean up. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training). + + +[Analysis of pricing optimization on CDM Pricing Data](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/pricing_optimization/pricing-optimization.ipynb) + +``` +The objective of this notebook is to build a pricing optimization model using BigQuery ML. + +The steps performed include: + +- Load the required dataset from a Cloud Storage bucket. +- Analyze the fields present in the dataset. +- Process the data to build a model. +- Build a BigQuery ML forecast model on the processed data. +- Get forecasted values from the BigQuery ML model. +- Interpret the forecasts to identify the best prices. +- Clean up. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml). + + +[Sentiment Analysis using AutoML Natural Language and Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/sentiment_analysis/Sentiment_Analysis.ipynb) + +``` +Learn how to train and deploy an AutoML sentiment analysis model, and make predictions. + +The steps performed are: + +- Loading the required data. +- Preprocessing the data. +- Selecting the required data for the model. +- Loading the dataset into Vertex AI managed datasets. +- Training a sentiment model using AutoML Text training. +- Evaluating the model. +- Deploying the model on Vertex AI. +- Getting predictions. +- Clean up. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [AutoML Text](https://cloud.google.com/vertex-ai/docs/tutorials/text-classification-automl/training). + + +[Digest and analyze data from BigQuery with Dataproc](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/spark/spark_bigquery.ipynb) + +``` +This notebook tutorial runs an Apache Spark job that fetches data from the BigQuery "GitHub Activity Data" dataset, queries the data, and then writes the results back to BigQuery. + +The steps performed are: + +- Setting up a Google Cloud project and Dataproc cluster. +- Configuring the spark-bigquery-connector. +- Ingesting data from BigQuery into a Spark DataFrame. +- Preprocessing ingested data. +- Querying the most frequently used programming language in monoglot repos. +- Querying the average size (MB) of code in each language stored in monoglot repos. +- Querying the languages files most frequently found together in polyglot repos. +- Writing the query results back into BigQuery. +- Deleting the resources created for this notebook tutorial. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Dataproc](https://cloud.google.com/vertex-ai/docs/pipelines/dataproc-component). + + +[SparkML with Dataproc and BigQuery](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/spark/spark_ml.ipynb) + +``` +This tutorial runs an Apache SparkML job that fetches data from the BigQuery dataset, performs exploratory data analysis, cleans the data, executes feature engineering, trains the model, evaluates the model, outputs results, and saves the model to a Cloud Storage bucket. + +The steps performed are: + +- Sets up a Google Cloud project and Dataproc cluster. +- Creates a Cloud Storage bucket and a BigQuery dataset. +- Configures the spark-bigquery-connector. +- Ingests BigQuery data into a Spark DataFrame. +- Performa Exploratory Data Analysis (EDA). +- Visualizes the data with samples. +- Cleans the data. +- Selects features. +- Trains the model. +- Outputs results. +- Saves the model to a Cloud Storage bucket. +- Deletes the resources created for the tutorial. + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Dataproc](https://cloud.google.com/vertex-ai/docs/pipelines/dataproc-component). + + +[Telecom subscriber churn prediction on Vertex AI](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/workbench/subscriber_churn_prediction/telecom-subscriber-churn-prediction.ipynb) + +``` +This tutorial shows you how to do exploratory data analysis, preprocess data, train, deploy and get predictions from a churn prediction model on a tabular churn dataset. + +The steps performed include: + +- Load data from a Cloud Storage path +- Perform exploratory data analysis (EDA) +- Preprocess the data +- Train a scikit-learn model +- Evaluate the scikit-learn model +- Save the model to a Cloud Storage path +- Create a model and an endpoint in Vertex AI +- Deploy the trained model to an endpoint +- Generate predictions and explanations on test data from the hosted model +- Undeploy the model resource + +``` + +   Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction). + +   Learn more about [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview). + diff --git a/notebooks/official/workbench/ads_targetting/training-multi-class-classification-model-for-ads-targeting-usecase.ipynb b/notebooks/official/workbench/ads_targetting/training-multi-class-classification-model-for-ads-targeting-usecase.ipynb index fc6646a78..3bba5740e 100644 --- a/notebooks/official/workbench/ads_targetting/training-multi-class-classification-model-for-ads-targeting-usecase.ipynb +++ b/notebooks/official/workbench/ads_targetting/training-multi-class-classification-model-for-ads-targeting-usecase.ipynb @@ -44,7 +44,7 @@ " \n", "
\n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -62,7 +62,9 @@ "\n", "This tutorial demonstrates how to build a machine learning model for an ads-targeting use case. Ads-targeting is an advertisement technique where chosen or tailor-made ads are shown to the customers based on their past behavior and preferences. Targeted ads are meant to reach specific customers based on demographics, psychographics, behavior, and other second-order activities that are learned usually through data collected from the customers.\n", "\n", - "*Note: If you are using [Vertex AI Workbench managed notebooks](https://cloud.google.com/vertex-ai/docs/workbench/managed/create-instance) instance use the `TensorFlow 2 (Local)` kernel. Some components of this notebook may not work in other notebook environments.*\n" + "*Note: If you are using [Vertex AI Workbench managed notebooks](https://cloud.google.com/vertex-ai/docs/workbench/managed/create-instance) instance use the `TensorFlow 2 (Local)` kernel. Some components of this notebook may not work in other notebook environments.*\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/workbench/chicago_taxi_fare_prediction/chicago_taxi_fare_prediction.ipynb b/notebooks/official/workbench/chicago_taxi_fare_prediction/chicago_taxi_fare_prediction.ipynb index d49d89426..69c8719d8 100644 --- a/notebooks/official/workbench/chicago_taxi_fare_prediction/chicago_taxi_fare_prediction.ipynb +++ b/notebooks/official/workbench/chicago_taxi_fare_prediction/chicago_taxi_fare_prediction.ipynb @@ -45,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -63,7 +63,9 @@ "\n", "This notebook demonstrates analysis, feature selection, model building, and deployment with Explainable AI configured on Vertex AI, using a subset of the Chicago Taxi Trips dataset for taxi-fare prediction.\n", "\n", - "*Note: This notebook is developed to run in a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the Python (Local) kernel. Some components of this notebook may not work in other notebook environments.*" + "*Note: This notebook is developed to run in a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the Python (Local) kernel. Some components of this notebook may not work in other notebook environments.*\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview)." ] }, { diff --git a/notebooks/official/workbench/demand_forecasting/forecasting-retail-demand.ipynb b/notebooks/official/workbench/demand_forecasting/forecasting-retail-demand.ipynb index 670ab5c97..aa9bad365 100644 --- a/notebooks/official/workbench/demand_forecasting/forecasting-retail-demand.ipynb +++ b/notebooks/official/workbench/demand_forecasting/forecasting-retail-demand.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -66,7 +66,9 @@ "\n", "#### ARIMA Modeling with BigQuery ML \n", "\n", - "The ARIMA model is designed to analyze historical data, spot patterns over time, and project them into the future--in other words, forecasting. The model is available inside BigQuery ML and enables users to create and execute machine learning models directly in BigQuery using SQL queries. Working with BigQuery ML is advantageous, as it already has access to the data, it can handle most of the modeling details automatically if desired, and will store both the model and any predictions also inside BigQuery. " + "The ARIMA model is designed to analyze historical data, spot patterns over time, and project them into the future--in other words, forecasting. The model is available inside BigQuery ML and enables users to create and execute machine learning models directly in BigQuery using SQL queries. Working with BigQuery ML is advantageous, as it already has access to the data, it can handle most of the modeling details automatically if desired, and will store both the model and any predictions also inside BigQuery. \n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [BigQuery ML](https://cloud.google.com/bigquery-ml/docs/managing-models-vertex)." ] }, { diff --git a/notebooks/official/workbench/exploratory_data_analysis/explore_data_in_bigquery_with_workbench.ipynb b/notebooks/official/workbench/exploratory_data_analysis/explore_data_in_bigquery_with_workbench.ipynb index a8d5336f9..33db57486 100644 --- a/notebooks/official/workbench/exploratory_data_analysis/explore_data_in_bigquery_with_workbench.ipynb +++ b/notebooks/official/workbench/exploratory_data_analysis/explore_data_in_bigquery_with_workbench.ipynb @@ -56,13 +56,22 @@ { "cell_type": "markdown", "metadata": { - "id": "tvgnzT1CKxrO" + "id": "780762457db0" }, "source": [ "## Overview\n", "\n", "This notebook is written for data analysts and data scientists who have data in BigQuery and want to perform exploratory data analysis to gather insights from that data in an interactive environment.\n", "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ "### Objective\n", "\n", "In this tutorial, you learn about various ways to explore and gain insights from BigQuery data in a Jupyter notebook environment.\n", @@ -80,12 +89,26 @@ "- Creating interactive elements to help explore interesting parts of the data\n", "- Doing some exploratory correlation and time series analysis\n", "- Creating static and interactive outputs (data tables and plots) in the notebook\n", - "- Saving some outputs to Cloud Storage\n", - "\n", + "- Saving some outputs to Cloud Storage" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "65aa4ba05101" + }, + "source": [ "### Dataset\n", "\n", - "The dataset, [available publicly on BigQuery](https://console.cloud.google.com/bigquery?project=bigquery-public-data&d=ga4_obfuscated_sample_ecommerce&p=bigquery-public-data&page=dataset), comes from obfuscated [Google Analytics 4 (GA4) data](https://developers.google.com/analytics/bigquery/web-ecommerce-demo-dataset) from the Google Merchandise Store.\n", - "\n", + "The dataset, [available publicly on BigQuery](https://console.cloud.google.com/bigquery?project=bigquery-public-data&d=ga4_obfuscated_sample_ecommerce&p=bigquery-public-data&page=dataset), comes from obfuscated [Google Analytics 4 (GA4) data](https://developers.google.com/analytics/bigquery/web-ecommerce-demo-dataset) from the Google Merchandise Store." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fd44a67414d5" + }, + "source": [ "### Costs \n", "\n", "This tutorial uses billable components of Google Cloud:\n", diff --git a/notebooks/official/workbench/fraud_detection/fraud-detection-model.ipynb b/notebooks/official/workbench/fraud_detection/fraud-detection-model.ipynb index 13eec8458..1a65a98f4 100644 --- a/notebooks/official/workbench/fraud_detection/fraud-detection-model.ipynb +++ b/notebooks/official/workbench/fraud_detection/fraud-detection-model.ipynb @@ -45,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This tutorial shows you how to build, deploy, and analyze predictions from a simple [random forest](https://en.wikipedia.org/wiki/Random_forest) model using tools like scikit-learn, Vertex AI, and the [What-IF Tool (WIT)](https://cloud.google.com/ai-platform/prediction/docs/using-what-if-tool) on a synthetic fraud transaction dataset to solve a financial fraud detection problem.\n" + "This tutorial shows you how to build, deploy, and analyze predictions from a simple [random forest](https://en.wikipedia.org/wiki/Random_forest) model using tools like scikit-learn, Vertex AI, and the [What-IF Tool (WIT)](https://cloud.google.com/ai-platform/prediction/docs/using-what-if-tool) on a synthetic fraud transaction dataset to solve a financial fraud detection problem.\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/workbench/gaming_churn_prediction/churn_prediction_for_game_developers.ipynb b/notebooks/official/workbench/gaming_churn_prediction/churn_prediction_for_game_developers.ipynb index 9915fef3b..093ca6163 100644 --- a/notebooks/official/workbench/gaming_churn_prediction/churn_prediction_for_game_developers.ipynb +++ b/notebooks/official/workbench/gaming_churn_prediction/churn_prediction_for_game_developers.ipynb @@ -29,23 +29,23 @@ "id": "py8EYwG_91Pn" }, "source": [ - "# Churn prediction for game developers using Google Analytics 4 (GA4) and BigQuery ML\n", + "# Churn prediction for game developers using Google Analytics 4 and BigQuery ML\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "
\n", - " \n", + "\n", " \"Colab Run in Colab\n", " \n", " \n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -90,7 +90,9 @@ "## Overview\n", "\n", "\n", - "This tutorial shows you how to train, evaluate a propensity model in BigQuery ML to predict user retention on a mobile game, based on app measurement data from Google Analytics 4.\n" + "This tutorial shows you how to train, evaluate a propensity model in BigQuery ML to predict user retention on a mobile game, based on app measurement data from Google Analytics 4.\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml)." ] }, { @@ -99,7 +101,7 @@ "id": "sH0CZGku0BPp" }, "source": [ - "## Objective\n", + "### Objective\n", "\n", "\n", "In this tutorial, you learn how to train, evaluate a propensity model in BigQuery ML.\n", @@ -122,7 +124,7 @@ "id": "b07fc9940120" }, "source": [ - "## Dataset\n", + "### Dataset\n", "\n", "\n", "This notebook uses [this public BigQuery dataset](https://console.cloud.google.com/bigquery?p=firebase-public-project&d=analytics_153293282&t=events_20181003&page=table), which contains raw event data from a real mobile gaming app called Flood It! ([Android app](https://play.google.com/store/apps/details?id=com.labpixies.flood), [iOS app](https://itunes.apple.com/us/app/flood-it!/id476943146?mt=8)). The [data schema](https://support.google.com/analytics/answer/7029846) originates from Google Analytics for Firebase, but is the same schema as [Google Analytics 4](https://support.google.com/analytics/answer/9358801); the techniques in this notebook can be applied to either Google Analytics for Firebase or Google Analytics 4 data.\n", @@ -138,7 +140,7 @@ "id": "589ffe790261" }, "source": [ - "## Costs\n", + "### Costs\n", "\n", "\n", "This tutorial uses the following billable components of Google Cloud:\n", diff --git a/notebooks/official/workbench/inventory-prediction/inventory_prediction.ipynb b/notebooks/official/workbench/inventory-prediction/inventory_prediction.ipynb index 81bf80be8..c30a27267 100644 --- a/notebooks/official/workbench/inventory-prediction/inventory_prediction.ipynb +++ b/notebooks/official/workbench/inventory-prediction/inventory_prediction.ipynb @@ -46,7 +46,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -62,7 +62,9 @@ "source": [ "## Overview\n", "\n", - "This notebook explores how to build a machine learning model for inventory prediction on an ecommerce dataset. This notebook includes steps for deploying the model on Vertex AI using the Vertex AI SDK and analyzing the deployed model using the What-If Tool. Learn more about [What-If Tool](https://pair-code.github.io/what-if-tool/)." + "This notebook explores how to build a machine learning model for inventory prediction on an ecommerce dataset. This notebook includes steps for deploying the model on Vertex AI using the Vertex AI SDK and analyzing the deployed model using the What-If Tool. Learn more about [What-If Tool](https://pair-code.github.io/what-if-tool/).\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { diff --git a/notebooks/official/workbench/predictive_maintainance/predictive_maintenance_usecase.ipynb b/notebooks/official/workbench/predictive_maintainance/predictive_maintenance_usecase.ipynb index 1ee2182f6..bcf78561a 100644 --- a/notebooks/official/workbench/predictive_maintainance/predictive_maintenance_usecase.ipynb +++ b/notebooks/official/workbench/predictive_maintainance/predictive_maintenance_usecase.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -81,7 +81,9 @@ "\n", "In this notebook, you go through a predictive maintenance usecase on industrial data using machine learning techniques, deploy the machine learning model on Vertex AI, and automate the workflow using the executor feature of Vertex AI Workbench.\n", "\n", - "*Note: This notebook file is developed to run in a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the XGBoost (Local) kernel. Some components of this notebook may not work in other notebook environments.*" + "*Note: This notebook file is developed to run in a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the XGBoost (Local) kernel. Some components of this notebook may not work in other notebook environments.*\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Vertex AI Training](https://cloud.google.com/vertex-ai/docs/training/custom-training)." ] }, { @@ -93,7 +95,14 @@ "### Objective\n", "\n", "\n", - "The objectives of this notebook include:\n", + "In this tutorial, you learn how to the executor feature of Vertex AI Workbench to automate a workflow to train and deploy a model.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Training`\n", + "- `Vertex AI Model Evaluation`\n", + "\n", + "The steps performed are:\n", "\n", "- Loading the required dataset from a Cloud Storage bucket.\n", "- Analyzing the fields present in the dataset.\n", diff --git a/notebooks/official/workbench/pricing_optimization/pricing-optimization.ipynb b/notebooks/official/workbench/pricing_optimization/pricing-optimization.ipynb index 40769b7c7..4a00254e7 100644 --- a/notebooks/official/workbench/pricing_optimization/pricing-optimization.ipynb +++ b/notebooks/official/workbench/pricing_optimization/pricing-optimization.ipynb @@ -85,7 +85,9 @@ "\n", "This notebook demonstrates analysis of pricing optimization on [CDM Pricing Data](https://github.com/trifacta/trifacta-google-cloud/tree/main/design-pattern-pricing-optimization) and automating the workflow using Vertex AI Workbench managed notebooks.\n", "\n", - "*Note: This notebook file was developed to run in a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the Python (Local) kernel. Some components of this notebook may not work in other notebook environments.*" + "*Note: This notebook file was developed to run in a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the Python (Local) kernel. Some components of this notebook may not work in other notebook environments.*\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and Learn more about [BigQuery ML](https://cloud.google.com/vertex-ai/docs/beginner/bqml)." ] }, { @@ -94,7 +96,7 @@ "id": "71f69cfdff2b" }, "source": [ - "## Objective\n", + "### Objective\n", "\n", "\n", "The objective of this notebook is to build a pricing optimization model using BigQuery ML. The following steps have been followed: \n", @@ -122,7 +124,7 @@ "id": "d20422a5c34d" }, "source": [ - "## Dataset\n", + "### Dataset\n", "\n", "\n", "The dataset used in this notebook is a part of the [CDM Pricing dataset](https://github.com/trifacta/trifacta-google-cloud/blob/main/design-pattern-pricing-optimization/CDM_Pricing_large_table.csv), which consists of product sales information on specified dates." @@ -134,7 +136,7 @@ "id": "c05bcd30859d" }, "source": [ - "## Costs\n", + "### Costs\n", "\n", "\n", "This tutorial uses the following billable components of Google Cloud:\n", diff --git a/notebooks/official/workbench/sentiment_analysis/Sentiment_Analysis.ipynb b/notebooks/official/workbench/sentiment_analysis/Sentiment_Analysis.ipynb index 8c0d6742b..fb52b2556 100644 --- a/notebooks/official/workbench/sentiment_analysis/Sentiment_Analysis.ipynb +++ b/notebooks/official/workbench/sentiment_analysis/Sentiment_Analysis.ipynb @@ -45,7 +45,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -85,7 +85,9 @@ "\n", "This notebook demonstrates how to perform sentiment analysis on a Stanford movie reviews dataset using AutoML Natural Language and how to deploy the sentiment analysis model on Vertex AI to get predictions. \n", "\n", - "*Note: This notebook file was developed to run on a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the Python (Local) kernel. Some components of this notebook may not work in other notebook environments.*" + "*Note: This notebook file was developed to run on a [Vertex AI Workbench managed notebooks](https://console.cloud.google.com/vertex-ai/workbench/list/managed) instance using the Python (Local) kernel. Some components of this notebook may not work in other notebook environments.*\n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [AutoML Text](https://cloud.google.com/vertex-ai/docs/tutorials/text-classification-automl/training)." ] }, { @@ -97,13 +99,22 @@ "### Objective\n", "\n", "\n", - "The objectives of this notebook include:\n", + "In this tutorial, you learn how to train and deploy an AutoML sentiment analysis model, and make predictions.\n", + "\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Vertex AI Dataset`\n", + "- `Vertex AI Model`\n", + "- `AutoML training`\n", + "- `Vertex AI Prediction`\n", + "\n", + "The steps performed are:\n", "\n", "- Loading the required data. \n", "- Preprocessing the data.\n", "- Selecting the required data for the model.\n", "- Loading the dataset into Vertex AI managed datasets.\n", - "- Training a sentiment model using AutoML Natural Language.\n", + "- Training a sentiment model using AutoML Text training.\n", "- Evaluating the model.\n", "- Deploying the model on Vertex AI.\n", "- Getting predictions.\n", diff --git a/notebooks/official/workbench/spark/spark_bigquery.ipynb b/notebooks/official/workbench/spark/spark_bigquery.ipynb index 5c85668e0..bb4283457 100644 --- a/notebooks/official/workbench/spark/spark_bigquery.ipynb +++ b/notebooks/official/workbench/spark/spark_bigquery.ipynb @@ -29,16 +29,23 @@ "id": "JAPoU8Sm5E6e" }, "source": [ + "# Digest and analyze data from BigQuery with Dataproc\n", + "\n", "\n", "\n", " \n", " \n", + "
\n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -56,18 +63,9 @@ "\n", "This notebook tutorial shows you how to ingest, analyze, and write data to BigQuery using Apache Spark with [Dataproc](https://cloud.google.com/dataproc). The notebook code analyzes GitHub Activity Data to explore metrics related to programming languages used in GitHub repositories.\n", "\n", - "To run this notebook, click the link `Open in Vertex AI Workbench` above." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tvgnzT1CKxrO" - }, - "source": [ - "### Dataset\n", + "To run this notebook, click the link `Open in Vertex AI Workbench` above.\n", "\n", - "The [GitHub Activity Data](https://console.cloud.google.com/marketplace/product/github/github-repos) dataset is available in [BigQuery Public Datasets](https://cloud.google.com/bigquery/public-data), and provides free querying of up to 1TB of data each month. It contains data on two different types of repositories: \"polyglot\" repos, which support multiple programming language files, and \"monoglot\" repos, which support one programming language." + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Dataproc](https://cloud.google.com/vertex-ai/docs/pipelines/dataproc-component)." ] }, { @@ -80,7 +78,12 @@ "\n", "This notebook tutorial runs an Apache Spark job that fetches data from the BigQuery \"GitHub Activity Data\" dataset, queries the data, and then writes the results back to BigQuery. This job sequence represents a common data engineering use case: ingesting, transforming, and querying data, and then writing the output to a database. It also demonstrates how to submit an Apache Spark job to Dataproc.\n", "\n", - "This notebook tutorial performs the following steps:\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Dataproc`\n", + "- `BigQuery`\n", + "\n", + "The steps performed are:\n", "\n", "- Setting up a Google Cloud project and Dataproc cluster.\n", "- Configuring the spark-bigquery-connector.\n", @@ -93,6 +96,17 @@ "- Deleting the resources created for this notebook tutorial." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "### Dataset\n", + "\n", + "The [GitHub Activity Data](https://console.cloud.google.com/marketplace/product/github/github-repos) dataset is available in [BigQuery Public Datasets](https://cloud.google.com/bigquery/public-data), and provides free querying of up to 1TB of data each month. It contains data on two different types of repositories: \"polyglot\" repos, which support multiple programming language files, and \"monoglot\" repos, which support one programming language." + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/workbench/spark/spark_ml.ipynb b/notebooks/official/workbench/spark/spark_ml.ipynb index ddfab5176..375cf3d92 100644 --- a/notebooks/official/workbench/spark/spark_ml.ipynb +++ b/notebooks/official/workbench/spark/spark_ml.ipynb @@ -29,16 +29,23 @@ "id": "XoEqT2Y4DJmf" }, "source": [ + "# SparkML with Dataproc and BigQuery\n", + "\n", "\n", "\n", " \n", " \n", + " \n", "
\n", - " \n", + "\n", " \"GitHub\n", " View on GitHub\n", " \n", " \n", - " \n", + " \n", + " \"Colab Run in Colab\n", + " \n", + " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -54,18 +61,9 @@ "source": [ "## Overview\n", "\n", - "This notebook tutorial runs Apache SparkML jobs with Dataproc and BigQuery to exemplify a common machine learning pipeline use case: data ingestion and cleaning, feature engineering, modeling, and model evaluation." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "XoEqT2Y4DJmf" - }, - "source": [ - "### Dataset\n", + "This notebook tutorial runs Apache SparkML jobs with Dataproc and BigQuery to exemplify a common machine learning pipeline use case: data ingestion and cleaning, feature engineering, modeling, and model evaluation.\n", "\n", - "The [NYC TLC (Taxi and Limousine Commission) Trips](https://console.cloud.google.com/marketplace/product/city-of-new-york/nyc-tlc-trips) (New York taxi and limosine trips data) and [NYC Citi Bike Trips](https://console.cloud.google.com/marketplace/product/city-of-new-york/nyc-citi-bike) (NYC public bicycle sharing system data) datasets are available in [BigQuery Public Datasets](https://cloud.google.com/bigquery/public-data). BigQuery provides free querying of up to 1TB of data each month." + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Dataproc](https://cloud.google.com/vertex-ai/docs/pipelines/dataproc-component)." ] }, { @@ -78,7 +76,13 @@ "\n", "This tutorial runs an Apache SparkML job that fetches data from the BigQuery dataset, performs exploratory data analysis, cleans the data, executes feature engineering, trains the model, evaluates the model, outputs results, and saves the model to a Cloud Storage bucket.\n", "\n", - "This notebook tutorial performs the following steps:\n", + "This tutorial uses the following Google Cloud ML services:\n", + "\n", + "- `Dataproc`\n", + "- `BigQuery`\n", + "- `Vertex AI Training`\n", + "\n", + "The steps performed are:\n", "\n", "- Sets up a Google Cloud project and Dataproc cluster.\n", "- Creates a Cloud Storage bucket and a BigQuery dataset.\n", @@ -94,6 +98,17 @@ "- Deletes the resources created for the tutorial." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "XoEqT2Y4DJmf" + }, + "source": [ + "### Dataset\n", + "\n", + "The [NYC TLC (Taxi and Limousine Commission) Trips](https://console.cloud.google.com/marketplace/product/city-of-new-york/nyc-tlc-trips) (New York taxi and limosine trips data) and [NYC Citi Bike Trips](https://console.cloud.google.com/marketplace/product/city-of-new-york/nyc-citi-bike) (NYC public bicycle sharing system data) datasets are available in [BigQuery Public Datasets](https://cloud.google.com/bigquery/public-data). BigQuery provides free querying of up to 1TB of data each month." + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/notebooks/official/workbench/subscriber_churn_prediction/telecom-subscriber-churn-prediction.ipynb b/notebooks/official/workbench/subscriber_churn_prediction/telecom-subscriber-churn-prediction.ipynb index b16e32c8d..7f71fc0cd 100644 --- a/notebooks/official/workbench/subscriber_churn_prediction/telecom-subscriber-churn-prediction.ipynb +++ b/notebooks/official/workbench/subscriber_churn_prediction/telecom-subscriber-churn-prediction.ipynb @@ -44,7 +44,7 @@ " \n", " \n", - " \n", + "\n", " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", @@ -61,7 +61,9 @@ "source": [ "## Overview\n", "\n", - "This example demonstrates building a subscriber churn prediction model on a [telecom customer churn dataset](https://www.kaggle.com/c/customer-churn-prediction-2020/overview). The generated churn model is further deployed to Vertex AI Endpoints and explanations are generated using the Explainable AI feature of Vertex AI. " + "This example demonstrates building a subscriber churn prediction model on a [telecom customer churn dataset](https://www.kaggle.com/c/customer-churn-prediction-2020/overview). The generated churn model is further deployed to Vertex AI Endpoints and explanations are generated using the Explainable AI feature of Vertex AI. \n", + "\n", + "Learn more about [Vertex AI Workbench](https://cloud.google.com/vertex-ai/docs/workbench/introduction) and [Vertex Explainable AI](https://cloud.google.com/vertex-ai/docs/explainable-ai/overview)." ] }, { @@ -79,7 +81,6 @@ "- `Vertex AI Model` resource\n", "- `Vertex AI Endpoint` resource\n", "- `Vertex Explainable AI`\n", - "- Google Cloud Storage\n", "\n", "The steps performed include:\n", "\n",