From fa03633cdb562f4d17f478f8ad11d21840e158aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Martins?= Date: Tue, 14 Dec 2021 16:54:49 +0100 Subject: [PATCH] Revision of getting started guide up to Batch scoring. Also new diagam and fix to ARM template to remove region restrictions. (#387) Co-authored-by: Joao Pedro Martins --- docs/getting_started.md | 84 +++++++++++------- docs/images/aci-in-azure-portal.png | Bin 0 -> 52224 bytes .../arm-templates/cloud-environment.json | 10 --- 3 files changed, 54 insertions(+), 40 deletions(-) create mode 100644 docs/images/aci-in-azure-portal.png diff --git a/docs/getting_started.md b/docs/getting_started.md index 7a2c25f0..3cd1f263 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -36,13 +36,13 @@ If you already have an Azure DevOps organization, create a new project using the ### Install the Azure Machine Learning extension -Install the **Azure Machine Learning** extension to your Azure DevOps organization from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.vss-services-azureml). +Install the **Azure Machine Learning** extension to your Azure DevOps organization from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.vss-services-azureml) by clicking "Get it free" and following the steps. The UI will tell you if try to add it and it's already installed. -This extension contains the Azure ML pipeline tasks and adds the ability to create Azure ML Workspace service connections. +This extension contains the Azure ML pipeline tasks and adds the ability to create Azure ML Workspace service connections. The documentation page on the marketplace includes detailed instructions with screenshots on what capabilities it includes. ## Get the code -We recommend using the [repository template](https://github.com/microsoft/MLOpsPython/generate), which effectively forks the repository to your own GitHub location and squashes the history. You can use the resulting repository for this guide and for your own experimentation. +We recommend using the [repository template](https://github.com/microsoft/MLOpsPython/generate), which effectively forks this repository to your own GitHub location and squashes the history. You can use the resulting repository for this guide and for your own experimentation. ## Create a Variable Group for your Pipeline @@ -59,15 +59,14 @@ The variable group should contain the following required variables. **Azure reso | Variable Name | Suggested Value | Short description | | ------------------------ | ------------------------- | --------------------------------------------------------------------------------------------------------------------------- | | BASE_NAME | [your project name] | Unique naming prefix for created resources - max 10 chars, letters and numbers only | -| LOCATION | centralus | [Azure location](https://azure.microsoft.com/en-us/global-infrastructure/locations/), no spaces | +| LOCATION | centralus | [Azure location](https://azure.microsoft.com/en-us/global-infrastructure/locations/), no spaces. You can list all the region codes by running `az account list-locations -o table` in the Azure CLI | | RESOURCE_GROUP | mlops-RG | Azure Resource Group name | | WORKSPACE_NAME | mlops-AML-WS | Azure ML Workspace name | | AZURE_RM_SVC_CONNECTION | azure-resource-connection | [Azure Resource Manager Service Connection](#create-an-azure-devops-service-connection-for-the-azure-resource-manager) name | | WORKSPACE_SVC_CONNECTION | aml-workspace-connection | [Azure ML Workspace Service Connection](#create-an-azure-devops-azure-ml-workspace-service-connection) name | | ACI_DEPLOYMENT_NAME | mlops-aci | [Azure Container Instances](https://azure.microsoft.com/en-us/services/container-instances/) name | | - -Make sure you select the **Allow access to all pipelines** checkbox in the variable group configuration. +Make sure you select the **Allow access to all pipelines** checkbox in the variable group configuration. To do this, first **Save** the variable group, then click **Pipeline Permissions**, then the button with 3 vertical dots, and then **Open access** button. More variables are available for further tweaking, but the above variables are all you need to get started with this example. For more information, see the [Additional Variables and Configuration](#additional-variables-and-configuration) section. @@ -75,11 +74,11 @@ More variables are available for further tweaking, but the above variables are a **BASE_NAME** is used as a prefix for naming Azure resources and should be unique. When sharing an Azure subscription, the prefix allows you to avoid naming collisions for resources that require unique names, for example, Azure Blob Storage and Registry DNS. Make sure to set BASE_NAME to a unique name so that created resources will have unique names, for example, MyUniqueMLamlcr, MyUniqueML-AML-KV, and so on. The length of the BASE_NAME value shouldn't exceed 10 characters and must contain letters and numbers only. -**LOCATION** is the name of the [Azure location](https://azure.microsoft.com/en-us/global-infrastructure/locations/) for your resources. There should be no spaces in the name. For example, central, westus, westus2. +**LOCATION** is the name of the [Azure location](https://azure.microsoft.com/en-us/global-infrastructure/locations/) for your resources. There should be no spaces in the name. For example, central, westus, northeurope. You can list all the region codes by running `az account list-locations -o table` in the Azure CLI. **RESOURCE_GROUP** is used as the name for the resource group that will hold the Azure resources for the solution. If providing an existing Azure ML Workspace, set this value to the corresponding resource group name. -**WORKSPACE_NAME** is used for creating the Azure Machine Learning Workspace. You can provide an existing Azure ML Workspace here if you've got one. +**WORKSPACE_NAME** is used for creating the Azure Machine Learning Workspace. *While you should be able to provide an existing Azure ML Workspace if you have one, you will run into problems if this has been provisioned manually and the naming of the associated storage account doesn't follow the convention followed in this repo -- as the environment provisioning will try to associate it with a new Storage Account and this is not supported. To avoid these problems, specify a new workspace/unique name.* **AZURE_RM_SVC_CONNECTION** is used by the [Azure Pipeline](../environment_setup/iac-create-environment-pipeline.yml) in Azure DevOps that creates the Azure ML workspace and associated resources through Azure Resource Manager. You'll create the connection in a [step below](#create-an-azure-devops-service-connection-for-the-azure-resource-manager). @@ -96,11 +95,16 @@ The easiest way to create all required Azure resources (Resource Group, Azure ML ### Create an Azure DevOps Service Connection for the Azure Resource Manager -The [IaC provisioning pipeline](../environment_setup/iac-create-environment-pipeline.yml) requires an **Azure Resource Manager** [service connection](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml#create-a-service-connection). +The [IaC provisioning pipeline](../environment_setup/iac-create-environment-pipeline.yml) requires an **Azure Resource Manager** [service connection](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml#create-a-service-connection). To create one, in Azure DevOps select **Project Settings**, then **Service Connections**, and create a new one, where: -![Create service connection](./images/create-rm-service-connection.png) +- Type is **Azure Resource Manager** +- Authentication method is **Service principal (automatic)** +- Scope level is **Subscription** +- Leave **`Resource Group`** empty after selecting your subscription in the dropdown +- Use the same **`Service Connection Name`** that you used in the variable group you created +- Select **Grant access permission to all pipelines** -Leave the **`Resource Group`** field empty. +![Create service connection](./images/create-rm-service-connection.png) **Note:** Creating the Azure Resource Manager service connection scope requires 'Owner' or 'User Access Administrator' permissions on the subscription. You'll also need sufficient permissions to register an application with your Azure AD tenant, or you can get the ID and secret of a service principal from your Azure AD Administrator. That principal must have 'Contributor' permissions on the subscription. @@ -111,7 +115,9 @@ In your Azure DevOps project, create a build pipeline from your forked repositor ![Build connect step](./images/build-connect.png) -Select the **Existing Azure Pipelines YAML file** option and set the path to [/environment_setup/iac-create-environment-pipeline-arm.yml](../environment_setup/iac-create-environment-pipeline-arm.yml) or to [/environment_setup/iac-create-environment-pipeline-tf.yml](../environment_setup/iac-create-environment-pipeline-tf.yml), depending on if you want to deploy your infrastructure using ARM templates or Terraform: +If you are using GitHub, after picking the option above, you'll be asked to authorize to GitHub and select the repo you forked. Then you'll have to select your forked repository on GitHub under the **Repository Access** section, and click **Approve and Install**. + +After the above, and when you're redirected back to Azure DevOps, select the **Existing Azure Pipelines YAML file** option and set the path to [/environment_setup/iac-create-environment-pipeline-arm.yml](../environment_setup/iac-create-environment-pipeline-arm.yml) or to [/environment_setup/iac-create-environment-pipeline-tf.yml](../environment_setup/iac-create-environment-pipeline-tf.yml), depending on if you want to deploy your infrastructure using ARM templates or Terraform: ![Configure step](./images/select-iac-pipeline.png) @@ -125,11 +131,13 @@ Check that the newly created resources appear in the [Azure Portal](https://port ![Created resources](./images/created-resources.png) +**Note**: If you have other errors, one good thing to check is what you used in the variable names. If you end up running the pipeline multiple times, you may also run into errors and need to delete the Azure services and re-run the pipeline -- this should include a resource group, a KeyVault, a Storage Account, a Container Registry, an Application Insights and a Machine Learning workspace. + ## Create an Azure DevOps Service Connection for the Azure ML Workspace At this point, you should have an Azure ML Workspace created. Similar to the Azure Resource Manager service connection, you need to create an additional one for the Azure ML Workspace. -Create a new service connection to your Azure ML Workspace using the [Machine Learning Extension](https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.vss-services-azureml) instructions to enable executing the Azure ML training pipeline. The connection name needs to match `WORKSPACE_SVC_CONNECTION` that you set in the variable group above (eg. 'aml-workspace-connection'). +Create a new service connection to your Azure ML Workspace using the [Machine Learning Extension](https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.vss-services-azureml) instructions to enable executing the Azure ML training pipeline. The connection name needs to match `WORKSPACE_SVC_CONNECTION` that you set in the variable group above (e.g., 'aml-workspace-connection'). ![Created resources](./images/ml-ws-svc-connection.png) @@ -138,23 +146,25 @@ You'll need sufficient permissions to register an application with your Azure AD ## Set up Build, Release Trigger, and Release Multi-Stage Pipelines -Now that you've provisioned all the required Azure resources and service connections, you can set up the pipelines for training (CI) and deploying (CD) your machine learning model to production. Additionally, you can set up a pipeline for batch scoring. +Now that you've provisioned all the required Azure resources and service connections, you can set up the pipelines for training (Continuous Integration - **CI**) and deploying (Continuous Deployment - **CD**) your machine learning model to production. Additionally, you can set up a pipeline for batch scoring. 1. **Model CI, training, evaluation, and registration** - triggered on code changes to master branch on GitHub. Runs linting, unit tests, code coverage, and publishes and runs the training pipeline. If a new model is registered after evaluation, it creates a build artifact containing the JSON metadata of the model. Definition: [diabetes_regression-ci.yml](../.pipelines/diabetes_regression-ci.yml). 1. **Release deployment** - consumes the artifact of the previous pipeline and deploys a model to either [Azure Container Instances (ACI)](https://azure.microsoft.com/en-us/services/container-instances/), [Azure Kubernetes Service (AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service), or [Azure App Service](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-deploy-app-service) environments. See [Further Exploration](#further-exploration) for other deployment types. Definition: [diabetes_regression-cd.yml](../.pipelines/diabetes_regression-cd.yml). - 1. **Note:** Edit the pipeline definition to remove unused stages. For example, if you're deploying to Azure Container Instances and Azure Kubernetes Service only, delete the unused `Deploy_Webapp` stage. + 1. **Note:** Edit the pipeline definition to remove unused stages. For example, if you're deploying to Azure Container Instances and Azure Kubernetes Service only, you'll need to delete the unused `Deploy_Webapp` stage. 1. **Batch Scoring Code Continuous Integration** - consumes the artifact of the model training pipeline. Runs linting, unit tests, code coverage, publishes a batch scoring pipeline, and invokes the published batch scoring pipeline to score a model. -These pipelines use a Docker container on the Azure Pipelines agents to accomplish the pipeline steps. The container image ***mcr.microsoft.com/mlops/python:latest*** is built with [this Dockerfile](../environment_setup/Dockerfile) and has all the necessary dependencies installed for MLOpsPython and ***diabetes_regression***. This image is an example of a custom Docker image with a pre-baked environment. The environment is guaranteed to be the same on any building agent, VM, or local machine. In your project, you'll want to build your own Docker image that only contains the dependencies and tools required for your use case. Your image will probably be smaller and faster, and it will be maintained by your team. +These pipelines use a Docker container on the Azure Pipelines agents to accomplish the pipeline steps. The container image ***mcr.microsoft.com/mlops/python:latest*** is built with [this Dockerfile](../environment_setup/Dockerfile) and has all the necessary dependencies installed for MLOpsPython and ***diabetes_regression***. This image is an example of a custom Docker image with a pre-baked environment. The environment is guaranteed to be the same on any building agent, VM, or local machine. **In your project, you'll want to build your own Docker image that only contains the dependencies and tools required for your use case. Your image will probably be smaller and faster, and it will be maintained by your team.** ### Set up the Model CI, training, evaluation, and registration pipeline -In your Azure DevOps project, create and run a new build pipeline based on the [diabetes_regression-ci.yml](../.pipelines/diabetes_regression-ci.yml) +In your Azure DevOps project, create and run a new build pipeline based on the [./pipelines/diabetes_regression-ci.yml](../.pipelines/diabetes_regression-ci.yml) pipeline definition in your forked repository. If you plan to use the release deployment pipeline (in the next section), you will need to rename this pipeline to `Model-Train-Register-CI`. -Once the pipeline is finished, check the execution result: +**Note**: *To rename your pipeline, after you saved it, click **Pipelines** on the left menu on Azure DevOps, then **All** to see all the pipelines, then click the menu with the 3 vertical dots that appears when you hover the name of the new pipeline, and click it to pick **"Rename/move pipeline"**.* + +Start a run of the pipeline if you haven't already, and once the pipeline is finished, check the execution result. Note that the run can take 20 minutes, with time mostly spent in **Trigger ML Training Pipeline > Invoke ML Pipeline** step. You can track the execution of the AML pipeline by opening the AML Workspace user interface. Screenshots are below: ![Build](./images/model-train-register.png) @@ -162,13 +172,13 @@ And the pipeline artifacts: ![Build](./images/model-train-register-artifacts.png) -Also check the published training pipeline in the **mlops-AML-WS** workspace in [Azure Machine Learning Studio](https://ml.azure.com/): +Also check the published training pipeline in your newly created AML workspace in [Azure Machine Learning Studio](https://ml.azure.com/): ![Training pipeline](./images/training-pipeline.png) Great, you now have the build pipeline for training set up which automatically triggers every time there's a change in the master branch! -After the pipeline is finished, you'll see a new model in the **ML Workspace**: +After the pipeline is finished, you'll also see a new model in the **AML Workspace** model registry section: ![Trained model](./images/trained-model.png) @@ -188,19 +198,26 @@ The pipeline stages are summarized below: - Trigger the _ML Training Pipeline_ and waits for it to complete. - This is an **agentless** job. The CI pipeline can wait for ML pipeline completion for hours or even days without using agent resources. - Determine if a new model was registered by the _ML Training Pipeline_. - - If the model evaluation determines that the new model doesn't perform any better than the previous one, the new model won't register and the _ML Training Pipeline_ will be **canceled**. In this case, you'll see a message in the 'Train Model' job under the 'Determine if evaluation succeeded and new model is registered' step saying '**Model was not registered for this run.**' - - See [evaluate_model.py](../diabetes_regression/evaluate/evaluate_model.py#L118) for the evaluation logic. + - If the model evaluation step of the AML Pipeline determines that the new model doesn't perform any better than the previous one, the new model won't register and the _ML Training Pipeline_ will be **canceled**. In this case, you'll see a message in the 'Train Model' job under the 'Determine if evaluation succeeded and new model is registered' step saying '**Model was not registered for this run.**' + - See [evaluate_model.py](../diabetes_regression/evaluate/evaluate_model.py#L118) for the evaluation logic. This is a simplified test that just looks at MSE to decide whether or not to register a new model. A more realistic verification would also do some error analysis and verify the inferences/error distribution against a test dataset, for example. + - **Note**: *while it's possible to do an Evaluation Step as part of the ADO pipeline, this evaluation is logically part of the work done by Data Scientists, and as such the recommendation is that this step is done as part of the AML Pipeline and not ADO pipelines.* - [Additional Variables and Configuration](#additional-variables-and-configuration) for configuring this and other behavior. #### Create pipeline artifact - Get the info about the registered model -- Create a pipeline artifact called `model` that contains a `model.json` file containing the model information. +- Create an Azure DevOps pipeline artifact called `model` that contains a `model.json` file containing the model information, for example: + +```json +{ "createdTime": "2021-12-14T13:03:24.494748+00:00", "framework": "Custom", "frameworkVersion": null, "id": "diabetes_regression_model.pkl:1", "name": "diabetes_regression_model.pkl", "version": 1 } +``` + +- Here's [more information on Azure DevOps Artifacts](https://docs.microsoft.com/en-us/azure/devops/pipelines/artifacts/build-artifacts?view=azure-devops&tabs=yaml#explore-download-and-deploy-your-artifacts) and where to find them on the ADO user interface. ### Set up the Release Deployment and/or Batch Scoring pipelines --- -**PREREQUISITE** +**PRE-REQUISITES** In order to use these pipelines: @@ -229,14 +246,17 @@ resources: The release deployment and batch scoring pipelines have the following behaviors: -- The pipeline will **automatically trigger** on completion of the Model-Train-Register-CI pipeline for the master branch. -- The pipeline will default to using the latest successful build of the Model-Train-Register-CI pipeline. It will deploy the model produced by that build. +- The pipeline will **automatically trigger** on completion of the `Model-Train-Register-CI` pipeline for the master branch. +- The pipeline will default to using the latest successful build of the `Model-Train-Register-CI` pipeline. It will deploy the model produced by that build. - You can specify a `Model-Train-Register-CI` build ID when running the pipeline manually. You can find this in the url of the build, and the model registered from that build will also be tagged with the build ID. This is useful to skip model training and registration, and deploy/score a model successfully registered by a `Model-Train-Register-CI` build. + - For example, if you navigate to a specific run of your CI pipeline, the URL should be something like `https://dev.azure.com/yourOrgName/yourProjectName/_build/results?buildId=653&view=results`. **653** is the build ID in this case. See the second screenshot below to verify where this number would be used. ### Set up the Release Deployment pipeline -In your Azure DevOps project, create and run a new build pipeline based on the [diabetes_regression-cd.yml](../.pipelines/diabetes_regression-cd.yml) -pipeline definition in your forked repository. +In your Azure DevOps project, create and run a new **build** pipeline based on the [./pipelines/diabetes_regression-cd.yml](../.pipelines/diabetes_regression-cd.yml) +pipeline definition in your forked repository. It is recommended you rename this pipeline to something like `Model-Deploy-CD` for clarity. + +**Note**: *While Azure DevOps supports both Build and Release pipelines, when using YAML you don't usually need to use Release pipelines. This repository assumes the usage only of Build pipelines.* Your first run will use the latest model created by the `Model-Train-Register-CI` pipeline. @@ -244,11 +264,11 @@ Once the pipeline is finished, check the execution result: ![Build](./images/model-deploy-result.png) -To specify a particular build's model, set the `Model Train CI Build Id` parameter to the build Id you would like to use. +To specify a particular build's model, set the `Model Train CI Build Id` parameter to the build ID you would like to use: ![Build](./images/model-deploy-configure.png) -Once your pipeline run begins, you can see the model name and version downloaded from the `Model-Train-Register-CI` pipeline. +Once your pipeline run begins, you can see the model name and version downloaded from the `Model-Train-Register-CI` pipeline. The run time will typically be 5-10 minutes. ![Build](./images/model-deploy-get-artifact-logs.png) @@ -260,6 +280,10 @@ The pipeline has the following stage: - Smoke test - The test sends a sample query to the scoring web service and verifies that it returns the expected response. Have a look at the [smoke test code](../ml_service/util/smoke_test_scoring_service.py) for an example. +- You can verify that an ACI instance was created in the same resource group you specified: + +![Created Resouces ](./images/aci-in-azure-portal.png) + ### Set up the Batch Scoring pipeline In your Azure DevOps project, create and run a new build pipeline based on the [diabetes_regression-batchscoring-ci.yml](../.pipelines/diabetes_regression-batchscoring-ci.yml) diff --git a/docs/images/aci-in-azure-portal.png b/docs/images/aci-in-azure-portal.png new file mode 100644 index 0000000000000000000000000000000000000000..e7bfa8cd5340b9db52a189ced82aad6db54ee0c5 GIT binary patch literal 52224 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