From 261e9da0bcc0dc1b911738253e6acd529981920f Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 12:34:35 -0800 Subject: [PATCH 01/59] added toggle for evaluation step --- .env.example | 5 ++++- diabetes_regression/evaluate/evaluate_model.py | 2 +- .../diabetes_regression_build_train_pipeline.py | 15 +++++++++++---- ml_service/util/env_variables.py | 6 ++++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.env.example b/.env.example index d85e4586..26b5df76 100644 --- a/.env.example +++ b/.env.example @@ -39,4 +39,7 @@ DATAFILE_NAME = 'diabetes.csv' DB_CLUSTER_ID = '' # Optional. Container Image name for image creation -IMAGE_NAME = 'mltrained' \ No newline at end of file +IMAGE_NAME = 'mltrained' + +# Run Evaluation Step in AML pipeline +RUN_EVALUATION = 'false' \ No newline at end of file diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 2218137f..43331564 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -99,7 +99,7 @@ build_uri = builduri_base + build_id run.tag("BuildUri", value=build_uri) -# Paramaterize the matrices on which the models should be compared +# Parameterize the metrices on which the models should be compared # Add golden data set on which all the model performance can be evaluated try: firstRegistration = False diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 0b86eb50..938e82ac 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -108,10 +108,17 @@ def main(): allow_reuse=False, ) print("Step Register created") - - evaluate_step.run_after(train_step) - register_step.run_after(evaluate_step) - steps = [train_step, evaluate_step, register_step] + + # Check run_evaluation flag to include or exclude evaluation step. + if ((e.run_evaluation).lower() == 'true'): + print("Include evaluation step before register step.") + evaluate_step.run_after(train_step) + register_step.run_after(evaluate_step) + steps = [train_step, evaluate_step, register_step] + else: + print("Exclude evaluation step and directly run register step.") + register_step.run_after(train_step) + steps = [train_step, register_step] train_pipeline = Pipeline(workspace=aml_workspace, steps=steps) train_pipeline._set_experiment_name diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index ed3be221..287dda40 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -44,6 +44,7 @@ def __init__(self): self._datastore_name = os.environ.get("DATASTORE_NAME") self._datafile_name = os.environ.get("DATAFILE_NAME") self._dataset_name = os.environ.get("DATASET_NAME") + self._run_evaluation = os.environ.get("RUN_EVALUATION") @property def workspace_name(self): @@ -160,3 +161,8 @@ def datafile_name(self): @property def dataset_name(self): return self._dataset_name + + @property + def run_evaluation(self): + return self._run_evaluation + From ba26bc1352ac077aacc2c7b73d61e9ec40d92459 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 15:23:11 -0800 Subject: [PATCH 02/59] added param to varriables list --- .pipelines/diabetes_regression-variables.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index 0186de32..e95866c3 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -35,6 +35,8 @@ variables: value: diabetes_regression - name: IMAGE_NAME value: 'diabetestrained' +- name: RUN_EVALUATION + value: 'false' # Optional. Used by a training pipeline with R on Databricks - name: DB_CLUSTER_ID value: '' @@ -42,3 +44,5 @@ variables: value: score.py - name: DATASET_NAME value: diabetes_ds +- name: RUN_EVALUATION + value: 'false' From c1bee1c6bfc3fe8843e2e90552995290f6c90611 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 15:24:27 -0800 Subject: [PATCH 03/59] corrected to matrices --- diabetes_regression/evaluate/evaluate_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 43331564..7ba4bc3e 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -99,7 +99,7 @@ build_uri = builduri_base + build_id run.tag("BuildUri", value=build_uri) -# Parameterize the metrices on which the models should be compared +# Parameterize the matrices on which the models should be compared # Add golden data set on which all the model performance can be evaluated try: firstRegistration = False From b6732dab5a43e6fb79d5dc0534d08e4a4f6a0d2a Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 15:28:58 -0800 Subject: [PATCH 04/59] resolved linting --- .../pipelines/diabetes_regression_build_train_pipeline.py | 1 - ml_service/util/env_variables.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 938e82ac..b572801a 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -108,7 +108,6 @@ def main(): allow_reuse=False, ) print("Step Register created") - # Check run_evaluation flag to include or exclude evaluation step. if ((e.run_evaluation).lower() == 'true'): print("Include evaluation step before register step.") diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index 287dda40..e6bd5506 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -164,5 +164,4 @@ def dataset_name(self): @property def run_evaluation(self): - return self._run_evaluation - + return self._run_evaluation \ No newline at end of file From 88b99ae2ecafa80862e5de301fbb70a7a86fb644 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 15:45:01 -0800 Subject: [PATCH 05/59] removed duplicate --- .pipelines/diabetes_regression-variables.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index e95866c3..9ec39f48 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -43,6 +43,4 @@ variables: - name: SCORE_SCRIPT value: score.py - name: DATASET_NAME - value: diabetes_ds -- name: RUN_EVALUATION - value: 'false' + value: diabetes_ds \ No newline at end of file From a3f02f99f4190c9a6103110017e7c6429e490dd5 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 15:50:36 -0800 Subject: [PATCH 06/59] resolved linting --- ml_service/util/env_variables.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index e6bd5506..f09ac290 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -164,4 +164,5 @@ def dataset_name(self): @property def run_evaluation(self): - return self._run_evaluation \ No newline at end of file + return self._run_evaluation + \ No newline at end of file From 39207d6f6e324e279025dccc7a67930a144f26e7 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 15:53:12 -0800 Subject: [PATCH 07/59] resolved linting --- ml_service/util/env_variables.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index f09ac290..c31c9d17 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -165,4 +165,3 @@ def dataset_name(self): @property def run_evaluation(self): return self._run_evaluation - \ No newline at end of file From 1701c0d3e1b6dd29785c842d2581577083c0ce0d Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 18:46:26 -0800 Subject: [PATCH 08/59] added overide switch to cancellation --- .pipelines/diabetes_regression-variables.yml | 88 ++++++++++--------- .../evaluate/evaluate_model.py | 6 +- ml_service/util/env_variables.py | 5 ++ 3 files changed, 54 insertions(+), 45 deletions(-) diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index 9ec39f48..829898f6 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -1,46 +1,48 @@ variables: # Azure ML Workspace Variables -- name: EXPERIMENT_NAME - value: mlopspython - # AML Compute Cluster Config -- name: AML_COMPUTE_CLUSTER_CPU_SKU - value: STANDARD_DS2_V2 -- name: AML_COMPUTE_CLUSTER_NAME - value: train-cluster -- name: AML_CLUSTER_MIN_NODES - value: 0 -- name: AML_CLUSTER_MAX_NODES - value: 4 -- name: AML_CLUSTER_PRIORITY - value: lowpriority - # Training Config -- name: BUILD_TRAIN_SCRIPT - value: diabetes_regression_build_train_pipeline.py -- name: TRAIN_SCRIPT_PATH - value: training/train.py -- name: MODEL_NAME - value: sklearn_regression_model.pkl -- name: MODEL_VERSION - value: '1' - # AML Pipeline Config -- name: TRAINING_PIPELINE_NAME - value: 'diabetes-Training-Pipeline' -- name: MODEL_PATH - value: '' -- name: EVALUATE_SCRIPT_PATH - value: evaluate/evaluate_model.py -- name: REGISTER_SCRIPT_PATH - value: register/register_model.py -- name: SOURCES_DIR_TRAIN - value: diabetes_regression -- name: IMAGE_NAME - value: 'diabetestrained' -- name: RUN_EVALUATION - value: 'false' + - name: EXPERIMENT_NAME + value: mlopspython + # AML Compute Cluster Config + - name: AML_COMPUTE_CLUSTER_CPU_SKU + value: STANDARD_DS2_V2 + - name: AML_COMPUTE_CLUSTER_NAME + value: train-cluster + - name: AML_CLUSTER_MIN_NODES + value: 0 + - name: AML_CLUSTER_MAX_NODES + value: 4 + - name: AML_CLUSTER_PRIORITY + value: lowpriority + # Training Config + - name: BUILD_TRAIN_SCRIPT + value: diabetes_regression_build_train_pipeline.py + - name: TRAIN_SCRIPT_PATH + value: training/train.py + - name: MODEL_NAME + value: sklearn_regression_model.pkl + - name: MODEL_VERSION + value: "1" + # AML Pipeline Config + - name: TRAINING_PIPELINE_NAME + value: "diabetes-Training-Pipeline" + - name: MODEL_PATH + value: "" + - name: EVALUATE_SCRIPT_PATH + value: evaluate/evaluate_model.py + - name: REGISTER_SCRIPT_PATH + value: register/register_model.py + - name: SOURCES_DIR_TRAIN + value: diabetes_regression + - name: IMAGE_NAME + value: "diabetestrained" + - name: RUN_EVALUATION + value: "false" + - name: OVERRIDE_CANCELLATION + value: "false" # Optional. Used by a training pipeline with R on Databricks -- name: DB_CLUSTER_ID - value: '' -- name: SCORE_SCRIPT - value: score.py -- name: DATASET_NAME - value: diabetes_ds \ No newline at end of file + - name: DB_CLUSTER_ID + value: "" + - name: SCORE_SCRIPT + value: score.py + - name: DATASET_NAME + value: diabetes_ds diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 7ba4bc3e..da3a9d9b 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -124,7 +124,8 @@ if (production_model_mse is None or new_model_mse is None): print("Unable to find", metric_eval, "metrics, " "exiting evaluation") - run.parent.cancel() + if((e.override_cancellation).lower() == 'false'): + run.parent.cancel() else: print( "Current Production model mse: {}, " @@ -139,7 +140,8 @@ else: print("New trained model metric is less than or equal to " "production model so skipping model registration.") - run.parent.cancel() + if((e.override_cancellation).lower() == 'false'): + run.parent.cancel() else: print("This is the first model, " "thus it should be registered") diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index c31c9d17..a3798c6d 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -45,6 +45,7 @@ def __init__(self): self._datafile_name = os.environ.get("DATAFILE_NAME") self._dataset_name = os.environ.get("DATASET_NAME") self._run_evaluation = os.environ.get("RUN_EVALUATION") + self._override_cancellation = os.environ.get("OVERRIDE_CANCELLATION") @property def workspace_name(self): @@ -165,3 +166,7 @@ def dataset_name(self): @property def run_evaluation(self): return self._run_evaluation + + @property + def override_cancellation(self): + return self._override_cancellation From ef95fa96349bd0c3bbb4fdbd60e62b5c795c08a6 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Mon, 27 Jan 2020 18:58:25 -0800 Subject: [PATCH 09/59] added override cancellation flag --- .env.example | 5 ++++- diabetes_regression/evaluate/evaluate_model.py | 6 +++--- .../pipelines/diabetes_regression_build_train_pipeline.py | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 26b5df76..0502f237 100644 --- a/.env.example +++ b/.env.example @@ -42,4 +42,7 @@ DB_CLUSTER_ID = '' IMAGE_NAME = 'mltrained' # Run Evaluation Step in AML pipeline -RUN_EVALUATION = 'false' \ No newline at end of file +RUN_EVALUATION = 'false' + +# Set this flag to true to override cancellation in evaluation step +OVERRIDE_CANCELLATION = 'false' \ No newline at end of file diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index da3a9d9b..183d5249 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -98,7 +98,7 @@ if (builduri_base is not None): build_uri = builduri_base + build_id run.tag("BuildUri", value=build_uri) - +override_cancellation = args.override_cancellation # Parameterize the matrices on which the models should be compared # Add golden data set on which all the model performance can be evaluated try: @@ -124,7 +124,7 @@ if (production_model_mse is None or new_model_mse is None): print("Unable to find", metric_eval, "metrics, " "exiting evaluation") - if((e.override_cancellation).lower() == 'false'): + if((override_cancellation).lower() == 'false'): run.parent.cancel() else: print( @@ -140,7 +140,7 @@ else: print("New trained model metric is less than or equal to " "production model so skipping model registration.") - if((e.override_cancellation).lower() == 'false'): + if((override_cancellation).lower() == 'false'): run.parent.cancel() else: print("This is the first model, " diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index b572801a..f713c5a8 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -89,6 +89,7 @@ def main(): arguments=[ "--build_id", build_id_param, "--model_name", model_name_param, + "--override_cancellation", e.override_cancellation, ], runconfig=run_config, allow_reuse=False, From 43d08243efddb59033b9f2ee47b0b693b908afc0 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 11:46:00 -0800 Subject: [PATCH 10/59] reversed the condition on runevaluation flag --- .../diabetes_regression_build_train_pipeline.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index f713c5a8..86e50fd3 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -110,15 +110,15 @@ def main(): ) print("Step Register created") # Check run_evaluation flag to include or exclude evaluation step. - if ((e.run_evaluation).lower() == 'true'): + if ((e.run_evaluation).lower() == 'false'): + print("Exclude evaluation step and directly run register step.") + register_step.run_after(train_step) + steps = [train_step, register_step] + else: print("Include evaluation step before register step.") evaluate_step.run_after(train_step) register_step.run_after(evaluate_step) steps = [train_step, evaluate_step, register_step] - else: - print("Exclude evaluation step and directly run register step.") - register_step.run_after(train_step) - steps = [train_step, register_step] train_pipeline = Pipeline(workspace=aml_workspace, steps=steps) train_pipeline._set_experiment_name From 45a94b0912befd683d63706a6a3fd24513ff2f1c Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 11:46:52 -0800 Subject: [PATCH 11/59] renamed variable --- .pipelines/diabetes_regression-variables.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index 829898f6..be2d63c9 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -35,7 +35,7 @@ variables: value: diabetes_regression - name: IMAGE_NAME value: "diabetestrained" - - name: RUN_EVALUATION + - name: RUN_EVALUATION__REMOVE value: "false" - name: OVERRIDE_CANCELLATION value: "false" From 3821a42639f465840f4c7cb2e4d8f02c85ce5b5b Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 11:51:33 -0800 Subject: [PATCH 12/59] reversed he coonditon on override run --- diabetes_regression/evaluate/evaluate_model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 183d5249..5d118913 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -124,7 +124,7 @@ if (production_model_mse is None or new_model_mse is None): print("Unable to find", metric_eval, "metrics, " "exiting evaluation") - if((override_cancellation).lower() == 'false'): + if((override_cancellation).lower() != 'true'): run.parent.cancel() else: print( @@ -140,7 +140,7 @@ else: print("New trained model metric is less than or equal to " "production model so skipping model registration.") - if((override_cancellation).lower() == 'false'): + if((override_cancellation).lower() != 'true'): run.parent.cancel() else: print("This is the first model, " From 9652e00c14a32bfbc3d687ce838cb4dc6f2bf17e Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 11:52:24 -0800 Subject: [PATCH 13/59] renamed variable for test --- .pipelines/diabetes_regression-variables.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index be2d63c9..5eb88448 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -37,7 +37,7 @@ variables: value: "diabetestrained" - name: RUN_EVALUATION__REMOVE value: "false" - - name: OVERRIDE_CANCELLATION + - name: OVERRIDE_CANCELLATION_REMOVE value: "false" # Optional. Used by a training pipeline with R on Databricks - name: DB_CLUSTER_ID From 21739c7b9d31deb9129ba3d103052667a71a0ce8 Mon Sep 17 00:00:00 2001 From: David Tesar Date: Tue, 28 Jan 2020 12:04:23 -0800 Subject: [PATCH 14/59] Update proper build badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e622ba75..c0416cff 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ description: "Code which demonstrates how to set up and operationalize an MLOps # MLOps with Azure ML -[![Build Status](https://aidemos.visualstudio.com/MLOps/_apis/build/status/microsoft.MLOpsPython-CI?branchName=master)](https://aidemos.visualstudio.com/MLOps/_build/latest?definitionId=127&branchName=master) +[![Build Status](https://aidemos.visualstudio.com/MLOps/_apis/build/status/microsoft.MLOpsPython?branchName=master)](https://aidemos.visualstudio.com/MLOps/_build/latest?definitionId=151&branchName=master) MLOps will help you to understand how to build the Continuous Integration and Continuous Delivery pipeline for a ML/AI project. We will be using the Azure DevOps Project for build and release/deployment pipelines along with Azure ML services for model retraining pipeline, model management and operationalization. From f46947f90913586b1b7701698ce503ceae68503e Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 12:12:45 -0800 Subject: [PATCH 15/59] added default value to env vars --- diabetes_regression/evaluate/evaluate_model.py | 4 ++-- .../diabetes_regression_build_train_pipeline.py | 10 +++++----- ml_service/util/env_variables.py | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 5d118913..183d5249 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -124,7 +124,7 @@ if (production_model_mse is None or new_model_mse is None): print("Unable to find", metric_eval, "metrics, " "exiting evaluation") - if((override_cancellation).lower() != 'true'): + if((override_cancellation).lower() == 'false'): run.parent.cancel() else: print( @@ -140,7 +140,7 @@ else: print("New trained model metric is less than or equal to " "production model so skipping model registration.") - if((override_cancellation).lower() != 'true'): + if((override_cancellation).lower() == 'false'): run.parent.cancel() else: print("This is the first model, " diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 86e50fd3..f713c5a8 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -110,15 +110,15 @@ def main(): ) print("Step Register created") # Check run_evaluation flag to include or exclude evaluation step. - if ((e.run_evaluation).lower() == 'false'): - print("Exclude evaluation step and directly run register step.") - register_step.run_after(train_step) - steps = [train_step, register_step] - else: + if ((e.run_evaluation).lower() == 'true'): print("Include evaluation step before register step.") evaluate_step.run_after(train_step) register_step.run_after(evaluate_step) steps = [train_step, evaluate_step, register_step] + else: + print("Exclude evaluation step and directly run register step.") + register_step.run_after(train_step) + steps = [train_step, register_step] train_pipeline = Pipeline(workspace=aml_workspace, steps=steps) train_pipeline._set_experiment_name diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index a3798c6d..35fafdc1 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -44,8 +44,9 @@ def __init__(self): self._datastore_name = os.environ.get("DATASTORE_NAME") self._datafile_name = os.environ.get("DATAFILE_NAME") self._dataset_name = os.environ.get("DATASET_NAME") - self._run_evaluation = os.environ.get("RUN_EVALUATION") - self._override_cancellation = os.environ.get("OVERRIDE_CANCELLATION") + self._run_evaluation = os.environ.get("RUN_EVALUATION", "true") + self._override_cancellation = os.environ.get( + "OVERRIDE_CANCELLATION", "false") @property def workspace_name(self): From 9235f402ffa8bd109fc4a90f7d1c5d6fa868aad6 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 13:06:49 -0800 Subject: [PATCH 16/59] defined parameter --- diabetes_regression/evaluate/evaluate_model.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 183d5249..9f9b463b 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -83,6 +83,12 @@ help="Name of the Model", default="sklearn_regression_model.pkl", ) +parser.add_argument( + "--override_cancellation", + type=str, + help="Set this to true to override run cancellation", + default="false", +) args = parser.parse_args() if (args.build_id is not None): From b63c4890e44c613aeb1142da5f69e2c99372c376 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 14:03:39 -0800 Subject: [PATCH 17/59] added variable --- .pipelines/diabetes_regression-variables.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index 5eb88448..dc57e033 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -35,9 +35,9 @@ variables: value: diabetes_regression - name: IMAGE_NAME value: "diabetestrained" - - name: RUN_EVALUATION__REMOVE - value: "false" - - name: OVERRIDE_CANCELLATION_REMOVE + - name: RUN_EVALUATION + value: "true" + - name: OVERRIDE_CANCELLATION value: "false" # Optional. Used by a training pipeline with R on Databricks - name: DB_CLUSTER_ID From 8aa386500ad97f4f048bb6d54617e4ed76d28b8a Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 14:45:58 -0800 Subject: [PATCH 18/59] corrected comment --- .env.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 0502f237..4b7add67 100644 --- a/.env.example +++ b/.env.example @@ -44,5 +44,5 @@ IMAGE_NAME = 'mltrained' # Run Evaluation Step in AML pipeline RUN_EVALUATION = 'false' -# Set this flag to true to override cancellation in evaluation step -OVERRIDE_CANCELLATION = 'false' \ No newline at end of file +# Set this flag to true to override cancellation in the evaluation step +OVERRIDE_CANCELLATION = 'false' From e6c2bde734b505259255973cb5b3c5847ca2cb57 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Tue, 28 Jan 2020 15:20:44 -0800 Subject: [PATCH 19/59] renamed flags --- .env.example | 4 ++-- .pipelines/diabetes_regression-variables.yml | 11 ++++++----- diabetes_regression/evaluate/evaluate_model.py | 10 +++++----- .../diabetes_regression_build_train_pipeline.py | 2 +- ml_service/util/env_variables.py | 8 ++++---- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.env.example b/.env.example index 4b7add67..17ec1561 100644 --- a/.env.example +++ b/.env.example @@ -44,5 +44,5 @@ IMAGE_NAME = 'mltrained' # Run Evaluation Step in AML pipeline RUN_EVALUATION = 'false' -# Set this flag to true to override cancellation in the evaluation step -OVERRIDE_CANCELLATION = 'false' +# Set this flag to false from evaluation step to cancel pipeline run +ALLOW_RUN_CANCEL = 'true' diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index dc57e033..76605e02 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -35,14 +35,15 @@ variables: value: diabetes_regression - name: IMAGE_NAME value: "diabetestrained" - - name: RUN_EVALUATION - value: "true" - - name: OVERRIDE_CANCELLATION - value: "false" - # Optional. Used by a training pipeline with R on Databricks + # Optional. Used by a training pipeline with R on Databricks - name: DB_CLUSTER_ID value: "" - name: SCORE_SCRIPT value: score.py - name: DATASET_NAME value: diabetes_ds + # You can set this variables at pipeline run. Check default values in ml_service\util\env_variables.py + # - name: RUN_EVALUATION + # value: "true" + # - name: ALLOW_RUN_CANCEL + # value: "true" diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 9f9b463b..1726e534 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -84,10 +84,10 @@ default="sklearn_regression_model.pkl", ) parser.add_argument( - "--override_cancellation", + "--allow_run_cancel", type=str, - help="Set this to true to override run cancellation", - default="false", + help="Set this to false to avoid evaluation step from cancelling run", + default="true", ) args = parser.parse_args() @@ -130,7 +130,7 @@ if (production_model_mse is None or new_model_mse is None): print("Unable to find", metric_eval, "metrics, " "exiting evaluation") - if((override_cancellation).lower() == 'false'): + if((allow_run_cancel).lower() == 'true'): run.parent.cancel() else: print( @@ -146,7 +146,7 @@ else: print("New trained model metric is less than or equal to " "production model so skipping model registration.") - if((override_cancellation).lower() == 'false'): + if((allow_run_cancel).lower() == 'true'): run.parent.cancel() else: print("This is the first model, " diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index f713c5a8..0e963d96 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -89,7 +89,7 @@ def main(): arguments=[ "--build_id", build_id_param, "--model_name", model_name_param, - "--override_cancellation", e.override_cancellation, + "--allow_run_cancel", e.allow_run_cancel, ], runconfig=run_config, allow_reuse=False, diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index 35fafdc1..c3f30e72 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -45,8 +45,8 @@ def __init__(self): self._datafile_name = os.environ.get("DATAFILE_NAME") self._dataset_name = os.environ.get("DATASET_NAME") self._run_evaluation = os.environ.get("RUN_EVALUATION", "true") - self._override_cancellation = os.environ.get( - "OVERRIDE_CANCELLATION", "false") + self._allow_run_cancel = os.environ.get( + "ALLOW_RUN_CANCEL", "true") @property def workspace_name(self): @@ -169,5 +169,5 @@ def run_evaluation(self): return self._run_evaluation @property - def override_cancellation(self): - return self._override_cancellation + def allow_run_cancel(self): + return self._allow_run_cancel From 119fa1c97f173e9d2fe581608c15f3fbef6c011a Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Wed, 29 Jan 2020 15:46:17 -0800 Subject: [PATCH 20/59] added util script --- diabetes_regression/scoring/inference_config.yml | 3 ++- ml_service/util/get_environment.py | 0 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 ml_service/util/get_environment.py diff --git a/diabetes_regression/scoring/inference_config.yml b/diabetes_regression/scoring/inference_config.yml index 3f65cf33..efd3aeda 100644 --- a/diabetes_regression/scoring/inference_config.yml +++ b/diabetes_regression/scoring/inference_config.yml @@ -6,4 +6,5 @@ schemaFile: sourceDirectory: enableGpu: False baseImage: -baseImageRegistry: \ No newline at end of file +baseImageRegistry: +environment: diabetes_regression diff --git a/ml_service/util/get_environment.py b/ml_service/util/get_environment.py new file mode 100644 index 00000000..e69de29b From 68820030377643f6a7b2077c204943be973cce36 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Wed, 29 Jan 2020 16:36:35 -0800 Subject: [PATCH 21/59] intial script to get environment --- ml_service/util/get_environment.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ml_service/util/get_environment.py b/ml_service/util/get_environment.py index e69de29b..a4d1212f 100644 --- a/ml_service/util/get_environment.py +++ b/ml_service/util/get_environment.py @@ -0,0 +1,23 @@ +from azureml.core import Workspace, Environment + + +def get_environment( + workspace: Workspace, + environment_name: str, + create_new: bool +): + try: + restored_environment = Environment.get( + workspace=workspace, name=environment_name) + if create_new: + new_env = Environment.from_conda_specification(name=environment_name, + file_path="path-to-conda-specification-file") + restored_environment = new_env + restored_environment.register(workspace) + elif restored_environment is None: + raise Exception("Environment not found") + return restored_environment + except Exception as e: + print(e) + print('An error occurred while creating an environment.') + exit(1) From 870a8b449fa4dfb9fe9e1558804c129341793f3b Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Wed, 29 Jan 2020 16:38:10 -0800 Subject: [PATCH 22/59] moved conda file --- .../{scoring => }/conda_dependencies.yml | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) rename diabetes_regression/{scoring => }/conda_dependencies.yml (72%) diff --git a/diabetes_regression/scoring/conda_dependencies.yml b/diabetes_regression/conda_dependencies.yml similarity index 72% rename from diabetes_regression/scoring/conda_dependencies.yml rename to diabetes_regression/conda_dependencies.yml index c97a2722..0c5f7d0c 100644 --- a/diabetes_regression/scoring/conda_dependencies.yml +++ b/diabetes_regression/conda_dependencies.yml @@ -18,20 +18,20 @@ name: project_environment dependencies: # The python interpreter version. # Currently Azure ML Workbench only supports 3.5.2 and later. -- python=3.7.5 + - python=3.7.5 # Required by azureml-defaults, installed separately through Conda to # get a prebuilt version and not require build tools for the install. -- psutil=5.6 #latest + - psutil=5.6 #latest -- pip: - # Required packages for AzureML execution, history, and data preparation. - - azureml-model-management-sdk==1.0.1b6.post1 - - azureml-sdk==1.0.74 - - scipy==1.3.1 - - scikit-learn==0.22 - - pandas==0.25.3 - - numpy==1.17.3 - - joblib==0.14.0 - - gunicorn==19.9.0 - - flask==1.1.1 - - inference-schema[numpy-support] + - pip: + # Required packages for AzureML execution, history, and data preparation. + - azureml-model-management-sdk==1.0.1b6.post1 + - azureml-sdk==1.0.74 + - scipy==1.3.1 + - scikit-learn==0.22 + - pandas==0.25.3 + - numpy==1.17.3 + - joblib==0.14.0 + - gunicorn==19.9.0 + - flask==1.1.1 + - inference-schema[numpy-support] From 1a1ea46c668b80baa03aaf88368c5a44fd3c8276 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Wed, 29 Jan 2020 16:42:04 -0800 Subject: [PATCH 23/59] merged conda file --- diabetes_regression/conda_dependencies.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/diabetes_regression/conda_dependencies.yml b/diabetes_regression/conda_dependencies.yml index 0c5f7d0c..1d5ea183 100644 --- a/diabetes_regression/conda_dependencies.yml +++ b/diabetes_regression/conda_dependencies.yml @@ -35,3 +35,6 @@ dependencies: - gunicorn==19.9.0 - flask==1.1.1 - inference-schema[numpy-support] + - azure + - azure-storage-blob + - azureml-dataprep From a3d1c269b0db81f05fc0d1005010adc0ee9c437f Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Wed, 29 Jan 2020 17:34:02 -0800 Subject: [PATCH 24/59] added enviroment support --- ...iabetes_regression_build_train_pipeline.py | 20 ++++++++----------- ...t_environment.py => manage_environment.py} | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) rename ml_service/util/{get_environment.py => manage_environment.py} (96%) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 0e963d96..804ee29d 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -1,7 +1,7 @@ from azureml.pipeline.core.graph import PipelineParameter from azureml.pipeline.steps import PythonScriptStep from azureml.pipeline.core import Pipeline -from azureml.core import Workspace +from azureml.core import Workspace, Environment from azureml.core.runconfig import RunConfiguration, CondaDependencies from azureml.core import Dataset, Datastore import os @@ -9,6 +9,7 @@ sys.path.append(os.path.abspath("./ml_service/util")) # NOQA: E402 from attach_compute import get_compute from env_variables import Env +from manage_environment import get_environment def main(): @@ -31,17 +32,12 @@ def main(): print("aml_compute:") print(aml_compute) - run_config = RunConfiguration(conda_dependencies=CondaDependencies.create( - conda_packages=['numpy', 'pandas', - 'scikit-learn', 'tensorflow', 'keras'], - pip_packages=['azure', 'azureml-core', - 'azure-storage', - 'azure-storage-blob', - 'azureml-dataprep']) - ) - run_config.environment.docker.enabled = True - config_envvar = {} - if (e.collection_uri is not None and e.teamproject_name is not None): + run_config = RunConfiguration() + run_config.environment = get_environment( + aml_workspace, "diabetes_regression") + + config_envvar = {} + if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" config_envvar["BUILDURI_BASE"] = builduri_base diff --git a/ml_service/util/get_environment.py b/ml_service/util/manage_environment.py similarity index 96% rename from ml_service/util/get_environment.py rename to ml_service/util/manage_environment.py index a4d1212f..5787872e 100644 --- a/ml_service/util/get_environment.py +++ b/ml_service/util/manage_environment.py @@ -4,7 +4,7 @@ def get_environment( workspace: Workspace, environment_name: str, - create_new: bool + create_new: bool = False ): try: restored_environment = Environment.get( From ccdcd85c530850fddb7f668aff8d06c32a8297a4 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Wed, 29 Jan 2020 18:25:13 -0800 Subject: [PATCH 25/59] added path --- .../pipelines/diabetes_regression_build_train_pipeline.py | 4 ++-- ml_service/util/manage_environment.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 804ee29d..417f26b6 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -36,8 +36,8 @@ def main(): run_config.environment = get_environment( aml_workspace, "diabetes_regression") - config_envvar = {} - if (e.collection_uri is not None and e.teamproject_name is not None): + config_envvar = {} + if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" config_envvar["BUILDURI_BASE"] = builduri_base diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index 5787872e..8c161ccd 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -11,7 +11,7 @@ def get_environment( workspace=workspace, name=environment_name) if create_new: new_env = Environment.from_conda_specification(name=environment_name, - file_path="path-to-conda-specification-file") + file_path="/../diabetes_regression/conda_dependencies.yml") restored_environment = new_env restored_environment.register(workspace) elif restored_environment is None: From 06e874f0893eeb90fb653372168844f6c0ec0875 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Wed, 29 Jan 2020 18:25:51 -0800 Subject: [PATCH 26/59] added args --- .../pipelines/diabetes_regression_build_train_pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 417f26b6..af649a6e 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -34,7 +34,7 @@ def main(): run_config = RunConfiguration() run_config.environment = get_environment( - aml_workspace, "diabetes_regression") + aml_workspace, "diabetes_regression", True) config_envvar = {} if (e.collection_uri is not None and e.teamproject_name is not None): From 1a9d67db631f9b960c1c5024906a83be2ac80b8e Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 30 Jan 2020 11:51:42 -0800 Subject: [PATCH 27/59] changed path for local testing --- .../pipelines/diabetes_regression_build_train_pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index af649a6e..08441dd2 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -6,7 +6,7 @@ from azureml.core import Dataset, Datastore import os import sys -sys.path.append(os.path.abspath("./ml_service/util")) # NOQA: E402 +sys.path.append(os.path.abspath("./mlopspython/ml_service/util")) # NOQA: E402 from attach_compute import get_compute from env_variables import Env from manage_environment import get_environment From a8036a78a9b61997a6f8abec8ee9e6ea4b41bcfb Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 30 Jan 2020 17:12:45 -0800 Subject: [PATCH 28/59] script to manage aml env --- ml_service/util/manage_environment.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index 8c161ccd..2cbcf76c 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -7,16 +7,19 @@ def get_environment( create_new: bool = False ): try: - restored_environment = Environment.get( - workspace=workspace, name=environment_name) + if create_new: - new_env = Environment.from_conda_specification(name=environment_name, - file_path="/../diabetes_regression/conda_dependencies.yml") - restored_environment = new_env - restored_environment.register(workspace) - elif restored_environment is None: - raise Exception("Environment not found") - return restored_environment + new_env = Environment.from_conda_specification(name=environment_name, # NOQA: E501 + file_path="MLOpsPython\diabetes_regression\conda_dependencies.yml") # NOQA: E501 + restored_env = new_env # NOQA: E501 + restored_env.register(workspace) + else: + restored_env = Environment.get( + workspace=workspace, name=environment_name) + + print( + "packages", restored_env.python.conda_dependencies.serialize_to_string()) # NOQA: E501 + return restored_env except Exception as e: print(e) print('An error occurred while creating an environment.') From fb51eed76e79c23b891ced50e54cb29dcf6397ff Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 30 Jan 2020 17:43:28 -0800 Subject: [PATCH 29/59] updated scripts --- ...diabetes_regression_build_train_pipeline.py | 2 +- ml_service/util/manage_environment.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 08441dd2..06bbc56b 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -34,7 +34,7 @@ def main(): run_config = RunConfiguration() run_config.environment = get_environment( - aml_workspace, "diabetes_regression", True) + aml_workspace, "diabetes_regression", False) config_envvar = {} if (e.collection_uri is not None and e.teamproject_name is not None): diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index 2cbcf76c..c61153f6 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -7,19 +7,19 @@ def get_environment( create_new: bool = False ): try: + environments = Environment.list(workspace=workspace) + restored_environment = None + for env in environments: + if env == environment_name: + restored_environment = env - if create_new: + if restored_environment is None or create_new: new_env = Environment.from_conda_specification(name=environment_name, # NOQA: E501 file_path="MLOpsPython\diabetes_regression\conda_dependencies.yml") # NOQA: E501 - restored_env = new_env # NOQA: E501 - restored_env.register(workspace) - else: - restored_env = Environment.get( - workspace=workspace, name=environment_name) + restored_environment = new_env + restored_environment.register(workspace) - print( - "packages", restored_env.python.conda_dependencies.serialize_to_string()) # NOQA: E501 - return restored_env + return restored_environment except Exception as e: print(e) print('An error occurred while creating an environment.') From 6839505e8754577ac3c4f0bb7693dda402e16289 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 11:47:21 -0800 Subject: [PATCH 30/59] removed exception printing --- ml_service/util/manage_environment.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index c61153f6..adbc666c 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -22,5 +22,4 @@ def get_environment( return restored_environment except Exception as e: print(e) - print('An error occurred while creating an environment.') exit(1) From a09aa6a727dffc6f66daef5384b79fb96d020ad2 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 13:59:50 -0800 Subject: [PATCH 31/59] re usable env --- .env.example | 1 + .pipelines/diabetes_regression-variables.yml | 2 ++ .../pipelines/diabetes_regression_build_train_pipeline.py | 8 ++++---- .../diabetes_regression_build_train_pipeline_with_r.py | 8 ++++---- ml_service/util/env_variables.py | 5 +++++ ml_service/util/manage_environment.py | 8 +++++--- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index af11a5a3..e3726730 100644 --- a/.env.example +++ b/.env.example @@ -34,6 +34,7 @@ SOURCES_DIR_TRAIN = 'diabetes_regression' DATASET_NAME = 'diabetes_ds' DATASTORE_NAME = 'datablobstore' DATAFILE_NAME = 'diabetes.csv' +AML_ENV_NAME = 'diabetes_regression_sklearn' # Optional. Used by a training pipeline with R on Databricks DB_CLUSTER_ID = '' diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index 5d7bc7ef..d35c45a1 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -42,6 +42,8 @@ variables: value: score.py - name: DATASET_NAME value: diabetes_ds + - name: AML_ENV_NAME + value: "diabetes_regression_sklearn" # These are the default values set in ml_service\util\env_variables.py. Uncomment and override if desired. # - name: RUN_EVALUATION # value: "true" diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index b7d32f99..2893352b 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -6,6 +6,7 @@ from azureml.core import Dataset, Datastore from ml_service.util.attach_compute import get_compute from ml_service.util.env_variables import Env +from ml_service.util.manage_environment import get_environment def main(): @@ -28,14 +29,13 @@ def main(): print("aml_compute:") print(aml_compute) - # Create a reusable run configuration environment - # Read definition from diabetes_regression/azureml_environment.json - environment = Environment.load_from_directory(e.sources_directory_train) + # Create a reusable Azure ML environment + environment = get_environment( + aml_workspace, e.aml_env_name, create_new=False) # NOQA: E501 if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" environment.environment_variables["BUILDURI_BASE"] = builduri_base - environment.register(aml_workspace) run_config = RunConfiguration() run_config.environment = environment diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py index 96ddf2cf..cd433354 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py @@ -4,6 +4,7 @@ from azureml.core.runconfig import RunConfiguration from ml_service.util.attach_compute import get_compute from ml_service.util.env_variables import Env +from ml_service.util.manage_environment import get_environment def main(): @@ -26,16 +27,15 @@ def main(): print("aml_compute:") print(aml_compute) - # Create a reusable run configuration environment - # Read definition from diabetes_regression/azureml_environment.json + # Create a reusable Azure ML environment # Make sure to include `r-essentials' # in diabetes_regression/conda_dependencies.yml - environment = Environment.load_from_directory(e.sources_directory_train) + environment = get_environment( + aml_workspace, e.aml_env_name, create_new=False) # NOQA: E501 if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" environment.environment_variables["BUILDURI_BASE"] = builduri_base - environment.register(aml_workspace) run_config = RunConfiguration() run_config.environment = environment diff --git a/ml_service/util/env_variables.py b/ml_service/util/env_variables.py index c3f30e72..d0d36718 100644 --- a/ml_service/util/env_variables.py +++ b/ml_service/util/env_variables.py @@ -47,6 +47,7 @@ def __init__(self): self._run_evaluation = os.environ.get("RUN_EVALUATION", "true") self._allow_run_cancel = os.environ.get( "ALLOW_RUN_CANCEL", "true") + self._aml_env_name = os.environ.get("AML_ENV_NAME") @property def workspace_name(self): @@ -171,3 +172,7 @@ def run_evaluation(self): @property def allow_run_cancel(self): return self._allow_run_cancel + + @property + def aml_env_name(self): + return self._aml_env_name diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index adbc666c..8f32adbc 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -1,4 +1,5 @@ from azureml.core import Workspace, Environment +from ml_service.util.env_variables import Env def get_environment( @@ -7,6 +8,7 @@ def get_environment( create_new: bool = False ): try: + e = Env() environments = Environment.list(workspace=workspace) restored_environment = None for env in environments: @@ -14,9 +16,9 @@ def get_environment( restored_environment = env if restored_environment is None or create_new: - new_env = Environment.from_conda_specification(name=environment_name, # NOQA: E501 - file_path="MLOpsPython\diabetes_regression\conda_dependencies.yml") # NOQA: E501 - restored_environment = new_env + # Read definition from diabetes_regression/azureml_environment.json + new_env = Environment.load_from_directory(e.sources_directory_train) # NOQA: E501 + stored_environment = new_env restored_environment.register(workspace) return restored_environment From 8e557440b8019d3e6765e990ffbaa39777efc551 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 14:15:38 -0800 Subject: [PATCH 32/59] linting --- diabetes_regression/evaluate/evaluate_model.py | 4 ---- .../pipelines/diabetes_regression_build_train_pipeline.py | 1 - .../diabetes_regression_build_train_pipeline_with_r.py | 1 - ml_service/util/manage_environment.py | 2 +- 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/diabetes_regression/evaluate/evaluate_model.py b/diabetes_regression/evaluate/evaluate_model.py index 303e447f..ed234b7a 100644 --- a/diabetes_regression/evaluate/evaluate_model.py +++ b/diabetes_regression/evaluate/evaluate_model.py @@ -93,11 +93,7 @@ parser.add_argument( "--allow_run_cancel", type=str, -<< << << < HEAD - help="Set this to false to avoid evaluation step from cancelling run", -== == == = help="Set this to false to avoid evaluation step from cancelling run after an unsuccessful evaluation", # NOQA: E501 ->>>>>> > 57ef170fca17cfffc95294a4518992c8e64342b6 default="true", ) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 2893352b..f39e2d47 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -1,7 +1,6 @@ from azureml.pipeline.core.graph import PipelineParameter from azureml.pipeline.steps import PythonScriptStep from azureml.pipeline.core import Pipeline -from azureml.core import Workspace, Environment from azureml.core.runconfig import RunConfiguration from azureml.core import Dataset, Datastore from ml_service.util.attach_compute import get_compute diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py index cd433354..72599e1b 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py @@ -1,6 +1,5 @@ from azureml.pipeline.steps import PythonScriptStep from azureml.pipeline.core import Pipeline -from azureml.core import Workspace, Environment from azureml.core.runconfig import RunConfiguration from ml_service.util.attach_compute import get_compute from ml_service.util.env_variables import Env diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index 8f32adbc..ab0d87f6 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -18,7 +18,7 @@ def get_environment( if restored_environment is None or create_new: # Read definition from diabetes_regression/azureml_environment.json new_env = Environment.load_from_directory(e.sources_directory_train) # NOQA: E501 - stored_environment = new_env + restored_environment = new_env restored_environment.register(workspace) return restored_environment From a840247f347bbe302e6108094986e5c6ec21b453 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 14:20:54 -0800 Subject: [PATCH 33/59] fixed import --- ml_service/pipelines/diabetes_regression_build_train_pipeline.py | 1 + .../pipelines/diabetes_regression_build_train_pipeline_with_r.py | 1 + 2 files changed, 2 insertions(+) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index f39e2d47..2fdccd97 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -1,6 +1,7 @@ from azureml.pipeline.core.graph import PipelineParameter from azureml.pipeline.steps import PythonScriptStep from azureml.pipeline.core import Pipeline +from azureml.core import Workspace from azureml.core.runconfig import RunConfiguration from azureml.core import Dataset, Datastore from ml_service.util.attach_compute import get_compute diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py index 72599e1b..eec45fa9 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py @@ -1,5 +1,6 @@ from azureml.pipeline.steps import PythonScriptStep from azureml.pipeline.core import Pipeline +from azureml.core import Workspace from azureml.core.runconfig import RunConfiguration from ml_service.util.attach_compute import get_compute from ml_service.util.env_variables import Env From 5978f7cc8bef5b63df8646a4299791e40d3dd797 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 14:46:35 -0800 Subject: [PATCH 34/59] removed env var --- ml_service/pipelines/diabetes_regression_build_train_pipeline.py | 1 - .../pipelines/diabetes_regression_build_train_pipeline_with_r.py | 1 - 2 files changed, 2 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 2fdccd97..dc7e5d2a 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -35,7 +35,6 @@ def main(): if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - environment.environment_variables["BUILDURI_BASE"] = builduri_base run_config = RunConfiguration() run_config.environment = environment diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py index eec45fa9..bc37056d 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py @@ -35,7 +35,6 @@ def main(): if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - environment.environment_variables["BUILDURI_BASE"] = builduri_base run_config = RunConfiguration() run_config.environment = environment From 121a822d51e011f412ec833c4b918824fe060abb Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 15:14:40 -0800 Subject: [PATCH 35/59] from conda file --- ml_service/util/manage_environment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index ab0d87f6..9f7466eb 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -1,5 +1,6 @@ from azureml.core import Workspace, Environment from ml_service.util.env_variables import Env +import os def get_environment( @@ -17,7 +18,7 @@ def get_environment( if restored_environment is None or create_new: # Read definition from diabetes_regression/azureml_environment.json - new_env = Environment.load_from_directory(e.sources_directory_train) # NOQA: E501 + new_env = Environment.from_conda_specification(environment_name, os.path.normpath(e.sources_directory_train)) # NOQA: E501 restored_environment = new_env restored_environment.register(workspace) From d13b509be614eb8c5929f7a9c3b199d28d49927f Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 15:36:16 -0800 Subject: [PATCH 36/59] from conda file --- ml_service/util/manage_environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index 9f7466eb..abae873b 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -18,7 +18,7 @@ def get_environment( if restored_environment is None or create_new: # Read definition from diabetes_regression/azureml_environment.json - new_env = Environment.from_conda_specification(environment_name, os.path.normpath(e.sources_directory_train)) # NOQA: E501 + new_env = Environment.from_conda_specification(environment_name, os.path.normpath(e.sources_directory_train, "conda_dependencies.yml")) # NOQA: E501 restored_environment = new_env restored_environment.register(workspace) From 7b9af18a4fec49587f8342d3d2e0bf712fcf0a12 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 15:36:54 -0800 Subject: [PATCH 37/59] renamed file for test --- .../{azureml_environment.json => azureml_environment.jsonn} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename diabetes_regression/{azureml_environment.json => azureml_environment.jsonn} (100%) diff --git a/diabetes_regression/azureml_environment.json b/diabetes_regression/azureml_environment.jsonn similarity index 100% rename from diabetes_regression/azureml_environment.json rename to diabetes_regression/azureml_environment.jsonn From ec98dc0efd59a7a4b24fb9e8a2922c5fdff61d2b Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 15:45:10 -0800 Subject: [PATCH 38/59] updated env name --- .env.example | 2 +- .pipelines/diabetes_regression-variables.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index e3726730..596ffcf1 100644 --- a/.env.example +++ b/.env.example @@ -34,7 +34,7 @@ SOURCES_DIR_TRAIN = 'diabetes_regression' DATASET_NAME = 'diabetes_ds' DATASTORE_NAME = 'datablobstore' DATAFILE_NAME = 'diabetes.csv' -AML_ENV_NAME = 'diabetes_regression_sklearn' +AML_ENV_NAME = 'diabetes_regression_env' # Optional. Used by a training pipeline with R on Databricks DB_CLUSTER_ID = '' diff --git a/.pipelines/diabetes_regression-variables.yml b/.pipelines/diabetes_regression-variables.yml index d35c45a1..072150f0 100644 --- a/.pipelines/diabetes_regression-variables.yml +++ b/.pipelines/diabetes_regression-variables.yml @@ -43,7 +43,7 @@ variables: - name: DATASET_NAME value: diabetes_ds - name: AML_ENV_NAME - value: "diabetes_regression_sklearn" + value: "diabetes_regression_env" # These are the default values set in ml_service\util\env_variables.py. Uncomment and override if desired. # - name: RUN_EVALUATION # value: "true" From c0949e89b7ad34898e3d47d0dc6d498bd94eb78e Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 15:49:37 -0800 Subject: [PATCH 39/59] updated path --- ml_service/util/manage_environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index abae873b..375a77d4 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -18,7 +18,7 @@ def get_environment( if restored_environment is None or create_new: # Read definition from diabetes_regression/azureml_environment.json - new_env = Environment.from_conda_specification(environment_name, os.path.normpath(e.sources_directory_train, "conda_dependencies.yml")) # NOQA: E501 + new_env = Environment.from_conda_specification(environment_name, os.path.join(e.sources_directory_train, "conda_dependencies.yml")) # NOQA: E501 restored_environment = new_env restored_environment.register(workspace) From 7dbf9fd78bcad33678f2b0e48bc7c45cd6baa08e Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 15:56:05 -0800 Subject: [PATCH 40/59] updated doc --- bootstrap/bootstrap.py | 1 - docs/code_description.md | 1 - ml_service/util/manage_environment.py | 1 - 3 files changed, 3 deletions(-) diff --git a/bootstrap/bootstrap.py b/bootstrap/bootstrap.py index 571d3443..232d0223 100644 --- a/bootstrap/bootstrap.py +++ b/bootstrap/bootstrap.py @@ -103,7 +103,6 @@ def replaceprojectname(project_dir, project_name, rename_name): r"ml_service/pipelines/diabetes_regression_build_train_pipeline.py", # NOQA: E501 r"ml_service/pipelines/diabetes_regression_verify_train_pipeline.py", # NOQA: E501 r"ml_service/util/create_scoring_image.py", - r"diabetes_regression/azureml_environment.json", r"diabetes_regression/conda_dependencies.yml", r"diabetes_regression/evaluate/evaluate_model.py", r"diabetes_regression/register/register_model.py", diff --git a/docs/code_description.md b/docs/code_description.md index 1b0b710d..b4c6a538 100644 --- a/docs/code_description.md +++ b/docs/code_description.md @@ -56,7 +56,6 @@ High level directory structure for this repository: ### Environment Definitions -- `diabetes_regression/azureml_environment.json` : Azure ML environment definition for the training environment, including base Docker image and a reference to `conda_dependencies.yml` Conda environment file. - `diabetes_regression/conda_dependencies.yml` : Conda environment definition for the environment used for both training and scoring (Docker image in which train.py and score.py are run). - `diabetes_regression/ci_dependencies.yml` : Conda environment definition for the CI environment. diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index 375a77d4..63bd89c8 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -17,7 +17,6 @@ def get_environment( restored_environment = env if restored_environment is None or create_new: - # Read definition from diabetes_regression/azureml_environment.json new_env = Environment.from_conda_specification(environment_name, os.path.join(e.sources_directory_train, "conda_dependencies.yml")) # NOQA: E501 restored_environment = new_env restored_environment.register(workspace) From 87cdecdb6762d1ff2f3e924b6d211a6972784e60 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Thu, 13 Feb 2020 16:02:55 -0800 Subject: [PATCH 41/59] remove env json --- diabetes_regression/azureml_environment.jsonn | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 diabetes_regression/azureml_environment.jsonn diff --git a/diabetes_regression/azureml_environment.jsonn b/diabetes_regression/azureml_environment.jsonn deleted file mode 100644 index 8a81614e..00000000 --- a/diabetes_regression/azureml_environment.jsonn +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "diabetes_regression_sklearn", - "version": null, - "environmentVariables": { - "EXAMPLE_ENV_VAR": "EXAMPLE_VALUE" - }, - "python": { - "userManagedDependencies": false, - "interpreterPath": "python", - "condaDependenciesFile": null, - "baseCondaEnvironment": null - }, - "docker": { - "enabled": true, - "baseImage": "mcr.microsoft.com/azureml/base:intelmpi2018.3-ubuntu16.04", - "baseDockerfile": null, - "sharedVolumes": true, - "shmSize": "2g", - "arguments": [], - "baseImageRegistry": { - "address": null, - "username": null, - "password": null - } - }, - "spark": { - "repositories": [], - "packages": [], - "precachePackages": true - }, - "databricks": { - "mavenLibraries": [], - "pypiLibraries": [], - "rcranLibraries": [], - "jarLibraries": [], - "eggLibraries": [] - }, - "inferencingStackVersion": null -} From 7677dbcee67139c907edee398967ef5c38d1bb81 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 11:22:37 -0800 Subject: [PATCH 42/59] import env helper --- .../pipelines/diabetes_regression_build_train_pipeline.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 75cc9adc..7da8ff4b 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -1,11 +1,12 @@ from azureml.pipeline.core.graph import PipelineParameter from azureml.pipeline.steps import PythonScriptStep from azureml.pipeline.core import Pipeline, PipelineData -from azureml.core import Workspace, Environment +from azureml.core import Workspace from azureml.core.runconfig import RunConfiguration from azureml.core import Dataset from ml_service.util.attach_compute import get_compute from ml_service.util.env_variables import Env +from MLOpsPython.ml_service.util.manage_environment import get_environment from sklearn.datasets import load_diabetes import pandas as pd import os From 02646641cfdfb41ce2a9c6bc3d6736e452961fee Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 11:30:38 -0800 Subject: [PATCH 43/59] fix import --- .../pipelines/diabetes_regression_build_train_pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 7da8ff4b..0351db75 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -6,7 +6,7 @@ from azureml.core import Dataset from ml_service.util.attach_compute import get_compute from ml_service.util.env_variables import Env -from MLOpsPython.ml_service.util.manage_environment import get_environment +from ml_service.util.manage_environment import get_environment from sklearn.datasets import load_diabetes import pandas as pd import os From a20a5ac5e6e5cdfebb78f9fefdd00b117d7a4a7b Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 12:30:43 -0800 Subject: [PATCH 44/59] pipeline variables for aml env --- .env.example | 1 + .pipelines/diabetes_regression-variables-template.yml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.env.example b/.env.example index 892ecb2b..0603af62 100644 --- a/.env.example +++ b/.env.example @@ -15,6 +15,7 @@ WORKSPACE_NAME = 'aml-workspace' EXPERIMENT_NAME = '' # AML Compute Cluster Config +AML_ENV_NAME='diabetes_regression_env' AML_COMPUTE_CLUSTER_NAME = 'train-cluster' AML_COMPUTE_CLUSTER_CPU_SKU = 'STANDARD_DS2_V2' AML_CLUSTER_MAX_NODES = '4' diff --git a/.pipelines/diabetes_regression-variables-template.yml b/.pipelines/diabetes_regression-variables-template.yml index af32282e..50cb5112 100644 --- a/.pipelines/diabetes_regression-variables-template.yml +++ b/.pipelines/diabetes_regression-variables-template.yml @@ -29,6 +29,8 @@ variables: value: diabetes_regression_model.pkl # AML Compute Cluster Config + - name: AML_ENV_NAME + value: diabetes_regression_env - name: AML_COMPUTE_CLUSTER_CPU_SKU value: STANDARD_DS2_V2 - name: AML_COMPUTE_CLUSTER_NAME From 77ad98f520151d8d9b3003d1d894317af6f1333f Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 12:41:04 -0800 Subject: [PATCH 45/59] changed env name --- .env.example | 2 +- .pipelines/diabetes_regression-variables-template.yml | 2 +- diabetes_regression/conda_dependencies.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 0603af62..760dd153 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ WORKSPACE_NAME = 'aml-workspace' EXPERIMENT_NAME = '' # AML Compute Cluster Config -AML_ENV_NAME='diabetes_regression_env' +AML_ENV_NAME='test_aml_env' AML_COMPUTE_CLUSTER_NAME = 'train-cluster' AML_COMPUTE_CLUSTER_CPU_SKU = 'STANDARD_DS2_V2' AML_CLUSTER_MAX_NODES = '4' diff --git a/.pipelines/diabetes_regression-variables-template.yml b/.pipelines/diabetes_regression-variables-template.yml index 50cb5112..435efcd2 100644 --- a/.pipelines/diabetes_regression-variables-template.yml +++ b/.pipelines/diabetes_regression-variables-template.yml @@ -30,7 +30,7 @@ variables: # AML Compute Cluster Config - name: AML_ENV_NAME - value: diabetes_regression_env + value: test_aml_env - name: AML_COMPUTE_CLUSTER_CPU_SKU value: STANDARD_DS2_V2 - name: AML_COMPUTE_CLUSTER_NAME diff --git a/diabetes_regression/conda_dependencies.yml b/diabetes_regression/conda_dependencies.yml index 1d5ea183..e7f8fd85 100644 --- a/diabetes_regression/conda_dependencies.yml +++ b/diabetes_regression/conda_dependencies.yml @@ -14,7 +14,7 @@ # This directive is stored in a comment to preserve the Conda file structure. # [AzureMlVersion] = 2 -name: project_environment +name: test_aml_env dependencies: # The python interpreter version. # Currently Azure ML Workbench only supports 3.5.2 and later. From 32344ce593ccf1985b79b36b83b2fd365e540aa9 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 13:39:48 -0800 Subject: [PATCH 46/59] remove aml env --- diabetes_regression/scoring/inference_config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/diabetes_regression/scoring/inference_config.yml b/diabetes_regression/scoring/inference_config.yml index b3eff6c9..3fc86686 100644 --- a/diabetes_regression/scoring/inference_config.yml +++ b/diabetes_regression/scoring/inference_config.yml @@ -6,5 +6,4 @@ schemaFile: sourceDirectory: enableGpu: False baseImage: -baseImageRegistry: -environment: diabetes_regression +baseImageRegistry: \ No newline at end of file From cece19d5250dfcb527fa4a470c262a179627a76c Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 13:50:44 -0800 Subject: [PATCH 47/59] adding env var for build id --- .../pipelines/diabetes_regression_build_train_pipeline.py | 6 +++--- .../diabetes_regression_build_train_pipeline_with_r.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 0351db75..c752c4ec 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -35,12 +35,12 @@ def main(): # Create a reusable Azure ML environment environment = get_environment( aml_workspace, e.aml_env_name, create_new=False) # NOQA: E501 + run_config = RunConfiguration() + run_config.environment = environment if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - - run_config = RunConfiguration() - run_config.environment = environment + environment.environment_variables["BUILDURI_BASE"] = builduri_base model_name_param = PipelineParameter( name="model_name", default_value=e.model_name) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py index bc37056d..332f2d18 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py @@ -32,12 +32,12 @@ def main(): # in diabetes_regression/conda_dependencies.yml environment = get_environment( aml_workspace, e.aml_env_name, create_new=False) # NOQA: E501 + run_config = RunConfiguration() + run_config.environment = environment if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - - run_config = RunConfiguration() - run_config.environment = environment + environment.environment_variables["BUILDURI_BASE"] = builduri_base train_step = PythonScriptStep( name="Train Model", From 178a698418b33518687a0f04d1e188d83bd31da1 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 13:54:58 -0800 Subject: [PATCH 48/59] change aml env name --- .env.example | 2 +- .pipelines/diabetes_regression-variables-template.yml | 2 +- diabetes_regression/conda_dependencies.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 760dd153..2ef4f1aa 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ WORKSPACE_NAME = 'aml-workspace' EXPERIMENT_NAME = '' # AML Compute Cluster Config -AML_ENV_NAME='test_aml_env' +AML_ENV_NAME='diabetes_regression__training_env' AML_COMPUTE_CLUSTER_NAME = 'train-cluster' AML_COMPUTE_CLUSTER_CPU_SKU = 'STANDARD_DS2_V2' AML_CLUSTER_MAX_NODES = '4' diff --git a/.pipelines/diabetes_regression-variables-template.yml b/.pipelines/diabetes_regression-variables-template.yml index 435efcd2..aced870b 100644 --- a/.pipelines/diabetes_regression-variables-template.yml +++ b/.pipelines/diabetes_regression-variables-template.yml @@ -30,7 +30,7 @@ variables: # AML Compute Cluster Config - name: AML_ENV_NAME - value: test_aml_env + value: diabetes_regression__training_env - name: AML_COMPUTE_CLUSTER_CPU_SKU value: STANDARD_DS2_V2 - name: AML_COMPUTE_CLUSTER_NAME diff --git a/diabetes_regression/conda_dependencies.yml b/diabetes_regression/conda_dependencies.yml index e7f8fd85..a9b3f987 100644 --- a/diabetes_regression/conda_dependencies.yml +++ b/diabetes_regression/conda_dependencies.yml @@ -14,7 +14,7 @@ # This directive is stored in a comment to preserve the Conda file structure. # [AzureMlVersion] = 2 -name: test_aml_env +name: diabetes_regression__training_env dependencies: # The python interpreter version. # Currently Azure ML Workbench only supports 3.5.2 and later. From 2621b77f7877f3e2086d9cd2a7c9ea7a62a28a9a Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 15:45:53 -0800 Subject: [PATCH 49/59] testing env --- ml_service/util/manage_environment copy.py | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 ml_service/util/manage_environment copy.py diff --git a/ml_service/util/manage_environment copy.py b/ml_service/util/manage_environment copy.py new file mode 100644 index 00000000..06e91203 --- /dev/null +++ b/ml_service/util/manage_environment copy.py @@ -0,0 +1,34 @@ +from azureml.core import Workspace, Environment +from azureml.core import Workspace +import os + + +def get_environment( + workspace: Workspace, + environment_name: str, + create_new: bool = False +): + try: + + environments = Environment.list(workspace=workspace) + restored_environment = None + for env in environments: + if env == environment_name: + restored_environment = env + + if restored_environment is None or create_new: + new_env = Environment.from_conda_specification(environment_name, os.path.join("", "conda_dependencies.yml")) # NOQA: E501 + restored_environment = new_env + restored_environment.register(workspace) + + return restored_environment + except Exception as e: + print(e) + exit(1) + + +if __name__ == '__main__': + aml_workspace = Workspace.get( + name='mlopspython-aml', subscription_id='92c76a2f-0e1c-4216-b65e-abf7a3f34c1e', resource_group='MLOpsPythonCI') + environment = get_environment( + aml_workspace, 'diabetes_regression__training_env', create_new=False) From a0cc24523cb67b239d559a9d72a87a0796217692 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 15:46:13 -0800 Subject: [PATCH 50/59] test env --- .../pipelines/diabetes_regression_build_train_pipeline.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index c752c4ec..504425ff 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -35,6 +35,10 @@ def main(): # Create a reusable Azure ML environment environment = get_environment( aml_workspace, e.aml_env_name, create_new=False) # NOQA: E501 + + if environment is not None: + print(environment) + run_config = RunConfiguration() run_config.environment = environment if (e.collection_uri is not None and e.teamproject_name is not None): From 9262909240f792eeb846863952ad5720eec180d9 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 15:54:04 -0800 Subject: [PATCH 51/59] delete unused --- ml_service/util/manage_environment copy.py | 34 ---------------------- 1 file changed, 34 deletions(-) delete mode 100644 ml_service/util/manage_environment copy.py diff --git a/ml_service/util/manage_environment copy.py b/ml_service/util/manage_environment copy.py deleted file mode 100644 index 06e91203..00000000 --- a/ml_service/util/manage_environment copy.py +++ /dev/null @@ -1,34 +0,0 @@ -from azureml.core import Workspace, Environment -from azureml.core import Workspace -import os - - -def get_environment( - workspace: Workspace, - environment_name: str, - create_new: bool = False -): - try: - - environments = Environment.list(workspace=workspace) - restored_environment = None - for env in environments: - if env == environment_name: - restored_environment = env - - if restored_environment is None or create_new: - new_env = Environment.from_conda_specification(environment_name, os.path.join("", "conda_dependencies.yml")) # NOQA: E501 - restored_environment = new_env - restored_environment.register(workspace) - - return restored_environment - except Exception as e: - print(e) - exit(1) - - -if __name__ == '__main__': - aml_workspace = Workspace.get( - name='mlopspython-aml', subscription_id='92c76a2f-0e1c-4216-b65e-abf7a3f34c1e', resource_group='MLOpsPythonCI') - environment = get_environment( - aml_workspace, 'diabetes_regression__training_env', create_new=False) From 8cea674f5e75b0889dbd5beb6e5cc3d04fe8aa30 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 16:06:00 -0800 Subject: [PATCH 52/59] print env --- .../pipelines/diabetes_regression_build_train_pipeline.py | 3 --- ml_service/util/manage_environment.py | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 504425ff..92e8c3ae 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -36,9 +36,6 @@ def main(): environment = get_environment( aml_workspace, e.aml_env_name, create_new=False) # NOQA: E501 - if environment is not None: - print(environment) - run_config = RunConfiguration() run_config.environment = environment if (e.collection_uri is not None and e.teamproject_name is not None): diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index 63bd89c8..e768f700 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -21,6 +21,8 @@ def get_environment( restored_environment = new_env restored_environment.register(workspace) + if environment is not None: + print(environment) return restored_environment except Exception as e: print(e) From 454b8115b816507005ca339f79b162b531dd7873 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 16:10:23 -0800 Subject: [PATCH 53/59] fixed name --- ml_service/util/manage_environment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index e768f700..b306d396 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -21,8 +21,8 @@ def get_environment( restored_environment = new_env restored_environment.register(workspace) - if environment is not None: - print(environment) + if restored_environment is not None: + print(restored_environment) return restored_environment except Exception as e: print(e) From 700acab12b6f65152d8991cc3aa8ade6da0b7f9a Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 16:16:01 -0800 Subject: [PATCH 54/59] adding env to runconfig --- .../pipelines/diabetes_regression_build_train_pipeline.py | 2 +- .../diabetes_regression_build_train_pipeline_with_r.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 92e8c3ae..2805775c 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -41,7 +41,7 @@ def main(): if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - environment.environment_variables["BUILDURI_BASE"] = builduri_base + run_config.environment.environment_variables["BUILDURI_BASE"] = builduri_base model_name_param = PipelineParameter( name="model_name", default_value=e.model_name) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py index 332f2d18..d6bdf711 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py @@ -37,7 +37,7 @@ def main(): if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - environment.environment_variables["BUILDURI_BASE"] = builduri_base + run_config.environment.environment_variables["BUILDURI_BASE"] = builduri_base train_step = PythonScriptStep( name="Train Model", From 631141bc3805237d6805524f140c6acd9ea622c6 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 16:23:24 -0800 Subject: [PATCH 55/59] linting fix --- .../pipelines/diabetes_regression_build_train_pipeline.py | 2 +- .../diabetes_regression_build_train_pipeline_with_r.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py index 2805775c..c78465dd 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline.py @@ -41,7 +41,7 @@ def main(): if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - run_config.environment.environment_variables["BUILDURI_BASE"] = builduri_base + run_config.environment.environment_variables["BUILDURI_BASE"] = builduri_base # NOQA: E501 model_name_param = PipelineParameter( name="model_name", default_value=e.model_name) diff --git a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py index d6bdf711..a41b0c2e 100644 --- a/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py +++ b/ml_service/pipelines/diabetes_regression_build_train_pipeline_with_r.py @@ -37,7 +37,7 @@ def main(): if (e.collection_uri is not None and e.teamproject_name is not None): builduri_base = e.collection_uri + e.teamproject_name builduri_base = builduri_base + "/_build/results?buildId=" - run_config.environment.environment_variables["BUILDURI_BASE"] = builduri_base + run_config.environment.environment_variables["BUILDURI_BASE"] = builduri_base # NOQA: E501 train_step = PythonScriptStep( name="Train Model", From ba85029b3edb7cbae8b69152b5299ca3ce88d965 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 16:28:16 -0800 Subject: [PATCH 56/59] aml env name change --- .env.example | 2 +- .pipelines/diabetes_regression-variables-template.yml | 2 +- diabetes_regression/conda_dependencies.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 2ef4f1aa..389b3778 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ WORKSPACE_NAME = 'aml-workspace' EXPERIMENT_NAME = '' # AML Compute Cluster Config -AML_ENV_NAME='diabetes_regression__training_env' +AML_ENV_NAME='diabetes_regression__training_env1' AML_COMPUTE_CLUSTER_NAME = 'train-cluster' AML_COMPUTE_CLUSTER_CPU_SKU = 'STANDARD_DS2_V2' AML_CLUSTER_MAX_NODES = '4' diff --git a/.pipelines/diabetes_regression-variables-template.yml b/.pipelines/diabetes_regression-variables-template.yml index aced870b..d9b31b54 100644 --- a/.pipelines/diabetes_regression-variables-template.yml +++ b/.pipelines/diabetes_regression-variables-template.yml @@ -30,7 +30,7 @@ variables: # AML Compute Cluster Config - name: AML_ENV_NAME - value: diabetes_regression__training_env + value: diabetes_regression__training_env1 - name: AML_COMPUTE_CLUSTER_CPU_SKU value: STANDARD_DS2_V2 - name: AML_COMPUTE_CLUSTER_NAME diff --git a/diabetes_regression/conda_dependencies.yml b/diabetes_regression/conda_dependencies.yml index a9b3f987..261d293e 100644 --- a/diabetes_regression/conda_dependencies.yml +++ b/diabetes_regression/conda_dependencies.yml @@ -14,7 +14,7 @@ # This directive is stored in a comment to preserve the Conda file structure. # [AzureMlVersion] = 2 -name: diabetes_regression__training_env +name: diabetes_regression__training_env1 dependencies: # The python interpreter version. # Currently Azure ML Workbench only supports 3.5.2 and later. From a9498402cce9885be38512c2d4f7c41d8b977295 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 16:53:45 -0800 Subject: [PATCH 57/59] fixed aml env type --- .env.example | 2 +- .pipelines/diabetes_regression-variables-template.yml | 2 +- ml_service/util/manage_environment.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 389b3778..2ef4f1aa 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ WORKSPACE_NAME = 'aml-workspace' EXPERIMENT_NAME = '' # AML Compute Cluster Config -AML_ENV_NAME='diabetes_regression__training_env1' +AML_ENV_NAME='diabetes_regression__training_env' AML_COMPUTE_CLUSTER_NAME = 'train-cluster' AML_COMPUTE_CLUSTER_CPU_SKU = 'STANDARD_DS2_V2' AML_CLUSTER_MAX_NODES = '4' diff --git a/.pipelines/diabetes_regression-variables-template.yml b/.pipelines/diabetes_regression-variables-template.yml index d9b31b54..aced870b 100644 --- a/.pipelines/diabetes_regression-variables-template.yml +++ b/.pipelines/diabetes_regression-variables-template.yml @@ -30,7 +30,7 @@ variables: # AML Compute Cluster Config - name: AML_ENV_NAME - value: diabetes_regression__training_env1 + value: diabetes_regression__training_env - name: AML_COMPUTE_CLUSTER_CPU_SKU value: STANDARD_DS2_V2 - name: AML_COMPUTE_CLUSTER_NAME diff --git a/ml_service/util/manage_environment.py b/ml_service/util/manage_environment.py index b306d396..43749f3f 100644 --- a/ml_service/util/manage_environment.py +++ b/ml_service/util/manage_environment.py @@ -14,7 +14,7 @@ def get_environment( restored_environment = None for env in environments: if env == environment_name: - restored_environment = env + restored_environment = environments[environment_name] if restored_environment is None or create_new: new_env = Environment.from_conda_specification(environment_name, os.path.join(e.sources_directory_train, "conda_dependencies.yml")) # NOQA: E501 From 486e32069c26099264a9aa7de3301ef4de3b568c Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Fri, 28 Feb 2020 17:03:39 -0800 Subject: [PATCH 58/59] corrected env name --- diabetes_regression/conda_dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diabetes_regression/conda_dependencies.yml b/diabetes_regression/conda_dependencies.yml index 261d293e..a9b3f987 100644 --- a/diabetes_regression/conda_dependencies.yml +++ b/diabetes_regression/conda_dependencies.yml @@ -14,7 +14,7 @@ # This directive is stored in a comment to preserve the Conda file structure. # [AzureMlVersion] = 2 -name: diabetes_regression__training_env1 +name: diabetes_regression__training_env dependencies: # The python interpreter version. # Currently Azure ML Workbench only supports 3.5.2 and later. From c24454bda0eca2ab6eef9059e41885bc362b9f46 Mon Sep 17 00:00:00 2001 From: sushantdivate Date: Sun, 1 Mar 2020 22:27:50 -0800 Subject: [PATCH 59/59] removed extra underscore --- .env.example | 2 +- .pipelines/diabetes_regression-variables-template.yml | 2 +- diabetes_regression/conda_dependencies.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 2ef4f1aa..cb991043 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ WORKSPACE_NAME = 'aml-workspace' EXPERIMENT_NAME = '' # AML Compute Cluster Config -AML_ENV_NAME='diabetes_regression__training_env' +AML_ENV_NAME='diabetes_regression_training_env' AML_COMPUTE_CLUSTER_NAME = 'train-cluster' AML_COMPUTE_CLUSTER_CPU_SKU = 'STANDARD_DS2_V2' AML_CLUSTER_MAX_NODES = '4' diff --git a/.pipelines/diabetes_regression-variables-template.yml b/.pipelines/diabetes_regression-variables-template.yml index aced870b..a12fe67e 100644 --- a/.pipelines/diabetes_regression-variables-template.yml +++ b/.pipelines/diabetes_regression-variables-template.yml @@ -30,7 +30,7 @@ variables: # AML Compute Cluster Config - name: AML_ENV_NAME - value: diabetes_regression__training_env + value: diabetes_regression_training_env - name: AML_COMPUTE_CLUSTER_CPU_SKU value: STANDARD_DS2_V2 - name: AML_COMPUTE_CLUSTER_NAME diff --git a/diabetes_regression/conda_dependencies.yml b/diabetes_regression/conda_dependencies.yml index a9b3f987..76350a01 100644 --- a/diabetes_regression/conda_dependencies.yml +++ b/diabetes_regression/conda_dependencies.yml @@ -14,7 +14,7 @@ # This directive is stored in a comment to preserve the Conda file structure. # [AzureMlVersion] = 2 -name: diabetes_regression__training_env +name: diabetes_regression_training_env dependencies: # The python interpreter version. # Currently Azure ML Workbench only supports 3.5.2 and later.