From 48bfc31c4e9b630b6f2073933dd5b1d543261e9f Mon Sep 17 00:00:00 2001 From: Ning Gao Date: Tue, 8 Oct 2019 18:37:06 +0800 Subject: [PATCH 1/5] add ai_platform test --- .../{ai-platform => ai_platform}/README.md | 0 .../ai_platform.ipynb} | 64 ++++++++++++++---- .../images/chicago_crime_pipeline.png | Bin .../images/chicago_crime_predictions.png | Bin .../local/Chicago Crime Research.ipynb | 0 .../training/.gitignore | 0 .../training/.python-version | 0 .../training/requirements.txt | 0 .../training/setup.py | 0 .../training/trainer/model.py | 0 .../training/trainer/task.py | 0 .../training/trainer/util.py | 0 test/sample-test/configs/ai_platform.yaml | 18 +++++ test/sample_test.yaml | 1 + 14 files changed, 70 insertions(+), 13 deletions(-) rename samples/core/{ai-platform => ai_platform}/README.md (100%) rename samples/core/{ai-platform/Chicago Crime Pipeline.ipynb => ai_platform/ai_platform.ipynb} (72%) rename samples/core/{ai-platform => ai_platform}/images/chicago_crime_pipeline.png (100%) rename samples/core/{ai-platform => ai_platform}/images/chicago_crime_predictions.png (100%) rename samples/core/{ai-platform => ai_platform}/local/Chicago Crime Research.ipynb (100%) rename samples/core/{ai-platform => ai_platform}/training/.gitignore (100%) rename samples/core/{ai-platform => ai_platform}/training/.python-version (100%) rename samples/core/{ai-platform => ai_platform}/training/requirements.txt (100%) rename samples/core/{ai-platform => ai_platform}/training/setup.py (100%) rename samples/core/{ai-platform => ai_platform}/training/trainer/model.py (100%) rename samples/core/{ai-platform => ai_platform}/training/trainer/task.py (100%) rename samples/core/{ai-platform => ai_platform}/training/trainer/util.py (100%) create mode 100644 test/sample-test/configs/ai_platform.yaml diff --git a/samples/core/ai-platform/README.md b/samples/core/ai_platform/README.md similarity index 100% rename from samples/core/ai-platform/README.md rename to samples/core/ai_platform/README.md diff --git a/samples/core/ai-platform/Chicago Crime Pipeline.ipynb b/samples/core/ai_platform/ai_platform.ipynb similarity index 72% rename from samples/core/ai-platform/Chicago Crime Pipeline.ipynb rename to samples/core/ai_platform/ai_platform.ipynb index 9ad290b653a..2855ad4d298 100644 --- a/samples/core/ai-platform/Chicago Crime Pipeline.ipynb +++ b/samples/core/ai_platform/ai_platform.ipynb @@ -70,29 +70,47 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 1, + "metadata": { + "tags": [ + "parameters" + ] + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'json' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mREGION\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'us-central1'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mRUNTIME_VERSION\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'1.13'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mPACKAGE_URIS\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mjson\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdumps\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'gs://chicago-crime/chicago_crime_trainer-0.0.tar.gz'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0mTRAINER_OUTPUT_GCS_PATH\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/train/output/'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0mDATA_GCS_PATH\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/reports.csv'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'json' is not defined" + ] + } + ], "source": [ "# Required Parameters\n", - "PROJECT_ID = ''\n", - "GCS_WORKING_DIR = 'gs://' # No ending slash\n", + "project_id = ''\n", + "output = 'gs://' # No ending slash\n", "\n", "# Optional Parameters\n", "REGION = 'us-central1'\n", "RUNTIME_VERSION = '1.13'\n", "PACKAGE_URIS=json.dumps(['gs://chicago-crime/chicago_crime_trainer-0.0.tar.gz'])\n", - "TRAINER_OUTPUT_GCS_PATH = GCS_WORKING_DIR + '/train/output/' + str(int(time.time())) + '/'\n", - "DATA_GCS_PATH = GCS_WORKING_DIR + '/reports.csv'\n", + "TRAINER_OUTPUT_GCS_PATH = output + '/train/output/' + str(int(time.time())) + '/'\n", + "DATA_GCS_PATH = output + '/reports.csv'\n", "PYTHON_MODULE = 'trainer.task'\n", "TRAINER_ARGS = json.dumps([\n", " '--data-file-url', DATA_GCS_PATH,\n", - " '--job-dir', GCS_WORKING_DIR\n", + " '--job-dir', output\n", "])\n", "EXPERIMENT_NAME = 'Chicago Crime Prediction'\n", "PIPELINE_NAME = 'Chicago Crime Prediction'\n", "PIPELINE_FILENAME_PREFIX = 'chicago'\n", - "PIPELINE_DESCRIPTION = ''" + "PIPELINE_DESCRIPTION = ''\n", + "MODEL_NAME = 'chicago_pipeline_model' + str(int(time.time()))\n", + "MODEL_VERSION = 'chicago_pipeline_model_v1' + str(int(time.time()))" ] }, { @@ -191,6 +209,7 @@ " project_id,\n", " model_uri,\n", " model_id,\n", + " model_version,\n", " runtime_version):\n", " \n", " return mlengine_deploy_op(\n", @@ -222,8 +241,8 @@ "\n", "def pipeline(\n", " data_gcs_path=DATA_GCS_PATH,\n", - " gcs_working_dir=GCS_WORKING_DIR,\n", - " project_id=PROJECT_ID,\n", + " gcs_working_dir=output,\n", + " project_id=project_id,\n", " python_module=PYTHON_MODULE,\n", " region=REGION,\n", " runtime_version=RUNTIME_VERSION,\n", @@ -245,7 +264,8 @@ " \n", " deploy_task = deploy(project_id,\n", " train_task.outputs['job_dir'],\n", - " train_task.outputs['job_id'],\n", + " MODEL_NAME,\n", + " MODEL_VERSION,\n", " runtime_version) \n", " return True\n", "\n", @@ -268,9 +288,27 @@ "source": [ "kfp.Client().create_run_from_pipeline_func(pipeline, arguments={}, experiment_name=EXPERIMENT_NAME)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Clean models" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!gcloud ai-platform versions delete $MODEL_VERSION --model $MODEL_NAME\n", + "!gcloud ai-platform models delete $MODEL_NAME" + ] } ], "metadata": { + "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -286,7 +324,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.6.4" }, "pycharm": { "stem_cell": { diff --git a/samples/core/ai-platform/images/chicago_crime_pipeline.png b/samples/core/ai_platform/images/chicago_crime_pipeline.png similarity index 100% rename from samples/core/ai-platform/images/chicago_crime_pipeline.png rename to samples/core/ai_platform/images/chicago_crime_pipeline.png diff --git a/samples/core/ai-platform/images/chicago_crime_predictions.png b/samples/core/ai_platform/images/chicago_crime_predictions.png similarity index 100% rename from samples/core/ai-platform/images/chicago_crime_predictions.png rename to samples/core/ai_platform/images/chicago_crime_predictions.png diff --git a/samples/core/ai-platform/local/Chicago Crime Research.ipynb b/samples/core/ai_platform/local/Chicago Crime Research.ipynb similarity index 100% rename from samples/core/ai-platform/local/Chicago Crime Research.ipynb rename to samples/core/ai_platform/local/Chicago Crime Research.ipynb diff --git a/samples/core/ai-platform/training/.gitignore b/samples/core/ai_platform/training/.gitignore similarity index 100% rename from samples/core/ai-platform/training/.gitignore rename to samples/core/ai_platform/training/.gitignore diff --git a/samples/core/ai-platform/training/.python-version b/samples/core/ai_platform/training/.python-version similarity index 100% rename from samples/core/ai-platform/training/.python-version rename to samples/core/ai_platform/training/.python-version diff --git a/samples/core/ai-platform/training/requirements.txt b/samples/core/ai_platform/training/requirements.txt similarity index 100% rename from samples/core/ai-platform/training/requirements.txt rename to samples/core/ai_platform/training/requirements.txt diff --git a/samples/core/ai-platform/training/setup.py b/samples/core/ai_platform/training/setup.py similarity index 100% rename from samples/core/ai-platform/training/setup.py rename to samples/core/ai_platform/training/setup.py diff --git a/samples/core/ai-platform/training/trainer/model.py b/samples/core/ai_platform/training/trainer/model.py similarity index 100% rename from samples/core/ai-platform/training/trainer/model.py rename to samples/core/ai_platform/training/trainer/model.py diff --git a/samples/core/ai-platform/training/trainer/task.py b/samples/core/ai_platform/training/trainer/task.py similarity index 100% rename from samples/core/ai-platform/training/trainer/task.py rename to samples/core/ai_platform/training/trainer/task.py diff --git a/samples/core/ai-platform/training/trainer/util.py b/samples/core/ai_platform/training/trainer/util.py similarity index 100% rename from samples/core/ai-platform/training/trainer/util.py rename to samples/core/ai_platform/training/trainer/util.py diff --git a/test/sample-test/configs/ai_platform.yaml b/test/sample-test/configs/ai_platform.yaml new file mode 100644 index 00000000000..b5147ce44ca --- /dev/null +++ b/test/sample-test/configs/ai_platform.yaml @@ -0,0 +1,18 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# 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. + +test_name: ai_platform +arguments: + output: + PROJECT: ml-pipeline-test diff --git a/test/sample_test.yaml b/test/sample_test.yaml index a70385125d9..ab1f56e0858 100644 --- a/test/sample_test.yaml +++ b/test/sample_test.yaml @@ -86,6 +86,7 @@ spec: - loop_parameter - loop_static - resource_ops + - ai_platform # Build and push image - name: build-image-by-dockerfile inputs: From 0e4f952a6d583df59b7a3ea9606ddbb21718ead0 Mon Sep 17 00:00:00 2001 From: Ning Gao Date: Tue, 8 Oct 2019 20:12:18 +0800 Subject: [PATCH 2/5] add experiment_name param --- samples/core/ai_platform/ai_platform.ipynb | 4 ++-- test/sample-test/configs/ai_platform.yaml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/samples/core/ai_platform/ai_platform.ipynb b/samples/core/ai_platform/ai_platform.ipynb index 2855ad4d298..61c7940c627 100644 --- a/samples/core/ai_platform/ai_platform.ipynb +++ b/samples/core/ai_platform/ai_platform.ipynb @@ -93,6 +93,7 @@ "# Required Parameters\n", "project_id = ''\n", "output = 'gs://' # No ending slash\n", + "experiment_name = 'Chicago Crime Prediction'\n", "\n", "# Optional Parameters\n", "REGION = 'us-central1'\n", @@ -105,7 +106,6 @@ " '--data-file-url', DATA_GCS_PATH,\n", " '--job-dir', output\n", "])\n", - "EXPERIMENT_NAME = 'Chicago Crime Prediction'\n", "PIPELINE_NAME = 'Chicago Crime Prediction'\n", "PIPELINE_FILENAME_PREFIX = 'chicago'\n", "PIPELINE_DESCRIPTION = ''\n", @@ -286,7 +286,7 @@ "metadata": {}, "outputs": [], "source": [ - "kfp.Client().create_run_from_pipeline_func(pipeline, arguments={}, experiment_name=EXPERIMENT_NAME)" + "kfp.Client().create_run_from_pipeline_func(pipeline, arguments={}, experiment_name=experiment_name)" ] }, { diff --git a/test/sample-test/configs/ai_platform.yaml b/test/sample-test/configs/ai_platform.yaml index b5147ce44ca..6cfa16e57b1 100644 --- a/test/sample-test/configs/ai_platform.yaml +++ b/test/sample-test/configs/ai_platform.yaml @@ -15,4 +15,5 @@ test_name: ai_platform arguments: output: - PROJECT: ml-pipeline-test + project_id: ml-pipeline-test + experiment_name: ai_platform-test From c0ff312fe2521cb0dd37d5024ae341556eda436c Mon Sep 17 00:00:00 2001 From: Ning Gao Date: Wed, 9 Oct 2019 10:39:22 +0800 Subject: [PATCH 3/5] rename config file --- .../configs/{ai_platform.yaml => ai_platform.config.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/sample-test/configs/{ai_platform.yaml => ai_platform.config.yaml} (100%) diff --git a/test/sample-test/configs/ai_platform.yaml b/test/sample-test/configs/ai_platform.config.yaml similarity index 100% rename from test/sample-test/configs/ai_platform.yaml rename to test/sample-test/configs/ai_platform.config.yaml From a821c9b7b42a050fbf63e37de8a228087ef85c90 Mon Sep 17 00:00:00 2001 From: Ning Gao Date: Wed, 9 Oct 2019 14:28:08 +0800 Subject: [PATCH 4/5] separate the papermill parameter cell from the rest parameters --- samples/core/ai_platform/ai_platform.ipynb | 27 +++++++++------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/samples/core/ai_platform/ai_platform.ipynb b/samples/core/ai_platform/ai_platform.ipynb index 61c7940c627..66885c91c3c 100644 --- a/samples/core/ai_platform/ai_platform.ipynb +++ b/samples/core/ai_platform/ai_platform.ipynb @@ -70,31 +70,26 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "tags": [ "parameters" ] }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'json' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mREGION\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'us-central1'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mRUNTIME_VERSION\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'1.13'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mPACKAGE_URIS\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mjson\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdumps\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'gs://chicago-crime/chicago_crime_trainer-0.0.tar.gz'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0mTRAINER_OUTPUT_GCS_PATH\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/train/output/'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0mDATA_GCS_PATH\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/reports.csv'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'json' is not defined" - ] - } - ], + "outputs": [], "source": [ "# Required Parameters\n", "project_id = ''\n", "output = 'gs://' # No ending slash\n", - "experiment_name = 'Chicago Crime Prediction'\n", - "\n", + "experiment_name = 'Chicago Crime Prediction'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "# Optional Parameters\n", "REGION = 'us-central1'\n", "RUNTIME_VERSION = '1.13'\n", From 9bf5f5d2986dd0d8947e5eff52fa94f8f34130ac Mon Sep 17 00:00:00 2001 From: Ning Gao Date: Wed, 9 Oct 2019 16:36:41 +0800 Subject: [PATCH 5/5] fix the test config --- samples/core/ai_platform/ai_platform.ipynb | 4 ++-- test/sample-test/configs/ai_platform.config.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/core/ai_platform/ai_platform.ipynb b/samples/core/ai_platform/ai_platform.ipynb index 66885c91c3c..6fde5b9d19f 100644 --- a/samples/core/ai_platform/ai_platform.ipynb +++ b/samples/core/ai_platform/ai_platform.ipynb @@ -297,8 +297,8 @@ "metadata": {}, "outputs": [], "source": [ - "!gcloud ai-platform versions delete $MODEL_VERSION --model $MODEL_NAME\n", - "!gcloud ai-platform models delete $MODEL_NAME" + "!gcloud ml-engine versions delete $MODEL_VERSION --model $MODEL_NAME\n", + "!gcloud ml-engine models delete $MODEL_NAME" ] } ], diff --git a/test/sample-test/configs/ai_platform.config.yaml b/test/sample-test/configs/ai_platform.config.yaml index 6cfa16e57b1..13be31e190a 100644 --- a/test/sample-test/configs/ai_platform.config.yaml +++ b/test/sample-test/configs/ai_platform.config.yaml @@ -13,7 +13,7 @@ # limitations under the License. test_name: ai_platform -arguments: +notebook_params: output: project_id: ml-pipeline-test experiment_name: ai_platform-test