From d26a4b03238126fb9c74d80e35cd1c2771657144 Mon Sep 17 00:00:00 2001 From: rastala Date: Sun, 2 Dec 2018 21:50:53 -0500 Subject: [PATCH] big update --- 00.configuration.ipynb | 313 -- .../01.train-within-notebook.ipynb | 808 ----- .../01.train-within-notebook/score.py | 29 - .../02.train-on-local/02.train-on-local.ipynb | 477 --- 01.getting-started/02.train-on-local/mylib.py | 9 - 01.getting-started/02.train-on-local/train.py | 45 - .../03.train-on-aci/03.train-on-aci.ipynb | 289 -- 01.getting-started/03.train-on-aci/train.py | 44 - .../04.train-on-remote-vm.ipynb | 631 ---- .../04.train-on-remote-vm/train.py | 51 - .../05.train-in-spark/05.train-in-spark.ipynb | 331 -- 01.getting-started/05.train-in-spark/iris.csv | 150 - .../05.train-in-spark/train-spark.py | 94 - .../06.logging-api/06.logging-api.ipynb | 328 -- ...er-model-create-image-deploy-service.ipynb | 420 --- .../sklearn_regression_model.pkl | Bin 658 -> 0 bytes .../11.production-deploy-to-aks.ipynb | 342 -- .../sklearn_regression_model.pkl | Bin 658 -> 0 bytes ...le-data-collection-for-models-in-aks.ipynb | 453 --- .../sklearn_regression_model.pkl | Bin 658 -> 0 bytes ...e-app-insights-in-production-service.ipynb | 414 --- README.md | 70 +- automl/00.configuration.ipynb | 224 -- automl/01.auto-ml-classification.ipynb | 414 --- automl/02.auto-ml-regression.ipynb | 415 --- automl/03.auto-ml-remote-execution.ipynb | 485 --- automl/03b.auto-ml-remote-batchai.ipynb | 507 --- ...emote-execution-text-data-blob-store.ipynb | 501 --- ...ing-data-Blacklist-Early-Termination.ipynb | 381 --- ...auto-ml-sparse-data-train-test-split.ipynb | 384 --- .../07.auto-ml-exploring-previous-runs.ipynb | 336 -- ...o-ml-remote-execution-with-DataStore.ipynb | 568 ---- ...to-ml-classification-with-deployment.ipynb | 501 --- automl/10.auto-ml-multi-output-example.ipynb | 294 -- automl/11.auto-ml-sample-weight.ipynb | 251 -- ...l-retrieve-the-training-sdk-versions.ipynb | 227 -- automl/13a.auto-ml-dataprep.ipynb | 446 --- ...3b.auto-ml-dataprep-remote-execution.ipynb | 495 --- automl/14.auto-ml-model-explanation.ipynb | 374 --- .../15a.auto-ml-classification-ensemble.ipynb | 423 --- automl/15b.auto-ml-regression-ensemble.ipynb | 449 --- automl/README.md | 306 -- automl/automl_env.yml | 31 - automl/automl_env_mac.yml | 31 - automl/automl_setup.cmd | 52 - automl/automl_setup_linux.sh | 48 - automl/automl_setup_mac.sh | 51 - .../01.Installation_and_Configuration.ipynb | 1 - databricks/02.Ingest_data.ipynb | 1 - databricks/03a.Build_model.ipynb | 1 - databricks/03b.Build_model_runHistory.ipynb | 1 - databricks/04.Deploy_to_ACI.ipynb | 1 - .../05.Deploy_to_AKS_existingImage.ipynb | 1 - databricks/Databricks_AMLSDK_github.dbc | Bin 38702 -> 0 bytes databricks/readme.md | 29 - dataprep/getting-started.ipynb | 2985 ----------------- onnx/README.md | 28 - onnx/mnist.py | 124 - onnx/onnx-convert-aml-deploy-tinyyolo.ipynb | 435 --- ...facial-expression-recognition-deploy.ipynb | 809 ----- onnx/onnx-inference-mnist-deploy.ipynb | 792 ----- onnx/onnx-modelzoo-aml-deploy-resnet50.ipynb | 419 --- .../onnx-train-pytorch-aml-deploy-mnist.ipynb | 665 ---- pipeline/00.pipeline-setup.ipynb | 81 - pipeline/20news.pkl | Bin 5610406 -> 0 bytes pipeline/README.md | 48 - pipeline/aml-pipelines-concept.png | Bin 24462 -> 0 bytes pipeline/aml-pipelines-data-transfer.ipynb | 336 -- pipeline/aml-pipelines-getting-started.ipynb | 631 ---- ...-publish-and-run-using-rest-endpoint.ipynb | 358 -- ...pipelines-use-adla-as-compute-target.ipynb | 348 -- ...nes-use-databricks-as-compute-target.ipynb | 651 ---- ...pipelines-with-data-dependency-steps.ipynb | 409 --- pipeline/batch_scoring.py | 119 - pipeline/compare.py | 22 - pipeline/extract.py | 21 - pipeline/pipeline-batch-scoring.ipynb | 573 ---- pipeline/pipeline-style-transfer.ipynb | 610 ---- pipeline/test_adla_script.usql | 12 - pipeline/testdata.txt | 1 - pipeline/train-db-dbfs.py | 5 - pipeline/train-db-local.py | 5 - pipeline/train.py | 22 - .../project-brainwave-custom-weights.ipynb | 625 ---- .../project-brainwave-quickstart.ipynb | 312 -- .../project-brainwave-transfer-learning.ipynb | 572 ---- ...erparameter-tune-deploy-with-pytorch.ipynb | 812 ----- .../pytorch_score.py | 31 - .../pytorch_train.py | 184 - .../02.distributed-pytorch-with-horovod.ipynb | 313 -- .../pytorch_horovod_mnist.py | 157 - .../.gitignore | 1 - ...arameter-tune-deploy-with-tensorflow.ipynb | 1170 ------- .../nn.png | Bin 121768 -> 0 bytes .../tf_mnist.py | 106 - .../utils.py | 27 - .../.gitignore | 2 - ....distributed-tensorflow-with-horovod.ipynb | 400 --- .../tf_horovod_word2vec.py | 259 -- .../.gitignore | 1 - ...ted-tensorflow-with-parameter-server.ipynb | 312 -- .../tf_mnist_replica.py | 271 -- ....distributed-cntk-with-custom-docker.ipynb | 389 --- .../cntk_distr_mnist.py | 117 - .../install_mnist.py | 96 - training/07.tensorboard/07.tensorboard.ipynb | 529 --- ...08.export-run-history-to-tensorboard.ipynb | 248 -- tutorials/01.train-models.ipynb | 718 ---- tutorials/02.deploy-models.ipynb | 615 ---- tutorials/03.auto-train-models.ipynb | 427 --- tutorials/imgs/flow2.png | Bin 106278 -> 0 bytes 111 files changed, 28 insertions(+), 32702 deletions(-) delete mode 100644 00.configuration.ipynb delete mode 100644 01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb delete mode 100644 01.getting-started/01.train-within-notebook/score.py delete mode 100644 01.getting-started/02.train-on-local/02.train-on-local.ipynb delete mode 100644 01.getting-started/02.train-on-local/mylib.py delete mode 100644 01.getting-started/02.train-on-local/train.py delete mode 100644 01.getting-started/03.train-on-aci/03.train-on-aci.ipynb delete mode 100644 01.getting-started/03.train-on-aci/train.py delete mode 100644 01.getting-started/04.train-on-remote-vm/04.train-on-remote-vm.ipynb delete mode 100644 01.getting-started/04.train-on-remote-vm/train.py delete mode 100644 01.getting-started/05.train-in-spark/05.train-in-spark.ipynb delete mode 100644 01.getting-started/05.train-in-spark/iris.csv delete mode 100644 01.getting-started/05.train-in-spark/train-spark.py delete mode 100644 01.getting-started/06.logging-api/06.logging-api.ipynb delete mode 100644 01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb delete mode 100644 01.getting-started/10.register-model-create-image-deploy-service/sklearn_regression_model.pkl delete mode 100644 01.getting-started/11.production-deploy-to-aks/11.production-deploy-to-aks.ipynb delete mode 100644 01.getting-started/11.production-deploy-to-aks/sklearn_regression_model.pkl delete mode 100644 01.getting-started/12.enable-data-collection-for-models-in-aks/12.enable-data-collection-for-models-in-aks.ipynb delete mode 100644 01.getting-started/12.enable-data-collection-for-models-in-aks/sklearn_regression_model.pkl delete mode 100644 01.getting-started/13.enable-app-insights/13.enable-app-insights-in-production-service.ipynb delete mode 100644 automl/00.configuration.ipynb delete mode 100644 automl/01.auto-ml-classification.ipynb delete mode 100644 automl/02.auto-ml-regression.ipynb delete mode 100644 automl/03.auto-ml-remote-execution.ipynb delete mode 100644 automl/03b.auto-ml-remote-batchai.ipynb delete mode 100644 automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb delete mode 100644 automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb delete mode 100644 automl/06.auto-ml-sparse-data-train-test-split.ipynb delete mode 100644 automl/07.auto-ml-exploring-previous-runs.ipynb delete mode 100644 automl/08.auto-ml-remote-execution-with-DataStore.ipynb delete mode 100644 automl/09.auto-ml-classification-with-deployment.ipynb delete mode 100644 automl/10.auto-ml-multi-output-example.ipynb delete mode 100644 automl/11.auto-ml-sample-weight.ipynb delete mode 100644 automl/12.auto-ml-retrieve-the-training-sdk-versions.ipynb delete mode 100644 automl/13a.auto-ml-dataprep.ipynb delete mode 100644 automl/13b.auto-ml-dataprep-remote-execution.ipynb delete mode 100644 automl/14.auto-ml-model-explanation.ipynb delete mode 100644 automl/15a.auto-ml-classification-ensemble.ipynb delete mode 100644 automl/15b.auto-ml-regression-ensemble.ipynb delete mode 100644 automl/README.md delete mode 100644 automl/automl_env.yml delete mode 100644 automl/automl_env_mac.yml delete mode 100644 automl/automl_setup.cmd delete mode 100644 automl/automl_setup_linux.sh delete mode 100644 automl/automl_setup_mac.sh delete mode 100644 databricks/01.Installation_and_Configuration.ipynb delete mode 100644 databricks/02.Ingest_data.ipynb delete mode 100644 databricks/03a.Build_model.ipynb delete mode 100644 databricks/03b.Build_model_runHistory.ipynb delete mode 100644 databricks/04.Deploy_to_ACI.ipynb delete mode 100644 databricks/05.Deploy_to_AKS_existingImage.ipynb delete mode 100644 databricks/Databricks_AMLSDK_github.dbc delete mode 100644 databricks/readme.md delete mode 100644 dataprep/getting-started.ipynb delete mode 100644 onnx/README.md delete mode 100644 onnx/mnist.py delete mode 100644 onnx/onnx-convert-aml-deploy-tinyyolo.ipynb delete mode 100644 onnx/onnx-inference-facial-expression-recognition-deploy.ipynb delete mode 100644 onnx/onnx-inference-mnist-deploy.ipynb delete mode 100644 onnx/onnx-modelzoo-aml-deploy-resnet50.ipynb delete mode 100644 onnx/onnx-train-pytorch-aml-deploy-mnist.ipynb delete mode 100644 pipeline/00.pipeline-setup.ipynb delete mode 100644 pipeline/20news.pkl delete mode 100644 pipeline/README.md delete mode 100644 pipeline/aml-pipelines-concept.png delete mode 100644 pipeline/aml-pipelines-data-transfer.ipynb delete mode 100644 pipeline/aml-pipelines-getting-started.ipynb delete mode 100644 pipeline/aml-pipelines-publish-and-run-using-rest-endpoint.ipynb delete mode 100644 pipeline/aml-pipelines-use-adla-as-compute-target.ipynb delete mode 100644 pipeline/aml-pipelines-use-databricks-as-compute-target.ipynb delete mode 100644 pipeline/aml-pipelines-with-data-dependency-steps.ipynb delete mode 100644 pipeline/batch_scoring.py delete mode 100644 pipeline/compare.py delete mode 100644 pipeline/extract.py delete mode 100644 pipeline/pipeline-batch-scoring.ipynb delete mode 100644 pipeline/pipeline-style-transfer.ipynb delete mode 100644 pipeline/test_adla_script.usql delete mode 100644 pipeline/testdata.txt delete mode 100644 pipeline/train-db-dbfs.py delete mode 100644 pipeline/train-db-local.py delete mode 100644 pipeline/train.py delete mode 100644 project-brainwave/project-brainwave-custom-weights.ipynb delete mode 100644 project-brainwave/project-brainwave-quickstart.ipynb delete mode 100644 project-brainwave/project-brainwave-transfer-learning.ipynb delete mode 100644 training/01.train-hyperparameter-tune-deploy-with-pytorch/01.train-hyperparameter-tune-deploy-with-pytorch.ipynb delete mode 100644 training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_score.py delete mode 100644 training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_train.py delete mode 100644 training/02.distributed-pytorch-with-horovod/02.distributed-pytorch-with-horovod.ipynb delete mode 100644 training/02.distributed-pytorch-with-horovod/pytorch_horovod_mnist.py delete mode 100644 training/03.train-hyperparameter-tune-deploy-with-tensorflow/.gitignore delete mode 100644 training/03.train-hyperparameter-tune-deploy-with-tensorflow/03.train-hyperparameter-tune-deploy-with-tensorflow.ipynb delete mode 100644 training/03.train-hyperparameter-tune-deploy-with-tensorflow/nn.png delete mode 100644 training/03.train-hyperparameter-tune-deploy-with-tensorflow/tf_mnist.py delete mode 100644 training/03.train-hyperparameter-tune-deploy-with-tensorflow/utils.py delete mode 100644 training/04.distributed-tensorflow-with-horovod/.gitignore delete mode 100644 training/04.distributed-tensorflow-with-horovod/04.distributed-tensorflow-with-horovod.ipynb delete mode 100644 training/04.distributed-tensorflow-with-horovod/tf_horovod_word2vec.py delete mode 100644 training/05.distributed-tensorflow-with-parameter-server/.gitignore delete mode 100644 training/05.distributed-tensorflow-with-parameter-server/05.distributed-tensorflow-with-parameter-server.ipynb delete mode 100644 training/05.distributed-tensorflow-with-parameter-server/tf_mnist_replica.py delete mode 100644 training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb delete mode 100644 training/06.distributed-cntk-with-custom-docker/cntk_distr_mnist.py delete mode 100644 training/06.distributed-cntk-with-custom-docker/install_mnist.py delete mode 100644 training/07.tensorboard/07.tensorboard.ipynb delete mode 100644 training/08.export-run-history-to-tensorboard/08.export-run-history-to-tensorboard.ipynb delete mode 100644 tutorials/01.train-models.ipynb delete mode 100644 tutorials/02.deploy-models.ipynb delete mode 100644 tutorials/03.auto-train-models.ipynb delete mode 100644 tutorials/imgs/flow2.png diff --git a/00.configuration.ipynb b/00.configuration.ipynb deleted file mode 100644 index 14417eb4..00000000 --- a/00.configuration.ipynb +++ /dev/null @@ -1,313 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 00. Installation and configuration\n", - "This notebook configures your library of notebooks to connect to an Azure Machine Learning Workspace. In this case, a library contains all of the notebooks in the current folder and any nested folders. You can configure this notebook to use an existing workspace or create a new workspace.\n", - "\n", - "## What is an Azure ML Workspace and why do I need one?\n", - "\n", - "An AML Workspace is an Azure resource that organizes and coordinates the actions of many other Azure resources to assist in executing and sharing machine learning workflows. In particular, an AML Workspace coordinates storage, databases, and compute resources providing added functionality for machine learning experimentation, operationalization, and the monitoring of operationalized models." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1. Access Azure Subscription\n", - "\n", - "In order to create an AML Workspace, first you need access to an Azure Subscription. You can [create your own](https://azure.microsoft.com/en-us/free/) or get your existing subscription information from the [Azure portal](https://portal.azure.com).\n", - "\n", - "### 2. If you're running on your own local environment, install Azure ML SDK and other libraries\n", - "\n", - "If you are running in your own environment, follow [SDK installation instructions](https://docs.microsoft.com/azure/machine-learning/service/how-to-configure-environment). If you are running in Azure Notebooks or another Microsoft managed environment, the SDK is already installed.\n", - "\n", - "Also install following libraries to your environment. Many of the example notebooks depend on them\n", - "\n", - "```\n", - "(myenv) $ conda install -y matplotlib tqdm scikit-learn\n", - "```\n", - "\n", - "Once installation is complete, check the Azure ML SDK version:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "install" - ] - }, - "outputs": [], - "source": [ - "import azureml.core\n", - "\n", - "print(\"SDK Version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. Make sure your subscription is registered to use ACI\n", - "Azure Machine Learning makes use of Azure Container Instance (ACI). You need to ensure your subscription has been registered to use ACI in order be able to deploy a dev/test web service. If you have run through the quickstart experience you have already performed this step. Otherwise you will need to use the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) and execute the following commands.\n", - "\n", - "```shell\n", - "# check to see if ACI is already registered\n", - "(myenv) $ az provider show -n Microsoft.ContainerInstance -o table\n", - "\n", - "# if ACI is not registered, run this command.\n", - "# note you need to be the subscription owner in order to execute this command successfully.\n", - "(myenv) $ az provider register -n Microsoft.ContainerInstance\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set up your Azure Machine Learning workspace\n", - "\n", - "### Option 1: You have workspace already\n", - "If you ran the Azure Machine Learning [quickstart](https://docs.microsoft.com/en-us/azure/machine-learning/service/quickstart-get-started) in Azure Notebooks, you already have a configured workspace! You can go to your Azure Machine Learning Getting Started library, view *config.json* file, and copy-paste the values for subscription ID, resource group and workspace name below.\n", - "\n", - "If you have a workspace created another way, [these instructions](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-configure-environment#create-workspace-configuration-file) describe how to get your subscription and workspace information.\n", - "\n", - "If this cell succeeds, you're done configuring this library! Otherwise continue to follow the instructions in the rest of the notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "subscription_id = os.environ.get(\"SUBSCRIPTION_ID\", \"\")\n", - "resource_group = os.environ.get(\"RESOURCE_GROUP\", \"\")\n", - "workspace_name = os.environ.get(\"WORKSPACE_NAME\", \"\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "try:\n", - " ws = Workspace(subscription_id = subscription_id, resource_group = resource_group, workspace_name = workspace_name)\n", - " ws.write_config()\n", - " print('Workspace configuration succeeded. You are all set!')\n", - "except:\n", - " print('Workspace not found. Run the cells below.')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Option 2: You don't have workspace yet\n", - "\n", - "\n", - "#### Requirements\n", - "\n", - "Inside your Azure subscription, you will need access to a _resource group_, which organizes Azure resources and provides a default region for the resources in a group. You can see what resource groups to which you have access, or create a new one in the [Azure portal](https://portal.azure.com). If you don't have a resource group, the create workspace command will create one for you using the name you provide.\n", - "\n", - "To create or access an Azure ML Workspace, you will need to import the AML library and the following information:\n", - "* A name for your workspace\n", - "* Your subscription id\n", - "* The resource group name\n", - "\n", - "**Note**: As with other Azure services, there are limits on certain resources (for eg. AmlCompute quota) associated with the Azure Machine Learning service. Please read [this article](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-manage-quotas) on the default limits and how to request more quota." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Supported Azure Regions\n", - "Specify a region where your workspace will be located from the list of [Azure Machine Learning regions](https://linktoregions)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "subscription_id = os.environ.get(\"SUBSCRIPTION_ID\", \"\")\n", - "resource_group = os.environ.get(\"RESOURCE_GROUP\", \"my-aml-resource-group\")\n", - "workspace_name = os.environ.get(\"WORKSPACE_NAME\", \"my-first-workspace\")\n", - "\n", - "workspace_region = os.environ.get(\"WORKSPACE_REGION\", \"eastus2\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Create the workspace\n", - "This cell will create an AML workspace for you in a subscription provided you have the correct permissions.\n", - "\n", - "This will fail when:\n", - "1. You do not have permission to create a workspace in the resource group\n", - "2. You do not have permission to create a resource group if it's non-existing.\n", - "2. You are not a subscription owner or contributor and no Azure ML workspaces have ever been created in this subscription\n", - "\n", - "If workspace creation fails, please work with your IT admin to provide you with the appropriate permissions or to provision the required resources." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "# import the Workspace class and check the azureml SDK version\n", - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.create(name = workspace_name,\n", - " subscription_id = subscription_id,\n", - " resource_group = resource_group, \n", - " location = workspace_region,\n", - " create_resource_group = True,\n", - " exist_ok = True)\n", - "ws.get_details()\n", - "ws.write_config()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create compute resources for your training experiments\n", - "\n", - "Many of the subsequent examples use Azure Machine Learning managed compute (AmlCompute) to train models at scale. To create a **CPU** cluster now, run the cell below. The autoscale settings mean that the cluster will scale down to 0 nodes when inactive and up to 4 nodes when busy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# Choose a name for your CPU cluster\n", - "cpu_cluster_name = \"cpucluster\"\n", - "\n", - "# Verify that cluster does not exist already\n", - "try:\n", - " cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)\n", - " print('Found existing cluster, use it.')\n", - "except ComputeTargetException:\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',\n", - " max_nodes=4)\n", - " cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)\n", - "\n", - "cpu_cluster.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To create a **GPU** cluster, run the cell below. Note that your subscription must have sufficient quota for GPU VMs or the command will fail. To increase quota, see [these instructions](https://docs.microsoft.com/en-us/azure/azure-supportability/resource-manager-core-quotas-request). " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# Choose a name for your GPU cluster\n", - "gpu_cluster_name = \"gpucluster\"\n", - "\n", - "# Check if cluster exists already\n", - "try:\n", - " gpu_cluster = ComputeTarget(workspace=ws, name=gpu_cluster_name)\n", - " print('Found existing cluster, use it.')\n", - "except ComputeTargetException:\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',\n", - " max_nodes=4)\n", - " gpu_cluster = ComputeTarget.create(ws, gpu_cluster_name, compute_config)\n", - "\n", - "gpu_cluster.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Success!\n", - "Great, you are ready to move on to the rest of the sample notebooks. A good place to start is the [01.train-model tutorial](./tutorials/01.train-model.ipynb) to learn how to train and then deploy an image classification model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb b/01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb deleted file mode 100644 index 0ea784e5..00000000 --- a/01.getting-started/01.train-within-notebook/01.train-within-notebook.ipynb +++ /dev/null @@ -1,808 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 01. Train in the Notebook & Deploy Model to ACI\n", - "\n", - "* Load workspace\n", - "* Train a simple regression model directly in the Notebook python kernel\n", - "* Record run history\n", - "* Find the best model in run history and download it.\n", - "* Deploy the model as an Azure Container Instance (ACI)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "1. Make sure you go through the [00. Installation and Configuration](../../00.configuration.ipynb) Notebook first if you haven't. \n", - "\n", - "2. Install following pre-requisite libraries to your conda environment and restart notebook.\n", - "```shell\n", - "(myenv) $ conda install -y matplotlib tqdm scikit-learn\n", - "```\n", - "\n", - "3. Check that ACI is registered for your Azure Subscription. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!az provider show -n Microsoft.ContainerInstance -o table" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If ACI is not registered, run following command to register it. Note that you have to be a subscription owner, or this command will fail." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!az provider register -n Microsoft.ContainerInstance" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Validate Azure ML SDK installation and get version number for debugging purposes" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "install" - ] - }, - "outputs": [], - "source": [ - "from azureml.core import Experiment, Run, Workspace\n", - "import azureml.core\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep='\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set experiment name\n", - "Choose a name for experiment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "experiment_name = 'train-in-notebook'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start a training run in local Notebook" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# load diabetes dataset, a well-known small dataset that comes with scikit-learn\n", - "from sklearn.datasets import load_diabetes\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.metrics import mean_squared_error\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.externals import joblib\n", - "\n", - "X, y = load_diabetes(return_X_y = True)\n", - "columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", - "data = {\n", - " \"train\":{\"X\": X_train, \"y\": y_train}, \n", - " \"test\":{\"X\": X_test, \"y\": y_test}\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train a simple Ridge model\n", - "Train a very simple Ridge regression model in scikit-learn, and save it as a pickle file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reg = Ridge(alpha = 0.03)\n", - "reg.fit(X=data['train']['X'], y=data['train']['y'])\n", - "preds = reg.predict(data['test']['X'])\n", - "print('Mean Squared Error is', mean_squared_error(data['test']['y'], preds))\n", - "joblib.dump(value=reg, filename='model.pkl');" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add experiment tracking\n", - "Now, let's add Azure ML experiment logging, and upload persisted model into run record as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "local run", - "outputs upload" - ] - }, - "outputs": [], - "source": [ - "experiment = Experiment(workspace=ws, name=experiment_name)\n", - "run = experiment.start_logging()\n", - "\n", - "run.tag(\"Description\",\"My first run!\")\n", - "run.log('alpha', 0.03)\n", - "reg = Ridge(alpha=0.03)\n", - "reg.fit(data['train']['X'], data['train']['y'])\n", - "preds = reg.predict(data['test']['X'])\n", - "run.log('mse', mean_squared_error(data['test']['y'], preds))\n", - "joblib.dump(value=reg, filename='model.pkl')\n", - "run.upload_file(name='outputs/model.pkl', path_or_stream='./model.pkl')\n", - "\n", - "run.complete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can browse to the recorded run. Please make sure you use Chrome to navigate the run history page." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Simple parameter sweep\n", - "Sweep over alpha values of a sklearn ridge model, and capture metrics and trained model in the Azure ML experiment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import os\n", - "from tqdm import tqdm\n", - "\n", - "model_name = \"model.pkl\"\n", - "\n", - "# list of numbers from 0 to 1.0 with a 0.05 interval\n", - "alphas = np.arange(0.0, 1.0, 0.05)\n", - "\n", - "# try a bunch of alpha values in a Linear Regression (Ridge) model\n", - "for alpha in tqdm(alphas):\n", - " # create a bunch of runs, each train a model with a different alpha value\n", - " with experiment.start_logging() as run:\n", - " # Use Ridge algorithm to build a regression model\n", - " reg = Ridge(alpha=alpha)\n", - " reg.fit(X=data[\"train\"][\"X\"], y=data[\"train\"][\"y\"])\n", - " preds = reg.predict(X=data[\"test\"][\"X\"])\n", - " mse = mean_squared_error(y_true=data[\"test\"][\"y\"], y_pred=preds)\n", - "\n", - " # log alpha, mean_squared_error and feature names in run history\n", - " run.log(name=\"alpha\", value=alpha)\n", - " run.log(name=\"mse\", value=mse)\n", - " run.log_list(name=\"columns\", value=columns)\n", - "\n", - " with open(model_name, \"wb\") as file:\n", - " joblib.dump(value=reg, filename=file)\n", - " \n", - " # upload the serialized model into run history record\n", - " run.upload_file(name=\"outputs/\" + model_name, path_or_stream=model_name)\n", - "\n", - " # now delete the serialized model from local folder since it is already uploaded to run history \n", - " os.remove(path=model_name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# now let's take a look at the experiment in Azure portal.\n", - "experiment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Select best model from the experiment\n", - "Load all experiment run metrics recursively from the experiment into a dictionary object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "runs = {}\n", - "run_metrics = {}\n", - "\n", - "for r in tqdm(experiment.get_runs()):\n", - " metrics = r.get_metrics()\n", - " if 'mse' in metrics.keys():\n", - " runs[r.id] = r\n", - " run_metrics[r.id] = metrics" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now find the run with the lowest Mean Squared Error value" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run_id = min(run_metrics, key = lambda k: run_metrics[k]['mse'])\n", - "best_run = runs[best_run_id]\n", - "print('Best run is:', best_run_id)\n", - "print('Metrics:', run_metrics[best_run_id])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can add tags to your runs to make them easier to catalog" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "best_run.tag(key=\"Description\", value=\"The best one\")\n", - "best_run.get_tags()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot MSE over alpha\n", - "\n", - "Let's observe the best model visually by plotting the MSE values over alpha values:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "\n", - "best_alpha = run_metrics[best_run_id]['alpha']\n", - "min_mse = run_metrics[best_run_id]['mse']\n", - "\n", - "alpha_mse = np.array([(run_metrics[k]['alpha'], run_metrics[k]['mse']) for k in run_metrics.keys()])\n", - "sorted_alpha_mse = alpha_mse[alpha_mse[:,0].argsort()]\n", - "\n", - "plt.plot(sorted_alpha_mse[:,0], sorted_alpha_mse[:,1], 'r--')\n", - "plt.plot(sorted_alpha_mse[:,0], sorted_alpha_mse[:,1], 'bo')\n", - "\n", - "plt.xlabel('alpha', fontsize = 14)\n", - "plt.ylabel('mean squared error', fontsize = 14)\n", - "plt.title('MSE over alpha', fontsize = 16)\n", - "\n", - "# plot arrow\n", - "plt.arrow(x = best_alpha, y = min_mse + 39, dx = 0, dy = -26, ls = '-', lw = 0.4,\n", - " width = 0, head_width = .03, head_length = 8)\n", - "\n", - "# plot \"best run\" text\n", - "plt.text(x = best_alpha - 0.08, y = min_mse + 50, s = 'Best Run', fontsize = 14)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Register the best model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Find the model file saved in the run record of best run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "for f in best_run.get_file_names():\n", - " print(f)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can register this model in the model registry of the workspace" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "register model from history" - ] - }, - "outputs": [], - "source": [ - "model = best_run.register_model(model_name='best_model', model_path='outputs/model.pkl')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Verify that the model has been registered properly. If you have done this several times you'd see the version number auto-increases each time." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "register model from history" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "models = Model.list(workspace=ws, name='best_model')\n", - "for m in models:\n", - " print(m.name, m.version)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also download the registered model. Afterwards, you should see a `model.pkl` file in the current directory. You can then use it for local testing if you'd like." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "download file" - ] - }, - "outputs": [], - "source": [ - "# remove the model file if it is already on disk\n", - "if os.path.isfile('model.pkl'): \n", - " os.remove('model.pkl')\n", - "# download the model\n", - "model.download(target_dir=\"./\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Scoring script\n", - "\n", - "Now we are ready to build a Docker image and deploy the model in it as a web service. The first step is creating the scoring script. For convenience, we have created the scoring script for you. It is printed below as text, but you can also run `%pfile ./score.py` in a cell to show the file.\n", - "\n", - "Tbe scoring script consists of two functions: `init` that is used to load the model to memory when starting the container, and `run` that makes the prediction when web service is called. Please pay special attention to how the model is loaded in the `init()` function. When Docker image is built for this model, the actual model file is downloaded and placed on disk, and `get_model_path` function returns the local path where the model is placed." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open('./score.py', 'r') as scoring_script:\n", - " print(scoring_script.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create environment dependency file\n", - "\n", - "We need a environment dependency file `myenv.yml` to specify which libraries are needed by the scoring script when building the Docker image for web service deployment. We can manually create this file, or we can use the `CondaDependencies` API to automatically create this file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(conda_packages=[\"scikit-learn\"])\n", - "print(myenv.serialize_to_string())\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy web service into an Azure Container Instance\n", - "The deployment process takes the registered model and your scoring scrip, and builds a Docker image. It then deploys the Docker image into Azure Container Instance as a running container with an HTTP endpoint readying for scoring calls. Read more about [Azure Container Instance](https://azure.microsoft.com/en-us/services/container-instances/).\n", - "\n", - "Note ACI is great for quick and cost-effective dev/test deployment scenarios. For production workloads, please use [Azure Kubernentes Service (AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/) instead. Please follow in struction in [this notebook](11.production-deploy-to-aks.ipynb) to see how that can be done from Azure ML.\n", - " \n", - "** Note: ** The web service creation can take 6-7 minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice, Webservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores=1, \n", - " memory_gb=1, \n", - " tags={'sample name': 'AML 101'}, \n", - " description='This is a great example.')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note the below `WebService.deploy_from_model()` function takes a model object registered under the workspace. It then bakes the model file in the Docker image so it can be looked-up using the `Model.get_model_path()` function in `score.py`. \n", - "\n", - "If you have a local model file instead of a registered model object, you can also use the `WebService.deploy()` function which would register the model and then deploy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "image_config = ContainerImage.image_configuration(execution_script=\"score.py\", \n", - " runtime=\"python\", \n", - " conda_file=\"myenv.yml\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "%%time\n", - "# this will take 5-10 minutes to finish\n", - "# you can also use \"az container list\" command to find the ACI being deployed\n", - "service = Webservice.deploy_from_model(name='my-aci-svc',\n", - " deployment_config=aciconfig,\n", - " models=[model],\n", - " image_config=image_config,\n", - " workspace=ws)\n", - "\n", - "service.wait_for_deployment(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Test web service" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "print('web service is hosted in ACI:', service.scoring_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Use the `run` API to call the web service with one row of data to get a prediction." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "import json\n", - "# score the first row from the test set.\n", - "test_samples = json.dumps({\"data\": X_test[0:1, :].tolist()})\n", - "service.run(input_data = test_samples)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Feed the entire test set and calculate the errors (residual values)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "# score the entire test set.\n", - "test_samples = json.dumps({'data': X_test.tolist()})\n", - "\n", - "result = service.run(input_data = test_samples)\n", - "residual = result - y_test" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also send raw HTTP request to test the web service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "import requests\n", - "import json\n", - "\n", - "# 2 rows of input data, each with 10 made-up numerical features\n", - "input_data = \"{\\\"data\\\": [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]}\"\n", - "\n", - "headers = {'Content-Type':'application/json'}\n", - "\n", - "# for AKS deployment you'd need to the service key in the header as well\n", - "# api_key = service.get_key()\n", - "# headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)} \n", - "\n", - "resp = requests.post(service.scoring_uri, input_data, headers = headers)\n", - "print(resp.text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Residual graph\n", - "Plot a residual value graph to chart the errors on the entire test set. Observe the nice bell curve." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "f, (a0, a1) = plt.subplots(1, 2, gridspec_kw={'width_ratios':[3, 1], 'wspace':0, 'hspace': 0})\n", - "f.suptitle('Residual Values', fontsize = 18)\n", - "\n", - "f.set_figheight(6)\n", - "f.set_figwidth(14)\n", - "\n", - "a0.plot(residual, 'bo', alpha=0.4);\n", - "a0.plot([0,90], [0,0], 'r', lw=2)\n", - "a0.set_ylabel('residue values', fontsize=14)\n", - "a0.set_xlabel('test data set', fontsize=14)\n", - "\n", - "a1.hist(residual, orientation='horizontal', color='blue', bins=10, histtype='step');\n", - "a1.hist(residual, orientation='horizontal', color='blue', alpha=0.2, bins=10);\n", - "a1.set_yticklabels([])\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Delete ACI to clean up" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Deleting ACI is super fast!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "%%time\n", - "service.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/01.train-within-notebook/score.py b/01.getting-started/01.train-within-notebook/score.py deleted file mode 100644 index b0b95ac4..00000000 --- a/01.getting-started/01.train-within-notebook/score.py +++ /dev/null @@ -1,29 +0,0 @@ -import pickle -import json -import numpy as np -from sklearn.externals import joblib -from sklearn.linear_model import Ridge -from azureml.core.model import Model - - -def init(): - global model - # note here "best_model" is the name of the model registered under the workspace - # this call should return the path to the model.pkl file on the local disk. - model_path = Model.get_model_path(model_name='best_model') - # deserialize the model file back into a sklearn model - model = joblib.load(model_path) - - -# note you can pass in multiple rows for scoring -def run(raw_data): - try: - data = json.loads(raw_data)['data'] - data = np.array(data) - result = model.predict(data) - - # you can return any data type as long as it is JSON-serializable - return result.tolist() - except Exception as e: - result = str(e) - return result diff --git a/01.getting-started/02.train-on-local/02.train-on-local.ipynb b/01.getting-started/02.train-on-local/02.train-on-local.ipynb deleted file mode 100644 index 0bacd35b..00000000 --- a/01.getting-started/02.train-on-local/02.train-on-local.ipynb +++ /dev/null @@ -1,477 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 02. Train locally\n", - "* Create or load workspace.\n", - "* Create scripts locally.\n", - "* Create `train.py` in a folder, along with a `my.lib` file.\n", - "* Configure & execute a local run in a user-managed Python environment.\n", - "* Configure & execute a local run in a system-managed Python environment.\n", - "* Configure & execute a local run in a Docker environment.\n", - "* Query run metrics to find the best model\n", - "* Register model for operationalization." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep='\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create An Experiment\n", - "**Experiment** is a logical container in an Azure ML Workspace. It hosts run records which can include run metrics and output artifacts from your experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "experiment_name = 'train-on-local'\n", - "exp = Experiment(workspace=ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## View `train.py`\n", - "\n", - "`train.py` is already created for you." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open('./train.py', 'r') as f:\n", - " print(f.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note `train.py` also references a `mylib.py` file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open('./mylib.py', 'r') as f:\n", - " print(f.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure & Run\n", - "### User-managed environment\n", - "Below, we use a user-managed run, which means you are responsible to ensure all the necessary packages are available in the Python environment you choose to run the script." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "\n", - "# Editing a run configuration property on-fly.\n", - "run_config_user_managed = RunConfiguration()\n", - "\n", - "run_config_user_managed.environment.python.user_managed_dependencies = True\n", - "\n", - "# You can choose a specific Python environment by pointing to a Python path \n", - "#run_config.environment.python.interpreter_path = '/home/johndoe/miniconda3/envs/sdk2/bin/python'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Submit script to run in the user-managed environment\n", - "Note whole script folder is submitted for execution, including the `mylib.py` file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import ScriptRunConfig\n", - "\n", - "src = ScriptRunConfig(source_directory='./', script='train.py', run_config=run_config_user_managed)\n", - "run = exp.submit(src)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Get run history details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Block to wait till run finishes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### System-managed environment\n", - "You can also ask the system to build a new conda environment and execute your scripts in it. The environment is built once and will be reused in subsequent executions as long as the conda dependencies remain unchanged. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "run_config_system_managed = RunConfiguration()\n", - "\n", - "run_config_system_managed.environment.python.user_managed_dependencies = False\n", - "run_config_system_managed.auto_prepare_environment = True\n", - "\n", - "# Specify conda dependencies with scikit-learn\n", - "cd = CondaDependencies.create(conda_packages=['scikit-learn'])\n", - "run_config_system_managed.environment.python.conda_dependencies = cd" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Submit script to run in the system-managed environment\n", - "A new conda environment is built based on the conda dependencies object. If you are running this for the first time, this might take up to 5 mninutes. But this conda environment is reused so long as you don't change the conda dependencies." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "src = ScriptRunConfig(source_directory=\"./\", script='train.py', run_config=run_config_system_managed)\n", - "run = exp.submit(src)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Get run history details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Block and wait till run finishes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Docker-based execution\n", - "**IMPORTANT**: You must have Docker engine installed locally in order to use this execution mode. If your kernel is already running in a Docker container, such as **Azure Notebooks**, this mode will **NOT** work.\n", - "\n", - "You can also ask the system to pull down a Docker image and execute your scripts in it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run_config_docker = RunConfiguration()\n", - "run_config_docker.environment.python.user_managed_dependencies = False\n", - "run_config_docker.auto_prepare_environment = True\n", - "run_config_docker.environment.docker.enabled = True\n", - "run_config_docker.environment.docker.base_image = azureml.core.runconfig.DEFAULT_CPU_IMAGE\n", - "\n", - "# Specify conda dependencies with scikit-learn\n", - "cd = CondaDependencies.create(conda_packages=['scikit-learn'])\n", - "run_config_docker.environment.python.conda_dependencies = cd\n", - "\n", - "src = ScriptRunConfig(source_directory=\"./\", script='train.py', run_config=run_config_docker)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Submit script to run in the system-managed environment\n", - "A new conda environment is built based on the conda dependencies object. If you are running this for the first time, this might take up to 5 mninutes. But this conda environment is reused so long as you don't change the conda dependencies.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import subprocess\n", - "\n", - "# Check if Docker is installed and Linux containers are enables\n", - "if subprocess.run(\"docker -v\", shell=True) == 0:\n", - " out = subprocess.check_output(\"docker system info\", shell=True, encoding=\"ascii\").split(\"\\n\")\n", - " if not \"OSType: linux\" in out:\n", - " print(\"Switch Docker engine to use Linux containers.\")\n", - " else:\n", - " run = exp.submit(src)\n", - "else:\n", - " print(\"Docker engine not installed.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Get run history details\n", - "run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Query run metrics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history", - "get metrics" - ] - }, - "outputs": [], - "source": [ - "# get all metris logged in the run\n", - "run.get_metrics()\n", - "metrics = run.get_metrics()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's find the model that has the lowest MSE value logged." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "best_alpha = metrics['alpha'][np.argmin(metrics['mse'])]\n", - "\n", - "print('When alpha is {1:0.2f}, we have min MSE {0:0.2f}.'.format(\n", - " min(metrics['mse']), \n", - " best_alpha\n", - "))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also list all the files that are associated with this run record" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.get_file_names()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We know the model `ridge_0.40.pkl` is the best performing model from the eariler queries. So let's register it with the workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# supply a model name, and the full path to the serialized model file.\n", - "model = run.register_model(model_name='best_ridge_model', model_path='./outputs/ridge_0.40.pkl')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(model.name, model.version, model.url)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now you can deploy this model following the example in the 01 notebook." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/02.train-on-local/mylib.py b/01.getting-started/02.train-on-local/mylib.py deleted file mode 100644 index 08e4d1f4..00000000 --- a/01.getting-started/02.train-on-local/mylib.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import numpy as np - - -def get_alphas(): - # list of numbers from 0.0 to 1.0 with a 0.05 interval - return np.arange(0.0, 1.0, 0.05) diff --git a/01.getting-started/02.train-on-local/train.py b/01.getting-started/02.train-on-local/train.py deleted file mode 100644 index 42da5a6d..00000000 --- a/01.getting-started/02.train-on-local/train.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -from sklearn.datasets import load_diabetes -from sklearn.linear_model import Ridge -from sklearn.metrics import mean_squared_error -from sklearn.model_selection import train_test_split -from azureml.core.run import Run -from sklearn.externals import joblib -import os -import numpy as np -import mylib - -os.makedirs('./outputs', exist_ok=True) - -X, y = load_diabetes(return_X_y=True) - -run = Run.get_context() - -X_train, X_test, y_train, y_test = train_test_split(X, y, - test_size=0.2, - random_state=0) -data = {"train": {"X": X_train, "y": y_train}, - "test": {"X": X_test, "y": y_test}} - -# list of numbers from 0.0 to 1.0 with a 0.05 interval -alphas = mylib.get_alphas() - -for alpha in alphas: - # Use Ridge algorithm to create a regression model - reg = Ridge(alpha=alpha) - reg.fit(data["train"]["X"], data["train"]["y"]) - - preds = reg.predict(data["test"]["X"]) - mse = mean_squared_error(preds, data["test"]["y"]) - run.log('alpha', alpha) - run.log('mse', mse) - - model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha) - # save model in the outputs folder so it automatically get uploaded - with open(model_file_name, "wb") as file: - joblib.dump(value=reg, filename=os.path.join('./outputs/', - model_file_name)) - - print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse)) diff --git a/01.getting-started/03.train-on-aci/03.train-on-aci.ipynb b/01.getting-started/03.train-on-aci/03.train-on-aci.ipynb deleted file mode 100644 index 8218f62d..00000000 --- a/01.getting-started/03.train-on-aci/03.train-on-aci.ipynb +++ /dev/null @@ -1,289 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 03. Train on Azure Container Instance\n", - "\n", - "* Create Workspace\n", - "* Create `train.py` in the project folder.\n", - "* Configure an ACI (Azure Container Instance) run\n", - "* Execute in ACI" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create An Experiment\n", - "\n", - "**Experiment** is a logical container in an Azure ML Workspace. It hosts run records which can include run metrics and output artifacts from your experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "experiment_name = 'train-on-aci'\n", - "experiment = Experiment(workspace = ws, name = experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Remote execution on ACI\n", - "\n", - "The training script `train.py` is already created for you. Let's have a look." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open('./train.py', 'r') as f:\n", - " print(f.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure for using ACI\n", - "Linux-based ACI is available in `West US`, `East US`, `West Europe`, `North Europe`, `West US 2`, `Southeast Asia`, `Australia East`, `East US 2`, and `Central US` regions. See details [here](https://docs.microsoft.com/en-us/azure/container-instances/container-instances-quotas#region-availability)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure run" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "# create a new runconfig object\n", - "run_config = RunConfiguration()\n", - "\n", - "# signal that you want to use ACI to execute script.\n", - "run_config.target = \"containerinstance\"\n", - "\n", - "# ACI container group is only supported in certain regions, which can be different than the region the Workspace is in.\n", - "run_config.container_instance.region = 'eastus2'\n", - "\n", - "# set the ACI CPU and Memory \n", - "run_config.container_instance.cpu_cores = 1\n", - "run_config.container_instance.memory_gb = 2\n", - "\n", - "# enable Docker \n", - "run_config.environment.docker.enabled = True\n", - "\n", - "# set Docker base image to the default CPU-based image\n", - "run_config.environment.docker.base_image = azureml.core.runconfig.DEFAULT_CPU_IMAGE\n", - "\n", - "# use conda_dependencies.yml to create a conda environment in the Docker image for execution\n", - "run_config.environment.python.user_managed_dependencies = False\n", - "\n", - "# auto-prepare the Docker image when used for execution (if it is not already prepared)\n", - "run_config.auto_prepare_environment = True\n", - "\n", - "# specify CondaDependencies obj\n", - "run_config.environment.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Submit the Experiment\n", - "Finally, run the training job on the ACI" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "aci" - ] - }, - "outputs": [], - "source": [ - "%%time \n", - "from azureml.core.script_run_config import ScriptRunConfig\n", - "\n", - "script_run_config = ScriptRunConfig(source_directory='./',\n", - " script='train.py',\n", - " run_config=run_config)\n", - "\n", - "run = experiment.submit(script_run_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "# Show run details\n", - "run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "aci" - ] - }, - "outputs": [], - "source": [ - "%%time\n", - "# Shows output of the run on stdout.\n", - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "get metrics" - ] - }, - "outputs": [], - "source": [ - "# get all metris logged in the run\n", - "run.get_metrics()\n", - "metrics = run.get_metrics()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "print('When alpha is {1:0.2f}, we have min MSE {0:0.2f}.'.format(\n", - " min(metrics['mse']), \n", - " metrics['alpha'][np.argmin(metrics['mse'])]\n", - "))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# show all the files stored within the run record\n", - "run.get_file_names()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now you can take a model produced here, register it and then deploy as a web service." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/03.train-on-aci/train.py b/01.getting-started/03.train-on-aci/train.py deleted file mode 100644 index a1b89b75..00000000 --- a/01.getting-started/03.train-on-aci/train.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -from sklearn.datasets import load_diabetes -from sklearn.linear_model import Ridge -from sklearn.metrics import mean_squared_error -from sklearn.model_selection import train_test_split -from azureml.core.run import Run -from sklearn.externals import joblib -import os -import numpy as np - -os.makedirs('./outputs', exist_ok=True) - -X, y = load_diabetes(return_X_y=True) - -run = Run.get_context() - -X_train, X_test, y_train, y_test = train_test_split(X, y, - test_size=0.2, - random_state=0) -data = {"train": {"X": X_train, "y": y_train}, - "test": {"X": X_test, "y": y_test}} - -# list of numbers from 0.0 to 1.0 with a 0.05 interval -alphas = np.arange(0.0, 1.0, 0.05) - -for alpha in alphas: - # Use Ridge algorithm to create a regression model - reg = Ridge(alpha=alpha) - reg.fit(data["train"]["X"], data["train"]["y"]) - - preds = reg.predict(data["test"]["X"]) - mse = mean_squared_error(preds, data["test"]["y"]) - run.log('alpha', alpha) - run.log('mse', mse) - - model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha) - # save model in the outputs folder so it automatically get uploaded - with open(model_file_name, "wb") as file: - joblib.dump(value=reg, filename=os.path.join('./outputs/', - model_file_name)) - - print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse)) diff --git a/01.getting-started/04.train-on-remote-vm/04.train-on-remote-vm.ipynb b/01.getting-started/04.train-on-remote-vm/04.train-on-remote-vm.ipynb deleted file mode 100644 index 879f4e97..00000000 --- a/01.getting-started/04.train-on-remote-vm/04.train-on-remote-vm.ipynb +++ /dev/null @@ -1,631 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 04. Train in a remote Linux VM\n", - "* Create Workspace\n", - "* Create `train.py` file\n", - "* Create (or attach) DSVM as compute resource.\n", - "* Upoad data files into default datastore\n", - "* Configure & execute a run in a few different ways\n", - " - Use system-built conda\n", - " - Use existing Python environment\n", - " - Use Docker \n", - "* Find the best model in the run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep='\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Experiment\n", - "\n", - "**Experiment** is a logical container in an Azure ML Workspace. It hosts run records which can include run metrics and output artifacts from your experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "experiment_name = 'train-on-remote-vm'\n", - "\n", - "from azureml.core import Experiment\n", - "exp = Experiment(workspace=ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's also create a local folder to hold the training script." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "script_folder = './vm-run'\n", - "os.makedirs(script_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upload data files into datastore\n", - "Every workspace comes with a default datastore (and you can register more) which is backed by the Azure blob storage account associated with the workspace. We can use it to transfer data from local to the cloud, and access it from the compute target." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get the default datastore\n", - "ds = ws.get_default_datastore()\n", - "print(ds.name, ds.datastore_type, ds.account_name, ds.container_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load diabetes data from `scikit-learn` and save it as 2 local files." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.datasets import load_diabetes\n", - "import numpy as np\n", - "\n", - "training_data = load_diabetes()\n", - "np.save(file='./features.npy', arr=training_data['data'])\n", - "np.save(file='./labels.npy', arr=training_data['target'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's upload the 2 files into the default datastore under a path named `diabetes`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds.upload_files(['./features.npy', './labels.npy'], target_path='diabetes', overwrite=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## View `train.py`\n", - "\n", - "For convenience, we created a training script for you. It is printed below as a text, but you can also run `%pfile ./train.py` in a cell to show the file. Please pay special attention on how we are loading the features and labels from files in the `data_folder` path, which is passed in as an argument of the training script (shown later)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# copy train.py into the script folder\n", - "import shutil\n", - "shutil.copy('./train.py', os.path.join(script_folder, 'train.py'))\n", - "\n", - "with open(os.path.join(script_folder, './train.py'), 'r') as training_script:\n", - " print(training_script.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Linux DSVM as a compute target\n", - "\n", - "**Note**: To streamline the compute that Azure Machine Learning creates, we are making updates to support creating only single to multi-node AmlCompute. The DSVMCompute class will be deprecated in a later release, but the DSVM can be created using the below single line command and then attached(like any VM) using the sample code below. Also note, that we only support Linux VMs and the commands below will spin a Linux VM only.\n", - "\n", - "```shell\n", - "# create a DSVM in your resource group\n", - "# note you need to be at least a contributor to the resource group in order to execute this command successfully.\n", - "(myenv) $ az vm create --resource-group --name --image microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:latest --admin-username --admin-password --generate-ssh-keys --authentication-type password\n", - "```\n", - "\n", - "**Note**: You can also use [this url](https://portal.azure.com/#create/microsoft-dsvm.linux-data-science-vm-ubuntulinuxdsvmubuntu) to create the VM using the Azure Portal\n", - "\n", - "**Note**: If creation fails with a message about Marketplace purchase eligibilty, go to portal.azure.com, start creating DSVM there, and select \"Want to create programmatically\" to enable programmatic creation. Once you've enabled it, you can exit without actually creating VM.\n", - " \n", - "**Note**: By default SSH runs on port 22 and you don't need to specify it. But if for security reasons you switch to a different port (such as 5022), you can specify the port number in the provisioning configuration object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import DsvmCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "compute_target_name = 'mydsvm'\n", - "\n", - "try:\n", - " dsvm_compute = DsvmCompute(workspace=ws, name=compute_target_name)\n", - " print('found existing:', dsvm_compute.name)\n", - "except ComputeTargetException:\n", - " print('creating new.')\n", - " dsvm_config = DsvmCompute.provisioning_configuration(vm_size=\"Standard_D2_v2\")\n", - " dsvm_compute = DsvmCompute.create(ws, name=compute_target_name, provisioning_configuration=dsvm_config)\n", - " dsvm_compute.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Attach an existing Linux DSVM\n", - "You can also attach an existing Linux VM as a compute target. The default port is 22." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "'''\n", - "from azureml.core.compute import RemoteCompute \n", - "# if you want to connect using SSH key instead of username/password you can provide parameters private_key_file and private_key_passphrase \n", - "attached_dsvm_compute = RemoteCompute.attach(workspace=ws,\n", - " name=\"attached_vm\",\n", - " username='',\n", - " address='',\n", - " ssh_port=22,\n", - " password='')\n", - "attached_dsvm_compute.wait_for_completion(show_output=True)\n", - "'''\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure & Run\n", - "First let's create a `DataReferenceConfiguration` object to inform the system what data folder to download to the copmute target." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import DataReferenceConfiguration\n", - "dr = DataReferenceConfiguration(datastore_name=ds.name, \n", - " path_on_datastore='diabetes', \n", - " mode='download', # download files from datastore to compute target\n", - " overwrite=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can try a few different ways to run the training script in the VM." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Conda run\n", - "You can ask the system to build a conda environment based on your dependency specification, and submit your script to run there. Once the environment is built, and if you don't change your dependencies, it will be reused in subsequent runs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "# create a new RunConfig object\n", - "conda_run_config = RunConfiguration(framework=\"python\")\n", - "\n", - "# Set compute target to the Linux DSVM\n", - "conda_run_config.target = dsvm_compute.name\n", - "\n", - "# set the data reference of the run configuration\n", - "conda_run_config.data_references = {ds.name: dr}\n", - "\n", - "# specify CondaDependencies obj\n", - "conda_run_config.environment.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Run\n", - "from azureml.core import ScriptRunConfig\n", - "\n", - "src = ScriptRunConfig(source_directory=script_folder, \n", - " script='train.py', \n", - " run_config=conda_run_config, \n", - " # pass the datastore reference as a parameter to the training script\n", - " arguments=['--data-folder', str(ds.as_download())] \n", - " ) \n", - "run = exp.submit(config=src)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Show the run object. You can navigate to the Azure portal to see detailed information about the run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Native VM run\n", - "You can also configure to use an exiting Python environment in the VM to execute the script without asking the system to create a conda environment for you." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# create a new RunConfig object\n", - "vm_run_config = RunConfiguration(framework=\"python\")\n", - "\n", - "# Set compute target to the Linux DSVM\n", - "vm_run_config.target = dsvm_compute.name\n", - "\n", - "# set the data reference of the run coonfiguration\n", - "conda_run_config.data_references = {ds.name: dr}\n", - "\n", - "# Let system know that you will configure the Python environment yourself.\n", - "vm_run_config.environment.python.user_managed_dependencies = True" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The below run will likely fail because `train.py` needs dependency `azureml`, `scikit-learn` and others, which are not found in that Python environment. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "src = ScriptRunConfig(source_directory=script_folder, \n", - " script='train.py', \n", - " run_config=vm_run_config,\n", - " # pass the datastore reference as a parameter to the training script\n", - " arguments=['--data-folder', str(ds.as_download())])\n", - "run = exp.submit(config=src)\n", - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can choose to SSH into the VM and install Azure ML SDK, and any other missing dependencies, in that Python environment. For demonstration purposes, we simply are going to create another script `train2.py` that doesn't have azureml dependencies, and submit it instead." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $script_folder/train2.py\n", - "\n", - "print('####################################')\n", - "print('Hello World (without Azure ML SDK)!')\n", - "print('####################################')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's try again. And this time it should work fine." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "src = ScriptRunConfig(source_directory=script_folder, \n", - " script='train2.py', \n", - " run_config=vm_run_config)\n", - "run = exp.submit(config=src)\n", - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note even in this case you get a run record with some basic statistics." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configure a Docker run with new conda environment on the VM\n", - "You can execute in a Docker container in the VM. If you choose this option, the system will pull down a base Docker image, build a new conda environment in it if you ask for (you can also skip this if you are using a customer Docker image when a preconfigured Python environment), start a container, and run your script in there. This image is also uploaded into your ACR (Azure Container Registry) assoicated with your workspace, an reused if your dependencies don't change in the subsequent runs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "\n", - "# Load the \"cpu-dsvm.runconfig\" file (created by the above attach operation) in memory\n", - "docker_run_config = RunConfiguration(framework=\"python\")\n", - "\n", - "# Set compute target to the Linux DSVM\n", - "docker_run_config.target = dsvm_compute.name\n", - "\n", - "# Use Docker in the remote VM\n", - "docker_run_config.environment.docker.enabled = True\n", - "\n", - "# Use CPU base image from DockerHub\n", - "docker_run_config.environment.docker.base_image = azureml.core.runconfig.DEFAULT_CPU_IMAGE\n", - "print('Base Docker image is:', docker_run_config.environment.docker.base_image)\n", - "\n", - "# set the data reference of the run coonfiguration\n", - "docker_run_config.data_references = {ds.name: dr}\n", - "\n", - "# specify CondaDependencies obj\n", - "docker_run_config.environment.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit the Experiment\n", - "Submit script to run in the Docker image in the remote VM. If you run this for the first time, the system will download the base image, layer in packages specified in the `conda_dependencies.yml` file on top of the base image, create a container and then execute the script in the container." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "src = ScriptRunConfig(source_directory=script_folder, \n", - " script='train.py', \n", - " run_config=docker_run_config,\n", - " # pass the datastore reference as a parameter to the training script\n", - " arguments=['--data-folder', str(ds.as_download())])\n", - "run = exp.submit(config=src)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### View run history details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Find the best model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we have tried various execution modes, we can find the best model from the last run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get all metris logged in the run\n", - "run.get_metrics()\n", - "metrics = run.get_metrics()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# find the index where MSE is the smallest\n", - "indices = list(range(0, len(metrics['mse'])))\n", - "min_mse_index = min(indices, key=lambda x: metrics['mse'][x])\n", - "\n", - "print('When alpha is {1:0.2f}, we have min MSE {0:0.2f}.'.format(\n", - " metrics['mse'][min_mse_index], \n", - " metrics['alpha'][min_mse_index]\n", - "))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Clean up compute resource" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dsvm_compute.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "haining" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/04.train-on-remote-vm/train.py b/01.getting-started/04.train-on-remote-vm/train.py deleted file mode 100644 index 3c1983c7..00000000 --- a/01.getting-started/04.train-on-remote-vm/train.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import os -import argparse - -from sklearn.linear_model import Ridge -from sklearn.metrics import mean_squared_error -from sklearn.model_selection import train_test_split -from azureml.core.run import Run -from sklearn.externals import joblib - -import numpy as np - -os.makedirs('./outputs', exist_ok=True) -parser = argparse.ArgumentParser() -parser.add_argument('--data-folder', type=str, - dest='data_folder', help='data folder') -args = parser.parse_args() - -print('Data folder is at:', args.data_folder) -print('List all files: ', os.listdir(args.data_folder)) - -X = np.load(os.path.join(args.data_folder, 'features.npy')) -y = np.load(os.path.join(args.data_folder, 'labels.npy')) - -run = Run.get_context() - -X_train, X_test, y_train, y_test = train_test_split( - X, y, test_size=0.2, random_state=0) -data = {"train": {"X": X_train, "y": y_train}, - "test": {"X": X_test, "y": y_test}} - -# list of numbers from 0.0 to 1.0 with a 0.05 interval -alphas = np.arange(0.0, 1.0, 0.05) - -for alpha in alphas: - # Use Ridge algorithm to create a regression model - reg = Ridge(alpha=alpha) - reg.fit(data["train"]["X"], data["train"]["y"]) - - preds = reg.predict(data["test"]["X"]) - mse = mean_squared_error(preds, data["test"]["y"]) - run.log('alpha', alpha) - run.log('mse', mse) - - model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha) - with open(model_file_name, "wb") as file: - joblib.dump(value=reg, filename='outputs/' + model_file_name) - - print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse)) diff --git a/01.getting-started/05.train-in-spark/05.train-in-spark.ipynb b/01.getting-started/05.train-in-spark/05.train-in-spark.ipynb deleted file mode 100644 index 714168eb..00000000 --- a/01.getting-started/05.train-in-spark/05.train-in-spark.ipynb +++ /dev/null @@ -1,331 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 05. Train in Spark\n", - "* Create Workspace\n", - "* Create Experiment\n", - "* Copy relevant files to the script folder\n", - "* Configure and Run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep='\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Experiment\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "experiment_name = 'train-on-spark'\n", - "\n", - "from azureml.core import Experiment\n", - "exp = Experiment(workspace=ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## View `train-spark.py`\n", - "\n", - "For convenience, we created a training script for you. It is printed below as a text, but you can also run `%pfile ./train-spark.py` in a cell to show the file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open('train-spark.py', 'r') as training_script:\n", - " print(training_script.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure & Run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configure an ACI run\n", - "Before you try running on an actual Spark cluster, you can use a Docker image with Spark already baked in, and run it in ACI(Azure Container Registry)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "# use pyspark framework\n", - "aci_run_config = RunConfiguration(framework=\"pyspark\")\n", - "\n", - "# use ACI to run the Spark job\n", - "aci_run_config.target = 'containerinstance'\n", - "aci_run_config.container_instance.region = 'eastus2'\n", - "aci_run_config.container_instance.cpu_cores = 1\n", - "aci_run_config.container_instance.memory_gb = 2\n", - "\n", - "# specify base Docker image to use\n", - "aci_run_config.environment.docker.enabled = True\n", - "aci_run_config.environment.docker.base_image = azureml.core.runconfig.DEFAULT_MMLSPARK_CPU_IMAGE\n", - "\n", - "# specify CondaDependencies\n", - "cd = CondaDependencies()\n", - "cd.add_conda_package('numpy')\n", - "aci_run_config.environment.python.conda_dependencies = cd" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit script to ACI to run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import ScriptRunConfig\n", - "\n", - "script_run_config = ScriptRunConfig(source_directory = '.',\n", - " script= 'train-spark.py',\n", - " run_config = aci_run_config)\n", - "run = exp.submit(script_run_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note** you can also create a new VM, or attach an existing VM, and use Docker-based execution to run the Spark job. Please see the `04.train-in-vm` for example on how to configure and run in Docker mode in a VM." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Attach an HDI cluster\n", - "Now we can use a real Spark cluster, HDInsight for Spark, to run this job. To use HDI commpute target:\n", - " 1. Create a Spark for HDI cluster in Azure. Here are some [quick instructions](https://docs.microsoft.com/en-us/azure/hdinsight/spark/apache-spark-jupyter-spark-sql). Make sure you use the Ubuntu flavor, NOT CentOS.\n", - " 2. Enter the IP address, username and password below" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import HDInsightCompute\n", - "from azureml.exceptions import ComputeTargetException\n", - "\n", - "try:\n", - " # if you want to connect using SSH key instead of username/password you can provide parameters private_key_file and private_key_passphrase\n", - " hdi_compute = HDInsightCompute.attach(workspace=ws, \n", - " name=\"myhdi\", \n", - " address=\".azurehdinsight.net\", \n", - " ssh_port=22, \n", - " username='', \n", - " password='')\n", - "\n", - "except ComputeTargetException as e:\n", - " print(\"Caught = {}\".format(e.message))\n", - " \n", - " \n", - "hdi_compute.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configure HDI run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "\n", - "# use pyspark framework\n", - "hdi_run_config = RunConfiguration(framework=\"pyspark\")\n", - "\n", - "# Set compute target to the HDI cluster\n", - "hdi_run_config.target = hdi_compute.name\n", - "\n", - "# specify CondaDependencies object to ask system installing numpy\n", - "cd = CondaDependencies()\n", - "cd.add_conda_package('numpy')\n", - "hdi_run_config.environment.python.conda_dependencies = cd" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit the script to HDI" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import ScriptRunConfig\n", - "\n", - "script_run_config = ScriptRunConfig(source_directory = '.',\n", - " script= 'train-spark.py',\n", - " run_config = hdi_run_config)\n", - "run = exp.submit(config=script_run_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get the URL of the run history web page\n", - "run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get all metris logged in the run\n", - "metrics = run.get_metrics()\n", - "print(metrics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "authors": [ - { - "name": "aashishb" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/05.train-in-spark/iris.csv b/01.getting-started/05.train-in-spark/iris.csv deleted file mode 100644 index 396653cc..00000000 --- a/01.getting-started/05.train-in-spark/iris.csv +++ /dev/null @@ -1,150 +0,0 @@ -5.1,3.5,1.4,0.2,Iris-setosa -4.9,3.0,1.4,0.2,Iris-setosa -4.7,3.2,1.3,0.2,Iris-setosa -4.6,3.1,1.5,0.2,Iris-setosa -5.0,3.6,1.4,0.2,Iris-setosa -5.4,3.9,1.7,0.4,Iris-setosa -4.6,3.4,1.4,0.3,Iris-setosa -5.0,3.4,1.5,0.2,Iris-setosa -4.4,2.9,1.4,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa -5.4,3.7,1.5,0.2,Iris-setosa -4.8,3.4,1.6,0.2,Iris-setosa -4.8,3.0,1.4,0.1,Iris-setosa -4.3,3.0,1.1,0.1,Iris-setosa -5.8,4.0,1.2,0.2,Iris-setosa -5.7,4.4,1.5,0.4,Iris-setosa -5.4,3.9,1.3,0.4,Iris-setosa -5.1,3.5,1.4,0.3,Iris-setosa -5.7,3.8,1.7,0.3,Iris-setosa -5.1,3.8,1.5,0.3,Iris-setosa -5.4,3.4,1.7,0.2,Iris-setosa -5.1,3.7,1.5,0.4,Iris-setosa -4.6,3.6,1.0,0.2,Iris-setosa -5.1,3.3,1.7,0.5,Iris-setosa -4.8,3.4,1.9,0.2,Iris-setosa -5.0,3.0,1.6,0.2,Iris-setosa -5.0,3.4,1.6,0.4,Iris-setosa -5.2,3.5,1.5,0.2,Iris-setosa -5.2,3.4,1.4,0.2,Iris-setosa -4.7,3.2,1.6,0.2,Iris-setosa -4.8,3.1,1.6,0.2,Iris-setosa -5.4,3.4,1.5,0.4,Iris-setosa -5.2,4.1,1.5,0.1,Iris-setosa -5.5,4.2,1.4,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa -5.0,3.2,1.2,0.2,Iris-setosa -5.5,3.5,1.3,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa -4.4,3.0,1.3,0.2,Iris-setosa -5.1,3.4,1.5,0.2,Iris-setosa -5.0,3.5,1.3,0.3,Iris-setosa -4.5,2.3,1.3,0.3,Iris-setosa -4.4,3.2,1.3,0.2,Iris-setosa -5.0,3.5,1.6,0.6,Iris-setosa -5.1,3.8,1.9,0.4,Iris-setosa -4.8,3.0,1.4,0.3,Iris-setosa -5.1,3.8,1.6,0.2,Iris-setosa -4.6,3.2,1.4,0.2,Iris-setosa -5.3,3.7,1.5,0.2,Iris-setosa -5.0,3.3,1.4,0.2,Iris-setosa -7.0,3.2,4.7,1.4,Iris-versicolor -6.4,3.2,4.5,1.5,Iris-versicolor -6.9,3.1,4.9,1.5,Iris-versicolor -5.5,2.3,4.0,1.3,Iris-versicolor -6.5,2.8,4.6,1.5,Iris-versicolor -5.7,2.8,4.5,1.3,Iris-versicolor -6.3,3.3,4.7,1.6,Iris-versicolor -4.9,2.4,3.3,1.0,Iris-versicolor -6.6,2.9,4.6,1.3,Iris-versicolor -5.2,2.7,3.9,1.4,Iris-versicolor -5.0,2.0,3.5,1.0,Iris-versicolor -5.9,3.0,4.2,1.5,Iris-versicolor -6.0,2.2,4.0,1.0,Iris-versicolor -6.1,2.9,4.7,1.4,Iris-versicolor -5.6,2.9,3.6,1.3,Iris-versicolor -6.7,3.1,4.4,1.4,Iris-versicolor -5.6,3.0,4.5,1.5,Iris-versicolor -5.8,2.7,4.1,1.0,Iris-versicolor -6.2,2.2,4.5,1.5,Iris-versicolor -5.6,2.5,3.9,1.1,Iris-versicolor -5.9,3.2,4.8,1.8,Iris-versicolor -6.1,2.8,4.0,1.3,Iris-versicolor -6.3,2.5,4.9,1.5,Iris-versicolor -6.1,2.8,4.7,1.2,Iris-versicolor -6.4,2.9,4.3,1.3,Iris-versicolor -6.6,3.0,4.4,1.4,Iris-versicolor -6.8,2.8,4.8,1.4,Iris-versicolor -6.7,3.0,5.0,1.7,Iris-versicolor -6.0,2.9,4.5,1.5,Iris-versicolor -5.7,2.6,3.5,1.0,Iris-versicolor -5.5,2.4,3.8,1.1,Iris-versicolor -5.5,2.4,3.7,1.0,Iris-versicolor -5.8,2.7,3.9,1.2,Iris-versicolor -6.0,2.7,5.1,1.6,Iris-versicolor -5.4,3.0,4.5,1.5,Iris-versicolor -6.0,3.4,4.5,1.6,Iris-versicolor -6.7,3.1,4.7,1.5,Iris-versicolor -6.3,2.3,4.4,1.3,Iris-versicolor -5.6,3.0,4.1,1.3,Iris-versicolor -5.5,2.5,4.0,1.3,Iris-versicolor -5.5,2.6,4.4,1.2,Iris-versicolor -6.1,3.0,4.6,1.4,Iris-versicolor -5.8,2.6,4.0,1.2,Iris-versicolor -5.0,2.3,3.3,1.0,Iris-versicolor -5.6,2.7,4.2,1.3,Iris-versicolor -5.7,3.0,4.2,1.2,Iris-versicolor -5.7,2.9,4.2,1.3,Iris-versicolor -6.2,2.9,4.3,1.3,Iris-versicolor -5.1,2.5,3.0,1.1,Iris-versicolor -5.7,2.8,4.1,1.3,Iris-versicolor -6.3,3.3,6.0,2.5,Iris-virginica -5.8,2.7,5.1,1.9,Iris-virginica -7.1,3.0,5.9,2.1,Iris-virginica -6.3,2.9,5.6,1.8,Iris-virginica -6.5,3.0,5.8,2.2,Iris-virginica -7.6,3.0,6.6,2.1,Iris-virginica -4.9,2.5,4.5,1.7,Iris-virginica -7.3,2.9,6.3,1.8,Iris-virginica -6.7,2.5,5.8,1.8,Iris-virginica -7.2,3.6,6.1,2.5,Iris-virginica -6.5,3.2,5.1,2.0,Iris-virginica -6.4,2.7,5.3,1.9,Iris-virginica -6.8,3.0,5.5,2.1,Iris-virginica -5.7,2.5,5.0,2.0,Iris-virginica -5.8,2.8,5.1,2.4,Iris-virginica -6.4,3.2,5.3,2.3,Iris-virginica -6.5,3.0,5.5,1.8,Iris-virginica -7.7,3.8,6.7,2.2,Iris-virginica -7.7,2.6,6.9,2.3,Iris-virginica -6.0,2.2,5.0,1.5,Iris-virginica -6.9,3.2,5.7,2.3,Iris-virginica -5.6,2.8,4.9,2.0,Iris-virginica -7.7,2.8,6.7,2.0,Iris-virginica -6.3,2.7,4.9,1.8,Iris-virginica -6.7,3.3,5.7,2.1,Iris-virginica -7.2,3.2,6.0,1.8,Iris-virginica -6.2,2.8,4.8,1.8,Iris-virginica -6.1,3.0,4.9,1.8,Iris-virginica -6.4,2.8,5.6,2.1,Iris-virginica -7.2,3.0,5.8,1.6,Iris-virginica -7.4,2.8,6.1,1.9,Iris-virginica -7.9,3.8,6.4,2.0,Iris-virginica -6.4,2.8,5.6,2.2,Iris-virginica -6.3,2.8,5.1,1.5,Iris-virginica -6.1,2.6,5.6,1.4,Iris-virginica -7.7,3.0,6.1,2.3,Iris-virginica -6.3,3.4,5.6,2.4,Iris-virginica -6.4,3.1,5.5,1.8,Iris-virginica -6.0,3.0,4.8,1.8,Iris-virginica -6.9,3.1,5.4,2.1,Iris-virginica -6.7,3.1,5.6,2.4,Iris-virginica -6.9,3.1,5.1,2.3,Iris-virginica -5.8,2.7,5.1,1.9,Iris-virginica -6.8,3.2,5.9,2.3,Iris-virginica -6.7,3.3,5.7,2.5,Iris-virginica -6.7,3.0,5.2,2.3,Iris-virginica -6.3,2.5,5.0,1.9,Iris-virginica -6.5,3.0,5.2,2.0,Iris-virginica -6.2,3.4,5.4,2.3,Iris-virginica -5.9,3.0,5.1,1.8,Iris-virginica \ No newline at end of file diff --git a/01.getting-started/05.train-in-spark/train-spark.py b/01.getting-started/05.train-in-spark/train-spark.py deleted file mode 100644 index 2ee072e9..00000000 --- a/01.getting-started/05.train-in-spark/train-spark.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import numpy as np -import pyspark -import os -import urllib -import sys - -from pyspark.sql.functions import * -from pyspark.ml.classification import * -from pyspark.ml.evaluation import * -from pyspark.ml.feature import * -from pyspark.sql.types import StructType, StructField -from pyspark.sql.types import DoubleType, IntegerType, StringType - - -from azureml.core.run import Run - -# initialize logger -run = Run.get_context() - -# start Spark session -spark = pyspark.sql.SparkSession.builder.appName('Iris').getOrCreate() - -# print runtime versions -print('****************') -print('Python version: {}'.format(sys.version)) -print('Spark version: {}'.format(spark.version)) -print('****************') - -# load iris.csv into Spark dataframe -schema = StructType([ - StructField("sepal-length", DoubleType()), - StructField("sepal-width", DoubleType()), - StructField("petal-length", DoubleType()), - StructField("petal-width", DoubleType()), - StructField("class", StringType()) -]) - -data = spark.read.csv('iris.csv', header=False, schema=schema) -print("First 10 rows of Iris dataset:") -data.show(10) - -# vectorize all numerical columns into a single feature column -feature_cols = data.columns[:-1] -assembler = pyspark.ml.feature.VectorAssembler( - inputCols=feature_cols, outputCol='features') -data = assembler.transform(data) - -# convert text labels into indices -data = data.select(['features', 'class']) -label_indexer = pyspark.ml.feature.StringIndexer( - inputCol='class', outputCol='label').fit(data) -data = label_indexer.transform(data) - -# only select the features and label column -data = data.select(['features', 'label']) -print("Reading for machine learning") -data.show(10) - -# change regularization rate and you will likely get a different accuracy. -reg = 0.01 -# load regularization rate from argument if present -if len(sys.argv) > 1: - reg = float(sys.argv[1]) - -# log regularization rate -run.log("Regularization Rate", reg) - -# use Logistic Regression to train on the training set -train, test = data.randomSplit([0.70, 0.30]) -lr = pyspark.ml.classification.LogisticRegression(regParam=reg) -model = lr.fit(train) - -# predict on the test set -prediction = model.transform(test) -print("Prediction") -prediction.show(10) - -# evaluate the accuracy of the model using the test set -evaluator = pyspark.ml.evaluation.MulticlassClassificationEvaluator( - metricName='accuracy') -accuracy = evaluator.evaluate(prediction) - -print() -print('#####################################') -print('Regularization rate is {}'.format(reg)) -print("Accuracy is {}".format(accuracy)) -print('#####################################') -print() - -# log accuracy -run.log('Accuracy', accuracy) diff --git a/01.getting-started/06.logging-api/06.logging-api.ipynb b/01.getting-started/06.logging-api/06.logging-api.ipynb deleted file mode 100644 index 81013269..00000000 --- a/01.getting-started/06.logging-api/06.logging-api.ipynb +++ /dev/null @@ -1,328 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 06. Logging APIs\n", - "This notebook showcase various ways to use the Azure Machine Learning service run logging APIs, and view the results in the Azure portal." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](../../00.configuration.ipynb) Notebook first if you haven't. Also make sure you have tqdm and matplotlib installed in the current kernel.\n", - "\n", - "```\n", - "(myenv) $ conda install -y tqdm matplotlib\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Validate Azure ML SDK installation and get version number for debugging purposes" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "install" - ] - }, - "outputs": [], - "source": [ - "from azureml.core import Experiment, Run, Workspace\n", - "import azureml.core\n", - "import numpy as np\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep='\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set experiment\n", - "Create a new experiment (or get the one with such name)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "exp = Experiment(workspace=ws, name='logging-api-test')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Log metrics\n", - "We will start a run, and use the various logging APIs to record different types of metrics during the run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm\n", - "\n", - "# start logging for the run\n", - "run = exp.start_logging()\n", - "\n", - "# log a string value\n", - "run.log(name='Name', value='Logging API run')\n", - "\n", - "# log a numerical value\n", - "run.log(name='Magic Number', value=42)\n", - "\n", - "# Log a list of values. Note this will generate a single-variable line chart.\n", - "run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89])\n", - "\n", - "# create a dictionary to hold a table of values\n", - "sines = {}\n", - "sines['angle'] = []\n", - "sines['sine'] = []\n", - "\n", - "for i in tqdm(range(-10, 10)):\n", - " # log a metric value repeatedly, this will generate a single-variable line chart.\n", - " run.log(name='Sigmoid', value=1 / (1 + np.exp(-i)))\n", - " angle = i / 2.0\n", - " \n", - " # log a 2 (or more) values as a metric repeatedly. This will generate a 2-variable line chart if you have 2 numerical columns.\n", - " run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle))\n", - " \n", - " sines['angle'].append(angle)\n", - " sines['sine'].append(np.sin(angle))\n", - "\n", - "# log a dictionary as a table, this will generate a 2-variable chart if you have 2 numerical columns\n", - "run.log_table(name='Sine Wave', value=sines)\n", - "\n", - "run.complete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Even after the run is marked completed, you can still log things." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Log an image\n", - "This is how to log a _matplotlib_ pyplot object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "angle = np.linspace(-3, 3, 50)\n", - "plt.plot(angle, np.tanh(angle), label='tanh')\n", - "plt.legend(fontsize=12)\n", - "plt.title('Hyperbolic Tangent', fontsize=16)\n", - "plt.grid(True)\n", - "\n", - "run.log_image(name='Hyperbolic Tangent', plot=plt)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upload a file" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also upload an abitrary file. First, let's create a dummy file locally." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile myfile.txt\n", - "\n", - "This is a dummy file." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's upload this file into the run record as a run artifact, and display the properties after the upload." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "props = run.upload_file(name='myfile_in_the_cloud.txt', path_or_stream='./myfile.txt')\n", - "props.serialize()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Examine the run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's take a look at the run detail page in Azure portal. Make sure you checkout the various charts and plots generated/uploaded." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can get all the metrics in that run back." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.get_metrics()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also see the files uploaded for this run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.get_file_names()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also download all the files locally." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "os.makedirs('files', exist_ok=True)\n", - "\n", - "for f in run.get_file_names():\n", - " dest = os.path.join('files', f.split('/')[-1])\n", - " print('Downloading file {} to {}...'.format(f, dest))\n", - " run.download_file(f, dest) " - ] - } - ], - "metadata": { - "authors": [ - { - "name": "haining" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb b/01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb deleted file mode 100644 index ef226a20..00000000 --- a/01.getting-started/10.register-model-create-image-deploy-service/10.register-model-create-image-deploy-service.ipynb +++ /dev/null @@ -1,420 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 10. Register Model, Create Image and Deploy Service\n", - "\n", - "This example shows how to deploy a web service in step-by-step fashion:\n", - "\n", - " 1. Register model\n", - " 2. Query versions of models and select one to deploy\n", - " 3. Create Docker image\n", - " 4. Query versions of images\n", - " 5. Deploy the image as web service\n", - " \n", - "**IMPORTANT**:\n", - " * This notebook requires you to first complete \"01.SDK-101-Train-and-Deploy-to-ACI.ipynb\" Notebook\n", - " \n", - "The 101 Notebook taught you how to deploy a web service directly from model in one step. This Notebook shows a more advanced approach that gives you more control over model versions and Docker image versions. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can add tags and descriptions to your models. Note you need to have a `sklearn_linreg_model.pkl` file in the current directory. This file is generated by the 01 notebook. The below call registers that file as a model with the same name `sklearn_linreg_model.pkl` in the workspace.\n", - "\n", - "Using tags, you can track useful information such as the name and version of the machine learning library used to train the model. Note that tags must be alphanumeric." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "register model from file" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "import sklearn\n", - "\n", - "library_version = \"sklearn\"+sklearn.__version__.replace(\".\",\"x\")\n", - "\n", - "model = Model.register(model_path = \"sklearn_regression_model.pkl\",\n", - " model_name = \"sklearn_regression_model.pkl\",\n", - " tags = {'area': \"diabetes\", 'type': \"regression\", 'version': library_version},\n", - " description = \"Ridge regression model to predict diabetes\",\n", - " workspace = ws)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can explore the registered models within your workspace and query by tag. Models are versioned. If you call the register_model command many times with same model name, you will get multiple versions of the model with increasing version numbers." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "register model from file" - ] - }, - "outputs": [], - "source": [ - "regression_models = Model.list(workspace=ws, tags=['area'])\n", - "for m in regression_models:\n", - " print(\"Name:\", m.name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can pick a specific model to deploy" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(model.name, model.description, model.version, sep = '\\t')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create Docker Image" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Show `score.py`. Note that the `sklearn_regression_model.pkl` in the `get_model_path` call is referring to a model named `sklearn_linreg_model.pkl` registered under the workspace. It is NOT referenceing the local file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import pickle\n", - "import json\n", - "import numpy\n", - "from sklearn.externals import joblib\n", - "from sklearn.linear_model import Ridge\n", - "from azureml.core.model import Model\n", - "\n", - "def init():\n", - " global model\n", - " # note here \"sklearn_regression_model.pkl\" is the name of the model registered under\n", - " # this is a different behavior than before when the code is run locally, even though the code is the same.\n", - " model_path = Model.get_model_path('sklearn_regression_model.pkl')\n", - " # deserialize the model file back into a sklearn model\n", - " model = joblib.load(model_path)\n", - "\n", - "# note you can pass in multiple rows for scoring\n", - "def run(raw_data):\n", - " try:\n", - " data = json.loads(raw_data)['data']\n", - " data = numpy.array(data)\n", - " result = model.predict(data)\n", - " # you can return any datatype as long as it is JSON-serializable\n", - " return result.tolist()\n", - " except Exception as e:\n", - " error = str(e)\n", - " return error" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(conda_packages=['numpy','scikit-learn'])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that following command can take few minutes. \n", - "\n", - "You can add tags and descriptions to images. Also, an image can contain multiple models." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create image" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.image import Image, ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(runtime= \"python\",\n", - " execution_script=\"score.py\",\n", - " conda_file=\"myenv.yml\",\n", - " tags = {'area': \"diabetes\", 'type': \"regression\"},\n", - " description = \"Image with ridge regression model\")\n", - "\n", - "image = Image.create(name = \"myimage1\",\n", - " # this is the model object \n", - " models = [model],\n", - " image_config = image_config, \n", - " workspace = ws)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create image" - ] - }, - "outputs": [], - "source": [ - "image.wait_for_creation(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "List images by tag and find out the detailed build log for debugging." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create image" - ] - }, - "outputs": [], - "source": [ - "for i in Image.list(workspace = ws,tags = [\"area\"]):\n", - " print('{}(v.{} [{}]) stored at {} with build log {}'.format(i.name, i.version, i.creation_state, i.image_location, i.image_build_log_uri))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Deploy image as web service on Azure Container Instance\n", - "\n", - "Note that the service creation can take few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, \n", - " memory_gb = 1, \n", - " tags = {'area': \"diabetes\", 'type': \"regression\"}, \n", - " description = 'Predict diabetes using regression model')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "\n", - "aci_service_name = 'my-aci-service-2'\n", - "print(aci_service_name)\n", - "aci_service = Webservice.deploy_from_image(deployment_config = aciconfig,\n", - " image = image,\n", - " name = aci_service_name,\n", - " workspace = ws)\n", - "aci_service.wait_for_deployment(True)\n", - "print(aci_service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test web service" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Call the web service with some dummy input data to get a prediction." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "import json\n", - "\n", - "test_sample = json.dumps({'data': [\n", - " [1,2,3,4,5,6,7,8,9,10], \n", - " [10,9,8,7,6,5,4,3,2,1]\n", - "]})\n", - "test_sample = bytes(test_sample,encoding = 'utf8')\n", - "\n", - "prediction = aci_service.run(input_data=test_sample)\n", - "print(prediction)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Delete ACI to clean up" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "deploy service", - "aci" - ] - }, - "outputs": [], - "source": [ - "aci_service.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "raymondl" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/10.register-model-create-image-deploy-service/sklearn_regression_model.pkl b/01.getting-started/10.register-model-create-image-deploy-service/sklearn_regression_model.pkl deleted file mode 100644 index d10309b6cf4c8e87846850edfe8b8d54a1aa64f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmX|<&rcLF6vt=T1%{DT5XE00;?FfP6EJauKjMzrgOLdnGx0~`rRmHRcC<6?n;*&= zN%R0L{srpQlL>dP>%oH_y>T~@%bJ)Nz2J{-A-uzD`+a?Vub=jL(N7;SN|M-QVJt@+ z@qjWj34;Y{xXOce{sk14pr?X*HBBQ-Gzb*^IFCfr^m#(fC}&wnl7uvk)F+H229&nr zMvyfHHJ}&u$kh26=(9DuunPSy=oPz&3R1lW1CHa&{*$Jhtz}?%b^Xoju5Hv{&k78> zP)6nM5n+bIIHQSAMFx9YXh4cFPa?v?rxf!-0Au_Kjv^vpvXy(kXKN2W-78z0 z>vNZ`Pm(rkKN~H7ZCY%7rZV=8Sr`9mTen_aZBJFl-Q~M?+P^-#owpkc?F;ts_YsV( zD-%xj=Voq+)eoJuDzZ?&tPv}u7*0B>dP>%oH_y>T~@%bJ)Nz2J{-A-uzD`+a?Vub=jL(N7;SN|M-QVJt@+ z@qjWj34;Y{xXOce{sk14pr?X*HBBQ-Gzb*^IFCfr^m#(fC}&wnl7uvk)F+H229&nr zMvyfHHJ}&u$kh26=(9DuunPSy=oPz&3R1lW1CHa&{*$Jhtz}?%b^Xoju5Hv{&k78> zP)6nM5n+bIIHQSAMFx9YXh4cFPa?v?rxf!-0Au_Kjv^vpvXy(kXKN2W-78z0 z>vNZ`Pm(rkKN~H7ZCY%7rZV=8Sr`9mTen_aZBJFl-Q~M?+P^-#owpkc?F;ts_YsV( zD-%xj=Voq+)eoJuDzZ?&tPv}u7*0B>**/**resourcegroupname>**/**workspacename>**/**webservicename>**/**modelname>**/**modelversion>>**/**identifier>**/*year/month/day*/data.csv \n", - "\n", - "For doing further analysis you have multiple options:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### a. Create DataBricks cluter and connect it to your blob\n", - "https://docs.microsoft.com/en-us/azure/azure-databricks/quickstart-create-databricks-workspace-portal or in your databricks workspace you can look for the template \"Azure Blob Storage Import Example Notebook\".\n", - "\n", - "\n", - "Here is an example for setting up the file location to extract the relevant data:\n", - "\n", - " file_location = \"wasbs://mycontainer@storageaccountname.blob.core.windows.net/unknown/unknown/unknown-bigdataset-unknown/my_iterate_parking_inputs/2018/°/°/data.csv\" \n", - "file_type = \"csv\"\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b. Connect Blob to Power Bi (Small Data only)\n", - "1. Download and Open PowerBi Desktop\n", - "2. Select “Get Data” and click on “Azure Blob Storage” >> Connect\n", - "3. Add your storage account and enter your storage key.\n", - "4. Select the container where your Data Collection is stored and click on Edit. \n", - "5. In the query editor, click under “Name” column and add your Storage account Model path into the filter. Note: if you want to only look into files from a specific year or month, just expand the filter path. For example, just look into March data: /modeldata/subscriptionid>/resourcegroupname>/workspacename>/webservicename>/modelname>/modelversion>/identifier>/year>/3\n", - "6. Click on the double arrow aside the “Content” column to combine the files. \n", - "7. Click OK and the data will preload.\n", - "8. You can now click Close and Apply and start building your custom reports on your Model Input data." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Disable Data Collection" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "aks_service.update(collect_model_data=False)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "marthalc" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01.getting-started/12.enable-data-collection-for-models-in-aks/sklearn_regression_model.pkl b/01.getting-started/12.enable-data-collection-for-models-in-aks/sklearn_regression_model.pkl deleted file mode 100644 index d10309b6cf4c8e87846850edfe8b8d54a1aa64f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmX|<&rcLF6vt=T1%{DT5XE00;?FfP6EJauKjMzrgOLdnGx0~`rRmHRcC<6?n;*&= zN%R0L{srpQlL>dP>%oH_y>T~@%bJ)Nz2J{-A-uzD`+a?Vub=jL(N7;SN|M-QVJt@+ z@qjWj34;Y{xXOce{sk14pr?X*HBBQ-Gzb*^IFCfr^m#(fC}&wnl7uvk)F+H229&nr zMvyfHHJ}&u$kh26=(9DuunPSy=oPz&3R1lW1CHa&{*$Jhtz}?%b^Xoju5Hv{&k78> zP)6nM5n+bIIHQSAMFx9YXh4cFPa?v?rxf!-0Au_Kjv^vpvXy(kXKN2W-78z0 z>vNZ`Pm(rkKN~H7ZCY%7rZV=8Sr`9mTen_aZBJFl-Q~M?+P^-#owpkc?F;ts_YsV( zD-%xj=Voq+)eoJuDzZ?&tPv}u7*0B> deployments--> Select deployment--> Edit--> Advanced Settings--> Select \"Enable AppInsights diagnostics\"\n", - "\n", - "If you want to log custom traces, you will follow the standard deplyment process for AKS and you will:\n", - "1. Update scoring file.\n", - "2. Update aks configuration.\n", - "3. Build new image and deploy it. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Import your dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace, Run\n", - "from azureml.core.compute import AksCompute, ComputeTarget\n", - "from azureml.core.webservice import Webservice, AksWebservice\n", - "from azureml.core.image import Image\n", - "from azureml.core.model import Model\n", - "\n", - "import azureml.core\n", - "print(azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Set up your configuration and create a workspace\n", - "Follow Notebook 00 instructions to do this.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Register Model\n", - "Register an existing trained model, add descirption and tags." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Register the model\n", - "from azureml.core.model import Model\n", - "model = Model.register(model_path = \"sklearn_regression_model.pkl\", # this points to a local file\n", - " model_name = \"sklearn_regression_model.pkl\", # this is the name the model is registered as\n", - " tags = {'area': \"diabetes\", 'type': \"regression\"},\n", - " description = \"Ridge regression model to predict diabetes\",\n", - " workspace = ws)\n", - "\n", - "print(model.name, model.description, model.version)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. *Update your scoring file with custom print statements*\n", - "Here is an example:\n", - "### a. In your init function add:\n", - "```python\n", - "print (\"model initialized\" + time.strftime(\"%H:%M:%S\"))```\n", - "\n", - "### b. In your run function add:\n", - "```python\n", - "print (\"saving input data\" + time.strftime(\"%H:%M:%S\"))\n", - "print (\"saving prediction data\" + time.strftime(\"%H:%M:%S\"))```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import pickle\n", - "import json\n", - "import numpy \n", - "from sklearn.externals import joblib\n", - "from sklearn.linear_model import Ridge\n", - "from azureml.core.model import Model\n", - "from azureml.monitoring import ModelDataCollector\n", - "import time\n", - "\n", - "def init():\n", - " global model\n", - " #Print statement for appinsights custom traces:\n", - " print (\"model initialized\" + time.strftime(\"%H:%M:%S\"))\n", - " \n", - " # note here \"sklearn_regression_model.pkl\" is the name of the model registered under the workspace\n", - " # this call should return the path to the model.pkl file on the local disk.\n", - " model_path = Model.get_model_path(model_name = 'sklearn_regression_model.pkl')\n", - " \n", - " # deserialize the model file back into a sklearn model\n", - " model = joblib.load(model_path)\n", - " \n", - " global inputs_dc, prediction_dc\n", - " \n", - " # this setup will help us save our inputs under the \"inputs\" path in our Azure Blob\n", - " inputs_dc = ModelDataCollector(model_name=\"sklearn_regression_model\", identifier=\"inputs\", feature_names=[\"feat1\", \"feat2\"]) \n", - " \n", - " # this setup will help us save our ipredictions under the \"predictions\" path in our Azure Blob\n", - " prediction_dc = ModelDataCollector(\"sklearn_regression_model\", identifier=\"predictions\", feature_names=[\"prediction1\", \"prediction2\"]) \n", - " \n", - "# note you can pass in multiple rows for scoring\n", - "def run(raw_data):\n", - " global inputs_dc, prediction_dc\n", - " try:\n", - " data = json.loads(raw_data)['data']\n", - " data = numpy.array(data)\n", - " result = model.predict(data)\n", - " \n", - " #Print statement for appinsights custom traces:\n", - " print (\"saving input data\" + time.strftime(\"%H:%M:%S\"))\n", - " \n", - " #this call is saving our input data into our blob\n", - " inputs_dc.collect(data) \n", - " #this call is saving our prediction data into our blob\n", - " prediction_dc.collect(result)\n", - " \n", - " #Print statement for appinsights custom traces:\n", - " print (\"saving prediction data\" + time.strftime(\"%H:%M:%S\"))\n", - " # you can return any data type as long as it is JSON-serializable\n", - " return result.tolist()\n", - " except Exception as e:\n", - " error = str(e)\n", - " print (error + time.strftime(\"%H:%M:%S\"))\n", - " return error" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 5. *Create myenv.yml file*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(conda_packages=['numpy','scikit-learn'])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 6. Create your new Image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(execution_script = \"score.py\",\n", - " runtime = \"python\",\n", - " conda_file = \"myenv.yml\",\n", - " description = \"Image with ridge regression model\",\n", - " tags = {'area': \"diabetes\", 'type': \"regression\"}\n", - " )\n", - "\n", - "image = ContainerImage.create(name = \"myimage1\",\n", - " # this is the model object\n", - " models = [model],\n", - " image_config = image_config,\n", - " workspace = ws)\n", - "\n", - "image.wait_for_creation(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 7. Deploy to AKS service" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create AKS compute if you haven't done so (Notebook 11)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Use the default configuration (can also provide parameters to customize)\n", - "prov_config = AksCompute.provisioning_configuration()\n", - "\n", - "aks_name = 'my-aks-test1' \n", - "# Create the cluster\n", - "aks_target = ComputeTarget.create(workspace = ws, \n", - " name = aks_name, \n", - " provisioning_configuration = prov_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "aks_target.wait_for_completion(show_output = True)\n", - "print(aks_target.provisioning_state)\n", - "print(aks_target.provisioning_errors)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you already have a cluster you can attach the service to it:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```python \n", - "%%time\n", - "resource_id = '/subscriptions//resourcegroups//providers/Microsoft.ContainerService/managedClusters/'\n", - "create_name= 'myaks4'\n", - "aks_target = AksCompute.attach(workspace = ws, \n", - " name = create_name, \n", - " #esource_id=resource_id)\n", - "## Wait for the operation to complete\n", - "aks_target.wait_for_provisioning(True)```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### a. *Activate App Insights through updating AKS Webservice configuration*\n", - "In order to enable App Insights in your service you will need to update your AKS configuration file:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Set the web service configuration\n", - "aks_config = AksWebservice.deploy_configuration(enable_app_insights=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b. Deploy your service" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "aks_service_name ='aks-w-dc3'\n", - "\n", - "aks_service = Webservice.deploy_from_image(workspace = ws, \n", - " name = aks_service_name,\n", - " image = image,\n", - " deployment_config = aks_config,\n", - " deployment_target = aks_target\n", - " )\n", - "aks_service.wait_for_deployment(show_output = True)\n", - "print(aks_service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 8. Test your service " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "import json\n", - "\n", - "test_sample = json.dumps({'data': [\n", - " [1,28,13,45,54,6,57,8,8,10], \n", - " [101,9,8,37,6,45,4,3,2,41]\n", - "]})\n", - "test_sample = bytes(test_sample,encoding='utf8')\n", - "\n", - "prediction = aks_service.run(input_data=test_sample)\n", - "print(prediction)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 9. See your service telemetry in App Insights\n", - "1. Go to the [Azure Portal](https://portal.azure.com/)\n", - "2. All resources--> Select the subscription/resource group where you created your Workspace--> Select the App Insights type\n", - "3. Click on the AppInsights resource. You'll see a highlevel dashboard with information on Requests, Server response time and availability.\n", - "4. Click on the top banner \"Analytics\"\n", - "5. In the \"Schema\" section select \"traces\" and run your query.\n", - "6. Voila! All your custom traces should be there." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Disable App Insights" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "aks_service.update(enable_app_insights=False)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "marthalc" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/README.md b/README.md index 10675f5b..c3e34bd6 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,39 @@ -For full documentation for Azure Machine Learning service, visit **https://aka.ms/aml-docs**. -# Sample Notebooks for Azure Machine Learning service +# Azure Machine Learning service sample notebooks -To run the notebooks in this repository use one of these methods: +--- -## Use Azure Notebooks - Jupyter based notebooks in the Azure cloud +This repository contains example notebooks demonstrating the [Azure Machine Learning](https://azure.microsoft.com/en-us/services/machine-learning-service/) Python SDK +which allows you to build, train, deploy and manage machine learning solutions using Azure. The AML SDK +allows you the choice of using local or cloud compute resources, while managing +and maintaining the complete data science workflow from the cloud. -1. [![Azure Notebooks](https://notebooks.azure.com/launch.png)](https://aka.ms/aml-clone-azure-notebooks) -[Import sample notebooks ](https://aka.ms/aml-clone-azure-notebooks) into Azure Notebooks. -1. Follow the instructions in the [00.configuration](00.configuration.ipynb) notebook to create and connect to a workspace. -1. Open one of the sample notebooks. - - **Make sure the Azure Notebook kernel is set to `Python 3.6`** when you open a notebook. - - ![set kernel to Python 3.6](images/python36.png) +You can find instructions on setting up notebooks [here](./NBSETUP.md) +You can find full documentation for Azure Machine Learning [here](https://aka.ms/aml-docs) -## **Use your own notebook server** +## Getting Started -Video walkthrough: +These examples will provide you with an effective way to get started using AML. Once you're familiar with +some of the capabilities, explore the repository for specific topics. -[![get started video](images/yt_cover.png)](https://youtu.be/VIsXeTuW3FU) +- [Configuration](configuration.ipnyb) configures your notebook library to easily connect to an + Azure Machine Learning workspace, and sets up your workspace to be used by many of the other examples. You should + always run this first when setting up a notebook library on a new machine or in a new environment +- [Train in notebook](./tutorials/training/train-in-notebook) shows how to create a model directly in a notebook while recording + metrics and deploy that model to a test service +- [Train on remote](./tutorials/training/train-on-remote) takes the previous example and shows how to create the model on a cloud compute target +- [Production deploy to AKS](./tutorials/deployment/production-deploy-to-aks) shows how to create a production grade inferencing webservice -1. Setup a Jupyter Notebook server and [install the Azure Machine Learning SDK](https://docs.microsoft.com/en-us/azure/machine-learning/service/quickstart-create-workspace-with-python). -1. Clone [this repository](https://aka.ms/aml-notebooks). -1. You may need to install other packages for specific notebook. - - For example, to run the Azure Machine Learning Data Prep notebooks, install the extra dataprep SDK: - ``` - pip install --upgrade azureml-dataprep - ``` +## Tutorials -1. Start your notebook server. -1. Follow the instructions in the [00.configuration](00.configuration.ipynb) notebook to create and connect to a workspace. -1. Open one of the sample notebooks. +The [Tutorials](./Tutorials) folder contains notebooks for the tutorials described in the [Azure Machine Learning documentation](https://aka.ms/aml-docs) + +## How to use AML +The [How to use AML](./how-to-use-aml) folder contains specific examples demonstrating the features of the Azure Machine Learning SDK - -> Note: **Looking for automated machine learning samples?** -> For your convenience, you can use an installation script instead of the steps below for the automated ML notebooks. Go to the [automl folder README](automl/README.md) and follow the instructions. The script installs all packages needed for notebooks in that folder. - -# Contributing - -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.microsoft.com. - -When you submit a pull request, a CLA-bot will automatically determine whether you need to provide -a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions -provided by the bot. You will only need to do this once across all repos using our CLA. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. +- [Training](./how-to-use-aml/training) - Examples of how to build models using AML's logging and execution capabilities on local and remote compute targets. +- [Training with Deep Learning](./how-to-use-aml/training-with-deep-learning) - Examples demonstrating how to build deep learning models using estimators and parameter sweeps +- [Automated Machine Learning](./how-to-use-aml/automated-machine-learning) - Examples using Automated Machine Learning to automatically generate optimal machine learning pipelines and models +- [Machine Learning Pipelines](./how-to-use-aml/machine-learning-pipelines) - Examples showing how to create and use reusable pipelines for training and batch scoring +- [Deployment](./how-to-use-aml/deployment) - Examples showing how to deploy and manage machine learning models and solutions diff --git a/automl/00.configuration.ipynb b/automl/00.configuration.ipynb deleted file mode 100644 index 737cd5c2..00000000 --- a/automl/00.configuration.ipynb +++ /dev/null @@ -1,224 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 00. Configuration\n", - "\n", - "In this example you will create an Azure Machine Learning `Workspace` object and initialize your notebook directory to easily reload this object from a configuration file. Typically you will only need to run this once per notebook directory, and all other notebooks in this directory or any sub-directories will automatically use the settings you indicate here.\n", - "\n", - "\n", - "## Prerequisites:\n", - "\n", - "Before running this notebook, run the `automl_setup` script described in README.md.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register Machine Learning Services Resource Provider\n", - "\n", - "Microsoft.MachineLearningServices only needs to be registed once in the subscription.\n", - "To register it:\n", - "1. Start the Azure portal.\n", - "2. Select your `All services` and then `Subscription`.\n", - "3. Select the subscription that you want to use.\n", - "4. Click on `Resource providers`\n", - "3. Click the `Register` link next to Microsoft.MachineLearningServices" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Check the Azure ML Core SDK Version to Validate Your Installation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import azureml.core\n", - "\n", - "print(\"SDK Version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize an Azure ML Workspace\n", - "### What is an Azure ML Workspace and Why Do I Need One?\n", - "\n", - "An Azure ML workspace is an Azure resource that organizes and coordinates the actions of many other Azure resources to assist in executing and sharing machine learning workflows. In particular, an Azure ML workspace coordinates storage, databases, and compute resources providing added functionality for machine learning experimentation, operationalization, and the monitoring of operationalized models.\n", - "\n", - "\n", - "### What do I Need?\n", - "\n", - "To create or access an Azure ML workspace, you will need to import the Azure ML library and specify following information:\n", - "* A name for your workspace. You can choose one.\n", - "* Your subscription id. Use the `id` value from the `az account show` command output above.\n", - "* The resource group name. The resource group organizes Azure resources and provides a default region for the resources in the group. The resource group will be created if it doesn't exist. Resource groups can be created and viewed in the [Azure portal](https://portal.azure.com)\n", - "* Supported regions include `eastus2`, `eastus`,`westcentralus`, `southeastasia`, `westeurope`, `australiaeast`, `westus2`, `southcentralus`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "subscription_id = \"\"\n", - "resource_group = \"myrg\"\n", - "workspace_name = \"myws\"\n", - "workspace_region = \"eastus2\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating a Workspace\n", - "If you already have access to an Azure ML workspace you want to use, you can skip this cell. Otherwise, this cell will create an Azure ML workspace for you in the specified subscription, provided you have the correct permissions for the given `subscription_id`.\n", - "\n", - "This will fail when:\n", - "1. The workspace already exists.\n", - "2. You do not have permission to create a workspace in the resource group.\n", - "3. You are not a subscription owner or contributor and no Azure ML workspaces have ever been created in this subscription.\n", - "\n", - "If workspace creation fails for any reason other than already existing, please work with your IT administrator to provide you with the appropriate permissions or to provision the required resources.\n", - "\n", - "**Note:** Creation of a new workspace can take several minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Import the Workspace class and check the Azure ML SDK version.\n", - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.create(name = workspace_name,\n", - " subscription_id = subscription_id,\n", - " resource_group = resource_group, \n", - " location = workspace_region)\n", - "ws.get_details()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configuring Your Local Environment\n", - "You can validate that you have access to the specified workspace and write a configuration file to the default configuration location, `./aml_config/config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace(workspace_name = workspace_name,\n", - " subscription_id = subscription_id,\n", - " resource_group = resource_group)\n", - "\n", - "# Persist the subscription id, resource group name, and workspace name in aml_config/config.json.\n", - "ws.write_config()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can then load the workspace from this config file from any notebook in the current directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load workspace configuration from ./aml_config/config.json file.\n", - "my_workspace = Workspace.from_config()\n", - "my_workspace.get_details()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a Folder to Host All Sample Projects\n", - "Finally, create a folder where all the sample projects will be hosted." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "sample_projects_folder = './sample_projects'\n", - "\n", - "if not os.path.isdir(sample_projects_folder):\n", - " os.mkdir(sample_projects_folder)\n", - " \n", - "print('Sample projects will be created in {}.'.format(sample_projects_folder))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Success!\n", - "Great, you are ready to move on to the rest of the sample notebooks." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/01.auto-ml-classification.ipynb b/automl/01.auto-ml-classification.ipynb deleted file mode 100644 index c4330d01..00000000 --- a/automl/01.auto-ml-classification.ipynb +++ /dev/null @@ -1,414 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 01: Classification with Local Compute\n", - "\n", - "In this example we use the scikit-learn's [digit dataset](http://scikit-learn.org/stable/datasets/index.html#optical-recognition-of-handwritten-digits-dataset) to showcase how you can use AutoML for a simple classification problem.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Configure AutoML using `AutoMLConfig`.\n", - "3. Train the model using local compute.\n", - "4. Explore the results.\n", - "5. Test the best fitted model.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the experiment and specify the project folder.\n", - "experiment_name = 'automl-local-classification'\n", - "project_folder = './sample_projects/automl-local-classification'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Load Training Data\n", - "\n", - "This uses scikit-learn's [load_digits](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn import datasets\n", - "\n", - "digits = datasets.load_digits()\n", - "\n", - "# Exclude the first 100 rows from training so that they can be used for test.\n", - "X_train = digits.data[100:,:]\n", - "y_train = digits.target[100:]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate an `AutoMLConfig` object to specify the settings and data used to run the experiment.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers.|\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iteration_timeout_minutes = 60,\n", - " iterations = 25,\n", - " n_cross_validations = 3,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Optionally, you can continue an interrupted local run by calling `continue_experiment` without the `iterations` parameter, or run more iterations for a completed run by specifying the `iterations` parameter:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = local_run.continue_experiment(X = X_train, \n", - " y = y_train, \n", - " show_output = True,\n", - " iterations = 5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. The Model includes the pipeline and any pre-processing. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model that has the smallest `log_loss` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"log_loss\"\n", - "best_run, fitted_model = local_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the third iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 3\n", - "third_run, third_model = local_run.get_output(iteration = iteration)\n", - "print(third_run)\n", - "print(third_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Fitted Model\n", - "\n", - "#### Load Test Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Testing Our Best Fitted Model\n", - "We will try to predict 2 digits and see how our model works." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Randomly select digits and test.\n", - "for index in np.random.choice(len(y_test), 2, replace = False):\n", - " print(index)\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " title = \"Label value = %d Predicted value = %d \" % (label, predicted)\n", - " fig = plt.figure(1, figsize = (3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/02.auto-ml-regression.ipynb b/automl/02.auto-ml-regression.ipynb deleted file mode 100644 index fcc5b55e..00000000 --- a/automl/02.auto-ml-regression.ipynb +++ /dev/null @@ -1,415 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 02: Regression with Local Compute\n", - "\n", - "In this example we use the scikit-learn's [diabetes dataset](http://scikit-learn.org/stable/datasets/index.html#diabetes-dataset) to showcase how you can use AutoML for a simple regression problem.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Configure AutoML using `AutoMLConfig`.\n", - "3. Train the model using local compute.\n", - "4. Explore the results.\n", - "5. Test the best fitted model.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the experiment and specify the project folder.\n", - "experiment_name = 'automl-local-regression'\n", - "project_folder = './sample_projects/automl-local-regression'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load Training Data\n", - "This uses scikit-learn's [load_diabetes](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load the diabetes dataset, a well-known built-in small dataset that comes with scikit-learn.\n", - "from sklearn.datasets import load_diabetes\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.metrics import mean_squared_error\n", - "from sklearn.model_selection import train_test_split\n", - "\n", - "X, y = load_diabetes(return_X_y = True)\n", - "\n", - "columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']\n", - "\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate an `AutoMLConfig` object to specify the settings and data used to run the experiment.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize. Regression supports the following primary metrics:
spearman_correlation
normalized_root_mean_squared_error
r2_score
normalized_mean_absolute_error|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers.|\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'regression',\n", - " iteration_timeout_minutes = 10,\n", - " iterations = 10,\n", - " primary_metric = 'spearman_correlation',\n", - " n_cross_validations = 5,\n", - " debug_log = 'automl.log',\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. The Model includes the pipeline and any pre-processing. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model that has the smallest `root_mean_squared_error` value (which turned out to be the same as the one with largest `spearman_correlation` value):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"root_mean_squared_error\"\n", - "best_run, fitted_model = local_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the third iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 3\n", - "third_run, third_model = local_run.get_output(iteration = iteration)\n", - "print(third_run)\n", - "print(third_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Fitted Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Predict on training and test set, and calculate residual values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "y_pred_train = fitted_model.predict(X_train)\n", - "y_residual_train = y_train - y_pred_train\n", - "\n", - "y_pred_test = fitted_model.predict(X_test)\n", - "y_residual_test = y_test - y_pred_test" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from sklearn import datasets\n", - "from sklearn.metrics import mean_squared_error, r2_score\n", - "\n", - "# Set up a multi-plot chart.\n", - "f, (a0, a1) = plt.subplots(1, 2, gridspec_kw = {'width_ratios':[1, 1], 'wspace':0, 'hspace': 0})\n", - "f.suptitle('Regression Residual Values', fontsize = 18)\n", - "f.set_figheight(6)\n", - "f.set_figwidth(16)\n", - "\n", - "# Plot residual values of training set.\n", - "a0.axis([0, 360, -200, 200])\n", - "a0.plot(y_residual_train, 'bo', alpha = 0.5)\n", - "a0.plot([-10,360],[0,0], 'r-', lw = 3)\n", - "a0.text(16,170,'RMSE = {0:.2f}'.format(np.sqrt(mean_squared_error(y_train, y_pred_train))), fontsize = 12)\n", - "a0.text(16,140,'R2 score = {0:.2f}'.format(r2_score(y_train, y_pred_train)), fontsize = 12)\n", - "a0.set_xlabel('Training samples', fontsize = 12)\n", - "a0.set_ylabel('Residual Values', fontsize = 12)\n", - "\n", - "# Plot a histogram.\n", - "a0.hist(y_residual_train, orientation = 'horizontal', color = 'b', bins = 10, histtype = 'step');\n", - "a0.hist(y_residual_train, orientation = 'horizontal', color = 'b', alpha = 0.2, bins = 10);\n", - "\n", - "# Plot residual values of test set.\n", - "a1.axis([0, 90, -200, 200])\n", - "a1.plot(y_residual_test, 'bo', alpha = 0.5)\n", - "a1.plot([-10,360],[0,0], 'r-', lw = 3)\n", - "a1.text(5,170,'RMSE = {0:.2f}'.format(np.sqrt(mean_squared_error(y_test, y_pred_test))), fontsize = 12)\n", - "a1.text(5,140,'R2 score = {0:.2f}'.format(r2_score(y_test, y_pred_test)), fontsize = 12)\n", - "a1.set_xlabel('Test samples', fontsize = 12)\n", - "a1.set_yticklabels([])\n", - "\n", - "# Plot a histogram.\n", - "a1.hist(y_residual_test, orientation = 'horizontal', color = 'b', bins = 10, histtype = 'step')\n", - "a1.hist(y_residual_test, orientation = 'horizontal', color = 'b', alpha = 0.2, bins = 10)\n", - "\n", - "plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/03.auto-ml-remote-execution.ipynb b/automl/03.auto-ml-remote-execution.ipynb deleted file mode 100644 index 3fd5aafa..00000000 --- a/automl/03.auto-ml-remote-execution.ipynb +++ /dev/null @@ -1,485 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 03: Remote Execution using DSVM (Ubuntu)\n", - "\n", - "In this example we use the scikit-learn's [digit dataset](http://scikit-learn.org/stable/datasets/index.html#optical-recognition-of-handwritten-digits-dataset) to showcase how you can use AutoML for a simple classification problem.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you wiil learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Attach an existing DSVM to a workspace.\n", - "3. Configure AutoML using `AutoMLConfig`.\n", - "4. Train the model using the DSVM.\n", - "5. Explore the results.\n", - "6. Test the best fitted model.\n", - "\n", - "In addition, this notebook showcases the following features:\n", - "- **Parallel** executions for iterations\n", - "- **Asynchronous** tracking of progress\n", - "- **Cancellation** of individual iterations or the entire run\n", - "- Retrieving models for any iteration or logged metric\n", - "- Specifying AutoML settings as `**kwargs`\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the run history container in the workspace.\n", - "experiment_name = 'automl-remote-dsvm4'\n", - "project_folder = './sample_projects/automl-remote-dsvm4'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a Remote Linux DSVM\n", - "**Note:** If creation fails with a message about Marketplace purchase eligibilty, start creation of a DSVM through the [Azure portal](https://portal.azure.com), and select \"Want to create programmatically\" to enable programmatic creation. Once you've enabled this setting, you can exit the portal without actually creating the DSVM, and creation of the DSVM through the notebook should work.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import DsvmCompute\n", - "\n", - "dsvm_name = 'mydsvma'\n", - "try:\n", - " dsvm_compute = DsvmCompute(ws, dsvm_name)\n", - " print('Found an existing DSVM.')\n", - "except:\n", - " print('Creating a new DSVM.')\n", - " dsvm_config = DsvmCompute.provisioning_configuration(vm_size = \"Standard_D2_v2\")\n", - " dsvm_compute = DsvmCompute.create(ws, name = dsvm_name, provisioning_configuration = dsvm_config)\n", - " dsvm_compute.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Get Data File\n", - "For remote executions you should author a `get_data.py` file containing a `get_data()` function. This file should be in the root directory of the project. You can encapsulate code to read data either from a blob storage or local disk in this file.\n", - "In this example, the `get_data()` function returns data using scikit-learn's [load_digits](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if not os.path.exists(project_folder):\n", - " os.makedirs(project_folder)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $project_folder/get_data.py\n", - "\n", - "from sklearn import datasets\n", - "from scipy import sparse\n", - "import numpy as np\n", - "\n", - "def get_data():\n", - " \n", - " digits = datasets.load_digits()\n", - " X_train = digits.data[100:,:]\n", - " y_train = digits.target[100:]\n", - "\n", - " return { \"X\" : X_train, \"y\" : y_train }" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML \n", - "\n", - "You can specify `automl_settings` as `**kwargs` as well. Also note that you can use a `get_data()` function for local excutions too.\n", - "\n", - "**Note:** When using Remote DSVM, you can't pass Numpy arrays directly to the fit method.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**max_concurrent_iterations**|Maximum number of iterations to execute in parallel. This should be less than the number of cores on the DSVM.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_settings = {\n", - " \"iteration_timeout_minutes\": 10,\n", - " \"iterations\": 20,\n", - " \"n_cross_validations\": 5,\n", - " \"primary_metric\": 'AUC_weighted',\n", - " \"preprocess\": False,\n", - " \"max_concurrent_iterations\": 2,\n", - " \"verbosity\": logging.INFO\n", - "}\n", - "\n", - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " path = project_folder, \n", - " compute_target = dsvm_compute,\n", - " data_script = project_folder + \"/get_data.py\",\n", - " **automl_settings\n", - " )\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note:** The first run on a new DSVM may take several minutes to prepare the environment." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets and models even when the experiment is running to retrieve the best model up to that point. Once you are satisfied with the model, you can cancel a particular iteration or the whole run.\n", - "\n", - "In this example, we specify `show_output = False` to suppress console output while the run is in progress." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "remote_run = experiment.submit(automl_config, show_output = False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results\n", - "\n", - "#### Loading Executed Runs\n", - "In case you need to load a previously executed run, enable the cell below and replace the `run_id` value." - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "remote_run = AutoMLRun(experiment=experiment, run_id = 'AutoML_480d3ed6-fc94-44aa-8f4e-0b945db9d3ef')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "You can click on a pipeline to see run properties and output logs. Logs are also available on the DSVM under `/tmp/azureml_run/{iterationid}/azureml-logs`\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(remote_run).show() " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Wait until the run finishes.\n", - "remote_run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(remote_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)} \n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cancelling Runs\n", - "\n", - "You can cancel ongoing remote runs using the `cancel` and `cancel_iteration` functions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Cancel the ongoing experiment and stop scheduling new iterations.\n", - "# remote_run.cancel()\n", - "\n", - "# Cancel iteration 1 and move onto iteration 2.\n", - "# remote_run.cancel_iteration(1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. The Model includes the pipeline and any pre-processing. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = remote_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model which has the smallest `log_loss` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"log_loss\"\n", - "best_run, fitted_model = remote_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the third iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 3\n", - "third_run, third_model = remote_run.get_output(iteration = iteration)\n", - "print(third_run)\n", - "print(third_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Fitted Model \n", - "\n", - "#### Load Test Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Test Our Best Fitted Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Randomly select digits and test.\n", - "for index in np.random.choice(len(y_test), 2, replace = False):\n", - " print(index)\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " title = \"Label value = %d Predicted value = %d \" % (label, predicted)\n", - " fig = plt.figure(1, figsize=(3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/03b.auto-ml-remote-batchai.ipynb b/automl/03b.auto-ml-remote-batchai.ipynb deleted file mode 100644 index 4d431291..00000000 --- a/automl/03b.auto-ml-remote-batchai.ipynb +++ /dev/null @@ -1,507 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 03: Remote Execution using Batch AI\n", - "\n", - "In this example we use the scikit-learn's [digit dataset](http://scikit-learn.org/stable/datasets/index.html#optical-recognition-of-handwritten-digits-dataset) to showcase how you can use AutoML for a simple classification problem.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you would see\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Attach an existing Batch AI compute to a workspace.\n", - "3. Configure AutoML using `AutoMLConfig`.\n", - "4. Train the model using Batch AI.\n", - "5. Explore the results.\n", - "6. Test the best fitted model.\n", - "\n", - "In addition this notebook showcases the following features\n", - "- **Parallel** executions for iterations\n", - "- **Asynchronous** tracking of progress\n", - "- **Cancellation** of individual iterations or the entire run\n", - "- Retrieving models for any iteration or logged metric\n", - "- Specifying AutoML settings as `**kwargs`\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the run history container in the workspace.\n", - "experiment_name = 'automl-remote-batchai'\n", - "project_folder = './sample_projects/automl-remote-batchai'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Batch AI Cluster\n", - "The cluster is created as Machine Learning Compute and will appear under your workspace.\n", - "\n", - "**Note:** The creation of the Batch AI cluster can take over 10 minutes, please be patient.\n", - "\n", - "As with other Azure services, there are limits on certain resources (e.g. Batch AI cluster size) associated with the Azure Machine Learning service. Please read [this article](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-manage-quotas) on the default limits and how to request more quota." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import AmlCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "\n", - "# Choose a name for your cluster.\n", - "batchai_cluster_name = \"cpucluster\"\n", - "\n", - "found = False\n", - "# Check if this compute target already exists in the workspace.\n", - "cts = ws.compute_targets\n", - "if batchai_cluster_name in cts and cts[batchai_cluster_name].type == 'BatchAI':\n", - " found = True\n", - " print('Found existing compute target.')\n", - " compute_target = cts[batchai_cluster_name]\n", - " \n", - "if not found:\n", - " print('Creating a new compute target...')\n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = \"STANDARD_D2_V2\", # for GPU, use \"STANDARD_NC6\"\n", - " #vm_priority = 'lowpriority', # optional\n", - " max_nodes = 6)\n", - "\n", - " # Create the cluster.\n", - " compute_target = ComputeTarget.create(ws, batchai_cluster_name, provisioning_config)\n", - " \n", - " # Can poll for a minimum number of nodes and for a specific timeout.\n", - " # If no min_node_count is provided, it will use the scale settings for the cluster.\n", - " compute_target.wait_for_completion(show_output = True, min_node_count = None, timeout_in_minutes = 20)\n", - " \n", - " # For a more detailed view of current Batch AI cluster status, use the 'status' property." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Get Data File\n", - "For remote executions you should author a `get_data.py` file containing a `get_data()` function. This file should be in the root directory of the project. You can encapsulate code to read data either from a blob storage or local disk in this file.\n", - "In this example, the `get_data()` function returns data using scikit-learn's [load_digits](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if not os.path.exists(project_folder):\n", - " os.makedirs(project_folder)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $project_folder/get_data.py\n", - "\n", - "from sklearn import datasets\n", - "from scipy import sparse\n", - "import numpy as np\n", - "\n", - "def get_data():\n", - " \n", - " digits = datasets.load_digits()\n", - " X_train = digits.data\n", - " y_train = digits.target\n", - "\n", - " return { \"X\" : X_train, \"y\" : y_train }" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Instantiate AutoML \n", - "\n", - "You can specify `automl_settings` as `**kwargs` as well. Also note that you can use a `get_data()` function for local excutions too.\n", - "\n", - "**Note:** When using Batch AI, you can't pass Numpy arrays directly to the fit method.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**max_concurrent_iterations**|Maximum number of iterations that would be executed in parallel. This should be less than the number of cores on the DSVM.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_settings = {\n", - " \"iteration_timeout_minutes\": 2,\n", - " \"iterations\": 20,\n", - " \"n_cross_validations\": 5,\n", - " \"primary_metric\": 'AUC_weighted',\n", - " \"preprocess\": False,\n", - " \"max_concurrent_iterations\": 5,\n", - " \"verbosity\": logging.INFO\n", - "}\n", - "\n", - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " path = project_folder,\n", - " compute_target = compute_target,\n", - " data_script = project_folder + \"/get_data.py\",\n", - " **automl_settings\n", - " )\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets and models even when the experiment is running to retrieve the best model up to that point. Once you are satisfied with the model, you can cancel a particular iteration or the whole run.\n", - "In this example, we specify `show_output = False` to suppress console output while the run is in progress." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "remote_run = experiment.submit(automl_config, show_output = False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results\n", - "\n", - "#### Loading executed runs\n", - "In case you need to load a previously executed run, enable the cell below and replace the `run_id` value." - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "remote_run = AutoMLRun(experiment = experiment, run_id = 'AutoML_5db13491-c92a-4f1d-b622-8ab8d973a058')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "You can click on a pipeline to see run properties and output logs. Logs are also available on the DSVM under `/tmp/azureml_run/{iterationid}/azureml-logs`\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "remote_run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(remote_run).show() " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Wait until the run finishes.\n", - "remote_run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(remote_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cancelling Runs\n", - "\n", - "You can cancel ongoing remote runs using the `cancel` and `cancel_iteration` functions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Cancel the ongoing experiment and stop scheduling new iterations.\n", - "# remote_run.cancel()\n", - "\n", - "# Cancel iteration 1 and move onto iteration 2.\n", - "# remote_run.cancel_iteration(1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. The Model includes the pipeline and any pre-processing. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = remote_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model which has the smallest `log_loss` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"log_loss\"\n", - "best_run, fitted_model = remote_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the third iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 3\n", - "third_run, third_model = remote_run.get_output(iteration=iteration)\n", - "print(third_run)\n", - "print(third_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Testing the Fitted Model \n", - "\n", - "#### Load Test Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Testing Our Best Fitted Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Randomly select digits and test.\n", - "for index in np.random.choice(len(y_test), 2, replace = False):\n", - " print(index)\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " title = \"Label value = %d Predicted value = %d \" % (label, predicted)\n", - " fig = plt.figure(1, figsize=(3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb b/automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb deleted file mode 100644 index d4e2e5f2..00000000 --- a/automl/04.auto-ml-remote-execution-text-data-blob-store.ipynb +++ /dev/null @@ -1,501 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Auto ML 04: Remote Execution with Text Data from Azure Blob Storage\n", - "\n", - "In this example we use the [Burning Man 2016 dataset](https://innovate.burningman.org/datasets-page/) to showcase how you can use AutoML to handle text data from Azure Blob Storage.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Attach an existing DSVM to a workspace.\n", - "3. Configure AutoML using `AutoMLConfig`.\n", - "4. Train the model using the DSVM.\n", - "5. Explore the results.\n", - "6. Test the best fitted model.\n", - "\n", - "In addition this notebook showcases the following features\n", - "- **Parallel** executions for iterations\n", - "- **Asynchronous** tracking of progress\n", - "- **Cancellation** of individual iterations or the entire run\n", - "- Retrieving models for any iteration or logged metric\n", - "- Specifying AutoML settings as `**kwargs`\n", - "- Handling **text** data using the `preprocess` flag\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the run history container in the workspace.\n", - "experiment_name = 'automl-remote-dsvm-blobstore'\n", - "project_folder = './sample_projects/automl-remote-dsvm-blobstore'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data=output, index=['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Attach a Remote Linux DSVM\n", - "To use a remote Docker compute target:\n", - "1. Create a Linux DSVM in Azure, following these [quick instructions](https://docs.microsoft.com/en-us/azure/machine-learning/desktop-workbench/how-to-create-dsvm-hdi). Make sure you use the Ubuntu flavor (not CentOS). Make sure that disk space is available under `/tmp` because AutoML creates files under `/tmp/azureml_run`s. The DSVM should have more cores than the number of parallel runs that you plan to enable. It should also have at least 4GB per core.\n", - "2. Enter the IP address, user name and password below.\n", - "\n", - "**Note:** By default, SSH runs on port 22 and you don't need to change the port number below. If you've configured SSH to use a different port, change `dsvm_ssh_port` accordinglyaddress. [Read more](https://render.githubusercontent.com/documentation/sdk/ssh-issue.md) on changing SSH ports for security reasons." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import RemoteCompute\n", - "import time\n", - "\n", - "# Add your VM information below\n", - "# If a compute with the specified compute_name already exists, it will be used and the dsvm_ip_addr, dsvm_ssh_port, \n", - "# dsvm_username and dsvm_password will be ignored.\n", - "compute_name = 'mydsvmb'\n", - "dsvm_ip_addr = '<>'\n", - "dsvm_ssh_port = 22\n", - "dsvm_username = '<>'\n", - "dsvm_password = '<>'\n", - "\n", - "if compute_name in ws.compute_targets:\n", - " print('Using existing compute.')\n", - " dsvm_compute = ws.compute_targets[compute_name]\n", - "else:\n", - " RemoteCompute.attach(workspace=ws, name=compute_name, address=dsvm_ip_addr, username=dsvm_username, password=dsvm_password, ssh_port=dsvm_ssh_port)\n", - "\n", - " while ws.compute_targets[compute_name].provisioning_state == 'Creating':\n", - " time.sleep(1)\n", - "\n", - " dsvm_compute = ws.compute_targets[compute_name]\n", - " \n", - " if dsvm_compute.provisioning_state == 'Failed':\n", - " print('Attached failed.')\n", - " print(dsvm_compute.provisioning_errors)\n", - " dsvm_compute.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Get Data File\n", - "For remote executions you should author a `get_data.py` file containing a `get_data()` function. This file should be in the root directory of the project. You can encapsulate code to read data either from a blob storage or local disk in this file.\n", - "In this example, the `get_data()` function returns a [dictionary](README.md#getdata)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if not os.path.exists(project_folder):\n", - " os.makedirs(project_folder)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $project_folder/get_data.py\n", - "\n", - "import pandas as pd\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import LabelEncoder\n", - "\n", - "def get_data():\n", - " # Load Burning Man 2016 data.\n", - " df = pd.read_csv(\"https://automldemods.blob.core.windows.net/datasets/PlayaEvents2016,_1.6MB,_3.4k-rows.cleaned.2.tsv\",\n", - " delimiter=\"\\t\", quotechar='\"')\n", - " # Get integer labels.\n", - " le = LabelEncoder()\n", - " le.fit(df[\"Label\"].values)\n", - " y = le.transform(df[\"Label\"].values)\n", - " X = df.drop([\"Label\"], axis=1)\n", - "\n", - " X_train, _, y_train, _ = train_test_split(X, y, test_size = 0.1, random_state = 42)\n", - "\n", - " return { \"X\" : X_train, \"y\" : y_train }" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### View data\n", - "\n", - "You can execute the `get_data()` function locally to view the training data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%run $project_folder/get_data.py\n", - "data_dict = get_data()\n", - "df = data_dict[\"X\"]\n", - "y = data_dict[\"y\"]\n", - "pd.set_option('display.max_colwidth', 15)\n", - "df['Label'] = pd.Series(y, index=df.index)\n", - "df.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML \n", - "\n", - "You can specify `automl_settings` as `**kwargs` as well. Also note that you can use a `get_data()` function for local excutions too.\n", - "\n", - "**Note:** When using Remote DSVM, you can't pass Numpy arrays directly to the fit method.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**max_concurrent_iterations**|Maximum number of iterations that would be executed in parallel. This should be less than the number of cores on the DSVM.|\n", - "|**preprocess**|Setting this to *True* enables AutoML to perform preprocessing on the input to handle *missing data*, and to perform some common *feature extraction*.|\n", - "|**max_cores_per_iteration**|Indicates how many cores on the compute target would be used to train a single pipeline.
Default is *1*; you can set it to *-1* to use all cores.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_settings = {\n", - " \"iteration_timeout_minutes\": 60,\n", - " \"iterations\": 4,\n", - " \"n_cross_validations\": 5,\n", - " \"primary_metric\": 'AUC_weighted',\n", - " \"preprocess\": True,\n", - " \"max_cores_per_iteration\": 2\n", - "}\n", - "\n", - "automl_config = AutoMLConfig(task = 'classification',\n", - " path = project_folder,\n", - " compute_target = dsvm_compute,\n", - " data_script = project_folder + \"/get_data.py\",\n", - " **automl_settings\n", - " )\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models \n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets and models even when the experiment is running to retrieve the best model up to that point. Once you are satisfied with the model, you can cancel a particular iteration or the whole run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "remote_run = experiment.submit(automl_config)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Exploring the Results \n", - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "You can click on a pipeline to see run properties and output logs. Logs are also available on the DSVM under `/tmp/azureml_run/{iterationid}/azureml-logs`\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(remote_run).show() " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Wait until the run finishes.\n", - "remote_run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(remote_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cancelling Runs\n", - "You can cancel ongoing remote runs using the `cancel` and `cancel_iteration` functions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Cancel the ongoing experiment and stop scheduling new iterations.\n", - "remote_run.cancel()\n", - "\n", - "# Cancel iteration 1 and move onto iteration 2.\n", - "# remote_run.cancel_iteration(1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = remote_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model which has the smallest `accuracy` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# lookup_metric = \"accuracy\"\n", - "# best_run, fitted_model = remote_run.get_output(metric = lookup_metric)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 0\n", - "zero_run, zero_model = remote_run.get_output(iteration = iteration)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Testing the Fitted Model \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import sklearn\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import LabelEncoder\n", - "from pandas_ml import ConfusionMatrix\n", - "\n", - "df = pd.read_csv(\"https://automldemods.blob.core.windows.net/datasets/PlayaEvents2016,_1.6MB,_3.4k-rows.cleaned.2.tsv\",\n", - " delimiter=\"\\t\", quotechar='\"')\n", - "\n", - "# get integer labels\n", - "le = LabelEncoder()\n", - "le.fit(df[\"Label\"].values)\n", - "y = le.transform(df[\"Label\"].values)\n", - "X = df.drop([\"Label\"], axis=1)\n", - "\n", - "_, X_test, _, y_test = train_test_split(X, y, test_size=0.1, random_state=42)\n", - "\n", - "\n", - "ypred = fitted_model.predict(X_test.values)\n", - "\n", - "\n", - "ypred_strings = le.inverse_transform(ypred)\n", - "ytest_strings = le.inverse_transform(y_test)\n", - "\n", - "cm = ConfusionMatrix(ytest_strings, ypred_strings)\n", - "\n", - "print(cm)\n", - "\n", - "cm.plot()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb b/automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb deleted file mode 100644 index 9a3134ec..00000000 --- a/automl/05.auto-ml-missing-data-Blacklist-Early-Termination.ipynb +++ /dev/null @@ -1,381 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 05: Blacklisting Models, Early Termination, and Handling Missing Data\n", - "\n", - "In this example we use the scikit-learn's [digit dataset](http://scikit-learn.org/stable/datasets/index.html#optical-recognition-of-handwritten-digits-dataset) to showcase how you can use AutoML for handling missing values in data. We also provide a stopping metric indicating a target for the primary metrics so that AutoML can terminate the run without necessarly going through all the iterations. Finally, if you want to avoid a certain pipeline, we allow you to specify a blacklist of algorithms that AutoML will ignore for this run.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Configure AutoML using `AutoMLConfig`.\n", - "4. Train the model.\n", - "5. Explore the results.\n", - "6. Test the best fitted model.\n", - "\n", - "In addition this notebook showcases the following features\n", - "- **Blacklisting** certain pipelines\n", - "- Specifying **target metrics** to indicate stopping criteria\n", - "- Handling **missing data** in the input\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the experiment.\n", - "experiment_name = 'automl-local-missing-data'\n", - "project_folder = './sample_projects/automl-local-missing-data'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data=output, index=['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating missing data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from scipy import sparse\n", - "\n", - "digits = datasets.load_digits()\n", - "X_train = digits.data[10:,:]\n", - "y_train = digits.target[10:]\n", - "\n", - "# Add missing values in 75% of the lines.\n", - "missing_rate = 0.75\n", - "n_missing_samples = int(np.floor(X_train.shape[0] * missing_rate))\n", - "missing_samples = np.hstack((np.zeros(X_train.shape[0] - n_missing_samples, dtype=np.bool), np.ones(n_missing_samples, dtype=np.bool)))\n", - "rng = np.random.RandomState(0)\n", - "rng.shuffle(missing_samples)\n", - "missing_features = rng.randint(0, X_train.shape[1], n_missing_samples)\n", - "X_train[np.where(missing_samples)[0], missing_features] = np.nan" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = pd.DataFrame(data = X_train)\n", - "df['Label'] = pd.Series(y_train, index=df.index)\n", - "df.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate an `AutoMLConfig` object to specify the settings and data used to run the experiment. This includes setting `experiment_exit_score`, which should cause the run to complete before the `iterations` count is reached.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**preprocess**|Setting this to *True* enables AutoML to perform preprocessing on the input to handle *missing data*, and to perform some common *feature extraction*.|\n", - "|**experiment_exit_score**|*double* value indicating the target for *primary_metric*.
Once the target is surpassed the run terminates.|\n", - "|**blacklist_models**|*List* of *strings* indicating machine learning algorithms for AutoML to avoid in this run.

Allowed values for **Classification**
LogisticRegression
SGD
MultinomialNaiveBayes
BernoulliNaiveBayes
SVM
LinearSVM
KNN
DecisionTree
RandomForest
ExtremeRandomTrees
LightGBM
GradientBoosting
TensorFlowDNN
TensorFlowLinearClassifier

Allowed values for **Regression**
ElasticNet
GradientBoosting
DecisionTree
KNN
LassoLars
SGD
RandomForest
ExtremeRandomTrees
LightGBM
TensorFlowLinearRegressor
TensorFlowDNN|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers.|\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iteration_timeout_minutes = 60,\n", - " iterations = 20,\n", - " n_cross_validations = 5,\n", - " preprocess = True,\n", - " experiment_exit_score = 0.9984,\n", - " blacklist_models = ['KNN','LinearSVM'],\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. The Model includes the pipeline and any pre-processing. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model which has the smallest `accuracy` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# lookup_metric = \"accuracy\"\n", - "# best_run, fitted_model = local_run.get_output(metric = lookup_metric)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the third iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# iteration = 3\n", - "# best_run, fitted_model = local_run.get_output(iteration = iteration)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Testing the best Fitted Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]\n", - "\n", - "# Randomly select digits and test.\n", - "for index in np.random.choice(len(y_test), 2, replace = False):\n", - " print(index)\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " title = \"Label value = %d Predicted value = %d \" % (label, predicted)\n", - " fig = plt.figure(1, figsize=(3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()\n" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/06.auto-ml-sparse-data-train-test-split.ipynb b/automl/06.auto-ml-sparse-data-train-test-split.ipynb deleted file mode 100644 index ac384ddc..00000000 --- a/automl/06.auto-ml-sparse-data-train-test-split.ipynb +++ /dev/null @@ -1,384 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 06: Train Test Split and Handling Sparse Data\n", - "\n", - "In this example we use the scikit-learn's [20newsgroup](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_20newsgroups.html) to showcase how you can use AutoML for handling sparse data and how to specify custom cross validations splits.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Configure AutoML using `AutoMLConfig`.\n", - "4. Train the model.\n", - "5. Explore the results.\n", - "6. Test the best fitted model.\n", - "\n", - "In addition this notebook showcases the following features\n", - "- Explicit train test splits \n", - "- Handling **sparse data** in the input" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# choose a name for the experiment\n", - "experiment_name = 'automl-local-missing-data'\n", - "# project folder\n", - "project_folder = './sample_projects/automl-local-missing-data'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data=output, index=['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating Sparse Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.datasets import fetch_20newsgroups\n", - "from sklearn.feature_extraction.text import HashingVectorizer\n", - "from sklearn.model_selection import train_test_split\n", - "\n", - "remove = ('headers', 'footers', 'quotes')\n", - "categories = [\n", - " 'alt.atheism',\n", - " 'talk.religion.misc',\n", - " 'comp.graphics',\n", - " 'sci.space',\n", - "]\n", - "data_train = fetch_20newsgroups(subset = 'train', categories = categories,\n", - " shuffle = True, random_state = 42,\n", - " remove = remove)\n", - "\n", - "X_train, X_valid, y_train, y_valid = train_test_split(data_train.data, data_train.target, test_size = 0.33, random_state = 42)\n", - "\n", - "\n", - "vectorizer = HashingVectorizer(stop_words = 'english', alternate_sign = False,\n", - " n_features = 2**16)\n", - "X_train = vectorizer.transform(X_train)\n", - "X_valid = vectorizer.transform(X_valid)\n", - "\n", - "summary_df = pd.DataFrame(index = ['No of Samples', 'No of Features'])\n", - "summary_df['Train Set'] = [X_train.shape[0], X_train.shape[1]]\n", - "summary_df['Validation Set'] = [X_valid.shape[0], X_valid.shape[1]]\n", - "summary_df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate an `AutoMLConfig` object to specify the settings and data used to run the experiment.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**preprocess**|Setting this to *True* enables AutoML to perform preprocessing on the input to handle *missing data*, and to perform some common *feature extraction*.
**Note:** If input data is sparse, you cannot use *True*.|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers.|\n", - "|**X_valid**|(sparse) array-like, shape = [n_samples, n_features] for the custom validation set.|\n", - "|**y_valid**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification for the custom validation set.|\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iteration_timeout_minutes = 60,\n", - " iterations = 5,\n", - " preprocess = False,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " X_valid = X_valid, \n", - " y_valid = y_valid, \n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - " \n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. The Model includes the pipeline and any pre-processing. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model which has the smallest `accuracy` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# lookup_metric = \"accuracy\"\n", - "# best_run, fitted_model = local_run.get_output(metric = lookup_metric)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the third iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# iteration = 3\n", - "# best_run, fitted_model = local_run.get_output(iteration = iteration)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Testing the Best Fitted Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load test data.\n", - "from pandas_ml import ConfusionMatrix\n", - "\n", - "data_test = fetch_20newsgroups(subset = 'test', categories = categories,\n", - " shuffle = True, random_state = 42,\n", - " remove = remove)\n", - "\n", - "X_test = vectorizer.transform(data_test.data)\n", - "y_test = data_test.target\n", - "\n", - "# Test our best pipeline.\n", - "\n", - "y_pred = fitted_model.predict(X_test)\n", - "y_pred_strings = [data_test.target_names[i] for i in y_pred]\n", - "y_test_strings = [data_test.target_names[i] for i in y_test]\n", - "\n", - "cm = ConfusionMatrix(y_test_strings, y_pred_strings)\n", - "print(cm)\n", - "cm.plot()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/07.auto-ml-exploring-previous-runs.ipynb b/automl/07.auto-ml-exploring-previous-runs.ipynb deleted file mode 100644 index 21d9b0b0..00000000 --- a/automl/07.auto-ml-exploring-previous-runs.ipynb +++ /dev/null @@ -1,336 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 07: Exploring Previous Runs\n", - "\n", - "In this example we present some examples on navigating previously executed runs. We also show how you can download a fitted model for any previous run.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. List all experiments in a workspace.\n", - "2. List all AutoML runs in an experiment.\n", - "3. Get details for an AutoML run, including settings, run widget, and all metrics.\n", - "4. Download a fitted pipeline for any iteration.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# List all AutoML Experiments in a Workspace" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "import re\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.run import Run\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "experiment_list = Experiment.list(workspace=ws)\n", - "\n", - "summary_df = pd.DataFrame(index = ['No of Runs'])\n", - "pattern = re.compile('^AutoML_[^_]*$')\n", - "for experiment in experiment_list:\n", - " all_runs = list(experiment.get_runs())\n", - " automl_runs = []\n", - " for run in all_runs:\n", - " if(pattern.match(run.id)):\n", - " automl_runs.append(run) \n", - " summary_df[experiment.name] = [len(automl_runs)]\n", - " \n", - "pd.set_option('display.max_colwidth', -1)\n", - "summary_df.T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# List AutoML runs for an experiment\n", - "Set `experiment_name` to any experiment name from the result of the Experiment.list cell to load the AutoML runs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "experiment_name = 'automl-local-classification' # Replace this with any project name from previous cell.\n", - "\n", - "proj = ws.experiments[experiment_name]\n", - "summary_df = pd.DataFrame(index = ['Type', 'Status', 'Primary Metric', 'Iterations', 'Compute', 'Name'])\n", - "pattern = re.compile('^AutoML_[^_]*$')\n", - "all_runs = list(proj.get_runs(properties={'azureml.runsource': 'automl'}))\n", - "automl_runs_project = []\n", - "for run in all_runs:\n", - " if(pattern.match(run.id)):\n", - " properties = run.get_properties()\n", - " tags = run.get_tags()\n", - " amlsettings = eval(properties['RawAMLSettingsString'])\n", - " if 'iterations' in tags:\n", - " iterations = tags['iterations']\n", - " else:\n", - " iterations = properties['num_iterations']\n", - " summary_df[run.id] = [amlsettings['task_type'], run.get_details()['status'], properties['primary_metric'], iterations, properties['target'], amlsettings['name']]\n", - " if run.get_details()['status'] == 'Completed':\n", - " automl_runs_project.append(run.id)\n", - " \n", - "from IPython.display import HTML\n", - "projname_html = HTML(\"

{}

\".format(proj.name))\n", - "\n", - "from IPython.display import display\n", - "display(projname_html)\n", - "display(summary_df.T)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Get details for an AutoML run\n", - "\n", - "Copy the project name and run id from the previous cell output to find more details on a particular run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run_id = automl_runs_project[0] # Replace with your own run_id from above run ids\n", - "assert (run_id in summary_df.keys()), \"Run id not found! Please set run id to a value from above run ids\"\n", - "\n", - "from azureml.widgets import RunDetails\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "ml_run = AutoMLRun(experiment = experiment, run_id = run_id)\n", - "\n", - "summary_df = pd.DataFrame(index = ['Type', 'Status', 'Primary Metric', 'Iterations', 'Compute', 'Name', 'Start Time', 'End Time'])\n", - "properties = ml_run.get_properties()\n", - "tags = ml_run.get_tags()\n", - "status = ml_run.get_details()\n", - "amlsettings = eval(properties['RawAMLSettingsString'])\n", - "if 'iterations' in tags:\n", - " iterations = tags['iterations']\n", - "else:\n", - " iterations = properties['num_iterations']\n", - "start_time = None\n", - "if 'startTimeUtc' in status:\n", - " start_time = status['startTimeUtc']\n", - "end_time = None\n", - "if 'endTimeUtc' in status:\n", - " end_time = status['endTimeUtc']\n", - "summary_df[ml_run.id] = [amlsettings['task_type'], status['status'], properties['primary_metric'], iterations, properties['target'], amlsettings['name'], start_time, end_time]\n", - "display(HTML('

Runtime Details

'))\n", - "display(summary_df)\n", - "\n", - "#settings_df = pd.DataFrame(data = amlsettings, index = [''])\n", - "display(HTML('

AutoML Settings

'))\n", - "display(amlsettings)\n", - "\n", - "display(HTML('

Iterations

'))\n", - "RunDetails(ml_run).show() \n", - "\n", - "children = list(ml_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "display(HTML('

Metrics

'))\n", - "display(rundata)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Download fitted models" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Download the Best Model for Any Given Metric" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "metric = 'AUC_weighted' # Replace with a metric name.\n", - "best_run, fitted_model = ml_run.get_output(metric = metric)\n", - "fitted_model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Download the Model for Any Given Iteration" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 1 # Replace with an iteration number.\n", - "best_run, fitted_model = ml_run.get_output(iteration = iteration)\n", - "fitted_model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Register fitted model for deployment\n", - "If neither `metric` nor `iteration` are specified in the `register_model` call, the iteration with the best primary metric is registered." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "description = 'AutoML Model'\n", - "tags = None\n", - "ml_run.register_model(description = description, tags = tags)\n", - "ml_run.model_id # Use this id to deploy the model as a web service in Azure." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Register the Best Model for Any Given Metric" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "metric = 'AUC_weighted' # Replace with a metric name.\n", - "description = 'AutoML Model'\n", - "tags = None\n", - "ml_run.register_model(description = description, tags = tags, metric = metric)\n", - "print(ml_run.model_id) # Use this id to deploy the model as a web service in Azure." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Register the Model for Any Given Iteration" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 1 # Replace with an iteration number.\n", - "description = 'AutoML Model'\n", - "tags = None\n", - "ml_run.register_model(description = description, tags = tags, iteration = iteration)\n", - "print(ml_run.model_id) # Use this id to deploy the model as a web service in Azure." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/08.auto-ml-remote-execution-with-DataStore.ipynb b/automl/08.auto-ml-remote-execution-with-DataStore.ipynb deleted file mode 100644 index 94c64ff3..00000000 --- a/automl/08.auto-ml-remote-execution-with-DataStore.ipynb +++ /dev/null @@ -1,568 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 08: Remote Execution with DataStore\n", - "\n", - "This sample accesses a data file on a remote DSVM through DataStore. Advantages of using data store are:\n", - "1. DataStore secures the access details.\n", - "2. DataStore supports read, write to blob and file store\n", - "3. AutoML natively supports copying data from DataStore to DSVM\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you would see\n", - "1. Storing data in DataStore.\n", - "2. get_data returning data from DataStore.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Experiment\n", - "\n", - "As part of the setup you have already created a Workspace. For AutoML you would need to create an Experiment. An Experiment is a named object in a Workspace, which is used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "import time\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.compute import DsvmCompute\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# choose a name for experiment\n", - "experiment_name = 'automl-remote-datastore-file'\n", - "# project folder\n", - "project_folder = './sample_projects/automl-remote-dsvm-file'\n", - "\n", - "experiment=Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data=output, index=['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a Remote Linux DSVM\n", - "Note: If creation fails with a message about Marketplace purchase eligibilty, go to portal.azure.com, start creating DSVM there, and select \"Want to create programmatically\" to enable programmatic creation. Once you've enabled it, you can exit without actually creating VM.\n", - "\n", - "**Note**: By default SSH runs on port 22 and you don't need to specify it. But if for security reasons you can switch to a different port (such as 5022), you can append the port number to the address. [Read more](https://render.githubusercontent.com/documentation/sdk/ssh-issue.md) on this." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compute_target_name = 'mydsvmc'\n", - "\n", - "try:\n", - " while ws.compute_targets[compute_target_name].provisioning_state == 'Creating':\n", - " time.sleep(1)\n", - " \n", - " dsvm_compute = DsvmCompute(workspace=ws, name=compute_target_name)\n", - " print('found existing:', dsvm_compute.name)\n", - "except:\n", - " dsvm_config = DsvmCompute.provisioning_configuration(vm_size=\"Standard_D2_v2\")\n", - " dsvm_compute = DsvmCompute.create(ws, name=compute_target_name, provisioning_configuration=dsvm_config)\n", - " dsvm_compute.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Copy data file to local\n", - "\n", - "Download the data file.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mkdir data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = pd.read_csv(\"https://automldemods.blob.core.windows.net/datasets/PlayaEvents2016,_1.6MB,_3.4k-rows.cleaned.2.tsv\",\n", - " delimiter=\"\\t\", quotechar='\"')\n", - "df.to_csv(\"data/data.tsv\", sep=\"\\t\", quotechar='\"', index=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upload data to the cloud" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now make the data accessible remotely by uploading that data from your local machine into Azure so it can be accessed for remote training. The datastore is a convenient construct associated with your workspace for you to upload/download data, and interact with it from your remote compute targets. It is backed by Azure blob storage account.\n", - "\n", - "The data.tsv files are uploaded into a directory named data at the root of the datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace, Datastore\n", - "#blob_datastore = Datastore(ws, blob_datastore_name)\n", - "ds = ws.get_default_datastore()\n", - "print(ds.datastore_type, ds.account_name, ds.container_name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# ds.upload_files(\"data.tsv\")\n", - "ds.upload(src_dir='./data', target_path='data', overwrite=True, show_progress=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure & Run\n", - "\n", - "First let's create a DataReferenceConfigruation object to inform the system what data folder to download to the compute target.\n", - "The path_on_compute should be an absolute path to ensure that the data files are downloaded only once. The get_data method should use this same path to access the data files." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import DataReferenceConfiguration\n", - "dr = DataReferenceConfiguration(datastore_name=ds.name, \n", - " path_on_datastore='data', \n", - " path_on_compute='/tmp/azureml_runs',\n", - " mode='download', # download files from datastore to compute target\n", - " overwrite=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "# create a new RunConfig object\n", - "conda_run_config = RunConfiguration(framework=\"python\")\n", - "\n", - "# Set compute target to the Linux DSVM\n", - "conda_run_config.target = dsvm_compute\n", - "# set the data reference of the run coonfiguration\n", - "conda_run_config.data_references = {ds.name: dr}\n", - "\n", - "cd = CondaDependencies.create(pip_packages=['azureml-sdk[automl]'], conda_packages=['numpy'])\n", - "conda_run_config.environment.python.conda_dependencies = cd" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Get Data File\n", - "For remote executions you should author a get_data.py file containing a get_data() function. This file should be in the root directory of the project. You can encapsulate code to read data either from a blob storage or local disk in this file.\n", - "\n", - "The *get_data()* function returns a [dictionary](README.md#getdata).\n", - "\n", - "The read_csv uses the path_on_compute value specified in the DataReferenceConfiguration call plus the path_on_datastore folder and then the actual file name." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if not os.path.exists(project_folder):\n", - " os.makedirs(project_folder)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $project_folder/get_data.py\n", - "\n", - "import pandas as pd\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import LabelEncoder\n", - "import os\n", - "from os.path import expanduser, join, dirname\n", - "\n", - "def get_data():\n", - " # Burning man 2016 data\n", - " df = pd.read_csv(\"/tmp/azureml_runs/data/data.tsv\", delimiter=\"\\t\", quotechar='\"')\n", - " # get integer labels\n", - " le = LabelEncoder()\n", - " le.fit(df[\"Label\"].values)\n", - " y = le.transform(df[\"Label\"].values)\n", - " X = df.drop([\"Label\"], axis=1)\n", - "\n", - " X_train, _, y_train, _ = train_test_split(X, y, test_size=0.1, random_state=42)\n", - "\n", - " return { \"X\" : X_train.values, \"y\" : y_train }" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Instantiate AutoML \n", - "\n", - "You can specify automl_settings as **kwargs** as well. Also note that you can use the get_data() symantic for local excutions too. \n", - "\n", - "Note: For Remote DSVM and Batch AI you cannot pass Numpy arrays directly to AutoMLConfig.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML trains a specific pipeline with the data|\n", - "|**n_cross_validations**|Number of cross validation splits|\n", - "|**max_concurrent_iterations**|Max number of iterations that would be executed in parallel. This should be less than the number of cores on the DSVM\n", - "|**preprocess**| *True/False*
Setting this to *True* enables Auto ML to perform preprocessing
on the input to handle *missing data*, and perform some common *feature extraction*|\n", - "|**max_cores_per_iteration**| Indicates how many cores on the compute target would be used to train a single pipeline.
Default is *1*, you can set it to *-1* to use all cores|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_settings = {\n", - " \"iteration_timeout_minutes\": 60,\n", - " \"iterations\": 4,\n", - " \"n_cross_validations\": 5,\n", - " \"primary_metric\": 'AUC_weighted',\n", - " \"preprocess\": True,\n", - " \"max_cores_per_iteration\": 1,\n", - " \"verbosity\": logging.INFO\n", - "}\n", - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " path=project_folder,\n", - " run_configuration=conda_run_config,\n", - " #compute_target = dsvm_compute,\n", - " data_script = project_folder + \"/get_data.py\",\n", - " **automl_settings\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training the Models \n", - "\n", - "For remote runs the execution is asynchronous, so you will see the iterations get populated as they complete. You can interact with the widgets/models even when the experiment is running to retreive the best model up to that point. Once you are satisfied with the model you can cancel a particular iteration or the whole run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "remote_run = experiment.submit(automl_config, show_output=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Exploring the Results \n", - "#### Widget for monitoring runs\n", - "\n", - "The widget will sit on \"loading\" until the first iteration completed, then you will see an auto-updating graph and table show up. It refreshed once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "You can click on a pipeline to see run properties and output logs. Logs are also available on the DSVM under /tmp/azureml_run/{iterationid}/azureml-logs\n", - "\n", - "NOTE: The widget displays a link at the bottom. This links to a web-ui to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(remote_run).show() " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Wait until the run finishes.\n", - "remote_run.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use sdk methods to fetch all the child runs and see individual metrics that we log. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(remote_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)} \n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Canceling Runs\n", - "You can cancel ongoing remote runs using the *cancel()* and *cancel_iteration()* functions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Cancel the ongoing experiment and stop scheduling new iterations\n", - "# remote_run.cancel()\n", - "\n", - "# Cancel iteration 1 and move onto iteration 2\n", - "# remote_run.cancel_iteration(1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The *get_output* method returns the best run and the fitted model. There are overloads on *get_output* that allow you to retrieve the best run and fitted model for *any* logged metric or a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = remote_run.get_output()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model based on any other metric" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# lookup_metric = \"accuracy\"\n", - "# best_run, fitted_model = remote_run.get_output(metric=lookup_metric)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a specific iteration" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# iteration = 1\n", - "# best_run, fitted_model = remote_run.get_output(iteration=iteration)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Testing the Best Fitted Model \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import sklearn\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import LabelEncoder\n", - "from pandas_ml import ConfusionMatrix\n", - "\n", - "df = pd.read_csv(\"https://automldemods.blob.core.windows.net/datasets/PlayaEvents2016,_1.6MB,_3.4k-rows.cleaned.2.tsv\",\n", - " delimiter=\"\\t\", quotechar='\"')\n", - "\n", - "# get integer labels\n", - "le = LabelEncoder()\n", - "le.fit(df[\"Label\"].values)\n", - "y = le.transform(df[\"Label\"].values)\n", - "X = df.drop([\"Label\"], axis=1)\n", - "\n", - "_, X_test, _, y_test = train_test_split(X, y, test_size=0.1, random_state=42)\n", - "\n", - "ypred = fitted_model.predict(X_test.values)\n", - "\n", - "ypred_strings = le.inverse_transform(ypred)\n", - "ytest_strings = le.inverse_transform(y_test)\n", - "\n", - "cm = ConfusionMatrix(ytest_strings, ypred_strings)\n", - "\n", - "print(cm)\n", - "\n", - "cm.plot()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/09.auto-ml-classification-with-deployment.ipynb b/automl/09.auto-ml-classification-with-deployment.ipynb deleted file mode 100644 index b441e69a..00000000 --- a/automl/09.auto-ml-classification-with-deployment.ipynb +++ /dev/null @@ -1,501 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 09: Classification with Deployment\n", - "\n", - "In this example we use the scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use AutoML for a simple classification problem and deploy it to an Azure Container Instance (ACI).\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an experiment using an existing workspace.\n", - "2. Configure AutoML using `AutoMLConfig`.\n", - "3. Train the model using local compute.\n", - "4. Explore the results.\n", - "5. Register the model.\n", - "6. Create a container image.\n", - "7. Create an Azure Container Instance (ACI) service.\n", - "8. Test the ACI service.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# choose a name for experiment\n", - "experiment_name = 'automl-local-classification'\n", - "# project folder\n", - "project_folder = './sample_projects/automl-local-classification'\n", - "\n", - "experiment=Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data=output, index=['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate a AutoMLConfig object. This defines the settings and data used to run the experiment.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers.|\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_train = digits.data[10:,:]\n", - "y_train = digits.target[10:]\n", - "\n", - "automl_config = AutoMLConfig(task = 'classification',\n", - " name = experiment_name,\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iteration_timeout_minutes = 20,\n", - " iterations = 10,\n", - " n_cross_validations = 2,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method on `automl_classifier` returns the best run and the fitted model for the last invocation. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register the Fitted Model for Deployment\n", - "If neither `metric` nor `iteration` are specified in the `register_model` call, the iteration with the best primary metric is registered." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "description = 'AutoML Model'\n", - "tags = None\n", - "model = local_run.register_model(description = description, tags = tags)\n", - "local_run.model_id # This will be written to the script file later in the notebook." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create Scoring Script" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import pickle\n", - "import json\n", - "import numpy\n", - "import azureml.train.automl\n", - "from sklearn.externals import joblib\n", - "from azureml.core.model import Model\n", - "\n", - "\n", - "def init():\n", - " global model\n", - " model_path = Model.get_model_path(model_name = '<>') # this name is model.id of model that we want to deploy\n", - " # deserialize the model file back into a sklearn model\n", - " model = joblib.load(model_path)\n", - "\n", - "def run(rawdata):\n", - " try:\n", - " data = json.loads(rawdata)['data']\n", - " data = numpy.array(data)\n", - " result = model.predict(data)\n", - " except Exception as e:\n", - " result = str(e)\n", - " return json.dumps({\"error\": result})\n", - " return json.dumps({\"result\":result.tolist()})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a YAML File for the Environment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To ensure the fit results are consistent with the training results, the SDK dependency versions need to be the same as the environment that trains the model. Details about retrieving the versions can be found in notebook [12.auto-ml-retrieve-the-training-sdk-versions](12.auto-ml-retrieve-the-training-sdk-versions.ipynb)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "experiment_name = 'automl-local-classification'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "ml_run = AutoMLRun(experiment = experiment, run_id = local_run.id)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dependencies = ml_run.get_run_sdk_dependencies(iteration = 7)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for p in ['azureml-train-automl', 'azureml-sdk', 'azureml-core']:\n", - " print('{}\\t{}'.format(p, dependencies[p]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "myenv = CondaDependencies.create(conda_packages=['numpy','scikit-learn'], pip_packages=['azureml-sdk[automl]'])\n", - "\n", - "conda_env_file_name = 'myenv.yml'\n", - "myenv.save_to_file('.', conda_env_file_name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Substitute the actual version number in the environment file.\n", - "# This is not strictly needed in this notebook because the model should have been generated using the current SDK version.\n", - "# However, we include this in case this code is used on an experiment from a previous SDK version.\n", - "\n", - "with open(conda_env_file_name, 'r') as cefr:\n", - " content = cefr.read()\n", - "\n", - "with open(conda_env_file_name, 'w') as cefw:\n", - " cefw.write(content.replace(azureml.core.VERSION, dependencies['azureml-sdk']))\n", - "\n", - "# Substitute the actual model id in the script file.\n", - "\n", - "script_file_name = 'score.py'\n", - "\n", - "with open(script_file_name, 'r') as cefr:\n", - " content = cefr.read()\n", - "\n", - "with open(script_file_name, 'w') as cefw:\n", - " cefw.write(content.replace('<>', local_run.model_id))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a Container Image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import Image, ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(runtime= \"python\",\n", - " execution_script = script_file_name,\n", - " conda_file = conda_env_file_name,\n", - " tags = {'area': \"digits\", 'type': \"automl_classification\"},\n", - " description = \"Image for automl classification sample\")\n", - "\n", - "image = Image.create(name = \"automlsampleimage\",\n", - " # this is the model object \n", - " models = [model],\n", - " image_config = image_config, \n", - " workspace = ws)\n", - "\n", - "image.wait_for_creation(show_output = True)\n", - "\n", - "if image.creation_state == 'Failed':\n", - " print(\"Image build log at: \" + image.image_build_log_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Deploy the Image as a Web Service on Azure Container Instance" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, \n", - " memory_gb = 1, \n", - " tags = {'area': \"digits\", 'type': \"automl_classification\"}, \n", - " description = 'sample service for Automl Classification')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "\n", - "aci_service_name = 'automl-sample-01'\n", - "print(aci_service_name)\n", - "aci_service = Webservice.deploy_from_image(deployment_config = aciconfig,\n", - " image = image,\n", - " name = aci_service_name,\n", - " workspace = ws)\n", - "aci_service.wait_for_deployment(True)\n", - "print(aci_service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Delete a Web Service" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Get Logs from a Deployed Web Service" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#aci_service.get_logs()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test a Web Service" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Randomly select digits and test\n", - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]\n", - "\n", - "for index in np.random.choice(len(y_test), 3, replace = False):\n", - " print(index)\n", - " test_sample = json.dumps({'data':X_test[index:index + 1].tolist()})\n", - " predicted = aci_service.run(input_data = test_sample)\n", - " label = y_test[index]\n", - " predictedDict = json.loads(predicted)\n", - " title = \"Label value = %d Predicted value = %s \" % ( label,predictedDict['result'][0])\n", - " fig = plt.figure(1, figsize = (3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/10.auto-ml-multi-output-example.ipynb b/automl/10.auto-ml-multi-output-example.ipynb deleted file mode 100644 index 466ed36d..00000000 --- a/automl/10.auto-ml-multi-output-example.ipynb +++ /dev/null @@ -1,294 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 10: Multi-output\n", - "\n", - "This notebook shows how to use AutoML to train multi-output problems by leveraging the correlation between the outputs using indicator vectors.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Transformer Functions\n", - "The transformations of inputs `X` and `y` are happening as follows, e.g. `y = {y_1, y_2}`, then `X` becomes\n", - " \n", - "`X 1 0`\n", - " \n", - "`X 0 1`\n", - "\n", - "and `y` becomes,\n", - "\n", - "`y_1`\n", - "\n", - "`y_2`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from scipy import sparse\n", - "from scipy import linalg\n", - "\n", - "#Transformer functions\n", - "def multi_output_transform_x_y(X, y):\n", - " X_new = multi_output_transformer_x(X, y.shape[1])\n", - " y_new = multi_output_transform_y(y)\n", - " return X_new, y_new\n", - "\n", - "def multi_output_transformer_x(X, number_of_columns_y):\n", - " indicator_vecs = linalg.block_diag(*([np.ones((X.shape[0], 1))] * number_of_columns_y))\n", - " if sparse.issparse(X):\n", - " X_new = sparse.vstack(np.tile(X, number_of_columns_y))\n", - " indicator_vecs = sparse.coo_matrix(indicator_vecs)\n", - " X_new = sparse.hstack((X_new, indicator_vecs))\n", - " else:\n", - " X_new = np.tile(X, (number_of_columns_y, 1))\n", - " X_new = np.hstack((X_new, indicator_vecs))\n", - " return X_new\n", - "\n", - "def multi_output_transform_y(y):\n", - " return y.reshape(-1, order=\"F\")\n", - "\n", - "def multi_output_inverse_transform_y(y, number_of_columns_y):\n", - " return y.reshape((-1, number_of_columns_y), order = \"F\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## AutoML Experiment Setup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the experiment and specify the project folder.\n", - "experiment_name = 'automl-local-multi-output'\n", - "project_folder = './sample_projects/automl-local-multi-output'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a Random Dataset for Test Purposes" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "rng = np.random.RandomState(1)\n", - "X_train = np.sort(200 * rng.rand(600, 1) - 100, axis = 0)\n", - "y_train = np.array([np.pi * np.sin(X_train).ravel(), np.pi * np.cos(X_train).ravel()]).T\n", - "y_train += (0.5 - rng.rand(*y_train.shape))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Perform X and y transformation using the transformer function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "X_train_transformed, y_train_transformed = multi_output_transform_x_y(X_train, y_train)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Configure AutoML using the transformed results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'regression',\n", - " debug_log = 'automl_errors_multi.log',\n", - " primary_metric = 'r2_score',\n", - " iterations = 10,\n", - " n_cross_validations = 2,\n", - " verbosity = logging.INFO,\n", - " X = X_train_transformed,\n", - " y = y_train_transformed,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Fit the Transformed Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the best fit model.\n", - "best_run, fitted_model = local_run.get_output()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate random data set for predicting.\n", - "X_test = np.sort(200 * rng.rand(200, 1) - 100, axis = 0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Transform predict data.\n", - "X_test_transformed = multi_output_transformer_x(X_test, y_train.shape[1])\n", - "\n", - "# Predict and inverse transform the prediction.\n", - "y_predict = fitted_model.predict(X_test_transformed)\n", - "y_predict = multi_output_inverse_transform_y(y_predict, y_train.shape[1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(y_predict)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/11.auto-ml-sample-weight.ipynb b/automl/11.auto-ml-sample-weight.ipynb deleted file mode 100644 index bd4d1048..00000000 --- a/automl/11.auto-ml-sample-weight.ipynb +++ /dev/null @@ -1,251 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 11: Sample Weight\n", - "\n", - "In this example we use the scikit-learn's [digit dataset](http://scikit-learn.org/stable/datasets/index.html#optical-recognition-of-handwritten-digits-dataset) to showcase how you can use sample weight with AutoML. Sample weight is used where some sample values are more important than others.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to configure AutoML to use `sample_weight` and you will see the difference sample weight makes to the test results.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose names for the regular and the sample weight experiments.\n", - "experiment_name = 'non_sample_weight_experiment'\n", - "sample_weight_experiment_name = 'sample_weight_experiment'\n", - "\n", - "project_folder = './sample_projects/automl-local-classification'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "sample_weight_experiment=Experiment(ws, sample_weight_experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate two `AutoMLConfig` objects. One will be used with `sample_weight` and one without." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_train = digits.data[100:,:]\n", - "y_train = digits.target[100:]\n", - "\n", - "# The example makes the sample weight 0.9 for the digit 4 and 0.1 for all other digits.\n", - "# This makes the model more likely to classify as 4 if the image it not clear.\n", - "sample_weight = np.array([(0.9 if x == 4 else 0.01) for x in y_train])\n", - "\n", - "automl_classifier = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iteration_timeout_minutes = 60,\n", - " iterations = 10,\n", - " n_cross_validations = 2,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " path = project_folder)\n", - "\n", - "automl_sample_weight = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iteration_timeout_minutes = 60,\n", - " iterations = 10,\n", - " n_cross_validations = 2,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " sample_weight = sample_weight,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Models\n", - "\n", - "Call the `submit` method on the experiment objects and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_classifier, show_output = True)\n", - "sample_weight_run = sample_weight_experiment.submit(automl_sample_weight, show_output = True)\n", - "\n", - "best_run, fitted_model = local_run.get_output()\n", - "best_run_sample_weight, fitted_model_sample_weight = sample_weight_run.get_output()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Fitted Model\n", - "\n", - "#### Load Test Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_test = digits.data[:100, :]\n", - "y_test = digits.target[:100]\n", - "images = digits.images[:100]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Compare the Models\n", - "The prediction from the sample weight model is more likely to correctly predict 4's. However, it is also more likely to predict 4 for some images that are not labelled as 4." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Randomly select digits and test.\n", - "for index in range(0,len(y_test)):\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " predicted_sample_weight = fitted_model_sample_weight.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " if predicted == 4 or predicted_sample_weight == 4 or label == 4:\n", - " title = \"Label value = %d Predicted value = %d Prediced with sample weight = %d\" % (label, predicted, predicted_sample_weight)\n", - " fig = plt.figure(1, figsize=(3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/12.auto-ml-retrieve-the-training-sdk-versions.ipynb b/automl/12.auto-ml-retrieve-the-training-sdk-versions.ipynb deleted file mode 100644 index d3b58518..00000000 --- a/automl/12.auto-ml-retrieve-the-training-sdk-versions.ipynb +++ /dev/null @@ -1,227 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 12: Retrieving Training SDK Versions\n", - "\n", - "This example shows how to find the SDK versions used for an experiment.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train models using AutoML" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the experiment and specify the project folder.\n", - "experiment_name = 'automl-local-classification'\n", - "project_folder = './sample_projects/automl-local-classification'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data=output, index=['']).T" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_train = digits.data[10:,:]\n", - "y_train = digits.target[10:]\n", - "\n", - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iterations = 3,\n", - " n_cross_validations = 2,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " path = project_folder)\n", - "\n", - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Retrieve the SDK versions from RunHistory" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To get the SDK versions from RunHistory, first the run id needs to be recorded. This can either be done by copying it from the output message or by retrieving it after each run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Use a run id copied from an output message.\n", - "#run_id = 'AutoML_c0585b1f-a0e6-490b-84c7-3a099468b28e'\n", - "\n", - "# Retrieve the run id from a run.\n", - "run_id = local_run.id\n", - "print(run_id)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Initialize a new `AutoMLRun` object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "experiment_name = 'automl-local-classification'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "ml_run = AutoMLRun(experiment = experiment, run_id = run_id)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Get parent training SDK versions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ml_run.get_run_sdk_dependencies()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Get the traning SDK versions of a specific run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ml_run.get_run_sdk_dependencies(iteration = 2)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/13a.auto-ml-dataprep.ipynb b/automl/13a.auto-ml-dataprep.ipynb deleted file mode 100644 index bddeeff2..00000000 --- a/automl/13a.auto-ml-dataprep.ipynb +++ /dev/null @@ -1,446 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 13: Prepare Data using `azureml.dataprep` for Local Execution\n", - "In this example we showcase how you can use the `azureml.dataprep` SDK to load and prepare data for AutoML. `azureml.dataprep` can also be used standalone; full documentation can be found [here](https://github.com/Microsoft/PendletonDocs).\n", - "\n", - "Make sure you have executed the [setup](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Define data loading and preparation steps in a `Dataflow` using `azureml.dataprep`.\n", - "2. Pass the `Dataflow` to AutoML for a local run.\n", - "3. Pass the `Dataflow` to AutoML for a remote run." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "\n", - "import pandas as pd\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "import azureml.dataprep as dprep\n", - "from azureml.train.automl import AutoMLConfig" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - " \n", - "# choose a name for experiment\n", - "experiment_name = 'automl-dataprep-local'\n", - "# project folder\n", - "project_folder = './sample_projects/automl-dataprep-local'\n", - " \n", - "experiment = Experiment(ws, experiment_name)\n", - " \n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Loading Data using DataPrep" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# You can use `auto_read_file` which intelligently figures out delimiters and datatypes of a file.\n", - "# The data referenced here was pulled from `sklearn.datasets.load_digits()`.\n", - "simple_example_data_root = 'https://dprepdata.blob.core.windows.net/automl-notebook-data/'\n", - "X = dprep.auto_read_file(simple_example_data_root + 'X.csv').skip(1) # Remove the header row.\n", - "\n", - "# You can also use `read_csv` and `to_*` transformations to read (with overridable delimiter)\n", - "# and convert column types manually.\n", - "# Here we read a comma delimited file and convert all columns to integers.\n", - "y = dprep.read_csv(simple_example_data_root + 'y.csv').to_long(dprep.ColumnSelector(term='.*', use_regex = True))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Review the Data Preparation Result\n", - "\n", - "You can peek the result of a Dataflow at any range using `skip(i)` and `head(j)`. Doing so evaluates only `j` records for all the steps in the Dataflow, which makes it fast even against large datasets." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "X.skip(1).head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "This creates a general AutoML settings object applicable for both local and remote runs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_settings = {\n", - " \"iteration_timeout_minutes\" : 10,\n", - " \"iterations\" : 2,\n", - " \"primary_metric\" : 'AUC_weighted',\n", - " \"preprocess\" : False,\n", - " \"verbosity\" : logging.INFO,\n", - " \"n_cross_validations\": 3\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Local Run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pass Data with `Dataflow` Objects\n", - "\n", - "The `Dataflow` objects captured above can be passed to the `submit` method for a local run. AutoML will retrieve the results from the `Dataflow` for model training." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " X = X,\n", - " y = y,\n", - " **automl_settings)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - " \n", - "import pandas as pd\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model that has the smallest `log_loss` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"log_loss\"\n", - "best_run, fitted_model = local_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the first iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 0\n", - "best_run, fitted_model = local_run.get_output(iteration = iteration)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Fitted Model\n", - "\n", - "#### Load Test Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn import datasets\n", - "\n", - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Testing Our Best Fitted Model\n", - "We will try to predict 2 digits and see how our model works." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Randomly select digits and test\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import random\n", - "import numpy as np\n", - "\n", - "for index in np.random.choice(len(y_test), 2, replace = False):\n", - " print(index)\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " title = \"Label value = %d Predicted value = %d \" % (label, predicted)\n", - " fig = plt.figure(1, figsize=(3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Capture the `Dataflow` Objects for Later Use in AutoML\n", - "\n", - "`Dataflow` objects are immutable and are composed of a list of data preparation steps. A `Dataflow` object can be branched at any point for further usage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# sklearn.digits.data + target\n", - "digits_complete = dprep.auto_read_file('https://dprepdata.blob.core.windows.net/automl-notebook-data/digits-complete.csv')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`digits_complete` (sourced from `sklearn.datasets.load_digits()`) is forked into `dflow_X` to capture all the feature columns and `dflow_y` to capture the label column." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits_complete.to_pandas_dataframe().shape\n", - "labels_column = 'Column64'\n", - "dflow_X = digits_complete.drop_columns(columns = [labels_column])\n", - "dflow_y = digits_complete.keep_columns(columns = [labels_column])" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/13b.auto-ml-dataprep-remote-execution.ipynb b/automl/13b.auto-ml-dataprep-remote-execution.ipynb deleted file mode 100644 index 76db3e69..00000000 --- a/automl/13b.auto-ml-dataprep-remote-execution.ipynb +++ /dev/null @@ -1,495 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 13: Prepare Data using `azureml.dataprep` for Remote Execution (DSVM)\n", - "In this example we showcase how you can use the `azureml.dataprep` SDK to load and prepare data for AutoML. `azureml.dataprep` can also be used standalone; full documentation can be found [here](https://github.com/Microsoft/PendletonDocs).\n", - "\n", - "Make sure you have executed the [setup](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Define data loading and preparation steps in a `Dataflow` using `azureml.dataprep`.\n", - "2. Pass the `Dataflow` to AutoML for a local run.\n", - "3. Pass the `Dataflow` to AutoML for a remote run." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import time\n", - "\n", - "import pandas as pd\n", - "\n", - "import azureml.core\n", - "from azureml.core.compute import DsvmCompute\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "import azureml.dataprep as dprep\n", - "from azureml.train.automl import AutoMLConfig" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - " \n", - "# choose a name for experiment\n", - "experiment_name = 'automl-dataprep-remote-dsvm'\n", - "# project folder\n", - "project_folder = './sample_projects/automl-dataprep-remote-dsvm'\n", - " \n", - "experiment = Experiment(ws, experiment_name)\n", - " \n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Loading Data using DataPrep" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# You can use `auto_read_file` which intelligently figures out delimiters and datatypes of a file.\n", - "# The data referenced here was pulled from `sklearn.datasets.load_digits()`.\n", - "simple_example_data_root = 'https://dprepdata.blob.core.windows.net/automl-notebook-data/'\n", - "X = dprep.auto_read_file(simple_example_data_root + 'X.csv').skip(1) # Remove the header row.\n", - "\n", - "# You can also use `read_csv` and `to_*` transformations to read (with overridable delimiter)\n", - "# and convert column types manually.\n", - "# Here we read a comma delimited file and convert all columns to integers.\n", - "y = dprep.read_csv(simple_example_data_root + 'y.csv').to_long(dprep.ColumnSelector(term='.*', use_regex = True))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Review the Data Preparation Result\n", - "\n", - "You can peek the result of a Dataflow at any range using `skip(i)` and `head(j)`. Doing so evaluates only `j` records for all the steps in the Dataflow, which makes it fast even against large datasets." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "X.skip(1).head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "This creates a general AutoML settings object applicable for both local and remote runs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_settings = {\n", - " \"iteration_timeout_minutes\" : 10,\n", - " \"iterations\" : 2,\n", - " \"primary_metric\" : 'AUC_weighted',\n", - " \"preprocess\" : False,\n", - " \"verbosity\" : logging.INFO,\n", - " \"n_cross_validations\": 3\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Remote Run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create or Attach a Remote Linux DSVM" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dsvm_name = 'mydsvmd'\n", - "\n", - "try:\n", - " while ws.compute_targets[dsvm_name].provisioning_state == 'Creating':\n", - " time.sleep(1)\n", - " \n", - " dsvm_compute = DsvmCompute(ws, dsvm_name)\n", - " print('Found existing DVSM.')\n", - "except:\n", - " print('Creating a new DSVM.')\n", - " dsvm_config = DsvmCompute.provisioning_configuration(vm_size = \"Standard_D2_v2\")\n", - " dsvm_compute = DsvmCompute.create(ws, name = dsvm_name, provisioning_configuration = dsvm_config)\n", - " dsvm_compute.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "\n", - "conda_run_config = RunConfiguration(framework=\"python\")\n", - "\n", - "conda_run_config.target = dsvm_compute\n", - "\n", - "cd = CondaDependencies.create(pip_packages=['azureml-sdk[automl]'], conda_packages=['numpy'])\n", - "conda_run_config.environment.python.conda_dependencies = cd" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pass Data with `Dataflow` Objects\n", - "\n", - "The `Dataflow` objects captured above can also be passed to the `submit` method for a remote run. AutoML will serialize the `Dataflow` object and send it to the remote compute target. The `Dataflow` will not be evaluated locally." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " path = project_folder,\n", - " run_configuration=conda_run_config,\n", - " X = X,\n", - " y = y,\n", - " **automl_settings)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "remote_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(remote_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(remote_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - " \n", - "import pandas as pd\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method returns the best run and the fitted model. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = remote_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model that has the smallest `log_loss` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"log_loss\"\n", - "best_run, fitted_model = remote_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the first iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 0\n", - "best_run, fitted_model = remote_run.get_output(iteration = iteration)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Fitted Model\n", - "\n", - "#### Load Test Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn import datasets\n", - "\n", - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Testing Our Best Fitted Model\n", - "We will try to predict 2 digits and see how our model works." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Randomly select digits and test\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import random\n", - "import numpy as np\n", - "\n", - "for index in np.random.choice(len(y_test), 2, replace = False):\n", - " print(index)\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " title = \"Label value = %d Predicted value = %d \" % (label, predicted)\n", - " fig = plt.figure(1, figsize=(3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Capture the `Dataflow` Objects for Later Use in AutoML\n", - "\n", - "`Dataflow` objects are immutable and are composed of a list of data preparation steps. A `Dataflow` object can be branched at any point for further usage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# sklearn.digits.data + target\n", - "digits_complete = dprep.auto_read_file('https://dprepdata.blob.core.windows.net/automl-notebook-data/digits-complete.csv')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`digits_complete` (sourced from `sklearn.datasets.load_digits()`) is forked into `dflow_X` to capture all the feature columns and `dflow_y` to capture the label column." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits_complete.to_pandas_dataframe().shape\n", - "labels_column = 'Column64'\n", - "dflow_X = digits_complete.drop_columns(columns = [labels_column])\n", - "dflow_y = digits_complete.keep_columns(columns = [labels_column])" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "savitam" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/14.auto-ml-model-explanation.ipynb b/automl/14.auto-ml-model-explanation.ipynb deleted file mode 100644 index 771941d3..00000000 --- a/automl/14.auto-ml-model-explanation.ipynb +++ /dev/null @@ -1,374 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 14: Explain classification model and visualize the explanation\n", - "\n", - "In this example we use the sklearn's [iris dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html) to showcase how you can use the AutoML Classifier for a simple classification problem.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you would see\n", - "1. Creating an Experiment in an existing Workspace\n", - "2. Instantiating AutoMLConfig\n", - "3. Training the Model using local compute and explain the model\n", - "4. Visualization model's feature importance in widget\n", - "5. Explore best model's explanation\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install AzureML Explainer SDK " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install azureml_sdk[explain]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Experiment\n", - "\n", - "As part of the setup you have already created a Workspace. For AutoML you would need to create an Experiment. An Experiment is a named object in a Workspace, which is used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "import pandas as pd\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# choose a name for experiment\n", - "experiment_name = 'automl-local-classification'\n", - "# project folder\n", - "project_folder = './sample_projects/automl-local-classification-model-explanation'\n", - "\n", - "experiment=Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Load Iris Data Set" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn import datasets\n", - "\n", - "iris = datasets.load_iris()\n", - "y = iris.target\n", - "X = iris.data\n", - "\n", - "features = iris.feature_names\n", - "\n", - "from sklearn.model_selection import train_test_split\n", - "X_train, X_test, y_train, y_test = train_test_split(X,\n", - " y,\n", - " test_size=0.1,\n", - " random_state=100,\n", - " stratify=y)\n", - "\n", - "X_train = pd.DataFrame(X_train, columns=features)\n", - "X_test = pd.DataFrame(X_test, columns=features)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Instantiate Auto ML Config\n", - "\n", - "Instantiate a AutoMLConfig object. This defines the settings and data used to run the experiment.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize.
Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**max_time_sec**|Time limit in minutes for each iterations|\n", - "|**iterations**|Number of iterations. In each iteration Auto ML trains the data with a specific pipeline|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers. |\n", - "|**X_valid**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y_valid**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]|\n", - "|**model_explainability**|Indicate to explain each trained pipeline or not |\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder. |" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'automl_errors.log',\n", - " primary_metric = 'AUC_weighted',\n", - " max_time_sec = 12000,\n", - " iterations = 10,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " X_valid = X_test,\n", - " y_valid = y_test,\n", - " model_explainability=True,\n", - " path=project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training the Model\n", - "\n", - "You can call the submit method on the experiment object and pass the run configuration. For Local runs the execution is synchronous. Depending on the data and number of iterations this can run for while.\n", - "You will see the currently running iterations printing to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Exploring the results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Widget for monitoring runs\n", - "\n", - "The widget will sit on \"loading\" until the first iteration completed, then you will see an auto-updating graph and table show up. It refreshed once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "NOTE: The widget displays a link at the bottom. This links to a web-ui to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show() " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "child_run = next(local_run.get_children())\n", - "RunDetails(child_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The *get_output* method on automl_classifier returns the best run and the fitted model for the last *fit* invocation. There are overloads on *get_output* that allow you to retrieve the best run and fitted model for *any* logged metric or a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Best Model 's explanation\n", - "\n", - "Retrieve the explanation from the best_run. And explanation information includes:\n", - "\n", - "1.\tshap_values: The explanation information generated by shap lib\n", - "2.\texpected_values: The expected value of the model applied to set of X_train data.\n", - "3.\toverall_summary: The model level feature importance values sorted in descending order\n", - "4.\toverall_imp: The feature names sorted in the same order as in overall_summary\n", - "5.\tper_class_summary: The class level feature importance values sorted in descending order. Only available for the classification case\n", - "6.\tper_class_imp: The feature names sorted in the same order as in per_class_summary. Only available for the classification case" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.automl.automlexplainer import retrieve_model_explanation\n", - "\n", - "shap_values, expected_values, overall_summary, overall_imp, per_class_summary, per_class_imp = \\\n", - " retrieve_model_explanation(best_run)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(overall_summary)\n", - "print(overall_imp)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(per_class_summary)\n", - "print(per_class_imp)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Beside retrieve the existed model explanation information, explain the model with different train/test data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.automl.automlexplainer import explain_model\n", - "\n", - "shap_values, expected_values, overall_summary, overall_imp, per_class_summary, per_class_imp = \\\n", - " explain_model(fitted_model, X_train, X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(overall_summary)\n", - "print(overall_imp)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "xif" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/15a.auto-ml-classification-ensemble.ipynb b/automl/15a.auto-ml-classification-ensemble.ipynb deleted file mode 100644 index 5f29fece..00000000 --- a/automl/15a.auto-ml-classification-ensemble.ipynb +++ /dev/null @@ -1,423 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 15a: Classification with ensembling on local compute\n", - "\n", - "In this example we use the scikit-learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) to showcase how you can use AutoML for a simple classification problem.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Configure AutoML using `AutoMLConfig` which enables an extra ensembling iteration.\n", - "3. Train the model using local compute.\n", - "4. Explore the results.\n", - "5. Test the best fitted model.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the experiment and specify the project folder.\n", - "experiment_name = 'automl-local-classification'\n", - "project_folder = './sample_projects/automl-local-classification'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Load Training Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn import datasets\n", - "\n", - "digits = datasets.load_digits()\n", - "\n", - "# Exclude the first 50 rows from training so that they can be used for test.\n", - "X_train = digits.data[150:,:]\n", - "y_train = digits.target[150:]\n", - "X_valid = digits.data[50:150]\n", - "y_valid = digits.target[50:150]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate an `AutoMLConfig` object to specify the settings and data used to run the experiment.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics:
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**n_cross_validations**|Number of cross validation splits.|\n", - "|**X**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers.|\n", - "|**X_valid**|(sparse) array-like, shape = [n_samples, n_features]|\n", - "|**y_valid**|(sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]
Multi-class targets. An indicator matrix turns on multilabel classification. This should be an array of integers.|\n", - "|**enable_ensembling**|Flag to enable an ensembling iteration after all the other iterations complete.|\n", - "|**ensemble_iterations**|Number of iterations during which we choose a fitted pipeline to be part of the final ensemble.|\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'classification',\n", - " debug_log = 'classification.log',\n", - " primary_metric = 'AUC_weighted',\n", - " iteration_timeout_minutes = 60,\n", - " iterations = 10,\n", - " verbosity = logging.INFO,\n", - " X = X_train, \n", - " y = y_train,\n", - " X_valid = X_valid,\n", - " y_valid = y_valid,\n", - " enable_ensembling = True,\n", - " ensemble_iterations = 5,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Model\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Optionally, you can continue an interrupted local run by calling `continue_experiment` without the `iterations` parameter, or run more iterations for a completed run by specifying the `iterations` parameter:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = local_run.continue_experiment(X = X_train, \n", - " y = y_train,\n", - " X_valid = X_valid,\n", - " y_valid = y_valid,\n", - " show_output = True,\n", - " iterations = 5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method on `automl_classifier` returns the best run and the fitted model for the last invocation. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model that has the smallest `log_loss` value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"log_loss\"\n", - "best_run, fitted_model = local_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Model from a Specific Iteration\n", - "Show the run and the model from the third iteration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "iteration = 3\n", - "third_run, third_model = local_run.get_output(iteration = iteration)\n", - "print(third_run)\n", - "print(third_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Fitted Model\n", - "\n", - "#### Load Test Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits = datasets.load_digits()\n", - "X_test = digits.data[:10, :]\n", - "y_test = digits.target[:10]\n", - "images = digits.images[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Testing Our Best Pipeline\n", - "We will try to predict 2 digits and see how our model works." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Randomly select digits and test.\n", - "for index in np.random.choice(len(y_test), 2, replace = False):\n", - " print(index)\n", - " predicted = fitted_model.predict(X_test[index:index + 1])[0]\n", - " label = y_test[index]\n", - " title = \"Label value = %d Predicted value = %d \" % (label, predicted)\n", - " fig = plt.figure(1, figsize = (3,3))\n", - " ax1 = fig.add_axes((0,0,.8,.8))\n", - " ax1.set_title(title)\n", - " plt.imshow(images[index], cmap = plt.cm.gray_r, interpolation = 'nearest')\n", - " plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "ratanase" - } - ], - "kernelspec": { - "display_name": "Python [default]", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/15b.auto-ml-regression-ensemble.ipynb b/automl/15b.auto-ml-regression-ensemble.ipynb deleted file mode 100644 index f7374352..00000000 --- a/automl/15b.auto-ml-regression-ensemble.ipynb +++ /dev/null @@ -1,449 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AutoML 15b: Regression with ensembling on remote compute\n", - "\n", - "In this example we use the scikit-learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) to showcase how you can use AutoML for a simple regression problem.\n", - "\n", - "Make sure you have executed the [00.configuration](00.configuration.ipynb) before running this notebook.\n", - "\n", - "In this notebook you will learn how to:\n", - "1. Create an `Experiment` in an existing `Workspace`.\n", - "2. Configure AutoML using `AutoMLConfig`which enables an extra ensembling iteration.\n", - "3. Train the model using remote compute.\n", - "4. Explore the results.\n", - "5. Test the best fitted model.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an Experiment\n", - "\n", - "As part of the setup you have already created an Azure ML `Workspace` object. For AutoML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import os\n", - "import random\n", - "\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn import datasets\n", - "\n", - "import azureml.core\n", - "from azureml.core.experiment import Experiment\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl.run import AutoMLRun" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "\n", - "# Choose a name for the experiment and specify the project folder.\n", - "experiment_name = 'automl-local-regression'\n", - "project_folder = './sample_projects/automl-local-regression'\n", - "\n", - "experiment = Experiment(ws, experiment_name)\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace Name'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "output['Experiment Name'] = experiment.name\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data = output, index = ['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a Remote Linux DSVM\n", - "**Note:** If creation fails with a message about Marketplace purchase eligibilty, start creation of a DSVM through the [Azure portal](https://portal.azure.com), and select \"Want to create programmatically\" to enable programmatic creation. Once you've enabled this setting, you can exit the portal without actually creating the DSVM, and creation of the DSVM through the notebook should work." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import DsvmCompute\n", - "\n", - "dsvm_name = 'mydsvm'\n", - "try:\n", - " dsvm_compute = DsvmCompute(ws, dsvm_name)\n", - " print('Found an existing DSVM.')\n", - "except:\n", - " print('Creating a new DSVM.')\n", - " dsvm_config = DsvmCompute.provisioning_configuration(vm_size = \"Standard_D2_v2\")\n", - " dsvm_compute = DsvmCompute.create(ws, name = dsvm_name, provisioning_configuration = dsvm_config)\n", - " dsvm_compute.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Get Data File\n", - "For remote executions you should author a `get_data.py` file containing a `get_data()` function. This file should be in the root directory of the project. You can encapsulate code to read data either from a blob storage or local disk in this file.\n", - "In this example, the `get_data()` function returns data using scikit-learn's `diabetes` dataset." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if not os.path.exists(project_folder):\n", - " os.makedirs(project_folder)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $project_folder/get_data.py\n", - "\n", - "# Load the diabetes dataset, a well-known built-in small dataset that comes with scikit-learn.\n", - "from sklearn.datasets import load_diabetes\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.metrics import mean_squared_error\n", - "from sklearn.model_selection import train_test_split\n", - "\n", - "def get_data():\n", - " X, y = load_diabetes(return_X_y = True)\n", - "\n", - " columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']\n", - "\n", - " X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size = 0.2, random_state = 0)\n", - " X_valid, X_test, y_valid, y_test = train_test_split(X_temp, y_temp, test_size = 0.5, random_state = 0)\n", - " return { \"X\" : X_train, \"y\" : y_train, \"X_valid\": X_valid, \"y_valid\": y_valid }" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure AutoML\n", - "\n", - "Instantiate an `AutoMLConfig` object to specify the settings and data used to run the experiment.\n", - "\n", - "|Property|Description|\n", - "|-|-|\n", - "|**task**|classification or regression|\n", - "|**primary_metric**|This is the metric that you want to optimize. Regression supports the following primary metrics:
spearman_correlation
normalized_root_mean_squared_error
r2_score
normalized_mean_absolute_error|\n", - "|**iteration_timeout_minutes**|Time limit in minutes for each iteration.|\n", - "|**iterations**|Number of iterations. In each iteration AutoML trains a specific pipeline with the data.|\n", - "|**enable_ensembling**|Flag to enable an ensembling iteration after all the other iterations complete.|\n", - "|**ensemble_iterations**|Number of iterations during which we choose a fitted pipeline to be part of the final ensemble.|\n", - "|**path**|Relative path to the project folder. AutoML stores configuration files for the experiment under this folder. You can specify a new empty folder.|" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "automl_config = AutoMLConfig(task = 'regression',\n", - " iteration_timeout_minutes = 10,\n", - " iterations = 20,\n", - " primary_metric = 'spearman_correlation',\n", - " debug_log = 'regression.log',\n", - " verbosity = logging.INFO,\n", - " compute_target = dsvm_compute,\n", - " data_script = project_folder + \"/get_data.py\",\n", - " enable_ensembling = True,\n", - " ensemble_iterations = 5,\n", - " path = project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the Model\n", - "\n", - "Call the `submit` method on the experiment object and pass the run configuration. Execution of local runs is synchronous. Depending on the data and the number of iterations this can run for a while.\n", - "In this example, we specify `show_output = True` to print currently running iterations to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run = experiment.submit(automl_config, show_output = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "local_run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Widget for Monitoring Runs\n", - "\n", - "The widget will first report a \"loading\" status while running the first iteration. After completing the first iteration, an auto-updating graph and table will be shown. The widget will refresh once per minute, so you should see the graph update as child runs complete.\n", - "\n", - "**Note:** The widget displays a link at the bottom. Use this link to open a web interface to explore the individual run details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Retrieve All Child Runs\n", - "You can also use SDK methods to fetch all the child runs and see individual metrics that we log." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the Best Model\n", - "\n", - "Below we select the best pipeline from our iterations. The `get_output` method on `automl_classifier` returns the best run and the fitted model for the last invocation. Overloads on `get_output` allow you to retrieve the best run and fitted model for *any* logged metric or for a particular *iteration*." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run, fitted_model = local_run.get_output()\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Best Model Based on Any Other Metric\n", - "Show the run and the model that has the smallest `root_mean_squared_error` value." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lookup_metric = \"root_mean_squared_error\"\n", - "best_run, fitted_model = local_run.get_output(metric = lookup_metric)\n", - "print(best_run)\n", - "print(fitted_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the Best Model (Ensemble)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Predict on training and test set, and calculate residual values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.datasets import load_diabetes\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.metrics import mean_squared_error\n", - "from sklearn.model_selection import train_test_split\n", - "\n", - "X, y = load_diabetes(return_X_y = True)\n", - "\n", - "X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size = 0.2, random_state = 0)\n", - "X_valid, X_test, y_valid, y_test = train_test_split(X_temp, y_temp, test_size = 0.5, random_state = 0)\n", - "\n", - "\n", - "y_pred_train = fitted_model.predict(X_train)\n", - "y_residual_train = y_train - y_pred_train\n", - "\n", - "y_pred_test = fitted_model.predict(X_test)\n", - "y_residual_test = y_test - y_pred_test" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from sklearn import datasets\n", - "from sklearn.metrics import mean_squared_error, r2_score\n", - "\n", - "# Set up a multi-plot chart.\n", - "f, (a0, a1) = plt.subplots(1, 2, gridspec_kw = {'width_ratios':[1, 1], 'wspace':0, 'hspace': 0})\n", - "f.suptitle('Regression Residual Values', fontsize = 18)\n", - "f.set_figheight(6)\n", - "f.set_figwidth(16)\n", - "\n", - "# Plot residual values of training set.\n", - "a0.axis([0, 360, -200, 200])\n", - "a0.plot(y_residual_train, 'bo', alpha = 0.5)\n", - "a0.plot([-10,360],[0,0], 'r-', lw = 3)\n", - "a0.text(16,170,'RMSE = {0:.2f}'.format(np.sqrt(mean_squared_error(y_train, y_pred_train))), fontsize = 12)\n", - "a0.text(16,140,'R2 score = {0:.2f}'.format(r2_score(y_train, y_pred_train)), fontsize = 12)\n", - "a0.set_xlabel('Training samples', fontsize = 12)\n", - "a0.set_ylabel('Residual Values', fontsize = 12)\n", - "\n", - "# Plot a histogram.\n", - "a0.hist(y_residual_train, orientation = 'horizontal', color = 'b', bins = 10, histtype = 'step');\n", - "a0.hist(y_residual_train, orientation = 'horizontal', color = 'b', alpha = 0.2, bins = 10);\n", - "\n", - "# Plot residual values of test set.\n", - "a1.axis([0, 90, -200, 200])\n", - "a1.plot(y_residual_test, 'bo', alpha = 0.5)\n", - "a1.plot([-10,360],[0,0], 'r-', lw = 3)\n", - "a1.text(5,170,'RMSE = {0:.2f}'.format(np.sqrt(mean_squared_error(y_test, y_pred_test))), fontsize = 12)\n", - "a1.text(5,140,'R2 score = {0:.2f}'.format(r2_score(y_test, y_pred_test)), fontsize = 12)\n", - "a1.set_xlabel('Test samples', fontsize = 12)\n", - "a1.set_yticklabels([])\n", - "\n", - "# Plot a histogram.\n", - "a1.hist(y_residual_test, orientation = 'horizontal', color = 'b', bins = 10, histtype = 'step')\n", - "a1.hist(y_residual_test, orientation = 'horizontal', color = 'b', alpha = 0.2, bins = 10)\n", - "\n", - "plt.show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "ratanase" - } - ], - "kernelspec": { - "display_name": "Python [default]", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/automl/README.md b/automl/README.md deleted file mode 100644 index adc438d8..00000000 --- a/automl/README.md +++ /dev/null @@ -1,306 +0,0 @@ -# Table of Contents -1. [Automated ML Introduction](#introduction) -1. [Running samples in Azure Notebooks](#jupyter) -1. [Running samples in a Local Conda environment](#localconda) -1. [Automated ML SDK Sample Notebooks](#samples) -1. [Documentation](#documentation) -1. [Running using python command](#pythoncommand) -1. [Troubleshooting](#troubleshooting) - - -# Automated ML introduction -Automated machine learning (automated ML) builds high quality machine learning models for you by automating model and hyperparameter selection. Bring a labelled dataset that you want to build a model for, automated ML will give you a high quality machine learning model that you can use for predictions. - - -If you are new to Data Science, AutoML will help you get jumpstarted by simplifying machine learning model building. It abstracts you from needing to perform model selection, hyperparameter selection and in one step creates a high quality trained model for you to use. - -If you are an experienced data scientist, AutoML will help increase your productivity by intelligently performing the model and hyperparameter selection for your training and generates high quality models much quicker than manually specifying several combinations of the parameters and running training jobs. AutoML provides visibility and access to all the training jobs and the performance characteristics of the models to help you further tune the pipeline if you desire. - - -## Running samples in Azure Notebooks - Jupyter based notebooks in the Azure cloud - -1. [![Azure Notebooks](https://notebooks.azure.com/launch.png)](https://aka.ms/aml-clone-azure-notebooks) -[Import sample notebooks ](https://aka.ms/aml-clone-azure-notebooks) into Azure Notebooks. -1. Follow the instructions in the [../00.configuration](00.configuration.ipynb) notebook to create and connect to a workspace. -1. Open one of the sample notebooks. - - **Make sure the Azure Notebook kernel is set to `Python 3.6`** when you open a notebook. - - ![set kernel to Python 3.6](../images/python36.png) - - -## Running samples in a Local Conda environment - -To run these notebook on your own notebook server, use these installation instructions. - -The instructions below will install everything you need and then start a Jupyter notebook. To start your Jupyter notebook manually, use: - -``` -conda activate azure_automl -jupyter notebook -``` - -or on Mac: - -``` -source activate azure_automl -jupyter notebook -``` - - -### 1. Install mini-conda from [here](https://conda.io/miniconda.html), choose Python 3.7 or higher. -- **Note**: if you already have conda installed, you can keep using it but it should be version 4.4.10 or later (as shown by: conda -V). If you have a previous version installed, you can update it using the command: conda update conda. -There's no need to install mini-conda specifically. - -### 2. Downloading the sample notebooks -- Download the sample notebooks from [GitHub](https://github.com/Azure/MachineLearningNotebooks) as zip and extract the contents to a local directory. The AutoML sample notebooks are in the "automl" folder. - -### 3. Setup a new conda environment -The **automl/automl_setup** script creates a new conda environment, installs the necessary packages, configures the widget and starts a jupyter notebook. -It takes the conda environment name as an optional parameter. The default conda environment name is azure_automl. The exact command depends on the operating system. It can take about 10 minutes to execute. -## Windows -Start a conda command windows, cd to the **automl** folder where the sample notebooks were extracted and then run: -``` -automl_setup -``` -## Mac -Install "Command line developer tools" if it is not already installed (you can use the command: `xcode-select --install`). - -Start a Terminal windows, cd to the **automl** folder where the sample notebooks were extracted and then run: - -``` -bash automl_setup_mac.sh -``` - -## Linux -cd to the **automl** folder where the sample notebooks were extracted and then run: - -``` -bash automl_setup_linux.sh -``` - -### 4. Running configuration.ipynb -- Before running any samples you next need to run the configuration notebook. Click on 00.configuration.ipynb notebook -- Execute the cells in the notebook to Register Machine Learning Services Resource Provider and create a workspace. (*instructions in notebook*) - -### 5. Running Samples -- Please make sure you use the Python [conda env:azure_automl] kernel when trying the sample Notebooks. -- Follow the instructions in the individual notebooks to explore various features in AutoML - - -# Automated ML SDK Sample Notebooks -- [00.configuration.ipynb](00.configuration.ipynb) - - Register Machine Learning Services Resource Provider - - Create new Azure ML Workspace - - Save Workspace configuration file - -- [01.auto-ml-classification.ipynb](01.auto-ml-classification.ipynb) - - Dataset: scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits) - - Simple example of using Auto ML for classification - - Uses local compute for training - -- [02.auto-ml-regression.ipynb](02.auto-ml-regression.ipynb) - - Dataset: scikit learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) - - Simple example of using Auto ML for regression - - Uses local compute for training - -- [03.auto-ml-remote-execution.ipynb](03.auto-ml-remote-execution.ipynb) - - Dataset: scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits) - - Example of using Auto ML for classification using a remote linux DSVM for training - - Parallel execution of iterations - - Async tracking of progress - - Cancelling individual iterations or entire run - - Retrieving models for any iteration or logged metric - - Specify automl settings as kwargs - -- [03b.auto-ml-remote-batchai.ipynb](03b.auto-ml-remote-batchai.ipynb) - - Dataset: scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits) - - Example of using automated ML for classification using a remote Batch AI compute for training - - Parallel execution of iterations - - Async tracking of progress - - Cancelling individual iterations or entire run - - Retrieving models for any iteration or logged metric - - Specify automl settings as kwargs - -- [04.auto-ml-remote-execution-text-data-blob-store.ipynb](04.auto-ml-remote-execution-text-data-blob-store.ipynb) - - Dataset: [Burning Man 2016 dataset](https://innovate.burningman.org/datasets-page/) - - handling text data with preprocess flag - - Reading data from a blob store for remote executions - - using pandas dataframes for reading data - -- [05.auto-ml-missing-data-blacklist-early-termination.ipynb](05.auto-ml-missing-data-blacklist-early-termination.ipynb) - - Dataset: scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits) - - Blacklist certain pipelines - - Specify a target metrics to indicate stopping criteria - - Handling Missing Data in the input - -- [06.auto-ml-sparse-data-train-test-split.ipynb](06.auto-ml-sparse-data-train-test-split.ipynb) - - Dataset: Scikit learn's [20newsgroup](http://scikit-learn.org/stable/datasets/twenty_newsgroups.html) - - Handle sparse datasets - - Specify custom train and validation set - -- [07.auto-ml-exploring-previous-runs.ipynb](07.auto-ml-exploring-previous-runs) - - List all projects for the workspace - - List all AutoML Runs for a given project - - Get details for a AutoML Run. (Automl settings, run widget & all metrics) - - Download fitted pipeline for any iteration - -- [08.auto-ml-remote-execution-with-DataStore.ipynb](08.auto-ml-remote-execution-with-DataStore.ipynb) - - Dataset: scikit learn's [digit dataset](https://innovate.burningman.org/datasets-page/) - - Download the data and store it in DataStore. - -- [09.auto-ml-classification-with-deployment.ipynb](09.auto-ml-classification-with-deployment.ipynb) - - Dataset: scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits) - - Simple example of using Auto ML for classification - - Registering the model - - Creating Image and creating aci service - - Testing the aci service - -- [10.auto-ml-multi-output-example.ipynb](10.auto-ml-multi-output-example.ipynb) - - Dataset: scikit learn's random example using multi-output pipeline(http://scikit-learn.org/stable/auto_examples/ensemble/plot_random_forest_regression_multioutput.html#sphx-glr-auto-examples-ensemble-plot-random-forest-regression-multioutput-py) - - Simple example of using Auto ML for multi output regression - - Handle both the dense and sparse metrix - -- [11.auto-ml-sample-weight.ipynb](11.auto-ml-sample-weight.ipynb) - - How to specifying sample_weight - - The difference that it makes to test results - -- [12.auto-ml-retrieve-the-training-sdk-versions.ipynb](12.auto-ml-retrieve-the-training-sdk-versions.ipynb) - - How to get current and training env SDK versions - -- [13.auto-ml-dataprep.ipynb](13.auto-ml-dataprep.ipynb) - - Using DataPrep for reading data - -- [14.auto-ml-model-explanation.ipynb](14.auto-ml-model-explanation.ipynb) - - Dataset: sklearn's [iris dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html) - - Explaining the AutoML classification pipeline - - Visualizing feature importance in widget - -- [15a.auto-ml-classification-ensemble.ipynb](15a.auto-ml-classification-ensemble.ipynb) - - Dataset: scikit learn's [digit dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits) - - Enables an extra iteration for generating an Ensemble of models - - Uses local compute for training - -- [15b.auto-ml-regression-ensemble.ipynb](15b.auto-ml-regression-ensemble.ipynb) - - Dataset: scikit learn's [diabetes dataset](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html) - - Enables an extra iteration for generating an Ensemble of models - - Uses remote Linux DSVM for training - - -# Documentation -## Table of Contents -1. [Automated ML Settings ](#automlsettings) -1. [Cross validation split options](#cvsplits) -1. [Get Data Syntax](#getdata) -1. [Data pre-processing and featurization](#preprocessing) - - -## Automated ML Settings - -|Property|Description|Default| -|-|-|-| -|**primary_metric**|This is the metric that you want to optimize.

Classification supports the following primary metrics
accuracy
AUC_weighted
balanced_accuracy
average_precision_score_weighted
precision_score_weighted

Regression supports the following primary metrics
spearman_correlation
normalized_root_mean_squared_error
r2_score
normalized_mean_absolute_error
normalized_root_mean_squared_log_error| Classification: accuracy

Regression: spearman_correlation -|**iteration_timeout_minutes**|Time limit in minutes for each iteration|None| -|**iterations**|Number of iterations. In each iteration trains the data with a specific pipeline. To get the best result, use at least 100. |100| -|**n_cross_validations**|Number of cross validation splits|None| -|**validation_size**|Size of validation set as percentage of all training samples|None| -|**max_concurrent_iterations**|Max number of iterations that would be executed in parallel|1| -|**preprocess**|*True/False*
Setting this to *True* enables preprocessing
on the input to handle missing data, and perform some common feature extraction
*Note: If input data is Sparse you cannot use preprocess=True*|False| -|**max_cores_per_iteration**| Indicates how many cores on the compute target would be used to train a single pipeline.
You can set it to *-1* to use all cores|1| -|**experiment_exit_score**|*double* value indicating the target for *primary_metric*.
Once the target is surpassed the run terminates|None| -|**blacklist_models**|*Array* of *strings* indicating models to ignore for Auto ML from the list of models.|None| -|**whilelist_models**|*Array* of *strings* use only models listed for Auto ML from the list of models..|None| - -## List of models for white list/blacklist -**Classification** -
LogisticRegression -
SGD -
MultinomialNaiveBayes -
BernoulliNaiveBayes -
SVM -
LinearSVM -
KNN -
DecisionTree -
RandomForest -
ExtremeRandomTrees -
LightGBM -
GradientBoosting -
TensorFlowDNN -
TensorFlowLinearClassifier -

**Regression** -
ElasticNet -
GradientBoosting -
DecisionTree -
KNN -
LassoLars -
SGD -
RandomForest -
ExtremeRandomTrees -
LightGBM -
TensorFlowLinearRegressor -
TensorFlowDNN - -## Cross validation split options -### K-Folds Cross Validation -Use *n_cross_validations* setting to specify the number of cross validations. The training data set will be randomly split into *n_cross_validations* folds of equal size. During each cross validation round, one of the folds will be used for validation of the model trained on the remaining folds. This process repeats for *n_cross_validations* rounds until each fold is used once as validation set. Finally, the average scores accross all *n_cross_validations* rounds will be reported, and the corresponding model will be retrained on the whole training data set. - -### Monte Carlo Cross Validation (a.k.a. Repeated Random Sub-Sampling) -Use *validation_size* to specify the percentage of the training data set that should be used for validation, and use *n_cross_validations* to specify the number of cross validations. During each cross validation round, a subset of size *validation_size* will be randomly selected for validation of the model trained on the remaining data. Finally, the average scores accross all *n_cross_validations* rounds will be reported, and the corresponding model will be retrained on the whole training data set. - -### Custom train and validation set -You can specify seperate train and validation set either through the get_data() or directly to the fit method. - - -## get_data() syntax -The *get_data()* function can be used to return a dictionary with these values: - -|Key|Type|Dependency|Mutually Exclusive with|Description| -|:-|:-|:-|:-|:-| -|X|Pandas Dataframe or Numpy Array|y|data_train, label, columns|All features to train with| -|y|Pandas Dataframe or Numpy Array|X|label|Label data to train with. For classification, this should be an array of integers. | -|X_valid|Pandas Dataframe or Numpy Array|X, y, y_valid|data_train, label|*Optional* All features to validate with. If this is not specified, X is split between train and validate| -|y_valid|Pandas Dataframe or Numpy Array|X, y, X_valid|data_train, label|*Optional* The label data to validate with. If this is not specified, y is split between train and validate| -|sample_weight|Pandas Dataframe or Numpy Array|y|data_train, label, columns|*Optional* A weight value for each label. Higher values indicate that the sample is more important.| -|sample_weight_valid|Pandas Dataframe or Numpy Array|y_valid|data_train, label, columns|*Optional* A weight value for each validation label. Higher values indicate that the sample is more important. If this is not specified, sample_weight is split between train and validate| -|data_train|Pandas Dataframe|label|X, y, X_valid, y_valid|All data (features+label) to train with| -|label|string|data_train|X, y, X_valid, y_valid|Which column in data_train represents the label| -|columns|Array of strings|data_train||*Optional* Whitelist of columns to use for features| -|cv_splits_indices|Array of integers|data_train||*Optional* List of indexes to split the data for cross validation| - - -## Data pre-processing and featurization -If you use `preprocess=True`, the following data preprocessing steps are performed automatically for you: - -1. Dropping high cardinality or no variance features - - Features with no useful information are dropped from training and validation sets. These include features with all values missing, same value across all rows or with extremely high cardinality (e.g., hashes, IDs or GUIDs). -2. Missing value imputation - - For numerical features, missing values are imputed with average of values in the column. - - For categorical features, missing values are imputed with most frequent value. -3. Generating additional features - - For DateTime features: Year, Month, Day, Day of week, Day of year, Quarter, Week of the year, Hour, Minute, Second. - - For Text features: Term frequency based on bi-grams and tri-grams, Count vectorizer. -4. Transformations and encodings - - Numeric features with very few unique values are transformed into categorical features. - - -# Running using python command -Jupyter notebook provides a File / Download as / Python (.py) option for saving the notebook as a Python file. -You can then run this file using the python command. -However, on Windows the file needs to be modified before it can be run. -The following condition must be added to the main code in the file: - - if __name__ == "__main__": - -The main code of the file must be indented so that it is under this condition. - - -# Troubleshooting -## Iterations fail and the log contains "MemoryError" -This can be caused by insufficient memory on the DSVM. AutoML loads all training data into memory. So, the available memory should be more than the training data size. -If you are using a remote DSVM, memory is needed for each concurrent iteration. The max_concurrent_iterations setting specifies the maximum concurrent iterations. For example, if the training data size is 8Gb and max_concurrent_iterations is set to 10, the minimum memory required is at least 80Gb. -To resolve this issue, allocate a DSVM with more memory or reduce the value specified for max_concurrent_iterations. - -## Iterations show as "Not Responding" in the RunDetails widget. -This can be caused by too many concurrent iterations for a remote DSVM. Each concurrent iteration usually takes 100% of a core when it is running. Some iterations can use multiple cores. So, the max_concurrent_iterations setting should always be less than the number of cores of the DSVM. -To resolve this issue, try reducing the value specified for the max_concurrent_iterations setting. - diff --git a/automl/automl_env.yml b/automl/automl_env.yml deleted file mode 100644 index 1eb3c1d1..00000000 --- a/automl/automl_env.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: azure_automl -dependencies: - # The python interpreter version. - # Currently Azure ML only supports 3.5.2 and later. -- python=3.6 -- nb_conda -- matplotlib==2.1.0 -- numpy>=1.11.0,<1.15.0 -- cython -- urllib3<1.24 -- scipy>=0.19.0,<0.20.0 -- scikit-learn>=0.18.0,<=0.19.1 -- pandas>=0.22.0,<0.23.0 - -# Required for azuremlftk -- dill -- pyodbc -- statsmodels -- numexpr -- keras -- distributed>=1.21.5,<1.24 - -- pip: - - # Required for azuremlftk - - https://azuremlpackages.blob.core.windows.net/forecasting/azuremlftk-0.1.18313.5a1-py3-none-any.whl - - # Required packages for AzureML execution, history, and data preparation. - - azureml-sdk[automl,notebooks] - - pandas_ml - diff --git a/automl/automl_env_mac.yml b/automl/automl_env_mac.yml deleted file mode 100644 index c06ef294..00000000 --- a/automl/automl_env_mac.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: azure_automl -dependencies: - # The python interpreter version. - # Currently Azure ML only supports 3.5.2 and later. -- python=3.6 -- nb_conda -- matplotlib==2.1.0 -- numpy>=1.15.3 -- cython -- urllib3<1.24 -- scipy>=0.19.0,<0.20.0 -- scikit-learn>=0.18.0,<=0.19.1 -- pandas>=0.22.0,<0.23.0 - -# Required for azuremlftk -- dill -- pyodbc -- statsmodels -- numexpr -- keras -- distributed>=1.21.5,<1.24 - -- pip: - - # Required for azuremlftk - - https://azuremlpackages.blob.core.windows.net/forecasting/azuremlftk-0.1.18313.5a1-py3-none-any.whl - # Required packages for AzureML execution, history, and data preparation. - - azureml-sdk[automl,notebooks] - - pandas_ml - - diff --git a/automl/automl_setup.cmd b/automl/automl_setup.cmd deleted file mode 100644 index 7e961550..00000000 --- a/automl/automl_setup.cmd +++ /dev/null @@ -1,52 +0,0 @@ -@echo off -set conda_env_name=%1 -set automl_env_file=%2 -set PIP_NO_WARN_SCRIPT_LOCATION=0 - -IF "%conda_env_name%"=="" SET conda_env_name="azure_automl" -IF "%automl_env_file%"=="" SET automl_env_file="automl_env.yml" - -IF NOT EXIST %automl_env_file% GOTO YmlMissing - -call conda activate %conda_env_name% 2>nul: - -if not errorlevel 1 ( - echo Upgrading azureml-sdk[automl] in existing conda environment %conda_env_name% - call pip install --upgrade azureml-sdk[automl,notebooks] - if errorlevel 1 goto ErrorExit -) else ( - call conda env create -f %automl_env_file% -n %conda_env_name% -) - -call conda activate %conda_env_name% 2>nul: -if errorlevel 1 goto ErrorExit - -call pip install psutil - -call python -m ipykernel install --user --name %conda_env_name% --display-name "Python (%conda_env_name%)" - -call jupyter nbextension install --py azureml.widgets --user -if errorlevel 1 goto ErrorExit - -call jupyter nbextension enable --py azureml.widgets --user -if errorlevel 1 goto ErrorExit - -echo. -echo. -echo *************************************** -echo * AutoML setup completed successfully * -echo *************************************** -echo. -echo Starting jupyter notebook - please run notebook 00.configuration -echo. -jupyter notebook --log-level=50 - -goto End - -:YmlMissing -echo File %automl_env_file% not found. - -:ErrorExit -echo Install failed - -:End \ No newline at end of file diff --git a/automl/automl_setup_linux.sh b/automl/automl_setup_linux.sh deleted file mode 100644 index 8425fa0e..00000000 --- a/automl/automl_setup_linux.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -CONDA_ENV_NAME=$1 -AUTOML_ENV_FILE=$2 -PIP_NO_WARN_SCRIPT_LOCATION=0 - -if [ "$CONDA_ENV_NAME" == "" ] -then - CONDA_ENV_NAME="azure_automl" -fi - -if [ "$AUTOML_ENV_FILE" == "" ] -then - AUTOML_ENV_FILE="automl_env.yml" -fi - -if [ ! -f $AUTOML_ENV_FILE ]; then - echo "File $AUTOML_ENV_FILE not found" - exit 1 -fi - -if source activate $CONDA_ENV_NAME 2> /dev/null -then - echo "Upgrading azureml-sdk[automl] in existing conda environment" $CONDA_ENV_NAME - pip install --upgrade azureml-sdk[automl,notebooks] -else - conda env create -f $AUTOML_ENV_FILE -n $CONDA_ENV_NAME && - source activate $CONDA_ENV_NAME && - python -m ipykernel install --user --name $CONDA_ENV_NAME --display-name "Python ($CONDA_ENV_NAME)" && - jupyter nbextension install --py azureml.widgets --user && - jupyter nbextension enable --py azureml.widgets --user && - echo "" && - echo "" && - echo "***************************************" && - echo "* AutoML setup completed successfully *" && - echo "***************************************" && - echo "" && - echo "Starting jupyter notebook - please run notebook 00.configuration" && - echo "" && - jupyter notebook --log-level=50 -fi - -if [ $? -gt 0 ] -then - echo "Installation failed" -fi - - diff --git a/automl/automl_setup_mac.sh b/automl/automl_setup_mac.sh deleted file mode 100644 index 0d771456..00000000 --- a/automl/automl_setup_mac.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -CONDA_ENV_NAME=$1 -AUTOML_ENV_FILE=$2 -PIP_NO_WARN_SCRIPT_LOCATION=0 - -if [ "$CONDA_ENV_NAME" == "" ] -then - CONDA_ENV_NAME="azure_automl" -fi - -if [ "$AUTOML_ENV_FILE" == "" ] -then - AUTOML_ENV_FILE="automl_env_mac.yml" -fi - -if [ ! -f $AUTOML_ENV_FILE ]; then - echo "File $AUTOML_ENV_FILE not found" - exit 1 -fi - -if source activate $CONDA_ENV_NAME 2> /dev/null -then - echo "Upgrading azureml-sdk[automl] in existing conda environment" $CONDA_ENV_NAME - pip install --upgrade azureml-sdk[automl,notebooks] -else - conda env create -f $AUTOML_ENV_FILE -n $CONDA_ENV_NAME && - source activate $CONDA_ENV_NAME && - conda install lightgbm -c conda-forge -y && - python -m ipykernel install --user --name $CONDA_ENV_NAME --display-name "Python ($CONDA_ENV_NAME)" && - jupyter nbextension install --py azureml.widgets --user && - jupyter nbextension enable --py azureml.widgets --user && - pip install numpy==1.15.3 - echo "" && - echo "" && - echo "***************************************" && - echo "* AutoML setup completed successfully *" && - echo "***************************************" && - echo "" && - echo "Starting jupyter notebook - please run notebook 00.configuration" && - echo "" && - jupyter notebook --log-level=50 -fi - -if [ $? -gt 0 ] -then - echo "Installation failed" -fi - - - diff --git a/databricks/01.Installation_and_Configuration.ipynb b/databricks/01.Installation_and_Configuration.ipynb deleted file mode 100644 index 166661b1..00000000 --- a/databricks/01.Installation_and_Configuration.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run this notebook before proceeding."],"metadata":{}},{"cell_type":"markdown","source":["Now we support installing AML SDK as library from GUI. When attaching a library follow this https://docs.databricks.com/user-guide/libraries.html and add the below string as your PyPi package (during private preview). You can select the option to attach the library to all clusters or just one cluster.\n\nProvide this full string to install the SDK:\n\nazureml-sdk[databricks]"],"metadata":{}},{"cell_type":"code","source":["import azureml.core\n\n# Check core SDK version number - based on build number of preview/master.\nprint(\"SDK version:\", azureml.core.VERSION)"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["subscription_id = \"\"\nresource_group = \"\"\nworkspace_name = \"\"\nworkspace_region = \"\""],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["# import the Workspace class and check the azureml SDK version\n# exist_ok checks if workspace exists or not.\n\nfrom azureml.core import Workspace\n\nws = Workspace.create(name = workspace_name,\n subscription_id = subscription_id,\n resource_group = resource_group, \n location = workspace_region,\n exist_ok=True)\n\nws.get_details()"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["ws = Workspace(workspace_name = workspace_name,\n subscription_id = subscription_id,\n resource_group = resource_group)\n\n# persist the subscription id, resource group name, and workspace name in aml_config/config.json.\nws.write_config()"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["%sh\ncat /databricks/driver/aml_config/config.json"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"code","source":["# import the Workspace class and check the azureml SDK version\nfrom azureml.core import Workspace\n\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":11}],"metadata":{"name":"01.Installation_and_Configuration","notebookId":3874566296719377},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/02.Ingest_data.ipynb b/databricks/02.Ingest_data.ipynb deleted file mode 100644 index b8075a4c..00000000 --- a/databricks/02.Ingest_data.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["#Data Ingestion"],"metadata":{}},{"cell_type":"code","source":["import os\nimport urllib"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["# Download AdultCensusIncome.csv from Azure CDN. This file has 32,561 rows.\nbasedataurl = \"https://amldockerdatasets.azureedge.net\"\ndatafile = \"AdultCensusIncome.csv\"\ndatafile_dbfs = os.path.join(\"/dbfs\", datafile)\n\nif os.path.isfile(datafile_dbfs):\n print(\"found {} at {}\".format(datafile, datafile_dbfs))\nelse:\n print(\"downloading {} to {}\".format(datafile, datafile_dbfs))\n urllib.request.urlretrieve(os.path.join(basedataurl, datafile), datafile_dbfs)"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["# Create a Spark dataframe out of the csv file.\ndata_all = sqlContext.read.format('csv').options(header='true', inferSchema='true', ignoreLeadingWhiteSpace='true', ignoreTrailingWhiteSpace='true').load(datafile)\nprint(\"({}, {})\".format(data_all.count(), len(data_all.columns)))\ndata_all.printSchema()"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["#renaming columns\ncolumns_new = [col.replace(\"-\", \"_\") for col in data_all.columns]\ndata_all = data_all.toDF(*columns_new)\ndata_all.printSchema()"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["display(data_all.limit(5))"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"markdown","source":["#Data Preparation"],"metadata":{}},{"cell_type":"code","source":["# Choose feature columns and the label column.\nlabel = \"income\"\nxvals_all = set(data_all.columns) - {label}\n\n#dbutils.widgets.remove(\"xvars_multiselect\")\ndbutils.widgets.removeAll()\n\ndbutils.widgets.multiselect('xvars_multiselect', 'hours_per_week', xvals_all)\nxvars_multiselect = dbutils.widgets.get(\"xvars_multiselect\")\nxvars = xvars_multiselect.split(\",\")\n\nprint(\"label = {}\".format(label))\nprint(\"features = {}\".format(xvars))\n\ndata = data_all.select([*xvars, label])\n\n# Split data into train and test.\ntrain, test = data.randomSplit([0.75, 0.25], seed=123)\n\nprint(\"train ({}, {})\".format(train.count(), len(train.columns)))\nprint(\"test ({}, {})\".format(test.count(), len(test.columns)))"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"markdown","source":["#Data Persistence"],"metadata":{}},{"cell_type":"code","source":["# Write the train and test data sets to intermediate storage\ntrain_data_path = \"AdultCensusIncomeTrain\"\ntest_data_path = \"AdultCensusIncomeTest\"\n\ntrain_data_path_dbfs = os.path.join(\"/dbfs\", \"AdultCensusIncomeTrain\")\ntest_data_path_dbfs = os.path.join(\"/dbfs\", \"AdultCensusIncomeTest\")\n\ntrain.write.mode('overwrite').parquet(train_data_path)\ntest.write.mode('overwrite').parquet(test_data_path)\nprint(\"train and test datasets saved to {} and {}\".format(train_data_path_dbfs, test_data_path_dbfs))"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":14}],"metadata":{"name":"02.Ingest_data","notebookId":3874566296719393},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/03a.Build_model.ipynb b/databricks/03a.Build_model.ipynb deleted file mode 100644 index 15da2ac9..00000000 --- a/databricks/03a.Build_model.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["#Model Building"],"metadata":{}},{"cell_type":"code","source":["import os\nimport pprint\nimport numpy as np\n\nfrom pyspark.ml import Pipeline, PipelineModel\nfrom pyspark.ml.feature import OneHotEncoder, StringIndexer, VectorAssembler\nfrom pyspark.ml.classification import LogisticRegression\nfrom pyspark.ml.evaluation import BinaryClassificationEvaluator\nfrom pyspark.ml.tuning import CrossValidator, ParamGridBuilder"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["#get the train and test datasets\ntrain_data_path = \"AdultCensusIncomeTrain\"\ntest_data_path = \"AdultCensusIncomeTest\"\n\ntrain = spark.read.parquet(train_data_path)\ntest = spark.read.parquet(test_data_path)\n\nprint(\"train: ({}, {})\".format(train.count(), len(train.columns)))\nprint(\"test: ({}, {})\".format(test.count(), len(test.columns)))\n\ntrain.printSchema()"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"markdown","source":["#Define ML Pipeline"],"metadata":{}},{"cell_type":"code","source":["label = \"income\"\n\nreg = 0.1\nprint(\"Regularization Rate is {}.\".format(reg))\n\n# create a new Logistic Regression model.\nlr = LogisticRegression(regParam=reg)\n\ndtypes = dict(train.dtypes)\ndtypes.pop(label)\n\nsi_xvars = []\nohe_xvars = []\nfeatureCols = []\nfor idx,key in enumerate(dtypes):\n if dtypes[key] == \"string\":\n featureCol = \"-\".join([key, \"encoded\"])\n featureCols.append(featureCol)\n \n tmpCol = \"-\".join([key, \"tmp\"])\n # string-index and one-hot encode the string column\n #https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/ml/feature/StringIndexer.html\n #handleInvalid: Param for how to handle invalid data (unseen labels or NULL values). \n #Options are 'skip' (filter out rows with invalid data), 'error' (throw an error), \n #or 'keep' (put invalid data in a special additional bucket, at index numLabels). Default: \"error\"\n si_xvars.append(StringIndexer(inputCol=key, outputCol=tmpCol, handleInvalid=\"skip\")) #, handleInvalid=\"keep\"\n ohe_xvars.append(OneHotEncoder(inputCol=tmpCol, outputCol=featureCol))\n else:\n featureCols.append(key)\n\n# string-index the label column into a column named \"label\"\nsi_label = StringIndexer(inputCol=label, outputCol='label')\n\n# assemble the encoded feature columns in to a column named \"features\"\nassembler = VectorAssembler(inputCols=featureCols, outputCol=\"features\")\n\n# put together the pipeline\npipe = Pipeline(stages=[*si_xvars, *ohe_xvars, si_label, assembler, lr])\n\n# train the model\nmodel = pipe.fit(train)\nprint(model)"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"markdown","source":["#Tune ML Pipeline"],"metadata":{}},{"cell_type":"code","source":["regs = np.arange(0.0, 1.0, 0.2)\n\nparamGrid = ParamGridBuilder().addGrid(lr.regParam, regs).build()\ncv = CrossValidator(estimator=pipe, evaluator=BinaryClassificationEvaluator(), estimatorParamMaps=paramGrid)"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["cvModel = cv.fit(train)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["model = cvModel.bestModel"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"markdown","source":["#Model Evaluation"],"metadata":{}},{"cell_type":"code","source":["# make prediction\npred = model.transform(test)\noutput = pred[['hours_per_week','age','workclass','marital_status','income','prediction']]\ndisplay(output.limit(5))"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":["# evaluate. note only 2 metrics are supported out of the box by Spark ML.\nbce = BinaryClassificationEvaluator(rawPredictionCol='rawPrediction')\nau_roc = bce.setMetricName('areaUnderROC').evaluate(pred)\nau_prc = bce.setMetricName('areaUnderPR').evaluate(pred)\n\nprint(\"Area under ROC: {}\".format(au_roc))\nprint(\"Area Under PR: {}\".format(au_prc))"],"metadata":{},"outputs":[],"execution_count":14},{"cell_type":"markdown","source":["#Model Persistence"],"metadata":{}},{"cell_type":"code","source":["##NOTE: by default the model is saved to and loaded from /dbfs/ instead of cwd!\nmodel_name = \"AdultCensus.mml\"\nmodel_dbfs = os.path.join(\"/dbfs\", model_name)\n\nmodel.write().overwrite().save(model_name)\nprint(\"saved model to {}\".format(model_dbfs))"],"metadata":{},"outputs":[],"execution_count":16},{"cell_type":"code","source":["%sh\n\nls -la /dbfs/AdultCensus.mml/*"],"metadata":{},"outputs":[],"execution_count":17},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":18}],"metadata":{"name":"03a.Build_model","notebookId":3874566296719409},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/03b.Build_model_runHistory.ipynb b/databricks/03b.Build_model_runHistory.ipynb deleted file mode 100644 index 6bf308e7..00000000 --- a/databricks/03b.Build_model_runHistory.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["#Model Building"],"metadata":{}},{"cell_type":"code","source":["import os\nimport pprint\nimport numpy as np\n\nfrom pyspark.ml import Pipeline, PipelineModel\nfrom pyspark.ml.feature import OneHotEncoder, StringIndexer, VectorAssembler\nfrom pyspark.ml.classification import LogisticRegression\nfrom pyspark.ml.evaluation import BinaryClassificationEvaluator\nfrom pyspark.ml.tuning import CrossValidator, ParamGridBuilder"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["import azureml.core\n\n# Check core SDK version number\nprint(\"SDK version:\", azureml.core.VERSION)"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["# import the Workspace class and check the azureml SDK version\nfrom azureml.core import Workspace\n\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["#get the train and test datasets\ntrain_data_path = \"AdultCensusIncomeTrain\"\ntest_data_path = \"AdultCensusIncomeTest\"\n\ntrain = spark.read.parquet(train_data_path)\ntest = spark.read.parquet(test_data_path)\n\nprint(\"train: ({}, {})\".format(train.count(), len(train.columns)))\nprint(\"test: ({}, {})\".format(test.count(), len(test.columns)))\n\ntrain.printSchema()"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"markdown","source":["#Define ML Pipeline"],"metadata":{}},{"cell_type":"code","source":["label = \"income\"\ndtypes = dict(train.dtypes)\ndtypes.pop(label)\n\nsi_xvars = []\nohe_xvars = []\nfeatureCols = []\nfor idx,key in enumerate(dtypes):\n if dtypes[key] == \"string\":\n featureCol = \"-\".join([key, \"encoded\"])\n featureCols.append(featureCol)\n \n tmpCol = \"-\".join([key, \"tmp\"])\n # string-index and one-hot encode the string column\n #https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/ml/feature/StringIndexer.html\n #handleInvalid: Param for how to handle invalid data (unseen labels or NULL values). \n #Options are 'skip' (filter out rows with invalid data), 'error' (throw an error), \n #or 'keep' (put invalid data in a special additional bucket, at index numLabels). Default: \"error\"\n si_xvars.append(StringIndexer(inputCol=key, outputCol=tmpCol, handleInvalid=\"skip\"))\n ohe_xvars.append(OneHotEncoder(inputCol=tmpCol, outputCol=featureCol))\n else:\n featureCols.append(key)\n\n# string-index the label column into a column named \"label\"\nsi_label = StringIndexer(inputCol=label, outputCol='label')\n\n# assemble the encoded feature columns in to a column named \"features\"\nassembler = VectorAssembler(inputCols=featureCols, outputCol=\"features\")"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["from azureml.core.run import Run\nfrom azureml.core.experiment import Experiment\nimport numpy as np\nimport os\nimport shutil\n\nmodel_name = \"AdultCensus_runHistory.mml\"\nmodel_dbfs = os.path.join(\"/dbfs\", model_name)\nrun_history_name = 'spark-ml-notebook'\n\n# start a training run by defining an experiment\nmyexperiment = Experiment(ws, \"Azure_Databricks_Experiment\")\nroot_run = myexperiment.start_logging()\n\n# Regularization Rates\nregs = np.arange(0.0, 1.0, 0.2)\n\n# try a bunch of alpha values in a Linear Regression (Ridge) model\nfor reg in regs:\n print(\"Regularization rate: {}\".format(reg))\n # create a bunch of child runs\n with root_run.child_run(\"reg-\" + str(reg)) as run:\n # create a new Logistic Regression model.\n lr = LogisticRegression(regParam=reg)\n \n # put together the pipeline\n pipe = Pipeline(stages=[*si_xvars, *ohe_xvars, si_label, assembler, lr])\n\n # train the model\n model_pipeline = pipe.fit(train)\n \n # make prediction\n pred = model_pipeline.transform(test)\n \n # evaluate. note only 2 metrics are supported out of the box by Spark ML.\n bce = BinaryClassificationEvaluator(rawPredictionCol='rawPrediction')\n au_roc = bce.setMetricName('areaUnderROC').evaluate(pred)\n au_prc = bce.setMetricName('areaUnderPR').evaluate(pred)\n\n print(\"Area under ROC: {}\".format(au_roc))\n print(\"Area Under PR: {}\".format(au_prc))\n \n # log reg, au_roc, au_prc and feature names in run history\n run.log(\"reg\", reg)\n run.log(\"au_roc\", au_roc)\n run.log(\"au_prc\", au_prc)\n run.log_list(\"columns\", train.columns)\n\n # save model\n model_pipeline.write().overwrite().save(model_name)\n \n # upload the serialized model into run history record\n mdl, ext = model_name.split(\".\")\n model_zip = mdl + \".zip\"\n shutil.make_archive(mdl, 'zip', model_dbfs)\n run.upload_file(\"outputs/\" + model_name, model_zip) \n #run.upload_file(\"outputs/\" + model_name, path_or_stream = model_dbfs) #cannot deal with folders\n\n # now delete the serialized model from local folder since it is already uploaded to run history \n shutil.rmtree(model_dbfs)\n os.remove(model_zip)\n \n# Declare run completed\nroot_run.complete()\nroot_run_id = root_run.id\nprint (\"run id:\", root_run.id)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["#Load all run metrics from run history into a dictionary object.\nchild_runs = {}\nchild_run_metrics = {}\n\nfor r in root_run.get_children():\n child_runs[r.id] = r\n child_run_metrics[r.id] = r.get_metrics()"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"code","source":["best_run_id = max(child_run_metrics, key = lambda k: child_run_metrics[k]['au_roc'])\nbest_run = child_runs[best_run_id]\nprint('Best run is:', best_run_id)\nprint('Metrics:', child_run_metrics[best_run_id])"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":["best_reg = child_run_metrics[best_run_id]['reg']\nmax_auc = child_run_metrics[best_run_id]['au_roc']\n\nreg_auc = np.array([(child_run_metrics[k]['reg'], child_run_metrics[k]['au_roc']) for k in child_run_metrics.keys()])\nreg_auc_sorted = reg_auc[reg_auc[:,0].argsort()]\n\nimport pandas as pd\ndf = pd.DataFrame(reg_auc_sorted)\nspdf = spark.createDataFrame(df)\ndisplay(spdf)"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":["#Download the model from the best run to a local folder\nbest_model_file_name = \"best_model.zip\"\nbest_run.download_file(name = 'outputs/' + model_name, output_file_path = best_model_file_name)"],"metadata":{},"outputs":[],"execution_count":14},{"cell_type":"markdown","source":["#Model Evaluation"],"metadata":{}},{"cell_type":"code","source":["##unzip the model to dbfs (as load() seems to require that) and load it.\nif os.path.isfile(model_dbfs) or os.path.isdir(model_dbfs):\n shutil.rmtree(model_dbfs)\nshutil.unpack_archive(best_model_file_name, model_dbfs)\n\nmodel_pipeline_best = PipelineModel.load(model_name)"],"metadata":{},"outputs":[],"execution_count":16},{"cell_type":"code","source":["# make prediction\npred = model_pipeline_best.transform(test)\noutput = pred[['hours_per_week','age','workclass','marital_status','income','prediction']]\ndisplay(output.limit(5))"],"metadata":{},"outputs":[],"execution_count":17},{"cell_type":"code","source":["# evaluate. note only 2 metrics are supported out of the box by Spark ML.\nbce = BinaryClassificationEvaluator(rawPredictionCol='rawPrediction')\nau_roc = bce.setMetricName('areaUnderROC').evaluate(pred)\nau_prc = bce.setMetricName('areaUnderPR').evaluate(pred)\n\nprint(\"Area under ROC: {}\".format(au_roc))\nprint(\"Area Under PR: {}\".format(au_prc))"],"metadata":{},"outputs":[],"execution_count":18},{"cell_type":"markdown","source":["#Model Persistence"],"metadata":{}},{"cell_type":"code","source":["##NOTE: by default the model is saved to and loaded from /dbfs/ instead of cwd!\nmodel_pipeline_best.write().overwrite().save(model_name)\nprint(\"saved model to {}\".format(model_dbfs))"],"metadata":{},"outputs":[],"execution_count":20},{"cell_type":"code","source":["%sh\n\nls -la /dbfs/AdultCensus_runHistory.mml/*"],"metadata":{},"outputs":[],"execution_count":21},{"cell_type":"code","source":["dbutils.notebook.exit(\"success\")"],"metadata":{},"outputs":[],"execution_count":22}],"metadata":{"name":"03b.Build_model_runHistory","notebookId":3874566296719353},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/04.Deploy_to_ACI.ipynb b/databricks/04.Deploy_to_ACI.ipynb deleted file mode 100644 index a2c04a19..00000000 --- a/databricks/04.Deploy_to_ACI.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this."],"metadata":{}},{"cell_type":"markdown","source":["Please Register Azure Container Instance(ACI) using Azure Portal: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-supported-services#portal in your subscription before using the SDK to deploy your ML model to ACI."],"metadata":{}},{"cell_type":"code","source":["from azureml.core import Workspace\nimport azureml.core\n\n# Check core SDK version number\nprint(\"SDK version:\", azureml.core.VERSION)\n\n#'''\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')\n#'''"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["##NOTE: service deployment always gets the model from the current working dir.\nimport os\n\nmodel_name = \"AdultCensus.mml\" # OR AdultCensus_runHistory.mml\nmodel_name_dbfs = os.path.join(\"/dbfs\", model_name)\n\nprint(\"copy model from dbfs to local\")\nmodel_local = \"file:\" + os.getcwd() + \"/\" + model_name\ndbutils.fs.cp(model_name, model_local, True)"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["#Register the model\nfrom azureml.core.model import Model\nmymodel = Model.register(model_path = model_name, # this points to a local file\n model_name = model_name, # this is the name the model is registered as, am using same name for both path and name. \n description = \"ADB trained model by Parashar\",\n workspace = ws)\n\nprint(mymodel.name, mymodel.description, mymodel.version)"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["#%%writefile score_sparkml.py\nscore_sparkml = \"\"\"\n\nimport json\n\ndef init():\n try:\n # One-time initialization of PySpark and predictive model\n import pyspark\n from azureml.core.model import Model\n from pyspark.ml import PipelineModel\n \n global trainedModel\n global spark\n \n spark = pyspark.sql.SparkSession.builder.appName(\"ADB and AML notebook by Parashar\").getOrCreate()\n model_name = \"{model_name}\" #interpolated\n model_path = Model.get_model_path(model_name)\n trainedModel = PipelineModel.load(model_path)\n except Exception as e:\n trainedModel = e\n \ndef run(input_json):\n if isinstance(trainedModel, Exception):\n return json.dumps({{\"trainedModel\":str(trainedModel)}})\n \n try:\n sc = spark.sparkContext\n input_list = json.loads(input_json)\n input_rdd = sc.parallelize(input_list)\n input_df = spark.read.json(input_rdd)\n \n # Compute prediction\n prediction = trainedModel.transform(input_df)\n #result = prediction.first().prediction\n predictions = prediction.collect()\n\n #Get each scored result\n preds = [str(x['prediction']) for x in predictions]\n result = \",\".join(preds)\n except Exception as e:\n result = str(e)\n return json.dumps({{\"result\":result}})\n \n\"\"\".format(model_name=model_name)\n\nexec(score_sparkml)\n\nwith open(\"score_sparkml.py\", \"w\") as file:\n file.write(score_sparkml)"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["from azureml.core.conda_dependencies import CondaDependencies \n\nmyacienv = CondaDependencies.create(conda_packages=['scikit-learn','numpy','pandas'])\n\nwith open(\"mydeployenv.yml\",\"w\") as f:\n f.write(myacienv.serialize_to_string())"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"code","source":["#deploy to ACI\nfrom azureml.core.webservice import AciWebservice, Webservice\n\nmyaci_config = AciWebservice.deploy_configuration(\n cpu_cores = 1, \n memory_gb = 1, \n tags = {'name':'Databricks Azure ML ACI'}, \n description = 'This is for ADB and AML example. Azure Databricks & Azure ML SDK demo with ACI by Parashar.')"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["# this will take 10-15 minutes to finish\n\nservice_name = \"aciws\"\nruntime = \"spark-py\" \ndriver_file = \"score_sparkml.py\"\nmy_conda_file = \"mydeployenv.yml\"\n\n# image creation\nfrom azureml.core.image import ContainerImage\nmyimage_config = ContainerImage.image_configuration(execution_script = driver_file, \n runtime = runtime, \n conda_file = my_conda_file)\n\n# Webservice creation\nmyservice = Webservice.deploy_from_model(\n workspace=ws, \n name=service_name,\n deployment_config = myaci_config,\n models = [mymodel],\n image_config = myimage_config\n )\n\nmyservice.wait_for_deployment(show_output=True)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["help(ContainerImage)"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"code","source":["# List images by ws\n\nfor i in ContainerImage.list(workspace = ws):\n print('{}(v.{} [{}]) stored at {} with build log {}'.format(i.name, i.version, i.creation_state, i.image_location, i.image_build_log_uri))"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":["#for using the Web HTTP API \nprint(myservice.scoring_uri)"],"metadata":{},"outputs":[],"execution_count":13},{"cell_type":"code","source":["import json\n\n#get the some sample data\ntest_data_path = \"AdultCensusIncomeTest\"\ntest = spark.read.parquet(test_data_path).limit(5)\n\ntest_json = json.dumps(test.toJSON().collect())\n\nprint(test_json)"],"metadata":{},"outputs":[],"execution_count":14},{"cell_type":"code","source":["#using data defined above predict if income is >50K (1) or <=50K (0)\nmyservice.run(input_data=test_json)"],"metadata":{},"outputs":[],"execution_count":15},{"cell_type":"code","source":["#comment to not delete the web service\nmyservice.delete()"],"metadata":{},"outputs":[],"execution_count":16},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":17}],"metadata":{"name":"04.DeploytoACI","notebookId":3874566296719333},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/05.Deploy_to_AKS_existingImage.ipynb b/databricks/05.Deploy_to_AKS_existingImage.ipynb deleted file mode 100644 index e6a08783..00000000 --- a/databricks/05.Deploy_to_AKS_existingImage.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells":[{"cell_type":"markdown","source":["Azure ML & Azure Databricks notebooks by Parashar Shah.\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the MIT License."],"metadata":{}},{"cell_type":"markdown","source":["Please ensure you have run all previous notebooks in sequence before running this. This notebook uses image from ACI notebook for deploying to AKS."],"metadata":{}},{"cell_type":"code","source":["from azureml.core import Workspace\nimport azureml.core\n\n# Check core SDK version number\nprint(\"SDK version:\", azureml.core.VERSION)\n\n#'''\nws = Workspace.from_config()\nprint('Workspace name: ' + ws.name, \n 'Azure region: ' + ws.location, \n 'Subscription id: ' + ws.subscription_id, \n 'Resource group: ' + ws.resource_group, sep = '\\n')\n#'''"],"metadata":{},"outputs":[],"execution_count":3},{"cell_type":"code","source":["# List images by ws\n\nfrom azureml.core.image import ContainerImage\nfor i in ContainerImage.list(workspace = ws):\n print('{}(v.{} [{}]) stored at {} with build log {}'.format(i.name, i.version, i.creation_state, i.image_location, i.image_build_log_uri))"],"metadata":{},"outputs":[],"execution_count":4},{"cell_type":"code","source":["from azureml.core.image import Image\nmyimage = Image(workspace=ws, id=\"aciws:25\")"],"metadata":{},"outputs":[],"execution_count":5},{"cell_type":"code","source":["#create AKS compute\n#it may take 20-25 minutes to create a new cluster\n\nfrom azureml.core.compute import AksCompute, ComputeTarget\n\n# Use the default configuration (can also provide parameters to customize)\nprov_config = AksCompute.provisioning_configuration()\n\naks_name = 'ps-aks-clus2' \n\n# Create the cluster\naks_target = ComputeTarget.create(workspace = ws, \n name = aks_name, \n provisioning_configuration = prov_config)\n\naks_target.wait_for_completion(show_output = True)\n\nprint(aks_target.provisioning_state)\nprint(aks_target.provisioning_errors)"],"metadata":{},"outputs":[],"execution_count":6},{"cell_type":"code","source":["from azureml.core.webservice import Webservice\nhelp( Webservice.deploy_from_image)"],"metadata":{},"outputs":[],"execution_count":7},{"cell_type":"code","source":["from azureml.core.webservice import Webservice, AksWebservice\nfrom azureml.core.image import ContainerImage\n\n#Set the web service configuration (using default here)\naks_config = AksWebservice.deploy_configuration()\n\n#unique service name\nservice_name ='ps-aks-service'\n\n# Webservice creation using single command, there is a variant to use image directly as well.\naks_service = Webservice.deploy_from_image(\n workspace=ws, \n name=service_name,\n deployment_config = aks_config,\n image = myimage,\n deployment_target = aks_target\n )\n\naks_service.wait_for_deployment(show_output=True)"],"metadata":{},"outputs":[],"execution_count":8},{"cell_type":"code","source":["#for using the Web HTTP API \nprint(aks_service.scoring_uri)\nprint(aks_service.get_keys())"],"metadata":{},"outputs":[],"execution_count":9},{"cell_type":"code","source":["import json\n\n#get the some sample data\ntest_data_path = \"AdultCensusIncomeTest\"\ntest = spark.read.parquet(test_data_path).limit(5)\n\ntest_json = json.dumps(test.toJSON().collect())\n\nprint(test_json)"],"metadata":{},"outputs":[],"execution_count":10},{"cell_type":"code","source":["#using data defined above predict if income is >50K (1) or <=50K (0)\naks_service.run(input_data=test_json)"],"metadata":{},"outputs":[],"execution_count":11},{"cell_type":"code","source":["#comment to not delete the web service\naks_service.delete()\n#image.delete()\n#model.delete()\n#aks_target.delete()"],"metadata":{},"outputs":[],"execution_count":12},{"cell_type":"code","source":[""],"metadata":{},"outputs":[],"execution_count":13}],"metadata":{"name":"04.DeploytoACI","notebookId":3874566296719318},"nbformat":4,"nbformat_minor":0} diff --git a/databricks/Databricks_AMLSDK_github.dbc b/databricks/Databricks_AMLSDK_github.dbc deleted file mode 100644 index 50446c5dda6427657963f0a9b2ba9f5135411d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38702 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\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Note: Some features in this Notebook will _not_ work with the Private Preview version of the SDK; it assumes the Public Preview version.\n", - "\n", - "Wonder how you can make the most of the Azure ML Data Prep SDK? In this \"Getting Started\" guide, we'll showcase a few highlights that make this SDK shine for big datasets where `pandas` and `dplyr` can fall short. Using the [Ford GoBike dataset](https://www.fordgobike.com/system-data) as an example, we'll cover how to build Dataflows that allow you to:\n", - "\n", - "* [Read in data](#Read-in-data)\n", - "* [Get a profile of your data](#Get-data-profile)\n", - "* [Apply smart transforms by Microsoft Research](#Derive-by-example)\n", - "* [Filter quickly](#Filter-our-data)\n", - "* [Apply common data science transforms](#Transform-our-data)\n", - "* [Easily handle errors and assertions](#Assert-on-invalid-data)\n", - "* [Prepare your dataset for export and machine learning](#Export-for-machine-learning)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import display\n", - "from os import path\n", - "from tempfile import mkdtemp\n", - "\n", - "import pandas as pd\n", - "import azureml.dataprep as dprep" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Read in data\n", - "\n", - "Azure ML Data Prep supports many different file reading formats (i.e. CSV, Excel, Parquet), and also offers the ability to infer column types automatically. " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
duration_secstart_timeend_timestart_station_idstart_station_namestart_station_latitudestart_station_longitudeend_station_idend_station_nameend_station_latitudeend_station_longitudebike_iduser_typemember_birth_yearmember_gender
080110.02017-12-31 16:57:39.654000+00:002018-01-01 15:12:50.245000+00:0074.0Laguna St at Hayes St37.776435-122.42624443.0San Francisco Public Library (Grove St at Hyde...37.778768-122.41592996.0Customer1987.0Male
178800.02017-12-31 15:56:34.842000+00:002018-01-01 13:49:55.617000+00:00284.0Yerba Buena Center for the Arts (Howard St at ...37.784872-122.40087696.0Dolores St at 15th St37.766210-122.42661488.0Customer1965.0Female
245768.02017-12-31 22:45:48.411000+00:002018-01-01 11:28:36.883000+00:00245.0Downtown Berkeley BART37.870348-122.267764245.0Downtown Berkeley BART37.870348-122.2677641094.0CustomerNaN
362172.02017-12-31 17:31:10.636000+00:002018-01-01 10:47:23.531000+00:0060.08th St at Ringold St37.774520-122.4094495.0Powell St BART Station (Market St at 5th St)37.783899-122.4084452831.0CustomerNaN
443603.02017-12-31 14:23:14.001000+00:002018-01-01 02:29:57.571000+00:00239.0Bancroft Way at Telegraph Ave37.868813-122.258764247.0Fulton St at Bancroft Way37.867789-122.2658963167.0Subscriber1997.0Female
\n", - "
" - ], - "text/plain": [ - " duration_sec start_time \\\n", - "0 80110.0 2017-12-31 16:57:39.654000+00:00 \n", - "1 78800.0 2017-12-31 15:56:34.842000+00:00 \n", - "2 45768.0 2017-12-31 22:45:48.411000+00:00 \n", - "3 62172.0 2017-12-31 17:31:10.636000+00:00 \n", - "4 43603.0 2017-12-31 14:23:14.001000+00:00 \n", - "\n", - " end_time start_station_id \\\n", - "0 2018-01-01 15:12:50.245000+00:00 74.0 \n", - "1 2018-01-01 13:49:55.617000+00:00 284.0 \n", - "2 2018-01-01 11:28:36.883000+00:00 245.0 \n", - "3 2018-01-01 10:47:23.531000+00:00 60.0 \n", - "4 2018-01-01 02:29:57.571000+00:00 239.0 \n", - "\n", - " start_station_name start_station_latitude \\\n", - "0 Laguna St at Hayes St 37.776435 \n", - "1 Yerba Buena Center for the Arts (Howard St at ... 37.784872 \n", - "2 Downtown Berkeley BART 37.870348 \n", - "3 8th St at Ringold St 37.774520 \n", - "4 Bancroft Way at Telegraph Ave 37.868813 \n", - "\n", - " start_station_longitude end_station_id \\\n", - "0 -122.426244 43.0 \n", - "1 -122.400876 96.0 \n", - "2 -122.267764 245.0 \n", - "3 -122.409449 5.0 \n", - "4 -122.258764 247.0 \n", - "\n", - " end_station_name end_station_latitude \\\n", - "0 San Francisco Public Library (Grove St at Hyde... 37.778768 \n", - "1 Dolores St at 15th St 37.766210 \n", - "2 Downtown Berkeley BART 37.870348 \n", - "3 Powell St BART Station (Market St at 5th St) 37.783899 \n", - "4 Fulton St at Bancroft Way 37.867789 \n", - "\n", - " end_station_longitude bike_id user_type member_birth_year member_gender \n", - "0 -122.415929 96.0 Customer 1987.0 Male \n", - "1 -122.426614 88.0 Customer 1965.0 Female \n", - "2 -122.267764 1094.0 Customer NaN \n", - "3 -122.408445 2831.0 Customer NaN \n", - "4 -122.265896 3167.0 Subscriber 1997.0 Female " - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gobike = dprep\\\n", - " .read_csv(\n", - " path='https://dprepdata.blob.core.windows.net/demo/ford_gobike/2017-fordgobike-tripdata.csv',\n", - " inference_arguments=dprep.InferenceArguments.current_culture()\n", - " )\n", - "gobike.head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In order to iterate more quickly, we can take a sample of our data. Later, we can then apply the same transformations to the entire dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "sampled_gobike = gobike.take_sample(probability=0.1, seed=5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get data profile\n", - "\n", - "Let's understand what our data looks like. Azure ML Data Prep facilitates this process by offering data profiles that help us glimpse into column types and column summary statistics." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeMinMaxCountMissing CountError CountLower QuartileUpper QuartileStandard DeviationMean
duration_secFieldType.DECIMAL6186369519700.00.00.0381.842938.5743444.151099.01
start_timeFieldType.DATE2017-06-28 09:47:36.347000+00:002017-12-31 23:59:01.261000+00:00519700.00.00.0
end_timeFieldType.DATE2017-06-28 09:52:55.338000+00:002018-01-01 15:12:50.245000+00:00519700.00.00.0
start_station_idFieldType.DECIMAL3340519700.00.00.023.8481139.42486.083195.0342
start_station_nameFieldType.STRING10th Ave at E 15th StYerba Buena Center for the Arts (Howard St at ...519700.00.00.0
start_station_latitudeFieldType.DECIMAL37.317337.8802519700.00.00.037.773637.79530.08630537.7717
start_station_longitudeFieldType.DECIMAL-122.444-121.874519700.00.00.0-122.412-122.3910.105573-122.364
end_station_idFieldType.DECIMAL3340519700.00.00.022.7024134.2284.969592.184
end_station_nameFieldType.STRING10th Ave at E 15th StYerba Buena Center for the Arts (Howard St at ...519700.00.00.0
end_station_latitudeFieldType.DECIMAL37.317337.8802519700.00.00.037.774237.79560.086223837.7718
end_station_longitudeFieldType.DECIMAL-122.444-121.874519700.00.00.0-122.41-122.3910.105122-122.363
bike_idFieldType.DECIMAL103733519700.00.00.0788.6792519.96971.3571672.53
user_typeFieldType.STRINGCustomerSubscriber519700.00.00.0
member_birth_yearFieldType.DECIMAL18861999519700.066541.00.01974.331987.9910.51351980.4
member_genderFieldType.STRINGOther519700.00.00.0
" - ], - "text/plain": [ - "ColumnProfile\n", - " name: duration_sec\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 61.0\n", - " max: 86369.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 381.8421435321134\n", - " median: 595.9837506906349\n", - " upper_quartile: 938.5741138032683\n", - " std: 3444.146451247386\n", - " mean: 1099.009520877422\n", - "\n", - "ColumnProfile\n", - " name: start_time\n", - " type: FieldType.DATE\n", - "\n", - " min: 2017-06-28 09:47:36.347000+00:00\n", - " max: 2017-12-31 23:59:01.261000+00:00\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: end_time\n", - " type: FieldType.DATE\n", - "\n", - " min: 2017-06-28 09:52:55.338000+00:00\n", - " max: 2018-01-01 15:12:50.245000+00:00\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: start_station_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 3.0\n", - " max: 340.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 23.848148131600635\n", - " median: 67.18427817406452\n", - " upper_quartile: 139.42430180307275\n", - " std: 86.08307797095921\n", - " mean: 95.03424475658852\n", - "\n", - "ColumnProfile\n", - " name: start_station_name\n", - " type: FieldType.STRING\n", - "\n", - " min: 10th Ave at E 15th St\n", - " max: Yerba Buena Center for the Arts (Howard St at 3rd St)\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: start_station_latitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 37.3172979\n", - " max: 37.88022244590679\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 37.7735913559721\n", - " median: 37.783211475877295\n", - " upper_quartile: 37.79531236950411\n", - " std: 0.08630496061661774\n", - " mean: 37.771652603110894\n", - "\n", - "ColumnProfile\n", - " name: start_station_longitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: -122.44429260492325\n", - " max: -121.8741186\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: -122.41170653070694\n", - " median: -122.39875282257843\n", - " upper_quartile: -122.39103429266093\n", - " std: 0.10557344899193394\n", - " mean: -122.36392726512949\n", - "\n", - "ColumnProfile\n", - " name: end_station_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 3.0\n", - " max: 340.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 22.702361193995444\n", - " median: 65.22613324081779\n", - " upper_quartile: 134.21987129021295\n", - " std: 84.9694914863546\n", - " mean: 92.18404079276426\n", - "\n", - "ColumnProfile\n", - " name: end_station_name\n", - " type: FieldType.STRING\n", - "\n", - " min: 10th Ave at E 15th St\n", - " max: Yerba Buena Center for the Arts (Howard St at 3rd St)\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: end_station_latitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 37.3172979\n", - " max: 37.88022244590679\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 37.774232065528906\n", - " median: 37.78329810124021\n", - " upper_quartile: 37.79557128475191\n", - " std: 0.08622383487119635\n", - " mean: 37.771843749644646\n", - "\n", - "ColumnProfile\n", - " name: end_station_longitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: -122.44429260492325\n", - " max: -121.8741186\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: -122.41012752595213\n", - " median: -122.39855511689811\n", - " upper_quartile: -122.39096192032446\n", - " std: 0.10512220222934929\n", - " mean: -122.36323553679931\n", - "\n", - "ColumnProfile\n", - " name: bike_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 10.0\n", - " max: 3733.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 788.6785454424829\n", - " median: 1726.652793720984\n", - " upper_quartile: 2519.963581272433\n", - " std: 971.3569593530214\n", - " mean: 1672.533078699254\n", - "\n", - "ColumnProfile\n", - " name: user_type\n", - " type: FieldType.STRING\n", - "\n", - " min: Customer\n", - " max: Subscriber\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: member_birth_year\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 1886.0\n", - " max: 1999.0\n", - " count: 519700.0\n", - " missing_count: 66541.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 1974.3341624985283\n", - " median: 1982.8007516297655\n", - " upper_quartile: 1987.9916166785322\n", - " std: 10.51348753990893\n", - " mean: 1980.4047872821984\n", - "\n", - "ColumnProfile\n", - " name: member_gender\n", - " type: FieldType.STRING\n", - "\n", - " min: \n", - " max: Other\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gobike.get_profile()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeMinMaxCountMissing CountError CountLower QuartileUpper QuartileStandard DeviationMean
duration_secFieldType.DECIMAL618586451853.00.00.0381.017936.3993527.181102.23
start_timeFieldType.DATE2017-06-28 10:51:23.182000+00:002017-12-31 23:55:09.686000+00:0051853.00.00.0
end_timeFieldType.DATE2017-06-28 11:01:39.557000+00:002018-01-01 15:12:50.245000+00:0051853.00.00.0
start_station_idFieldType.DECIMAL334051853.00.00.023.823139.67986.092394.8785
start_station_nameFieldType.STRING10th Ave at E 15th StYerba Buena Center for the Arts (Howard St at ...51853.00.00.0
start_station_latitudeFieldType.DECIMAL37.317337.880251853.00.00.037.773637.79540.086263737.7717
start_station_longitudeFieldType.DECIMAL-122.444-121.87451853.00.00.0-122.412-122.3910.105593-122.364
end_station_idFieldType.DECIMAL333851853.00.00.022.3474135.08185.091691.9201
end_station_nameFieldType.STRING10th Ave at E 15th StYerba Buena Center for the Arts (Howard St at ...51853.00.00.0
end_station_latitudeFieldType.DECIMAL37.318437.880251853.00.00.037.774537.79560.086191537.7719
end_station_longitudeFieldType.DECIMAL-122.444-121.87451853.00.00.0-122.41-122.3910.105075-122.363
bike_idFieldType.DECIMAL10373351853.00.00.0795.892524.9970.5061674.51
user_typeFieldType.STRINGCustomerSubscriber51853.00.00.0
member_birth_yearFieldType.DECIMAL1900199951853.06577.00.01974.291988.0110.41481980.4
member_genderFieldType.STRINGOther51853.00.00.0
" - ], - "text/plain": [ - "ColumnProfile\n", - " name: duration_sec\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 61.0\n", - " max: 85864.0\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 381.0173265588649\n", - " median: 596.0824682091602\n", - " upper_quartile: 936.3990413401431\n", - " std: 3527.1849383367376\n", - " mean: 1102.2291284978571\n", - "\n", - "ColumnProfile\n", - " name: start_time\n", - " type: FieldType.DATE\n", - "\n", - " min: 2017-06-28 10:51:23.182000+00:00\n", - " max: 2017-12-31 23:55:09.686000+00:00\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: end_time\n", - " type: FieldType.DATE\n", - "\n", - " min: 2017-06-28 11:01:39.557000+00:00\n", - " max: 2018-01-01 15:12:50.245000+00:00\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: start_station_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 3.0\n", - " max: 340.0\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 23.82299260050619\n", - " median: 66.81449005522046\n", - " upper_quartile: 139.6790865298709\n", - " std: 86.09232732608726\n", - " mean: 94.87848340501073\n", - "\n", - "ColumnProfile\n", - " name: start_station_name\n", - " type: FieldType.STRING\n", - "\n", - " min: 10th Ave at E 15th St\n", - " max: Yerba Buena Center for the Arts (Howard St at 3rd St)\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: start_station_latitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 37.3172979\n", - " max: 37.88022244590679\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 37.773594346717786\n", - " median: 37.78325255020885\n", - " upper_quartile: 37.795362857566715\n", - " std: 0.08626372544371842\n", - " mean: 37.771708918993944\n", - "\n", - "ColumnProfile\n", - " name: start_station_longitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: -122.44429260492325\n", - " max: -121.8741186\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: -122.41157512442906\n", - " median: -122.39882719487981\n", - " upper_quartile: -122.39096385593315\n", - " std: 0.10559301820942323\n", - " mean: -122.36375576045955\n", - "\n", - "ColumnProfile\n", - " name: end_station_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 3.0\n", - " max: 338.0\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 22.34742112221029\n", - " median: 65.60893574407544\n", - " upper_quartile: 135.08124174966116\n", - " std: 85.09162990442911\n", - " mean: 91.9201396254798\n", - "\n", - "ColumnProfile\n", - " name: end_station_name\n", - " type: FieldType.STRING\n", - "\n", - " min: 10th Ave at E 15th St\n", - " max: Yerba Buena Center for the Arts (Howard St at 3rd St)\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: end_station_latitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 37.3184498\n", - " max: 37.88022244590679\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 37.77450364194883\n", - " median: 37.78358862499172\n", - " upper_quartile: 37.79555394254664\n", - " std: 0.08619152451969307\n", - " mean: 37.77190111029278\n", - "\n", - "ColumnProfile\n", - " name: end_station_longitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: -122.44429260492325\n", - " max: -121.8741186\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: -122.40967464398858\n", - " median: -122.39857551157675\n", - " upper_quartile: -122.39085540596203\n", - " std: 0.10507512085392584\n", - " mean: -122.3629776153239\n", - "\n", - "ColumnProfile\n", - " name: bike_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 10.0\n", - " max: 3733.0\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 795.8904240211187\n", - " median: 1723.039443196501\n", - " upper_quartile: 2524.901114053501\n", - " std: 970.5058870359009\n", - " mean: 1674.5133936319962\n", - "\n", - "ColumnProfile\n", - " name: user_type\n", - " type: FieldType.STRING\n", - "\n", - " min: Customer\n", - " max: Subscriber\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: member_birth_year\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 1900.0\n", - " max: 1999.0\n", - " count: 51853.0\n", - " missing_count: 6577.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 1974.2949238618335\n", - " median: 1982.7223690704195\n", - " upper_quartile: 1988.012942765942\n", - " std: 10.414847623452637\n", - " mean: 1980.4024648820382\n", - "\n", - "ColumnProfile\n", - " name: member_gender\n", - " type: FieldType.STRING\n", - "\n", - " min: \n", - " max: Other\n", - " count: 51853.0\n", - " missing_count: 0.0\n", - " error_count: 0.0" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sampled_gobike.get_profile()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It appears that we have quite a few missing values in `member_birth_year`. We also immediately see that we have some empty strings in our `member_gender` column. With the data profiler, we can quickly do a sanity check on our dataset and see where we might need to start data cleaning." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Derive by example\n", - "\n", - "Azure ML Data Prep comes with additional \"smart\" transforms created by Microsoft Research. Here, we'll look at how you can derive a new column by providing examples of input-output pairs. Rather than explicitly using regular expressions to extract dates or hours from datetimes, we can provide examples for Azure ML Data Prep to learn what the pattern is. In fact, these smart transformations can also handle more complex derivations like inferring the day of the week from datetimes." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "sgb_derived = sampled_gobike\\\n", - " .to_string(\n", - " columns=['start_time', 'end_time']\n", - " )\\\n", - " .derive_column_by_example(\n", - " source_columns='start_time',\n", - " new_column_name='date',\n", - " example_data=[('2017-12-31 16:57:39.6540', '2017-12-31'), ('2017-12-31 16:57:39', '2017-12-31')]\n", - " )\\\n", - " .derive_column_by_example(\n", - " source_columns='start_time',\n", - " new_column_name='hour',\n", - " example_data=[('2017-12-31 16:57:39.6540', '16')]\n", - " )\\\n", - " .derive_column_by_example(\n", - " source_columns='start_time',\n", - " new_column_name='wday',\n", - " example_data=[('2017-12-31 16:57:39.6540', 'Sunday')]\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Filter our data\n", - "\n", - "Let's verify that our derivations are correct by doing a bit of spot-checking." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
duration_secstart_timewdayhourdateend_timestart_station_idstart_station_namestart_station_latitudestart_station_longitudeend_station_idend_station_nameend_station_latitudeend_station_longitudebike_iduser_typemember_birth_yearmember_gender
03456.02017-12-30 23:46:13.358000Saturday232017-12-302017-12-31 00:43:49.46900075.0Market St at Franklin St37.773793-122.42123975.0Market St at Franklin St37.773793-122.4212391642.0Subscriber1972.0Male
1204.02017-12-30 23:31:38.904000Saturday232017-12-302017-12-30 23:35:03.12100084.0Duboce Park37.769200-122.433812107.017th St at Dolores St37.763015-122.4264972201.0Subscriber1965.0Male
2743.02017-12-30 22:35:13.114000Saturday222017-12-302017-12-30 22:47:36.356000285.0Webster St at O'Farrell St37.783521-122.43115897.014th St at Mission St37.768265-122.4201101628.0Subscriber1993.0Male
3328.02017-12-30 22:19:28.760000Saturday222017-12-302017-12-30 22:24:57.4890005.0Powell St BART Station (Market St at 5th St)37.783899-122.40844564.05th St at Brannan St37.776754-122.3990182806.0Subscriber1986.0Male
4260.02017-12-30 21:22:40.116000Saturday212017-12-302017-12-30 21:27:00.885000277.0Morrison Ave at Julian St37.333658-121.908586278.0The Alameda at Bush St37.331932-121.904888465.0Subscriber1991.0Male
\n", - "
" - ], - "text/plain": [ - " duration_sec start_time wday hour date \\\n", - "0 3456.0 2017-12-30 23:46:13.358000 Saturday 23 2017-12-30 \n", - "1 204.0 2017-12-30 23:31:38.904000 Saturday 23 2017-12-30 \n", - "2 743.0 2017-12-30 22:35:13.114000 Saturday 22 2017-12-30 \n", - "3 328.0 2017-12-30 22:19:28.760000 Saturday 22 2017-12-30 \n", - "4 260.0 2017-12-30 21:22:40.116000 Saturday 21 2017-12-30 \n", - "\n", - " end_time start_station_id \\\n", - "0 2017-12-31 00:43:49.469000 75.0 \n", - "1 2017-12-30 23:35:03.121000 84.0 \n", - "2 2017-12-30 22:47:36.356000 285.0 \n", - "3 2017-12-30 22:24:57.489000 5.0 \n", - "4 2017-12-30 21:27:00.885000 277.0 \n", - "\n", - " start_station_name start_station_latitude \\\n", - "0 Market St at Franklin St 37.773793 \n", - "1 Duboce Park 37.769200 \n", - "2 Webster St at O'Farrell St 37.783521 \n", - "3 Powell St BART Station (Market St at 5th St) 37.783899 \n", - "4 Morrison Ave at Julian St 37.333658 \n", - "\n", - " start_station_longitude end_station_id end_station_name \\\n", - "0 -122.421239 75.0 Market St at Franklin St \n", - "1 -122.433812 107.0 17th St at Dolores St \n", - "2 -122.431158 97.0 14th St at Mission St \n", - "3 -122.408445 64.0 5th St at Brannan St \n", - "4 -121.908586 278.0 The Alameda at Bush St \n", - "\n", - " end_station_latitude end_station_longitude bike_id user_type \\\n", - "0 37.773793 -122.421239 1642.0 Subscriber \n", - "1 37.763015 -122.426497 2201.0 Subscriber \n", - "2 37.768265 -122.420110 1628.0 Subscriber \n", - "3 37.776754 -122.399018 2806.0 Subscriber \n", - "4 37.331932 -121.904888 465.0 Subscriber \n", - "\n", - " member_birth_year member_gender \n", - "0 1972.0 Male \n", - "1 1965.0 Male \n", - "2 1993.0 Male \n", - "3 1986.0 Male \n", - "4 1991.0 Male " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sgb_derived.filter(dprep.col('wday') != 'Sunday').head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also filter on other column types; let's take a peek at rides that lasted over 5 hours." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
duration_secstart_timewdayhourdateend_timestart_station_idstart_station_namestart_station_latitudestart_station_longitudeend_station_idend_station_nameend_station_latitudeend_station_longitudebike_iduser_typemember_birth_yearmember_gender
080110.02017-12-31 16:57:39.654000Sunday162017-12-312018-01-01 15:12:50.24500074.0Laguna St at Hayes St37.776435-122.42624443.0San Francisco Public Library (Grove St at Hyde...37.778768-122.41592996.0Customer1987Male
122587.02017-12-31 13:51:04.538000Sunday132017-12-312017-12-31 20:07:32.139000307.0SAP Center37.332692-121.900084307.0SAP Center37.332692-121.9000841443.0CustomerNone
218067.02017-12-30 04:20:13.938000Saturday042017-12-302017-12-30 09:21:21.62800070.0Central Ave at Fell St37.773311-122.44429343.0San Francisco Public Library (Grove St at Hyde...37.778768-122.4159291928.0CustomerNone
354550.02017-12-29 10:02:38.086000Friday102017-12-292017-12-30 01:11:48.53900021.0Montgomery St BART Station (Market St at 2nd St)37.789625-122.40081184.0Duboce Park37.769200-122.433812209.0CustomerNone
463627.02017-12-27 19:12:42.794000Wednesday192017-12-272017-12-28 12:53:10.649000249.0Russell St at College Ave37.858473-122.253253244.0Shattuck Ave at Hearst Ave37.873792-122.2686181804.0Customer1988Male
\n", - "
" - ], - "text/plain": [ - " duration_sec start_time wday hour date \\\n", - "0 80110.0 2017-12-31 16:57:39.654000 Sunday 16 2017-12-31 \n", - "1 22587.0 2017-12-31 13:51:04.538000 Sunday 13 2017-12-31 \n", - "2 18067.0 2017-12-30 04:20:13.938000 Saturday 04 2017-12-30 \n", - "3 54550.0 2017-12-29 10:02:38.086000 Friday 10 2017-12-29 \n", - "4 63627.0 2017-12-27 19:12:42.794000 Wednesday 19 2017-12-27 \n", - "\n", - " end_time start_station_id \\\n", - "0 2018-01-01 15:12:50.245000 74.0 \n", - "1 2017-12-31 20:07:32.139000 307.0 \n", - "2 2017-12-30 09:21:21.628000 70.0 \n", - "3 2017-12-30 01:11:48.539000 21.0 \n", - "4 2017-12-28 12:53:10.649000 249.0 \n", - "\n", - " start_station_name start_station_latitude \\\n", - "0 Laguna St at Hayes St 37.776435 \n", - "1 SAP Center 37.332692 \n", - "2 Central Ave at Fell St 37.773311 \n", - "3 Montgomery St BART Station (Market St at 2nd St) 37.789625 \n", - "4 Russell St at College Ave 37.858473 \n", - "\n", - " start_station_longitude end_station_id \\\n", - "0 -122.426244 43.0 \n", - "1 -121.900084 307.0 \n", - "2 -122.444293 43.0 \n", - "3 -122.400811 84.0 \n", - "4 -122.253253 244.0 \n", - "\n", - " end_station_name end_station_latitude \\\n", - "0 San Francisco Public Library (Grove St at Hyde... 37.778768 \n", - "1 SAP Center 37.332692 \n", - "2 San Francisco Public Library (Grove St at Hyde... 37.778768 \n", - "3 Duboce Park 37.769200 \n", - "4 Shattuck Ave at Hearst Ave 37.873792 \n", - "\n", - " end_station_longitude bike_id user_type member_birth_year member_gender \n", - "0 -122.415929 96.0 Customer 1987 Male \n", - "1 -121.900084 1443.0 Customer None \n", - "2 -122.415929 1928.0 Customer None \n", - "3 -122.433812 209.0 Customer None \n", - "4 -122.268618 1804.0 Customer 1988 Male " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sgb_derived.filter(dprep.col('duration_sec') > (60 * 60 * 5)).head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Transform our data\n", - "\n", - "In addition to \"smart\" transformations, Azure ML Data Prep also supports many common data science transforms familiar to other industry-standard data science libraries. Here, we'll explore the ability to `summarize` and `replace`. We'll also get to use `join` when we handle assertions.\n", - "\n", - "#### Summarize\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dateduration_sec_mean
02017-12-311982.801418
12017-12-301203.766423
22017-12-291287.324841
32017-12-28835.146465
42017-12-271658.735955
\n", - "
" - ], - "text/plain": [ - " date duration_sec_mean\n", - "0 2017-12-31 1982.801418\n", - "1 2017-12-30 1203.766423\n", - "2 2017-12-29 1287.324841\n", - "3 2017-12-28 835.146465\n", - "4 2017-12-27 1658.735955" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sgb_summary = sgb_derived\\\n", - " .summarize(\n", - " summary_columns=[\n", - " dprep\\\n", - " .SummaryColumnsValue(\n", - " column_id='duration_sec', \n", - " summary_column_name='duration_sec_mean', \n", - " summary_function=dprep.SummaryFunction.MEAN\n", - " )\n", - " ],\n", - " group_by_columns=['date']\n", - " )\n", - "sgb_summary.head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Azure Data Prep also makes it easy to append this output of `summarize` to the original table based on the grouping variable. " - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
duration_secstart_timewdayhourdateend_timestart_station_idstart_station_namestart_station_latitudestart_station_longitudeend_station_idend_station_nameend_station_latitudeend_station_longitudebike_iduser_typemember_birth_yearmember_genderduration_sec_mean
080110.02017-12-31 16:57:39.654000Sunday162017-12-312018-01-01 15:12:50.24500074.0Laguna St at Hayes St37.776435-122.42624443.0San Francisco Public Library (Grove St at Hyde...37.778768-122.41592996.0Customer1987Male1982.801418
13292.02017-12-31 23:46:32.403000Sunday232017-12-312018-01-01 00:41:24.605000284.0Yerba Buena Center for the Arts (Howard St at ...37.784872-122.40087622.0Howard St at Beale St37.789756-122.3946433058.0CustomerNone1982.801418
21397.02017-12-31 23:55:09.686000Sunday232017-12-312018-01-01 00:18:26.72100078.0Folsom St at 9th St37.773717-122.41164715.0San Francisco Ferry Building (Harry Bridges Pl...37.795392-122.3942031667.0CustomerNone1982.801418
3422.02017-12-31 23:54:25.337000Sunday232017-12-312018-01-01 00:01:27.354000139.0Garfield Square (25th St at Harrison St)37.751017-122.41190199.0Folsom St at 15th St37.767037-122.4154422415.0Subscriber1985Male1982.801418
41130.02017-12-31 23:36:16.069000Sunday232017-12-312017-12-31 23:55:06.09600066.03rd St at Townsend St37.778742-122.39274123.0The Embarcadero at Steuart St37.791464-122.3910342721.0CustomerNone1982.801418
\n", - "
" - ], - "text/plain": [ - " duration_sec start_time wday hour date \\\n", - "0 80110.0 2017-12-31 16:57:39.654000 Sunday 16 2017-12-31 \n", - "1 3292.0 2017-12-31 23:46:32.403000 Sunday 23 2017-12-31 \n", - "2 1397.0 2017-12-31 23:55:09.686000 Sunday 23 2017-12-31 \n", - "3 422.0 2017-12-31 23:54:25.337000 Sunday 23 2017-12-31 \n", - "4 1130.0 2017-12-31 23:36:16.069000 Sunday 23 2017-12-31 \n", - "\n", - " end_time start_station_id \\\n", - "0 2018-01-01 15:12:50.245000 74.0 \n", - "1 2018-01-01 00:41:24.605000 284.0 \n", - "2 2018-01-01 00:18:26.721000 78.0 \n", - "3 2018-01-01 00:01:27.354000 139.0 \n", - "4 2017-12-31 23:55:06.096000 66.0 \n", - "\n", - " start_station_name start_station_latitude \\\n", - "0 Laguna St at Hayes St 37.776435 \n", - "1 Yerba Buena Center for the Arts (Howard St at ... 37.784872 \n", - "2 Folsom St at 9th St 37.773717 \n", - "3 Garfield Square (25th St at Harrison St) 37.751017 \n", - "4 3rd St at Townsend St 37.778742 \n", - "\n", - " start_station_longitude end_station_id \\\n", - "0 -122.426244 43.0 \n", - "1 -122.400876 22.0 \n", - "2 -122.411647 15.0 \n", - "3 -122.411901 99.0 \n", - "4 -122.392741 23.0 \n", - "\n", - " end_station_name end_station_latitude \\\n", - "0 San Francisco Public Library (Grove St at Hyde... 37.778768 \n", - "1 Howard St at Beale St 37.789756 \n", - "2 San Francisco Ferry Building (Harry Bridges Pl... 37.795392 \n", - "3 Folsom St at 15th St 37.767037 \n", - "4 The Embarcadero at Steuart St 37.791464 \n", - "\n", - " end_station_longitude bike_id user_type member_birth_year member_gender \\\n", - "0 -122.415929 96.0 Customer 1987 Male \n", - "1 -122.394643 3058.0 Customer None \n", - "2 -122.394203 1667.0 Customer None \n", - "3 -122.415442 2415.0 Subscriber 1985 Male \n", - "4 -122.391034 2721.0 Customer None \n", - "\n", - " duration_sec_mean \n", - "0 1982.801418 \n", - "1 1982.801418 \n", - "2 1982.801418 \n", - "3 1982.801418 \n", - "4 1982.801418 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sgb_appended = sgb_derived\\\n", - " .summarize(\n", - " summary_columns=[\n", - " dprep\\\n", - " .SummaryColumnsValue(\n", - " column_id='duration_sec', \n", - " summary_column_name='duration_sec_mean', \n", - " summary_function=dprep.SummaryFunction.MEAN\n", - " )\n", - " ],\n", - " group_by_columns=['date'],\n", - " join_back=True\n", - " )\n", - "sgb_appended.head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Replace\n", - "\n", - "Recall that our `member_gender` column had empty strings that stood in place of `None`. Let's use our `replace` function to properly recode them as `None`s." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
duration_secstart_timeend_timestart_station_idstart_station_namestart_station_latitudestart_station_longitudeend_station_idend_station_nameend_station_latitudeend_station_longitudebike_iduser_typemember_birth_yearmember_gender
080110.02017-12-31 16:57:39.654000+00:002018-01-01 15:12:50.245000+00:0074.0Laguna St at Hayes St37.776435-122.42624443.0San Francisco Public Library (Grove St at Hyde...37.778768-122.41592996.0Customer1987Male
13292.02017-12-31 23:46:32.403000+00:002018-01-01 00:41:24.605000+00:00284.0Yerba Buena Center for the Arts (Howard St at ...37.784872-122.40087622.0Howard St at Beale St37.789756-122.3946433058.0CustomerNoneNone
21397.02017-12-31 23:55:09.686000+00:002018-01-01 00:18:26.721000+00:0078.0Folsom St at 9th St37.773717-122.41164715.0San Francisco Ferry Building (Harry Bridges Pl...37.795392-122.3942031667.0CustomerNoneNone
3422.02017-12-31 23:54:25.337000+00:002018-01-01 00:01:27.354000+00:00139.0Garfield Square (25th St at Harrison St)37.751017-122.41190199.0Folsom St at 15th St37.767037-122.4154422415.0Subscriber1985Male
41130.02017-12-31 23:36:16.069000+00:002017-12-31 23:55:06.096000+00:0066.03rd St at Townsend St37.778742-122.39274123.0The Embarcadero at Steuart St37.791464-122.3910342721.0CustomerNoneNone
\n", - "
" - ], - "text/plain": [ - " duration_sec start_time \\\n", - "0 80110.0 2017-12-31 16:57:39.654000+00:00 \n", - "1 3292.0 2017-12-31 23:46:32.403000+00:00 \n", - "2 1397.0 2017-12-31 23:55:09.686000+00:00 \n", - "3 422.0 2017-12-31 23:54:25.337000+00:00 \n", - "4 1130.0 2017-12-31 23:36:16.069000+00:00 \n", - "\n", - " end_time start_station_id \\\n", - "0 2018-01-01 15:12:50.245000+00:00 74.0 \n", - "1 2018-01-01 00:41:24.605000+00:00 284.0 \n", - "2 2018-01-01 00:18:26.721000+00:00 78.0 \n", - "3 2018-01-01 00:01:27.354000+00:00 139.0 \n", - "4 2017-12-31 23:55:06.096000+00:00 66.0 \n", - "\n", - " start_station_name start_station_latitude \\\n", - "0 Laguna St at Hayes St 37.776435 \n", - "1 Yerba Buena Center for the Arts (Howard St at ... 37.784872 \n", - "2 Folsom St at 9th St 37.773717 \n", - "3 Garfield Square (25th St at Harrison St) 37.751017 \n", - "4 3rd St at Townsend St 37.778742 \n", - "\n", - " start_station_longitude end_station_id \\\n", - "0 -122.426244 43.0 \n", - "1 -122.400876 22.0 \n", - "2 -122.411647 15.0 \n", - "3 -122.411901 99.0 \n", - "4 -122.392741 23.0 \n", - "\n", - " end_station_name end_station_latitude \\\n", - "0 San Francisco Public Library (Grove St at Hyde... 37.778768 \n", - "1 Howard St at Beale St 37.789756 \n", - "2 San Francisco Ferry Building (Harry Bridges Pl... 37.795392 \n", - "3 Folsom St at 15th St 37.767037 \n", - "4 The Embarcadero at Steuart St 37.791464 \n", - "\n", - " end_station_longitude bike_id user_type member_birth_year member_gender \n", - "0 -122.415929 96.0 Customer 1987 Male \n", - "1 -122.394643 3058.0 Customer None None \n", - "2 -122.394203 1667.0 Customer None None \n", - "3 -122.415442 2415.0 Subscriber 1985 Male \n", - "4 -122.391034 2721.0 Customer None None " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sgb_replaced = sampled_gobike.replace_na(columns=['member_gender'])\n", - "sgb_replaced.head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Assert on invalid data \n", - "\n", - "Azure ML Data Prep helps prevent broken pipelines and safeguard against bad data by supporting assertions. In our case, we'll create assertions to handle potentially erroneous `member_birth_year` values. The oldest person on record is no more than 130 years old, so birth year listed as before 1900 is wrong. Though our `sampled_gobike` dataset doesn't have any issues, we would fail on the full `gobike` dataset if we made that assumption. However, Azure ML Data Prep allows us to handle these gracefully with assertions." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TypeMinMaxCountMissing CountError CountLower QuartileUpper QuartileStandard DeviationMean
duration_secFieldType.DECIMAL6186369519700.00.00.0381.842938.5743444.151099.01
start_timeFieldType.DATE2017-06-28 09:47:36.347000+00:002017-12-31 23:59:01.261000+00:00519700.00.00.0
end_timeFieldType.DATE2017-06-28 09:52:55.338000+00:002018-01-01 15:12:50.245000+00:00519700.00.00.0
start_station_idFieldType.DECIMAL3340519700.00.00.023.8481139.42486.083195.0342
start_station_nameFieldType.STRING10th Ave at E 15th StYerba Buena Center for the Arts (Howard St at ...519700.00.00.0
start_station_latitudeFieldType.DECIMAL37.317337.8802519700.00.00.037.773637.79530.08630537.7717
start_station_longitudeFieldType.DECIMAL-122.444-121.874519700.00.00.0-122.412-122.3910.105573-122.364
end_station_idFieldType.DECIMAL3340519700.00.00.022.7024134.2284.969592.184
end_station_nameFieldType.STRING10th Ave at E 15th StYerba Buena Center for the Arts (Howard St at ...519700.00.00.0
end_station_latitudeFieldType.DECIMAL37.317337.8802519700.00.00.037.774237.79560.086223837.7718
end_station_longitudeFieldType.DECIMAL-122.444-121.874519700.00.00.0-122.41-122.3910.105122-122.363
bike_idFieldType.DECIMAL103733519700.00.00.0788.6792519.96971.3571672.53
user_typeFieldType.STRINGCustomerSubscriber519700.00.00.0
member_birth_yearFieldType.DECIMAL19001999519700.066541.02.01974.331987.9910.51161980.41
member_genderFieldType.STRINGOther519700.00.00.0
" - ], - "text/plain": [ - "ColumnProfile\n", - " name: duration_sec\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 61.0\n", - " max: 86369.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 381.8421435321134\n", - " median: 595.9837506906349\n", - " upper_quartile: 938.5741138032683\n", - " std: 3444.146451247386\n", - " mean: 1099.009520877422\n", - "\n", - "ColumnProfile\n", - " name: start_time\n", - " type: FieldType.DATE\n", - "\n", - " min: 2017-06-28 09:47:36.347000+00:00\n", - " max: 2017-12-31 23:59:01.261000+00:00\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: end_time\n", - " type: FieldType.DATE\n", - "\n", - " min: 2017-06-28 09:52:55.338000+00:00\n", - " max: 2018-01-01 15:12:50.245000+00:00\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: start_station_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 3.0\n", - " max: 340.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 23.848148131600635\n", - " median: 67.18427817406452\n", - " upper_quartile: 139.42430180307275\n", - " std: 86.08307797095921\n", - " mean: 95.03424475658852\n", - "\n", - "ColumnProfile\n", - " name: start_station_name\n", - " type: FieldType.STRING\n", - "\n", - " min: 10th Ave at E 15th St\n", - " max: Yerba Buena Center for the Arts (Howard St at 3rd St)\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: start_station_latitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 37.3172979\n", - " max: 37.88022244590679\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 37.7735913559721\n", - " median: 37.783211475877295\n", - " upper_quartile: 37.79531236950411\n", - " std: 0.08630496061661774\n", - " mean: 37.771652603110894\n", - "\n", - "ColumnProfile\n", - " name: start_station_longitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: -122.44429260492325\n", - " max: -121.8741186\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: -122.41170653070694\n", - " median: -122.39875282257843\n", - " upper_quartile: -122.39103429266093\n", - " std: 0.10557344899193394\n", - " mean: -122.36392726512949\n", - "\n", - "ColumnProfile\n", - " name: end_station_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 3.0\n", - " max: 340.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 22.702361193995444\n", - " median: 65.22613324081779\n", - " upper_quartile: 134.21987129021295\n", - " std: 84.9694914863546\n", - " mean: 92.18404079276426\n", - "\n", - "ColumnProfile\n", - " name: end_station_name\n", - " type: FieldType.STRING\n", - "\n", - " min: 10th Ave at E 15th St\n", - " max: Yerba Buena Center for the Arts (Howard St at 3rd St)\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: end_station_latitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 37.3172979\n", - " max: 37.88022244590679\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 37.774232065528906\n", - " median: 37.78329810124021\n", - " upper_quartile: 37.79557128475191\n", - " std: 0.08622383487119635\n", - " mean: 37.771843749644646\n", - "\n", - "ColumnProfile\n", - " name: end_station_longitude\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: -122.44429260492325\n", - " max: -121.8741186\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: -122.41012752595213\n", - " median: -122.39855511689811\n", - " upper_quartile: -122.39096192032446\n", - " std: 0.10512220222934929\n", - " mean: -122.36323553679931\n", - "\n", - "ColumnProfile\n", - " name: bike_id\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 10.0\n", - " max: 3733.0\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - " lower_quartile: 788.6785454424829\n", - " median: 1726.652793720984\n", - " upper_quartile: 2519.963581272433\n", - " std: 971.3569593530214\n", - " mean: 1672.533078699254\n", - "\n", - "ColumnProfile\n", - " name: user_type\n", - " type: FieldType.STRING\n", - "\n", - " min: Customer\n", - " max: Subscriber\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0\n", - "\n", - "ColumnProfile\n", - " name: member_birth_year\n", - " type: FieldType.DECIMAL\n", - "\n", - " min: 1900.0\n", - " max: 1999.0\n", - " count: 519700.0\n", - " missing_count: 66541.0\n", - " error_count: 2.0\n", - "\n", - " lower_quartile: 1974.3343079021402\n", - " median: 1982.8008012973817\n", - " upper_quartile: 1987.991638371539\n", - " std: 10.511639915765766\n", - " mean: 1980.4052039359563\n", - "\n", - "ColumnProfile\n", - " name: member_gender\n", - " type: FieldType.STRING\n", - "\n", - " min: \n", - " max: Other\n", - " count: 519700.0\n", - " missing_count: 0.0\n", - " error_count: 0.0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gb_asserted = gobike\\\n", - " .assert_value(\n", - " columns='member_birth_year', \n", - " expression=dprep.f_or(dprep.value.is_null(), dprep.value >= 1900),\n", - " error_code='InvalidDate'\n", - " )\n", - "gb_asserted.get_profile()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we can filter to see what caused the 2 errors above:" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
duration_secstart_timeend_timestart_station_idstart_station_namestart_station_latitudestart_station_longitudeend_station_idend_station_nameend_station_latitudeend_station_longitudebike_iduser_typemember_birth_yearmember_gender
02546.02017-08-19 17:47:32.110000+00:002017-08-19 18:29:58.825000+00:00197.0El Embarcadero at Grand Ave37.808848-122.24968172.0College Ave at Taft Ave37.841800-122.2515351448.0Customerazureml.dataprep.native.DataPrepError(\"'Invali...Male
11767.02017-08-19 13:20:02.170000+00:002017-08-19 13:49:29.735000+00:00235.0Union St at 10th St37.807239-122.28937197.0El Embarcadero at Grand Ave37.808848-122.24968091.0Customerazureml.dataprep.native.DataPrepError(\"'Invali...Male
\n", - "
" - ], - "text/plain": [ - " duration_sec start_time \\\n", - "0 2546.0 2017-08-19 17:47:32.110000+00:00 \n", - "1 1767.0 2017-08-19 13:20:02.170000+00:00 \n", - "\n", - " end_time start_station_id \\\n", - "0 2017-08-19 18:29:58.825000+00:00 197.0 \n", - "1 2017-08-19 13:49:29.735000+00:00 235.0 \n", - "\n", - " start_station_name start_station_latitude \\\n", - "0 El Embarcadero at Grand Ave 37.808848 \n", - "1 Union St at 10th St 37.807239 \n", - "\n", - " start_station_longitude end_station_id end_station_name \\\n", - "0 -122.24968 172.0 College Ave at Taft Ave \n", - "1 -122.28937 197.0 El Embarcadero at Grand Ave \n", - "\n", - " end_station_latitude end_station_longitude bike_id user_type \\\n", - "0 37.841800 -122.251535 1448.0 Customer \n", - "1 37.808848 -122.249680 91.0 Customer \n", - "\n", - " member_birth_year member_gender \n", - "0 azureml.dataprep.native.DataPrepError(\"'Invali... Male \n", - "1 azureml.dataprep.native.DataPrepError(\"'Invali... Male " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gb_errors = gb_asserted.filter(dprep.col('member_birth_year').is_error())\n", - "gb_errors.head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Join\n", - "But what were the original values? Let's use `join` to figure out what the values were that caused our assert to throw an error. " - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
l_duration_secl_start_timel_end_timel_start_station_idl_start_station_namel_start_station_latitudel_start_station_longitudel_end_station_idl_end_station_namel_end_station_latitude...r_start_station_latituder_start_station_longituder_end_station_idr_end_station_namer_end_station_latituder_end_station_longituder_bike_idr_user_typer_member_birth_yearr_member_gender
02546.02017-08-19 17:47:32.110000+00:002017-08-19 18:29:58.825000+00:00197.0El Embarcadero at Grand Ave37.808848-122.24968172.0College Ave at Taft Ave37.841800...37.808848-122.24968172.0College Ave at Taft Ave37.841800-122.2515351448.0Customer1886.0Male
11767.02017-08-19 13:20:02.170000+00:002017-08-19 13:49:29.735000+00:00235.0Union St at 10th St37.807239-122.28937197.0El Embarcadero at Grand Ave37.808848...37.807239-122.28937197.0El Embarcadero at Grand Ave37.808848-122.24968091.0Customer1886.0Male
\n", - "

2 rows × 30 columns

\n", - "
" - ], - "text/plain": [ - " l_duration_sec l_start_time \\\n", - "0 2546.0 2017-08-19 17:47:32.110000+00:00 \n", - "1 1767.0 2017-08-19 13:20:02.170000+00:00 \n", - "\n", - " l_end_time l_start_station_id \\\n", - "0 2017-08-19 18:29:58.825000+00:00 197.0 \n", - "1 2017-08-19 13:49:29.735000+00:00 235.0 \n", - "\n", - " l_start_station_name l_start_station_latitude \\\n", - "0 El Embarcadero at Grand Ave 37.808848 \n", - "1 Union St at 10th St 37.807239 \n", - "\n", - " l_start_station_longitude l_end_station_id l_end_station_name \\\n", - "0 -122.24968 172.0 College Ave at Taft Ave \n", - "1 -122.28937 197.0 El Embarcadero at Grand Ave \n", - "\n", - " l_end_station_latitude ... r_start_station_latitude \\\n", - "0 37.841800 ... 37.808848 \n", - "1 37.808848 ... 37.807239 \n", - "\n", - " r_start_station_longitude r_end_station_id r_end_station_name \\\n", - "0 -122.24968 172.0 College Ave at Taft Ave \n", - "1 -122.28937 197.0 El Embarcadero at Grand Ave \n", - "\n", - " r_end_station_latitude r_end_station_longitude r_bike_id r_user_type \\\n", - "0 37.841800 -122.251535 1448.0 Customer \n", - "1 37.808848 -122.249680 91.0 Customer \n", - "\n", - " r_member_birth_year r_member_gender \n", - "0 1886.0 Male \n", - "1 1886.0 Male \n", - "\n", - "[2 rows x 30 columns]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gb_errors.join(\n", - " left_dataflow=gb_errors,\n", - " right_dataflow=gobike,\n", - " join_key_pairs=[\n", - " ('duration_sec', 'duration_sec'),\n", - " ('start_station_id', 'start_station_id'),\n", - " ('bike_id', 'bike_id')\n", - " ]\n", - ").head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we look at `r_member_birth_year`, we see that these people were listed as being born in 1886. That's impossible! Now that we've identified outliers and anomalies, we can appropriately clean our data however we like." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Export for machine learning\n", - "\n", - "One of the beautiful features of Azure ML Data Prep is that you only need to write your code once and choose whether to scale up or out; it takes care of figuring out how. To do so, you can export the `.dprep` file you've written tested on a smaller dataset, then run it with your larger dataset. Here, we show how you can export your new package. For a more detailed example on how to execute it on Spark, check out our [New York Taxicab scenario](https://github.com/Microsoft/PendletonDocs/blob/master/Scenarios/NYTaxiCab/01.new_york_taxi.ipynb)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "gobike = gobike.set_name(name=\"gobike\")\n", - "package_path = path.join(mkdtemp(), \"gobike.dprep\")\n", - "\n", - "print(\"Saving package to: {}\".format(package_path))\n", - "package = dprep.Package(arg=gobike)\n", - "package.save(file_path=package_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Want more information?\n", - "\n", - "Congratulations on finishing your introduction to the Azure ML Data Prep SDK! If you'd like more detailed tutorials on how to construct machine learning datasets or dive deeper into all of its functionality, you can find more information in our detailed notebooks [here](https://github.com/Microsoft/PendletonDocs). There, we cover topics including how to:\n", - "\n", - "* Cache your Dataflow to speed up your iterations\n", - "* Add your custom Python transforms\n", - "* Impute missing values\n", - "* Sample your data\n", - "* Reference and link between Dataflows\n", - "* Apply your Dataflow to a new, larger data source" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/onnx/README.md b/onnx/README.md deleted file mode 100644 index f9397287..00000000 --- a/onnx/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# ONNX on Azure Machine Learning - -These tutorials show how to create and deploy [ONNX](http://onnx.ai) models in Azure Machine Learning environments using [ONNX Runtime](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-build-deploy-onnx) for inference. Once deployed as a web service, you can ping the model with your own set of images to be analyzed! - -## Tutorials -- [Obtain ONNX model from ONNX Model Zoo and deploy with ONNX Runtime inference - Handwritten Digit Classification (MNIST)](https://github.com/Azure/MachineLearningNotebooks/blob/master/onnx/onnx-inference-mnist-deploy.ipynb) -- [Obtain ONNX model from ONNX Model Zoo and deploy with ONNX Runtime inference - Facial Expression Recognition (Emotion FER+)](https://github.com/Azure/MachineLearningNotebooks/blob/master/onnx/onnx-inference-facial-emotion-recognition-deploy.ipynb) -- [Obtain ONNX model from ONNX Model Zoo and deploy with ONNX Runtime inference - Image Recognition (ResNet50)](https://github.com/Azure/MachineLearningNotebooks/blob/master/onnx/onnx-modelzoo-aml-deploy-resnet50.ipynb) -- [Convert ONNX model from CoreML and deploy - TinyYOLO](https://github.com/Azure/MachineLearningNotebooks/blob/master/onnx/onnx-convert-aml-deploy-tinyyolo.ipynb) -- [Train ONNX model in PyTorch and deploy - MNIST](https://github.com/Azure/MachineLearningNotebooks/blob/master/onnx/onnx-train-pytorch-aml-deploy-mnist.ipynb) - - -## Documentation -- [ONNX Runtime Python API Documentation](http://aka.ms/onnxruntime-python) -- [Azure Machine Learning API Documentation](http://aka.ms/aml-docs) - -## Related Articles -- [Building and Deploying ONNX Runtime Models](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-build-deploy-onnx) -- [Azure AI – Making AI Real for Business](https://aka.ms/aml-blog-overview) -- [What’s new in Azure Machine Learning](https://aka.ms/aml-blog-whats-new) - - -## License -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the MIT License. - -## Acknowledgements -These tutorials were developed by Vinitra Swamy and Prasanth Pulavarthi of the Microsoft AI Frameworks team and adapted for presentation at Microsoft Ignite 2018. diff --git a/onnx/mnist.py b/onnx/mnist.py deleted file mode 100644 index a9a41853..00000000 --- a/onnx/mnist.py +++ /dev/null @@ -1,124 +0,0 @@ -# This is a modified version of https://github.com/pytorch/examples/blob/master/mnist/main.py which is -# licensed under BSD 3-Clause (https://github.com/pytorch/examples/blob/master/LICENSE) - -from __future__ import print_function -import argparse -import torch -import torch.nn as nn -import torch.nn.functional as F -import torch.optim as optim -from torchvision import datasets, transforms -import os - - -class Net(nn.Module): - def __init__(self): - super(Net, self).__init__() - self.conv1 = nn.Conv2d(1, 10, kernel_size=5) - self.conv2 = nn.Conv2d(10, 20, kernel_size=5) - self.conv2_drop = nn.Dropout2d() - self.fc1 = nn.Linear(320, 50) - self.fc2 = nn.Linear(50, 10) - - def forward(self, x): - x = F.relu(F.max_pool2d(self.conv1(x), 2)) - x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2)) - x = x.view(-1, 320) - x = F.relu(self.fc1(x)) - x = F.dropout(x, training=self.training) - x = self.fc2(x) - return F.log_softmax(x, dim=1) - - -def train(args, model, device, train_loader, optimizer, epoch, output_dir): - model.train() - for batch_idx, (data, target) in enumerate(train_loader): - data, target = data.to(device), target.to(device) - optimizer.zero_grad() - output = model(data) - loss = F.nll_loss(output, target) - loss.backward() - optimizer.step() - if batch_idx % args.log_interval == 0: - print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( - epoch, batch_idx * len(data), len(train_loader.dataset), - 100. * batch_idx / len(train_loader), loss.item())) - - -def test(args, model, device, test_loader): - model.eval() - test_loss = 0 - correct = 0 - with torch.no_grad(): - for data, target in test_loader: - data, target = data.to(device), target.to(device) - output = model(data) - test_loss += F.nll_loss(output, target, size_average=False, reduce=True).item() # sum up batch loss - pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability - correct += pred.eq(target.view_as(pred)).sum().item() - - test_loss /= len(test_loader.dataset) - print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format( - test_loss, correct, len(test_loader.dataset), - 100. * correct / len(test_loader.dataset))) - - -def main(): - # Training settings - parser = argparse.ArgumentParser(description='PyTorch MNIST Example') - parser.add_argument('--batch-size', type=int, default=64, metavar='N', - help='input batch size for training (default: 64)') - parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N', - help='input batch size for testing (default: 1000)') - parser.add_argument('--epochs', type=int, default=10, metavar='N', - help='number of epochs to train (default: 10)') - parser.add_argument('--lr', type=float, default=0.01, metavar='LR', - help='learning rate (default: 0.01)') - parser.add_argument('--momentum', type=float, default=0.5, metavar='M', - help='SGD momentum (default: 0.5)') - parser.add_argument('--no-cuda', action='store_true', default=False, - help='disables CUDA training') - parser.add_argument('--seed', type=int, default=1, metavar='S', - help='random seed (default: 1)') - parser.add_argument('--log-interval', type=int, default=10, metavar='N', - help='how many batches to wait before logging training status') - parser.add_argument('--output-dir', type=str, default='outputs') - args = parser.parse_args() - use_cuda = not args.no_cuda and torch.cuda.is_available() - - torch.manual_seed(args.seed) - - device = torch.device("cuda" if use_cuda else "cpu") - - output_dir = args.output_dir - os.makedirs(output_dir, exist_ok=True) - - kwargs = {'num_workers': 1, 'pin_memory': True} if use_cuda else {} - train_loader = torch.utils.data.DataLoader( - datasets.MNIST('data', train=True, download=True, - transform=transforms.Compose([transforms.ToTensor(), - transforms.Normalize((0.1307,), (0.3081,))]) - ), - batch_size=args.batch_size, shuffle=True, **kwargs) - test_loader = torch.utils.data.DataLoader( - datasets.MNIST('data', train=False, - transform=transforms.Compose([transforms.ToTensor(), - transforms.Normalize((0.1307,), (0.3081,))]) - ), - batch_size=args.test_batch_size, shuffle=True, **kwargs) - - model = Net().to(device) - optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum) - - for epoch in range(1, args.epochs + 1): - train(args, model, device, train_loader, optimizer, epoch, output_dir) - test(args, model, device, test_loader) - - # save model - dummy_input = torch.randn(1, 1, 28, 28, device=device) - model_path = os.path.join(output_dir, 'mnist.onnx') - torch.onnx.export(model, dummy_input, model_path) - - -if __name__ == '__main__': - main() diff --git a/onnx/onnx-convert-aml-deploy-tinyyolo.ipynb b/onnx/onnx-convert-aml-deploy-tinyyolo.ipynb deleted file mode 100644 index 9b27b555..00000000 --- a/onnx/onnx-convert-aml-deploy-tinyyolo.ipynb +++ /dev/null @@ -1,435 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# YOLO Real-time Object Detection using ONNX on AzureML\n", - "\n", - "This example shows how to convert the TinyYOLO model from CoreML to ONNX and operationalize it as a web service using Azure Machine Learning services and the ONNX Runtime.\n", - "\n", - "## What is ONNX\n", - "ONNX is an open format for representing machine learning and deep learning models. ONNX enables open and interoperable AI by enabling data scientists and developers to use the tools of their choice without worrying about lock-in and flexibility to deploy to a variety of platforms. ONNX is developed and supported by a community of partners including Microsoft, Facebook, and Amazon. For more information, explore the [ONNX website](http://onnx.ai).\n", - "\n", - "## YOLO Details\n", - "You Only Look Once (YOLO) is a state-of-the-art, real-time object detection system. For more information about YOLO, please visit the [YOLO website](https://pjreddie.com/darknet/yolo/)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "\n", - "To make the best use of your time, make sure you have done the following:\n", - "\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", - "* Go through the [00.configuration.ipynb](../00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (config.json)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Install necessary packages\n", - "\n", - "You'll need to run the following commands to use this tutorial:\n", - "\n", - "```sh\n", - "pip install onnxmltools\n", - "pip install coremltools # use this on Linux and Mac\n", - "pip install git+https://github.com/apple/coremltools # use this on Windows\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Convert model to ONNX\n", - "\n", - "First we download the CoreML model. We use the CoreML model listed at https://coreml.store/tinyyolo. This may take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import urllib.request\n", - "\n", - "onnx_model_url = \"https://s3-us-west-2.amazonaws.com/coreml-models/TinyYOLO.mlmodel\"\n", - "urllib.request.urlretrieve(onnx_model_url, filename=\"TinyYOLO.mlmodel\")\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we use ONNXMLTools to convert the model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import onnxmltools\n", - "import coremltools\n", - "\n", - "# Load a CoreML model\n", - "coreml_model = coremltools.utils.load_spec('TinyYOLO.mlmodel')\n", - "\n", - "# Convert from CoreML into ONNX\n", - "onnx_model = onnxmltools.convert_coreml(coreml_model, 'TinyYOLOv2')\n", - "\n", - "# Save ONNX model\n", - "onnxmltools.utils.save_model(onnx_model, 'tinyyolov2.onnx')\n", - "\n", - "import os\n", - "print(os.path.getsize('tinyyolov2.onnx'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploying as a web service with Azure ML\n", - "\n", - "### Load Azure ML workspace\n", - "\n", - "We begin by instantiating a workspace object from the existing workspace created earlier in the configuration notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.location, ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Registering your model with Azure ML\n", - "\n", - "Now we upload the model and register it in the workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "\n", - "model = Model.register(model_path = \"tinyyolov2.onnx\",\n", - " model_name = \"tinyyolov2\",\n", - " tags = {\"onnx\": \"demo\"},\n", - " description = \"TinyYOLO\",\n", - " workspace = ws)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Displaying your registered models\n", - "\n", - "You can optionally list out all the models that you have registered in this workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "models = ws.models\n", - "for name, m in models.items():\n", - " print(\"Name:\", name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Write scoring file\n", - "\n", - "We are now going to deploy our ONNX model on Azure ML using the ONNX Runtime. We begin by writing a score.py file that will be invoked by the web service call. The `init()` function is called once when the container is started so we load the model using the ONNX Runtime into a global session object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import json\n", - "import time\n", - "import sys\n", - "import os\n", - "from azureml.core.model import Model\n", - "import numpy as np # we're going to use numpy to process input and output data\n", - "import onnxruntime # to inference ONNX models, we use the ONNX Runtime\n", - "\n", - "def init():\n", - " global session\n", - " model = Model.get_model_path(model_name = 'tinyyolov2')\n", - " session = onnxruntime.InferenceSession(model)\n", - "\n", - "def preprocess(input_data_json):\n", - " # convert the JSON data into the tensor input\n", - " return np.array(json.loads(input_data_json)['data']).astype('float32')\n", - "\n", - "def postprocess(result):\n", - " return np.array(result).tolist()\n", - "\n", - "def run(input_data_json):\n", - " try:\n", - " start = time.time() # start timer\n", - " input_data = preprocess(input_data_json)\n", - " input_name = session.get_inputs()[0].name # get the id of the first input of the model \n", - " result = session.run([], {input_name: input_data})\n", - " end = time.time() # stop timer\n", - " return {\"result\": postprocess(result),\n", - " \"time\": end - start}\n", - " except Exception as e:\n", - " result = str(e)\n", - " return {\"error\": result}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create container image\n", - "First we create a YAML file that specifies which dependencies we would like to see in our container." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(pip_packages=[\"numpy\",\"onnxruntime\",\"azureml-core\"])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we have Azure ML create the container. This step will likely take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(execution_script = \"score.py\",\n", - " runtime = \"python\",\n", - " conda_file = \"myenv.yml\",\n", - " description = \"TinyYOLO ONNX Demo\",\n", - " tags = {\"demo\": \"onnx\"}\n", - " )\n", - "\n", - "\n", - "image = ContainerImage.create(name = \"onnxyolo\",\n", - " models = [model],\n", - " image_config = image_config,\n", - " workspace = ws)\n", - "\n", - "image.wait_for_creation(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case you need to debug your code, the next line of code accesses the log file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(image.image_build_log_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We're all set! Let's get our model chugging.\n", - "\n", - "### Deploy the container image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, \n", - " memory_gb = 1, \n", - " tags = {'demo': 'onnx'}, \n", - " description = 'web service for TinyYOLO ONNX model')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following cell will likely take a few minutes to run as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "from random import randint\n", - "\n", - "aci_service_name = 'onnx-tinyyolo'+str(randint(0,100))\n", - "print(\"Service\", aci_service_name)\n", - "\n", - "aci_service = Webservice.deploy_from_image(deployment_config = aciconfig,\n", - " image = image,\n", - " name = aci_service_name,\n", - " workspace = ws)\n", - "\n", - "aci_service.wait_for_deployment(True)\n", - "print(aci_service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case the deployment fails, you can check the logs. Make sure to delete your aci_service before trying again." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if aci_service.state != 'Healthy':\n", - " # run this command for debugging.\n", - " print(aci_service.get_logs())\n", - " aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Success!\n", - "\n", - "If you've made it this far, you've deployed a working web service that does object detection using an ONNX model. You can get the URL for the webservice with the code below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(aci_service.scoring_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When you are eventually done using the web service, remember to delete it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#aci_service.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "onnx" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/onnx/onnx-inference-facial-expression-recognition-deploy.ipynb b/onnx/onnx-inference-facial-expression-recognition-deploy.ipynb deleted file mode 100644 index b067a21d..00000000 --- a/onnx/onnx-inference-facial-expression-recognition-deploy.ipynb +++ /dev/null @@ -1,809 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Facial Expression Recognition (FER+) using ONNX Runtime on Azure ML\n", - "\n", - "This example shows how to deploy an image classification neural network using the Facial Expression Recognition ([FER](https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data)) dataset and Open Neural Network eXchange format ([ONNX](http://aka.ms/onnxdocarticle)) on the Azure Machine Learning platform. This tutorial will show you how to deploy a FER+ model from the [ONNX model zoo](https://github.com/onnx/models), use it to make predictions using ONNX Runtime Inference, and deploy it as a web service in Azure.\n", - "\n", - "Throughout this tutorial, we will be referring to ONNX, a neural network exchange format used to represent deep learning models. With ONNX, AI developers can more easily move models between state-of-the-art tools (CNTK, PyTorch, Caffe, MXNet, TensorFlow) and choose the combination that is best for them. ONNX is developed and supported by a community of partners including Microsoft AI, Facebook, and Amazon. For more information, explore the [ONNX website](http://onnx.ai) and [open source files](https://github.com/onnx).\n", - "\n", - "[ONNX Runtime](https://aka.ms/onnxruntime-python) is the runtime engine that enables evaluation of trained machine learning (Traditional ML and Deep Learning) models with high performance and low resource utilization. We use the CPU version of ONNX Runtime in this tutorial, but will soon be releasing an additional tutorial for deploying this model using ONNX Runtime GPU.\n", - "\n", - "#### Tutorial Objectives:\n", - "\n", - "1. Describe the FER+ dataset and pretrained Convolutional Neural Net ONNX model for Emotion Recognition, stored in the ONNX model zoo.\n", - "2. Deploy and run the pretrained FER+ ONNX model on an Azure Machine Learning instance\n", - "3. Predict labels for test set data points in the cloud using ONNX Runtime and Azure ML" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "\n", - "### 1. Install Azure ML SDK and create a new workspace\n", - "Please follow [Azure ML configuration notebook](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) to set up your environment.\n", - "\n", - "### 2. Install additional packages needed for this Notebook\n", - "You need to install the popular plotting library `matplotlib`, the image manipulation library `opencv`, and the `onnx` library in the conda environment where Azure Maching Learning SDK is installed.\n", - "\n", - "```sh\n", - "(myenv) $ pip install matplotlib onnx opencv-python\n", - "```\n", - "\n", - "**Debugging tip**: Make sure that to activate your virtual environment (myenv) before you re-launch this notebook using the `jupyter notebook` comand. Choose the respective Python kernel for your new virtual environment using the `Kernel > Change Kernel` menu above. If you have completed the steps correctly, the upper right corner of your screen should state `Python [conda env:myenv]` instead of `Python [default]`.\n", - "\n", - "### 3. Download sample data and pre-trained ONNX model from ONNX Model Zoo.\n", - "\n", - "In the following lines of code, we download [the trained ONNX Emotion FER+ model and corresponding test data](https://github.com/onnx/models/tree/master/emotion_ferplus) and place them in the same folder as this tutorial notebook. For more information about the FER+ dataset, please visit Microsoft Researcher Emad Barsoum's [FER+ source data repository](https://github.com/ebarsoum/FERPlus)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# urllib is a built-in Python library to download files from URLs\n", - "\n", - "# Objective: retrieve the latest version of the ONNX Emotion FER+ model files from the\n", - "# ONNX Model Zoo and save it in the same folder as this tutorial\n", - "\n", - "import urllib.request\n", - "\n", - "onnx_model_url = \"https://www.cntk.ai/OnnxModels/emotion_ferplus/opset_7/emotion_ferplus.tar.gz\"\n", - "\n", - "urllib.request.urlretrieve(onnx_model_url, filename=\"emotion_ferplus.tar.gz\")\n", - "\n", - "# the ! magic command tells our jupyter notebook kernel to run the following line of \n", - "# code from the command line instead of the notebook kernel\n", - "\n", - "# We use tar and xvcf to unzip the files we just retrieved from the ONNX model zoo\n", - "\n", - "!tar xvzf emotion_ferplus.tar.gz" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy a VM with your ONNX model in the Cloud\n", - "\n", - "### Load Azure ML workspace\n", - "\n", - "We begin by instantiating a workspace object from the existing workspace created earlier in the configuration notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.location, ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Registering your model with Azure ML" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model_dir = \"emotion_ferplus\" # replace this with the location of your model files\n", - "\n", - "# leave as is if it's in the same folder as this notebook" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "\n", - "model = Model.register(model_path = model_dir + \"/\" + \"model.onnx\",\n", - " model_name = \"onnx_emotion\",\n", - " tags = {\"onnx\": \"demo\"},\n", - " description = \"FER+ emotion recognition CNN from ONNX Model Zoo\",\n", - " workspace = ws)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Optional: Displaying your registered models\n", - "\n", - "This step is not required, so feel free to skip it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "models = ws.models\n", - "for name, m in models.items():\n", - " print(\"Name:\", name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ONNX FER+ Model Methodology\n", - "\n", - "The image classification model we are using is pre-trained using Microsoft's deep learning cognitive toolkit, [CNTK](https://github.com/Microsoft/CNTK), from the [ONNX model zoo](http://github.com/onnx/models). The model zoo has many other models that can be deployed on cloud providers like AzureML without any additional training. To ensure that our cloud deployed model works, we use testing data from the well-known FER+ data set, provided as part of the [trained Emotion Recognition model](https://github.com/onnx/models/tree/master/emotion_ferplus) in the ONNX model zoo.\n", - "\n", - "The original Facial Emotion Recognition (FER) Dataset was released in 2013 by Pierre-Luc Carrier and Aaron Courville as part of a [Kaggle Competition](https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data), but some of the labels are not entirely appropriate for the expression. In the FER+ Dataset, each photo was evaluated by at least 10 croud sourced reviewers, creating a more accurate basis for ground truth. \n", - "\n", - "You can see the difference of label quality in the sample model input below. The FER labels are the first word below each image, and the FER+ labels are the second word below each image.\n", - "\n", - "![](https://raw.githubusercontent.com/Microsoft/FERPlus/master/FER+vsFER.png)\n", - "\n", - "***Input: Photos of cropped faces from FER+ Dataset***\n", - "\n", - "***Task: Classify each facial image into its appropriate emotions in the emotion table***\n", - "\n", - "``` emotion_table = {'neutral':0, 'happiness':1, 'surprise':2, 'sadness':3, 'anger':4, 'disgust':5, 'fear':6, 'contempt':7} ```\n", - "\n", - "***Output: Emotion prediction for input image***\n", - "\n", - "\n", - "Remember, once the application is deployed in Azure ML, you can use your own images as input for the model to classify." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# for images and plots in this notebook\n", - "import matplotlib.pyplot as plt \n", - "from IPython.display import Image\n", - "\n", - "# display images inline\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Model Description\n", - "\n", - "The FER+ model from the ONNX Model Zoo is summarized by the graphic below. You can see the entire workflow of our pre-trained model in the following image from Barsoum et. al's paper [\"Training Deep Networks for Facial Expression Recognition\n", - "with Crowd-Sourced Label Distribution\"](https://arxiv.org/pdf/1608.01041.pdf), with our (64 x 64) input images and our output probabilities for each of the labels." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](https://raw.githubusercontent.com/vinitra/FERPlus/master/emotion_model_img.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Specify our Score and Environment Files" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We are now going to deploy our ONNX Model on AML with inference in ONNX Runtime. We begin by writing a score.py file, which will help us run the model in our Azure ML virtual machine (VM), and then specify our environment by writing a yml file. You will also notice that we import the onnxruntime library to do runtime inference on our ONNX models (passing in input and evaluating out model's predicted output). More information on the API and commands can be found in the [ONNX Runtime documentation](https://aka.ms/onnxruntime).\n", - "\n", - "### Write Score File\n", - "\n", - "A score file is what tells our Azure cloud service what to do. After initializing our model using azureml.core.model, we start an ONNX Runtime inference session to evaluate the data passed in on our function calls." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import json\n", - "import numpy as np\n", - "import onnxruntime\n", - "import sys\n", - "import os\n", - "from azureml.core.model import Model\n", - "import time\n", - "\n", - "def init():\n", - " global session, input_name, output_name\n", - " model = Model.get_model_path(model_name = 'onnx_emotion')\n", - " session = onnxruntime.InferenceSession(model, None)\n", - " input_name = session.get_inputs()[0].name\n", - " output_name = session.get_outputs()[0].name \n", - " \n", - "def run(input_data):\n", - " '''Purpose: evaluate test input in Azure Cloud using onnxruntime.\n", - " We will call the run function later from our Jupyter Notebook \n", - " so our azure service can evaluate our model input in the cloud. '''\n", - "\n", - " try:\n", - " # load in our data, convert to readable format\n", - " data = np.array(json.loads(input_data)['data']).astype('float32')\n", - " \n", - " start = time.time()\n", - " r = session.run([output_name], {input_name : data})\n", - " end = time.time()\n", - " \n", - " result = emotion_map(postprocess(r[0]))\n", - " \n", - " result_dict = {\"result\": result,\n", - " \"time_in_sec\": [end - start]}\n", - " except Exception as e:\n", - " result_dict = {\"error\": str(e)}\n", - " \n", - " return json.dumps(result_dict)\n", - "\n", - "def emotion_map(classes, N=1):\n", - " \"\"\"Take the most probable labels (output of postprocess) and returns the \n", - " top N emotional labels that fit the picture.\"\"\"\n", - " \n", - " emotion_table = {'neutral':0, 'happiness':1, 'surprise':2, 'sadness':3, \n", - " 'anger':4, 'disgust':5, 'fear':6, 'contempt':7}\n", - " \n", - " emotion_keys = list(emotion_table.keys())\n", - " emotions = []\n", - " for i in range(N):\n", - " emotions.append(emotion_keys[classes[i]])\n", - " return emotions\n", - "\n", - "def softmax(x):\n", - " \"\"\"Compute softmax values (probabilities from 0 to 1) for each possible label.\"\"\"\n", - " x = x.reshape(-1)\n", - " e_x = np.exp(x - np.max(x))\n", - " return e_x / e_x.sum(axis=0)\n", - "\n", - "def postprocess(scores):\n", - " \"\"\"This function takes the scores generated by the network and \n", - " returns the class IDs in decreasing order of probability.\"\"\"\n", - " prob = softmax(scores)\n", - " prob = np.squeeze(prob)\n", - " classes = np.argsort(prob)[::-1]\n", - " return classes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Write Environment File" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(pip_packages=[\"numpy\", \"onnxruntime\", \"azureml-core\"])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create the Container Image\n", - "\n", - "This step will likely take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(execution_script = \"score.py\",\n", - " runtime = \"python\",\n", - " conda_file = \"myenv.yml\",\n", - " description = \"Emotion ONNX Runtime container\",\n", - " tags = {\"demo\": \"onnx\"})\n", - "\n", - "\n", - "image = ContainerImage.create(name = \"onnximage\",\n", - " # this is the model object\n", - " models = [model],\n", - " image_config = image_config,\n", - " workspace = ws)\n", - "\n", - "image.wait_for_creation(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case you need to debug your code, the next line of code accesses the log file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(image.image_build_log_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We're all done specifying what we want our virtual machine to do. Let's configure and deploy our container image.\n", - "\n", - "### Deploy the container image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, \n", - " memory_gb = 1, \n", - " tags = {'demo': 'onnx'}, \n", - " description = 'ONNX for emotion recognition model')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "\n", - "aci_service_name = 'onnx-demo-emotion'\n", - "print(\"Service\", aci_service_name)\n", - "\n", - "aci_service = Webservice.deploy_from_image(deployment_config = aciconfig,\n", - " image = image,\n", - " name = aci_service_name,\n", - " workspace = ws)\n", - "\n", - "aci_service.wait_for_deployment(True)\n", - "print(aci_service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following cell will likely take a few minutes to run as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if aci_service.state != 'Healthy':\n", - " # run this command for debugging.\n", - " print(aci_service.get_logs())\n", - "\n", - " # If your deployment fails, make sure to delete your aci_service before trying again!\n", - " # aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Success!\n", - "\n", - "If you've made it this far, you've deployed a working VM with a facial emotion recognition model running in the cloud using Azure ML. Congratulations!\n", - "\n", - "Let's see how well our model deals with our test images." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Testing and Evaluation\n", - "\n", - "### Useful Helper Functions\n", - "\n", - "We preprocess and postprocess our data (see score.py file) using the helper functions specified in the [ONNX FER+ Model page in the Model Zoo repository](https://github.com/onnx/models/tree/master/emotion_ferplus)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def emotion_map(classes, N=1):\n", - " \"\"\"Take the most probable labels (output of postprocess) and returns the \n", - " top N emotional labels that fit the picture.\"\"\"\n", - " \n", - " emotion_table = {'neutral':0, 'happiness':1, 'surprise':2, 'sadness':3, \n", - " 'anger':4, 'disgust':5, 'fear':6, 'contempt':7}\n", - " \n", - " emotion_keys = list(emotion_table.keys())\n", - " emotions = []\n", - " for i in range(N):\n", - " emotions.append(emotion_keys[classes[i]])\n", - " return emotions\n", - "\n", - "def softmax(x):\n", - " \"\"\"Compute softmax values (probabilities from 0 to 1) for each possible label.\"\"\"\n", - " x = x.reshape(-1)\n", - " e_x = np.exp(x - np.max(x))\n", - " return e_x / e_x.sum(axis=0)\n", - "\n", - "def postprocess(scores):\n", - " \"\"\"This function takes the scores generated by the network and \n", - " returns the class IDs in decreasing order of probability.\"\"\"\n", - " prob = softmax(scores)\n", - " prob = np.squeeze(prob)\n", - " classes = np.argsort(prob)[::-1]\n", - " return classes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load Test Data\n", - "\n", - "These are already in your directory from your ONNX model download (from the model zoo).\n", - "\n", - "Notice that our Model Zoo files have a .pb extension. This is because they are [protobuf files (Protocol Buffers)](https://developers.google.com/protocol-buffers/docs/pythontutorial), so we need to read in our data through our ONNX TensorProto reader into a format we can work with, like numerical arrays." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# to manipulate our arrays\n", - "import numpy as np \n", - "\n", - "# read in test data protobuf files included with the model\n", - "import onnx\n", - "from onnx import numpy_helper\n", - "\n", - "# to use parsers to read in our model/data\n", - "import json\n", - "import os\n", - "\n", - "test_inputs = []\n", - "test_outputs = []\n", - "\n", - "# read in 3 testing images from .pb files\n", - "test_data_size = 3\n", - "\n", - "for i in np.arange(test_data_size):\n", - " input_test_data = os.path.join(model_dir, 'test_data_set_{0}'.format(i), 'input_0.pb')\n", - " output_test_data = os.path.join(model_dir, 'test_data_set_{0}'.format(i), 'output_0.pb')\n", - " \n", - " # convert protobuf tensors to np arrays using the TensorProto reader from ONNX\n", - " tensor = onnx.TensorProto()\n", - " with open(input_test_data, 'rb') as f:\n", - " tensor.ParseFromString(f.read())\n", - " \n", - " input_data = numpy_helper.to_array(tensor)\n", - " test_inputs.append(input_data)\n", - " \n", - " with open(output_test_data, 'rb') as f:\n", - " tensor.ParseFromString(f.read())\n", - " \n", - " output_data = numpy_helper.to_array(tensor)\n", - " output_processed = emotion_map(postprocess(output_data[0]))[0]\n", - " test_outputs.append(output_processed)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "c3f2f57c-7454-4d3e-b38d-b0946cf066ea" - } - }, - "source": [ - "### Show some sample images\n", - "We use `matplotlib` to plot 3 test images from the dataset." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbpresent": { - "id": "396d478b-34aa-4afa-9898-cdce8222a516" - } - }, - "outputs": [], - "source": [ - "plt.figure(figsize = (20, 20))\n", - "for test_image in np.arange(3):\n", - " test_inputs[test_image].reshape(1, 64, 64)\n", - " plt.subplot(1, 8, test_image+1)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " plt.text(x = 10, y = -10, s = test_outputs[test_image], fontsize = 18)\n", - " plt.imshow(test_inputs[test_image].reshape(64, 64), cmap = plt.cm.gray)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run evaluation / prediction" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure(figsize = (16, 6), frameon=False)\n", - "plt.subplot(1, 8, 1)\n", - "\n", - "plt.text(x = 0, y = -30, s = \"True Label: \", fontsize = 13, color = 'black')\n", - "plt.text(x = 0, y = -20, s = \"Result: \", fontsize = 13, color = 'black')\n", - "plt.text(x = 0, y = -10, s = \"Inference Time: \", fontsize = 13, color = 'black')\n", - "plt.text(x = 3, y = 14, s = \"Model Input\", fontsize = 12, color = 'black')\n", - "plt.text(x = 6, y = 18, s = \"(64 x 64)\", fontsize = 12, color = 'black')\n", - "plt.imshow(np.ones((28,28)), cmap=plt.cm.Greys) \n", - "\n", - "\n", - "for i in np.arange(test_data_size):\n", - " \n", - " input_data = json.dumps({'data': test_inputs[i].tolist()})\n", - "\n", - " # predict using the deployed model\n", - " r = json.loads(aci_service.run(input_data))\n", - " \n", - " if \"error\" in r:\n", - " print(r['error'])\n", - " break\n", - " \n", - " result = r['result'][0]\n", - " time_ms = np.round(r['time_in_sec'][0] * 1000, 2)\n", - " \n", - " ground_truth = test_outputs[i]\n", - " \n", - " # compare actual value vs. the predicted values:\n", - " plt.subplot(1, 8, i+2)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - "\n", - " # use different color for misclassified sample\n", - " font_color = 'red' if ground_truth != result else 'black'\n", - " clr_map = plt.cm.Greys if ground_truth != result else plt.cm.gray\n", - "\n", - " # ground truth labels are in blue\n", - " plt.text(x = 10, y = -70, s = ground_truth, fontsize = 18, color = 'blue')\n", - " \n", - " # predictions are in black if correct, red if incorrect\n", - " plt.text(x = 10, y = -45, s = result, fontsize = 18, color = font_color)\n", - " plt.text(x = 5, y = -22, s = str(time_ms) + ' ms', fontsize = 14, color = font_color)\n", - "\n", - " \n", - " plt.imshow(test_inputs[i].reshape(64, 64), cmap = clr_map)\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Try classifying your own images!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Preprocessing functions take your image and format it so it can be passed\n", - "# as input into our ONNX model\n", - "\n", - "import cv2\n", - "\n", - "def rgb2gray(rgb):\n", - " \"\"\"Convert the input image into grayscale\"\"\"\n", - " return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])\n", - "\n", - "def resize_img(img):\n", - " \"\"\"Resize image to MNIST model input dimensions\"\"\"\n", - " img = cv2.resize(img, dsize=(64, 64), interpolation=cv2.INTER_AREA)\n", - " img.resize((1, 1, 64, 64))\n", - " return img\n", - "\n", - "def preprocess(img):\n", - " \"\"\"Resize input images and convert them to grayscale.\"\"\"\n", - " if img.shape == (64, 64):\n", - " img.resize((1, 1, 64, 64))\n", - " return img\n", - " \n", - " grayscale = rgb2gray(img)\n", - " processed_img = resize_img(grayscale)\n", - " return processed_img" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Replace the following string with your own path/test image\n", - "# Make sure your image is square and the dimensions are equal (i.e. 100 * 100 pixels or 28 * 28 pixels)\n", - "\n", - "# Any PNG or JPG image file should work\n", - "# Make sure to include the entire path with // instead of /\n", - "\n", - "# e.g. your_test_image = \"C:/Users/vinitra.swamy/Pictures/face.png\"\n", - "\n", - "your_test_image = \"\"\n", - "\n", - "import matplotlib.image as mpimg\n", - "\n", - "if your_test_image != \"\":\n", - " img = mpimg.imread(your_test_image)\n", - " plt.subplot(1,3,1)\n", - " plt.imshow(img, cmap = plt.cm.Greys)\n", - " print(\"Old Dimensions: \", img.shape)\n", - " img = preprocess(img)\n", - " print(\"New Dimensions: \", img.shape)\n", - "else:\n", - " img = None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if img is None:\n", - " print(\"Add the path for your image data.\")\n", - "else:\n", - " input_data = json.dumps({'data': img.tolist()})\n", - "\n", - " try:\n", - " r = json.loads(aci_service.run(input_data))\n", - " result = r['result'][0]\n", - " time_ms = np.round(r['time_in_sec'][0] * 1000, 2)\n", - " except Exception as e:\n", - " print(str(e))\n", - "\n", - " plt.figure(figsize = (16, 6))\n", - " plt.subplot(1,8,1)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " plt.text(x = -10, y = -40, s = \"Model prediction: \", fontsize = 14)\n", - " plt.text(x = -10, y = -25, s = \"Inference time: \", fontsize = 14)\n", - " plt.text(x = 100, y = -40, s = str(result), fontsize = 14)\n", - " plt.text(x = 100, y = -25, s = str(time_ms) + \" ms\", fontsize = 14)\n", - " plt.text(x = -10, y = -10, s = \"Model Input image: \", fontsize = 14)\n", - " plt.imshow(img.reshape((64, 64)), cmap = plt.cm.gray) \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# remember to delete your service after you are done using it!\n", - "\n", - "# aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Conclusion\n", - "\n", - "Congratulations!\n", - "\n", - "In this tutorial, you have:\n", - "- familiarized yourself with ONNX Runtime inference and the pretrained models in the ONNX model zoo\n", - "- understood a state-of-the-art convolutional neural net image classification model (FER+ in ONNX) and deployed it in the Azure ML cloud\n", - "- ensured that your deep learning model is working perfectly (in the cloud) on test data, and checked it against some of your own!\n", - "\n", - "Next steps:\n", - "- If you have not already, check out another interesting ONNX/AML application that lets you set up a state-of-the-art [handwritten image classification model (MNIST)](https://github.com/Azure/MachineLearningNotebooks/tree/master/onnx/onnx-inference-mnist.ipynb) in the cloud! This tutorial deploys a pre-trained ONNX Computer Vision model for handwritten digit classification in an Azure ML virtual machine.\n", - "- Keep an eye out for an updated version of this tutorial that uses ONNX Runtime GPU.\n", - "- Contribute to our [open source ONNX repository on github](http://github.com/onnx/onnx) and/or add to our [ONNX model zoo](http://github.com/onnx/models)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "viswamy" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "vinitra.swamy" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/onnx/onnx-inference-mnist-deploy.ipynb b/onnx/onnx-inference-mnist-deploy.ipynb deleted file mode 100644 index 10eaf316..00000000 --- a/onnx/onnx-inference-mnist-deploy.ipynb +++ /dev/null @@ -1,792 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Handwritten Digit Classification (MNIST) using ONNX Runtime on Azure ML\n", - "\n", - "This example shows how to deploy an image classification neural network using the Modified National Institute of Standards and Technology ([MNIST](http://yann.lecun.com/exdb/mnist/)) dataset and Open Neural Network eXchange format ([ONNX](http://aka.ms/onnxdocarticle)) on the Azure Machine Learning platform. MNIST is a popular dataset consisting of 70,000 grayscale images. Each image is a handwritten digit of 28x28 pixels, representing number from 0 to 9. This tutorial will show you how to deploy a MNIST model from the [ONNX model zoo](https://github.com/onnx/models), use it to make predictions using ONNX Runtime Inference, and deploy it as a web service in Azure.\n", - "\n", - "Throughout this tutorial, we will be referring to ONNX, a neural network exchange format used to represent deep learning models. With ONNX, AI developers can more easily move models between state-of-the-art tools (CNTK, PyTorch, Caffe, MXNet, TensorFlow) and choose the combination that is best for them. ONNX is developed and supported by a community of partners including Microsoft AI, Facebook, and Amazon. For more information, explore the [ONNX website](http://onnx.ai) and [open source files](https://github.com/onnx).\n", - "\n", - "[ONNX Runtime](https://aka.ms/onnxruntime-python) is the runtime engine that enables evaluation of trained machine learning (Traditional ML and Deep Learning) models with high performance and low resource utilization.\n", - "\n", - "#### Tutorial Objectives:\n", - "\n", - "- Describe the MNIST dataset and pretrained Convolutional Neural Net ONNX model, stored in the ONNX model zoo.\n", - "- Deploy and run the pretrained MNIST ONNX model on an Azure Machine Learning instance\n", - "- Predict labels for test set data points in the cloud using ONNX Runtime and Azure ML" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "\n", - "### 1. Install Azure ML SDK and create a new workspace\n", - "Please follow [Azure ML configuration notebook](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) to set up your environment.\n", - "\n", - "### 2. Install additional packages needed for this tutorial notebook\n", - "You need to install the popular plotting library `matplotlib`, the image manipulation library `opencv`, and the `onnx` library in the conda environment where Azure Maching Learning SDK is installed. \n", - "\n", - "```sh\n", - "(myenv) $ pip install matplotlib onnx opencv-python\n", - "```\n", - "\n", - "**Debugging tip**: Make sure that you run the \"jupyter notebook\" command to launch this notebook after activating your virtual environment. Choose the respective Python kernel for your new virtual environment using the `Kernel > Change Kernel` menu above. If you have completed the steps correctly, the upper right corner of your screen should state `Python [conda env:myenv]` instead of `Python [default]`.\n", - "\n", - "### 3. Download sample data and pre-trained ONNX model from ONNX Model Zoo.\n", - "\n", - "In the following lines of code, we download [the trained ONNX MNIST model and corresponding test data](https://github.com/onnx/models/tree/master/mnist) and place them in the same folder as this tutorial notebook. For more information about the MNIST dataset, please visit [Yan LeCun's website](http://yann.lecun.com/exdb/mnist/)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# urllib is a built-in Python library to download files from URLs\n", - "\n", - "# Objective: retrieve the latest version of the ONNX MNIST model files from the\n", - "# ONNX Model Zoo and save it in the same folder as this tutorial\n", - "\n", - "import urllib.request\n", - "\n", - "onnx_model_url = \"https://www.cntk.ai/OnnxModels/mnist/opset_7/mnist.tar.gz\"\n", - "\n", - "urllib.request.urlretrieve(onnx_model_url, filename=\"mnist.tar.gz\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# the ! magic command tells our jupyter notebook kernel to run the following line of \n", - "# code from the command line instead of the notebook kernel\n", - "\n", - "# We use tar and xvcf to unzip the files we just retrieved from the ONNX model zoo\n", - "\n", - "!tar xvzf mnist.tar.gz" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy a VM with your ONNX model in the Cloud\n", - "\n", - "### Load Azure ML workspace\n", - "\n", - "We begin by instantiating a workspace object from the existing workspace created earlier in the configuration notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Registering your model with Azure ML" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model_dir = \"mnist\" # replace this with the location of your model files\n", - "\n", - "# leave as is if it's in the same folder as this notebook" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "\n", - "model = Model.register(workspace = ws,\n", - " model_path = model_dir + \"/\" + \"model.onnx\",\n", - " model_name = \"mnist_1\",\n", - " tags = {\"onnx\": \"demo\"},\n", - " description = \"MNIST image classification CNN from ONNX Model Zoo\",)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Optional: Displaying your registered models\n", - "\n", - "This step is not required, so feel free to skip it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "models = ws.models\n", - "for name, m in models.items():\n", - " print(\"Name:\", name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "c3f2f57c-7454-4d3e-b38d-b0946cf066ea" - } - }, - "source": [ - "### ONNX MNIST Model Methodology\n", - "\n", - "The image classification model we are using is pre-trained using Microsoft's deep learning cognitive toolkit, [CNTK](https://github.com/Microsoft/CNTK), from the [ONNX model zoo](http://github.com/onnx/models). The model zoo has many other models that can be deployed on cloud providers like AzureML without any additional training. To ensure that our cloud deployed model works, we use testing data from the famous MNIST data set, provided as part of the [trained MNIST model](https://github.com/onnx/models/tree/master/mnist) in the ONNX model zoo.\n", - "\n", - "***Input: Handwritten Images from MNIST Dataset***\n", - "\n", - "***Task: Classify each MNIST image into an appropriate digit***\n", - "\n", - "***Output: Digit prediction for input image***\n", - "\n", - "Run the cell below to look at some of the sample images from the MNIST dataset that we used to train this ONNX model. Remember, once the application is deployed in Azure ML, you can use your own images as input for the model to classify!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# for images and plots in this notebook\n", - "import matplotlib.pyplot as plt \n", - "from IPython.display import Image\n", - "\n", - "# display images inline\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Image(url=\"http://3.bp.blogspot.com/_UpN7DfJA0j4/TJtUBWPk0SI/AAAAAAAAABY/oWPMtmqJn3k/s1600/mnist_originals.png\", width=200, height=200)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Specify our Score and Environment Files" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We are now going to deploy our ONNX Model on AML with inference in ONNX Runtime. We begin by writing a score.py file, which will help us run the model in our Azure ML virtual machine (VM), and then specify our environment by writing a yml file. You will also notice that we import the onnxruntime library to do runtime inference on our ONNX models (passing in input and evaluating out model's predicted output). More information on the API and commands can be found in the [ONNX Runtime documentation](https://aka.ms/onnxruntime).\n", - "\n", - "### Write Score File\n", - "\n", - "A score file is what tells our Azure cloud service what to do. After initializing our model using azureml.core.model, we start an ONNX Runtime inference session to evaluate the data passed in on our function calls." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import json\n", - "import numpy as np\n", - "import onnxruntime\n", - "import sys\n", - "import os\n", - "from azureml.core.model import Model\n", - "import time\n", - "\n", - "\n", - "def init():\n", - " global session, input_name, output_name\n", - " model = Model.get_model_path(model_name = 'mnist_1')\n", - " session = onnxruntime.InferenceSession(model, None)\n", - " input_name = session.get_inputs()[0].name\n", - " output_name = session.get_outputs()[0].name \n", - " \n", - "def run(input_data):\n", - " '''Purpose: evaluate test input in Azure Cloud using onnxruntime.\n", - " We will call the run function later from our Jupyter Notebook \n", - " so our azure service can evaluate our model input in the cloud. '''\n", - "\n", - " try:\n", - " # load in our data, convert to readable format\n", - " data = np.array(json.loads(input_data)['data']).astype('float32')\n", - "\n", - " start = time.time()\n", - " r = session.run([output_name], {input_name: data})[0]\n", - " end = time.time()\n", - " result = choose_class(r[0])\n", - " result_dict = {\"result\": [result],\n", - " \"time_in_sec\": [end - start]}\n", - " except Exception as e:\n", - " result_dict = {\"error\": str(e)}\n", - " \n", - " return json.dumps(result_dict)\n", - "\n", - "def choose_class(result_prob):\n", - " \"\"\"We use argmax to determine the right label to choose from our output\"\"\"\n", - " return int(np.argmax(result_prob, axis=0))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Write Environment File\n", - "\n", - "This step creates a YAML environment file that specifies which dependencies we would like to see in our Linux Virtual Machine." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(pip_packages=[\"numpy\", \"onnxruntime\", \"azureml-core\"])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create the Container Image\n", - "This step will likely take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(execution_script = \"score.py\",\n", - " runtime = \"python\",\n", - " conda_file = \"myenv.yml\",\n", - " description = \"MNIST ONNX Runtime container\",\n", - " tags = {\"demo\": \"onnx\"}) \n", - "\n", - "\n", - "image = ContainerImage.create(name = \"onnximage\",\n", - " # this is the model object\n", - " models = [model],\n", - " image_config = image_config,\n", - " workspace = ws)\n", - "\n", - "image.wait_for_creation(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case you need to debug your code, the next line of code accesses the log file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(image.image_build_log_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We're all done specifying what we want our virtual machine to do. Let's configure and deploy our container image.\n", - "\n", - "### Deploy the container image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, \n", - " memory_gb = 1, \n", - " tags = {'demo': 'onnx'}, \n", - " description = 'ONNX for mnist model')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following cell will likely take a few minutes to run as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "\n", - "aci_service_name = 'onnx-demo-mnist'\n", - "print(\"Service\", aci_service_name)\n", - "\n", - "aci_service = Webservice.deploy_from_image(deployment_config = aciconfig,\n", - " image = image,\n", - " name = aci_service_name,\n", - " workspace = ws)\n", - "\n", - "aci_service.wait_for_deployment(True)\n", - "print(aci_service.state)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if aci_service.state != 'Healthy':\n", - " # run this command for debugging.\n", - " print(aci_service.get_logs())\n", - "\n", - " # If your deployment fails, make sure to delete your aci_service or rename your service before trying again!\n", - " # aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Success!\n", - "\n", - "If you've made it this far, you've deployed a working VM with a handwritten digit classifier running in the cloud using Azure ML. Congratulations!\n", - "\n", - "Let's see how well our model deals with our test images." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Testing and Evaluation\n", - "\n", - "### Load Test Data\n", - "\n", - "These are already in your directory from your ONNX model download (from the model zoo).\n", - "\n", - "Notice that our Model Zoo files have a .pb extension. This is because they are [protobuf files (Protocol Buffers)](https://developers.google.com/protocol-buffers/docs/pythontutorial), so we need to read in our data through our ONNX TensorProto reader into a format we can work with, like numerical arrays." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# to manipulate our arrays\n", - "import numpy as np \n", - "\n", - "# read in test data protobuf files included with the model\n", - "import onnx\n", - "from onnx import numpy_helper\n", - "\n", - "# to use parsers to read in our model/data\n", - "import json\n", - "import os\n", - "\n", - "test_inputs = []\n", - "test_outputs = []\n", - "\n", - "# read in 3 testing images from .pb files\n", - "test_data_size = 3\n", - "\n", - "for i in np.arange(test_data_size):\n", - " input_test_data = os.path.join(model_dir, 'test_data_set_{0}'.format(i), 'input_0.pb')\n", - " output_test_data = os.path.join(model_dir, 'test_data_set_{0}'.format(i), 'output_0.pb')\n", - " \n", - " # convert protobuf tensors to np arrays using the TensorProto reader from ONNX\n", - " tensor = onnx.TensorProto()\n", - " with open(input_test_data, 'rb') as f:\n", - " tensor.ParseFromString(f.read())\n", - " \n", - " input_data = numpy_helper.to_array(tensor)\n", - " test_inputs.append(input_data)\n", - " \n", - " with open(output_test_data, 'rb') as f:\n", - " tensor.ParseFromString(f.read())\n", - " \n", - " output_data = numpy_helper.to_array(tensor)\n", - " test_outputs.append(output_data)\n", - " \n", - "if len(test_inputs) == test_data_size:\n", - " print('Test data loaded successfully.')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "c3f2f57c-7454-4d3e-b38d-b0946cf066ea" - } - }, - "source": [ - "### Show some sample images\n", - "We use `matplotlib` to plot 3 test images from the dataset." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbpresent": { - "id": "396d478b-34aa-4afa-9898-cdce8222a516" - } - }, - "outputs": [], - "source": [ - "plt.figure(figsize = (16, 6))\n", - "for test_image in np.arange(3):\n", - " plt.subplot(1, 15, test_image+1)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " plt.imshow(test_inputs[test_image].reshape(28, 28), cmap = plt.cm.Greys)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run evaluation / prediction" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure(figsize = (16, 6), frameon=False)\n", - "plt.subplot(1, 8, 1)\n", - "\n", - "plt.text(x = 0, y = -30, s = \"True Label: \", fontsize = 13, color = 'black')\n", - "plt.text(x = 0, y = -20, s = \"Result: \", fontsize = 13, color = 'black')\n", - "plt.text(x = 0, y = -10, s = \"Inference Time: \", fontsize = 13, color = 'black')\n", - "plt.text(x = 3, y = 14, s = \"Model Input\", fontsize = 12, color = 'black')\n", - "plt.text(x = 6, y = 18, s = \"(28 x 28)\", fontsize = 12, color = 'black')\n", - "plt.imshow(np.ones((28,28)), cmap=plt.cm.Greys) \n", - "\n", - "\n", - "for i in np.arange(test_data_size):\n", - " \n", - " input_data = json.dumps({'data': test_inputs[i].tolist()})\n", - " \n", - " # predict using the deployed model\n", - " r = json.loads(aci_service.run(input_data))\n", - " \n", - " if \"error\" in r:\n", - " print(r['error'])\n", - " break\n", - " \n", - " result = r['result'][0]\n", - " time_ms = np.round(r['time_in_sec'][0] * 1000, 2)\n", - " \n", - " ground_truth = int(np.argmax(test_outputs[i]))\n", - " \n", - " # compare actual value vs. the predicted values:\n", - " plt.subplot(1, 8, i+2)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - "\n", - " # use different color for misclassified sample\n", - " font_color = 'red' if ground_truth != result else 'black'\n", - " clr_map = plt.cm.gray if ground_truth != result else plt.cm.Greys\n", - "\n", - " # ground truth labels are in blue\n", - " plt.text(x = 10, y = -30, s = ground_truth, fontsize = 18, color = 'blue')\n", - " \n", - " # predictions are in black if correct, red if incorrect\n", - " plt.text(x = 10, y = -20, s = result, fontsize = 18, color = font_color)\n", - " plt.text(x = 5, y = -10, s = str(time_ms) + ' ms', fontsize = 14, color = font_color)\n", - "\n", - " \n", - " plt.imshow(test_inputs[i].reshape(28, 28), cmap = clr_map)\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Try classifying your own images!\n", - "\n", - "Create your own handwritten image and pass it into the model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Preprocessing functions take your image and format it so it can be passed\n", - "# as input into our ONNX model\n", - "\n", - "import cv2\n", - "\n", - "def rgb2gray(rgb):\n", - " \"\"\"Convert the input image into grayscale\"\"\"\n", - " return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])\n", - "\n", - "def resize_img(img):\n", - " \"\"\"Resize image to MNIST model input dimensions\"\"\"\n", - " img = cv2.resize(img, dsize=(28, 28), interpolation=cv2.INTER_AREA)\n", - " img.resize((1, 1, 28, 28))\n", - " return img\n", - "\n", - "def preprocess(img):\n", - " \"\"\"Resize input images and convert them to grayscale.\"\"\"\n", - " if img.shape == (28, 28):\n", - " img.resize((1, 1, 28, 28))\n", - " return img\n", - " \n", - " grayscale = rgb2gray(img)\n", - " processed_img = resize_img(grayscale)\n", - " return processed_img" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Replace this string with your own path/test image\n", - "# Make sure your image is square and the dimensions are equal (i.e. 100 * 100 pixels or 28 * 28 pixels)\n", - "\n", - "# Any PNG or JPG image file should work\n", - "\n", - "your_test_image = \"\"\n", - "\n", - "# e.g. your_test_image = \"C:/Users/vinitra.swamy/Pictures/handwritten_digit.png\"\n", - "\n", - "import matplotlib.image as mpimg\n", - "\n", - "if your_test_image != \"\":\n", - " img = mpimg.imread(your_test_image)\n", - " plt.subplot(1,3,1)\n", - " plt.imshow(img, cmap = plt.cm.Greys)\n", - " print(\"Old Dimensions: \", img.shape)\n", - " img = preprocess(img)\n", - " print(\"New Dimensions: \", img.shape)\n", - "else:\n", - " img = None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if img is None:\n", - " print(\"Add the path for your image data.\")\n", - "else:\n", - " input_data = json.dumps({'data': img.tolist()})\n", - "\n", - " try:\n", - " r = json.loads(aci_service.run(input_data))\n", - " result = r['result'][0]\n", - " time_ms = np.round(r['time_in_sec'][0] * 1000, 2)\n", - " except Exception as e:\n", - " print(str(e))\n", - "\n", - " plt.figure(figsize = (16, 6))\n", - " plt.subplot(1, 15,1)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " plt.text(x = -100, y = -20, s = \"Model prediction: \", fontsize = 14)\n", - " plt.text(x = -100, y = -10, s = \"Inference time: \", fontsize = 14)\n", - " plt.text(x = 0, y = -20, s = str(result), fontsize = 14)\n", - " plt.text(x = 0, y = -10, s = str(time_ms) + \" ms\", fontsize = 14)\n", - " plt.text(x = -100, y = 14, s = \"Input image: \", fontsize = 14)\n", - " plt.imshow(img.reshape(28, 28), cmap = plt.cm.gray) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Optional: How does our ONNX MNIST model work? \n", - "#### A brief explanation of Convolutional Neural Networks\n", - "\n", - "A [convolutional neural network](https://en.wikipedia.org/wiki/Convolutional_neural_network) (CNN, or ConvNet) is a type of [feed-forward](https://en.wikipedia.org/wiki/Feedforward_neural_network) artificial neural network made up of neurons that have learnable weights and biases. The CNNs take advantage of the spatial nature of the data. In nature, we perceive different objects by their shapes, size and colors. For example, objects in a natural scene are typically edges, corners/vertices (defined by two of more edges), color patches etc. These primitives are often identified using different detectors (e.g., edge detection, color detector) or combination of detectors interacting to facilitate image interpretation (object classification, region of interest detection, scene description etc.) in real world vision related tasks. These detectors are also known as filters. Convolution is a mathematical operator that takes an image and a filter as input and produces a filtered output (representing say edges, corners, or colors in the input image). \n", - "\n", - "Historically, these filters are a set of weights that were often hand crafted or modeled with mathematical functions (e.g., [Gaussian](https://en.wikipedia.org/wiki/Gaussian_filter) / [Laplacian](http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm) / [Canny](https://en.wikipedia.org/wiki/Canny_edge_detector) filter). The filter outputs are mapped through non-linear activation functions mimicking human brain cells called [neurons](https://en.wikipedia.org/wiki/Neuron). Popular deep CNNs or ConvNets (such as [AlexNet](https://en.wikipedia.org/wiki/AlexNet), [VGG](https://arxiv.org/abs/1409.1556), [Inception](http://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Szegedy_Going_Deeper_With_2015_CVPR_paper.pdf), [ResNet](https://arxiv.org/pdf/1512.03385v1.pdf)) that are used for various [computer vision](https://en.wikipedia.org/wiki/Computer_vision) tasks have many of these architectural primitives (inspired from biology). \n", - "\n", - "### Convolution Layer\n", - "\n", - "A convolution layer is a set of filters. Each filter is defined by a weight (**W**) matrix, and bias ($b$).\n", - "\n", - "![](https://www.cntk.ai/jup/cntk103d_filterset_v2.png)\n", - "\n", - "These filters are scanned across the image performing the dot product between the weights and corresponding input value ($x$). The bias value is added to the output of the dot product and the resulting sum is optionally mapped through an activation function. This process is illustrated in the following animation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Image(url=\"https://www.cntk.ai/jup/cntk103d_conv2d_final.gif\", width= 200)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Model Description\n", - "\n", - "The MNIST model from the ONNX Model Zoo uses maxpooling to update the weights in its convolutions, summarized by the graphic below. You can see the entire workflow of our pre-trained model in the following image, with our input images and our output probabilities of each of our 10 labels. If you're interested in exploring the logic behind creating a Deep Learning model further, please look at the [training tutorial for our ONNX MNIST Convolutional Neural Network](https://github.com/Microsoft/CNTK/blob/master/Tutorials/CNTK_103D_MNIST_ConvolutionalNeuralNetwork.ipynb). " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Max-Pooling for Convolutional Neural Nets\n", - "\n", - "![](http://www.cntk.ai/jup/c103d_max_pooling.gif)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Pre-Trained Model Architecture\n", - "\n", - "![](http://www.cntk.ai/jup/conv103d_mnist-conv-mp.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# remember to delete your service after you are done using it!\n", - "\n", - "# aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Conclusion\n", - "\n", - "Congratulations!\n", - "\n", - "In this tutorial, you have:\n", - "- familiarized yourself with ONNX Runtime inference and the pretrained models in the ONNX model zoo\n", - "- understood a state-of-the-art convolutional neural net image classification model (MNIST in ONNX) and deployed it in Azure ML cloud\n", - "- ensured that your deep learning model is working perfectly (in the cloud) on test data, and checked it against some of your own!\n", - "\n", - "Next steps:\n", - "- Check out another interesting application based on a Microsoft Research computer vision paper that lets you set up a [facial emotion recognition model](https://github.com/Azure/MachineLearningNotebooks/tree/master/onnx/onnx-inference-emotion-recognition.ipynb) in the cloud! This tutorial deploys a pre-trained ONNX Computer Vision model in an Azure ML virtual machine.\n", - "- Contribute to our [open source ONNX repository on github](http://github.com/onnx/onnx) and/or add to our [ONNX model zoo](http://github.com/onnx/models)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "viswamy" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "vinitra.swamy" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/onnx/onnx-modelzoo-aml-deploy-resnet50.ipynb b/onnx/onnx-modelzoo-aml-deploy-resnet50.ipynb deleted file mode 100644 index 1d587a6d..00000000 --- a/onnx/onnx-modelzoo-aml-deploy-resnet50.ipynb +++ /dev/null @@ -1,419 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# ResNet50 Image Classification using ONNX and AzureML\n", - "\n", - "This example shows how to deploy the ResNet50 ONNX model as a web service using Azure Machine Learning services and the ONNX Runtime.\n", - "\n", - "## What is ONNX\n", - "ONNX is an open format for representing machine learning and deep learning models. ONNX enables open and interoperable AI by enabling data scientists and developers to use the tools of their choice without worrying about lock-in and flexibility to deploy to a variety of platforms. ONNX is developed and supported by a community of partners including Microsoft, Facebook, and Amazon. For more information, explore the [ONNX website](http://onnx.ai).\n", - "\n", - "## ResNet50 Details\n", - "ResNet classifies the major object in an input image into a set of 1000 pre-defined classes. For more information about the ResNet50 model and how it was created can be found on the [ONNX Model Zoo github](https://github.com/onnx/models/tree/master/models/image_classification/resnet). " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "\n", - "To make the best use of your time, make sure you have done the following:\n", - "\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", - "* Go through the [00.configuration.ipynb](../00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (config.json)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Download pre-trained ONNX model from ONNX Model Zoo.\n", - "\n", - "Download the [ResNet50v2 model and test data](https://s3.amazonaws.com/onnx-model-zoo/resnet/resnet50v2/resnet50v2.tar.gz) and extract it in the same folder as this tutorial notebook.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import urllib.request\n", - "\n", - "onnx_model_url = \"https://s3.amazonaws.com/onnx-model-zoo/resnet/resnet50v2/resnet50v2.tar.gz\"\n", - "urllib.request.urlretrieve(onnx_model_url, filename=\"resnet50v2.tar.gz\")\n", - "\n", - "!tar xvzf resnet50v2.tar.gz" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploying as a web service with Azure ML" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load your Azure ML workspace\n", - "\n", - "We begin by instantiating a workspace object from the existing workspace created earlier in the configuration notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.location, ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register your model with Azure ML\n", - "\n", - "Now we upload the model and register it in the workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "\n", - "model = Model.register(model_path = \"resnet50v2/resnet50v2.onnx\",\n", - " model_name = \"resnet50v2\",\n", - " tags = {\"onnx\": \"demo\"},\n", - " description = \"ResNet50v2 from ONNX Model Zoo\",\n", - " workspace = ws)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Displaying your registered models\n", - "\n", - "You can optionally list out all the models that you have registered in this workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "models = ws.models\n", - "for name, m in models.items():\n", - " print(\"Name:\", name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Write scoring file\n", - "\n", - "We are now going to deploy our ONNX model on Azure ML using the ONNX Runtime. We begin by writing a score.py file that will be invoked by the web service call. The `init()` function is called once when the container is started so we load the model using the ONNX Runtime into a global session object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import json\n", - "import time\n", - "import sys\n", - "import os\n", - "from azureml.core.model import Model\n", - "import numpy as np # we're going to use numpy to process input and output data\n", - "import onnxruntime # to inference ONNX models, we use the ONNX Runtime\n", - "\n", - "def softmax(x):\n", - " x = x.reshape(-1)\n", - " e_x = np.exp(x - np.max(x))\n", - " return e_x / e_x.sum(axis=0)\n", - "\n", - "def init():\n", - " global session\n", - " model = Model.get_model_path(model_name = 'resnet50v2')\n", - " session = onnxruntime.InferenceSession(model, None)\n", - "\n", - "def preprocess(input_data_json):\n", - " # convert the JSON data into the tensor input\n", - " img_data = np.array(json.loads(input_data_json)['data']).astype('float32')\n", - " \n", - " #normalize\n", - " mean_vec = np.array([0.485, 0.456, 0.406])\n", - " stddev_vec = np.array([0.229, 0.224, 0.225])\n", - " norm_img_data = np.zeros(img_data.shape).astype('float32')\n", - " for i in range(img_data.shape[0]):\n", - " norm_img_data[i,:,:] = (img_data[i,:,:]/255 - mean_vec[i]) / stddev_vec[i]\n", - "\n", - " return norm_img_data\n", - "\n", - "def postprocess(result):\n", - " return softmax(np.array(result)).tolist()\n", - "\n", - "def run(input_data_json):\n", - " try:\n", - " start = time.time()\n", - " # load in our data which is expected as NCHW 224x224 image\n", - " input_data = preprocess(input_data_json)\n", - " input_name = session.get_inputs()[0].name # get the id of the first input of the model \n", - " result = session.run([], {input_name: input_data})\n", - " end = time.time() # stop timer\n", - " return {\"result\": postprocess(result),\n", - " \"time\": end - start}\n", - " except Exception as e:\n", - " result = str(e)\n", - " return {\"error\": result}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create container image" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First we create a YAML file that specifies which dependencies we would like to see in our container." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(pip_packages=[\"numpy\",\"onnxruntime\",\"azureml-core\"])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we have Azure ML create the container. This step will likely take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(execution_script = \"score.py\",\n", - " runtime = \"python\",\n", - " conda_file = \"myenv.yml\",\n", - " description = \"ONNX ResNet50 Demo\",\n", - " tags = {\"demo\": \"onnx\"}\n", - " )\n", - "\n", - "\n", - "image = ContainerImage.create(name = \"onnxresnet50v2\",\n", - " models = [model],\n", - " image_config = image_config,\n", - " workspace = ws)\n", - "\n", - "image.wait_for_creation(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case you need to debug your code, the next line of code accesses the log file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(image.image_build_log_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We're all set! Let's get our model chugging.\n", - "\n", - "### Deploy the container image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, \n", - " memory_gb = 1, \n", - " tags = {'demo': 'onnx'}, \n", - " description = 'web service for ResNet50 ONNX model')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following cell will likely take a few minutes to run as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "from random import randint\n", - "\n", - "aci_service_name = 'onnx-demo-resnet50'+str(randint(0,100))\n", - "print(\"Service\", aci_service_name)\n", - "\n", - "aci_service = Webservice.deploy_from_image(deployment_config = aciconfig,\n", - " image = image,\n", - " name = aci_service_name,\n", - " workspace = ws)\n", - "\n", - "aci_service.wait_for_deployment(True)\n", - "print(aci_service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case the deployment fails, you can check the logs. Make sure to delete your aci_service before trying again." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if aci_service.state != 'Healthy':\n", - " # run this command for debugging.\n", - " print(aci_service.get_logs())\n", - " aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Success!\n", - "\n", - "If you've made it this far, you've deployed a working web service that does image classification using an ONNX model. You can get the URL for the webservice with the code below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(aci_service.scoring_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When you are eventually done using the web service, remember to delete it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#aci_service.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "onnx" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/onnx/onnx-train-pytorch-aml-deploy-mnist.ipynb b/onnx/onnx-train-pytorch-aml-deploy-mnist.ipynb deleted file mode 100644 index df3447d9..00000000 --- a/onnx/onnx-train-pytorch-aml-deploy-mnist.ipynb +++ /dev/null @@ -1,665 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# MNIST Handwritten Digit Classification using ONNX and AzureML\n", - "\n", - "This example shows how to train a model on the MNIST data using PyTorch, save it as an ONNX model, and deploy it as a web service using Azure Machine Learning services and the ONNX Runtime.\n", - "\n", - "## What is ONNX\n", - "ONNX is an open format for representing machine learning and deep learning models. ONNX enables open and interoperable AI by enabling data scientists and developers to use the tools of their choice without worrying about lock-in and flexibility to deploy to a variety of platforms. ONNX is developed and supported by a community of partners including Microsoft, Facebook, and Amazon. For more information, explore the [ONNX website](http://onnx.ai).\n", - "\n", - "## MNIST Details\n", - "The Modified National Institute of Standards and Technology (MNIST) dataset consists of 70,000 grayscale images. Each image is a handwritten digit of 28x28 pixels, representing numbers from 0 to 9. For more information about the MNIST dataset, please visit [Yan LeCun's website](http://yann.lecun.com/exdb/mnist/). For more information about the MNIST model and how it was created can be found on the [ONNX Model Zoo github](https://github.com/onnx/models/tree/master/mnist). " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", - "* Go through the [00.configuration.ipynb](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize workspace\n", - "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train model\n", - "\n", - "### Create a remote compute target\n", - "You will need to create a [compute target](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#compute-target) to execute your training script on. In this tutorial, you create AmlCompute as your training compute resource. This code creates new compute for you if it does not already exist in your workspace.\n", - "\n", - "**Creation of the compute takes approximately 5 minutes.** If the compute is already in your workspace this code will skip the creation process." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# choose a name for your cluster\n", - "cluster_name = \"gpucluster\"\n", - "\n", - "try:\n", - " compute_target = ComputeTarget(workspace=ws, name=cluster_name)\n", - " print('Found existing compute target.')\n", - "except ComputeTargetException:\n", - " print('Creating a new compute target...')\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', \n", - " max_nodes=4)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, cluster_name, compute_config)\n", - "\n", - " compute_target.wait_for_completion(show_output=True)\n", - "\n", - " # Use the 'status' property to get a detailed status for the current cluster. \n", - " print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above code creates a GPU cluster. If you instead want to create a CPU cluster, provide a different VM size to the `vm_size` parameter, such as `STANDARD_D2_V2`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a project directory\n", - "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script and any additional files your training script depends on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "project_folder = './pytorch-mnist'\n", - "os.makedirs(project_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copy the training script `mnist.py` into your project directory. Make sure the training script has the following code to create an ONNX file:\n", - "```python\n", - "dummy_input = torch.randn(1, 1, 28, 28, device=device)\n", - "model_path = os.path.join(output_dir, 'mnist.onnx')\n", - "torch.onnx.export(model, dummy_input, model_path)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy('mnist.py', project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an experiment\n", - "Create an [Experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this transfer learning PyTorch tutorial. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "\n", - "experiment_name = 'pytorch1-mnist'\n", - "experiment = Experiment(ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a PyTorch estimator\n", - "The AML SDK's PyTorch estimator enables you to easily submit PyTorch training jobs for both single-node and distributed runs. For more information on the PyTorch estimator, refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-train-pytorch). The following code will define a single-node PyTorch job." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.dnn import PyTorch\n", - "\n", - "estimator = PyTorch(source_directory=project_folder, \n", - " script_params={'--output-dir': './outputs'},\n", - " compute_target=compute_target,\n", - " entry_script='mnist.py',\n", - " use_gpu=True)\n", - "\n", - "# upgrade to PyTorch 1.0 Preview, which has better support for ONNX\n", - "estimator.conda_dependencies.remove_conda_package('pytorch=0.4.0')\n", - "estimator.conda_dependencies.add_conda_package('pytorch-nightly')\n", - "estimator.conda_dependencies.add_channel('pytorch')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `script_params` parameter is a dictionary containing the command-line arguments to your training script `entry_script`. Please note the following:\n", - "- We specified the output directory as `./outputs`. The `outputs` directory is specially treated by AML in that all the content in this directory gets uploaded to your workspace as part of your run history. The files written to this directory are therefore accessible even once your remote run is over. In this tutorial, we will save our trained model to this output directory.\n", - "\n", - "To leverage the Azure VM's GPU for training, we set `use_gpu=True`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit job\n", - "Run your experiment by submitting your estimator object. Note that this call is asynchronous." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run = experiment.submit(estimator)\n", - "print(run.get_details())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor your run\n", - "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you can block until the script has completed training before running more code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Download the model (optional)\n", - "\n", - "Once the run completes, you can choose to download the ONNX model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# list all the files from the run\n", - "run.get_file_names()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "model_path = os.path.join('outputs', 'mnist.onnx')\n", - "run.download_file(model_path, output_file_path=model_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register the model\n", - "You can also register the model from your run to your workspace. The `model_path` parameter takes in the relative path on the remote VM to the model file in your `outputs` directory. You can then deploy this registered model as a web service through the AML SDK." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = run.register_model(model_name='mnist', model_path=model_path)\n", - "print(model.name, model.id, model.version, sep = '\\t')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Displaying your registered models (optional)\n", - "\n", - "You can optionally list out all the models that you have registered in this workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "models = ws.models\n", - "for name, m in models.items():\n", - " print(\"Name:\", name,\"\\tVersion:\", m.version, \"\\tDescription:\", m.description, m.tags)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploying as a web service\n", - "\n", - "### Write scoring file\n", - "\n", - "We are now going to deploy our ONNX model on Azure ML using the ONNX Runtime. We begin by writing a score.py file that will be invoked by the web service call. The `init()` function is called once when the container is started so we load the model using the ONNX Runtime into a global session object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import json\n", - "import time\n", - "import sys\n", - "import os\n", - "from azureml.core.model import Model\n", - "import numpy as np # we're going to use numpy to process input and output data\n", - "import onnxruntime # to inference ONNX models, we use the ONNX Runtime\n", - "\n", - "def init():\n", - " global session\n", - " model = Model.get_model_path(model_name = 'mnist')\n", - " session = onnxruntime.InferenceSession(model)\n", - "\n", - "def preprocess(input_data_json):\n", - " # convert the JSON data into the tensor input\n", - " return np.array(json.loads(input_data_json)['data']).astype('float32')\n", - "\n", - "def postprocess(result):\n", - " # We use argmax to pick the highest confidence label\n", - " return int(np.argmax(np.array(result).squeeze(), axis=0))\n", - "\n", - "def run(input_data_json):\n", - " try:\n", - " start = time.time() # start timer\n", - " input_data = preprocess(input_data_json)\n", - " input_name = session.get_inputs()[0].name # get the id of the first input of the model \n", - " result = session.run([], {input_name: input_data})\n", - " end = time.time() # stop timer\n", - " return {\"result\": postprocess(result),\n", - " \"time\": end - start}\n", - " except Exception as e:\n", - " result = str(e)\n", - " return {\"error\": result}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create container image\n", - "First we create a YAML file that specifies which dependencies we would like to see in our container." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(pip_packages=[\"numpy\",\"onnxruntime\",\"azureml-core\"])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we have Azure ML create the container. This step will likely take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(execution_script = \"score.py\",\n", - " runtime = \"python\",\n", - " conda_file = \"myenv.yml\",\n", - " description = \"MNIST ONNX Demo\",\n", - " tags = {\"demo\": \"onnx\"}\n", - " )\n", - "\n", - "\n", - "image = ContainerImage.create(name = \"onnxmnistdemo\",\n", - " models = [model],\n", - " image_config = image_config,\n", - " workspace = ws)\n", - "\n", - "image.wait_for_creation(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case you need to debug your code, the next line of code accesses the log file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(image.image_build_log_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We're all set! Let's get our model chugging.\n", - "\n", - "### Deploy the container image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, \n", - " memory_gb = 1, \n", - " tags = {'demo': 'onnx'}, \n", - " description = 'web service for MNIST ONNX model')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following cell will likely take a few minutes to run as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "from random import randint\n", - "\n", - "aci_service_name = 'onnx-demo-mnist'+str(randint(0,100))\n", - "print(\"Service\", aci_service_name)\n", - "\n", - "aci_service = Webservice.deploy_from_image(deployment_config = aciconfig,\n", - " image = image,\n", - " name = aci_service_name,\n", - " workspace = ws)\n", - "\n", - "aci_service.wait_for_deployment(True)\n", - "print(aci_service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case the deployment fails, you can check the logs. Make sure to delete your aci_service before trying again." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if aci_service.state != 'Healthy':\n", - " # run this command for debugging.\n", - " print(aci_service.get_logs())\n", - " aci_service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Success!\n", - "\n", - "If you've made it this far, you've deployed a working web service that does handwritten digit classification using an ONNX model. You can get the URL for the webservice with the code below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(aci_service.scoring_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When you are eventually done using the web service, remember to delete it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#aci_service.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "onnx" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.2" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": { - "c899ddfc2b134ca9b89a4f278ac7c997": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.1.0", - "model_name": "LayoutModel", - "state": {} - }, - "d146cbdbd4e04710b3eebc15a66957ce": { - "model_module": "azureml_widgets", - "model_module_version": "1.0.0", - "model_name": "ShowRunDetailsModel", - "state": { - "child_runs_metrics": {}, - "compute_target_status": { - "current_node_count": 1, - "node_state_counts": { - "idleNodeCount": 1, - "leavingNodeCount": 0, - "preparingNodeCount": 0, - "runningNodeCount": 0, - "unusableNodeCount": 0 - }, - "provisioning_errors": null, - "provisioning_state": "Succeeded", - "requested_node_count": 1, - "scale_settings": { - "autoScale": { - "initialNodeCount": 0, - "maximumNodeCount": 4, - "minimumNodeCount": 0 - }, - "manual": null - }, - "vm_size": "STANDARD_NC6" - }, - "error": "", - "layout": "IPY_MODEL_c899ddfc2b134ca9b89a4f278ac7c997", - "run_id": "pytorch1-mnist_1537876563990", - "run_logs": "Uploading experiment status to history service.\nAdding run profile attachment azureml-logs/60_control_log.txt\nUploading experiment status to history service.\nAdding run profile attachment azureml-logs/80_driver_log.txt\nScript process exited with code 0\nUploading driver log...\nFinalizing run...\n\nDownloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\nDownloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\nDownloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\nDownloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\nProcessing...\nDone!\nTrain Epoch: 1 [0/60000 (0%)]\tLoss: 2.365850\nTrain Epoch: 1 [640/60000 (1%)]\tLoss: 2.305295\nTrain Epoch: 1 [1280/60000 (2%)]\tLoss: 2.301407\nTrain Epoch: 1 [1920/60000 (3%)]\tLoss: 2.316538\nTrain Epoch: 1 [2560/60000 (4%)]\tLoss: 2.255810\nTrain Epoch: 1 [3200/60000 (5%)]\tLoss: 2.224511\nTrain Epoch: 1 [3840/60000 (6%)]\tLoss: 2.216569\nTrain Epoch: 1 [4480/60000 (7%)]\tLoss: 2.181396\nTrain Epoch: 1 [5120/60000 (9%)]\tLoss: 2.116898\nTrain Epoch: 1 [5760/60000 (10%)]\tLoss: 2.045963\nTrain Epoch: 1 [6400/60000 (11%)]\tLoss: 1.973494\nTrain Epoch: 1 [7040/60000 (12%)]\tLoss: 1.968609\nTrain Epoch: 1 [7680/60000 (13%)]\tLoss: 1.787280\nTrain Epoch: 1 [8320/60000 (14%)]\tLoss: 1.735044\nTrain Epoch: 1 [8960/60000 (15%)]\tLoss: 1.680426\nTrain Epoch: 1 [9600/60000 (16%)]\tLoss: 1.486279\nTrain Epoch: 1 [10240/60000 (17%)]\tLoss: 1.545747\nTrain Epoch: 1 [10880/60000 (18%)]\tLoss: 1.193543\nTrain Epoch: 1 [11520/60000 (19%)]\tLoss: 1.652350\nTrain Epoch: 1 [12160/60000 (20%)]\tLoss: 0.982182\nTrain Epoch: 1 [12800/60000 (21%)]\tLoss: 1.331902\nTrain Epoch: 1 [13440/60000 (22%)]\tLoss: 1.089598\nTrain Epoch: 1 [14080/60000 (23%)]\tLoss: 0.998703\nTrain Epoch: 1 [14720/60000 (25%)]\tLoss: 0.992036\nTrain Epoch: 1 [15360/60000 (26%)]\tLoss: 0.979473\nTrain Epoch: 1 [16000/60000 (27%)]\tLoss: 1.141276\nTrain Epoch: 1 [16640/60000 (28%)]\tLoss: 0.836921\nTrain Epoch: 1 [17280/60000 (29%)]\tLoss: 0.764657\nTrain Epoch: 1 [17920/60000 (30%)]\tLoss: 0.826818\nTrain Epoch: 1 [18560/60000 (31%)]\tLoss: 0.837834\nTrain Epoch: 1 [19200/60000 (32%)]\tLoss: 0.899033\nTrain Epoch: 1 [19840/60000 (33%)]\tLoss: 0.868245\nTrain Epoch: 1 [20480/60000 (34%)]\tLoss: 0.930491\nTrain Epoch: 1 [21120/60000 (35%)]\tLoss: 0.795202\nTrain Epoch: 1 [21760/60000 (36%)]\tLoss: 0.575117\nTrain Epoch: 1 [22400/60000 (37%)]\tLoss: 0.577884\nTrain Epoch: 1 [23040/60000 (38%)]\tLoss: 0.708801\nTrain Epoch: 1 [23680/60000 (39%)]\tLoss: 0.927512\nTrain Epoch: 1 [24320/60000 (41%)]\tLoss: 0.598836\nTrain Epoch: 1 [24960/60000 (42%)]\tLoss: 0.944021\nTrain Epoch: 1 [25600/60000 (43%)]\tLoss: 0.811654\nTrain Epoch: 1 [26240/60000 (44%)]\tLoss: 0.590322\nTrain Epoch: 1 [26880/60000 (45%)]\tLoss: 0.555104\nTrain Epoch: 1 [27520/60000 (46%)]\tLoss: 0.795565\nTrain Epoch: 1 [28160/60000 (47%)]\tLoss: 0.603378\nTrain Epoch: 1 [28800/60000 (48%)]\tLoss: 0.552437\nTrain Epoch: 1 [29440/60000 (49%)]\tLoss: 0.662064\nTrain Epoch: 1 [30080/60000 (50%)]\tLoss: 0.682541\nTrain Epoch: 1 [30720/60000 (51%)]\tLoss: 0.659051\nTrain Epoch: 1 [31360/60000 (52%)]\tLoss: 0.781052\nTrain Epoch: 1 [32000/60000 (53%)]\tLoss: 0.595491\nTrain Epoch: 1 [32640/60000 (54%)]\tLoss: 0.367289\nTrain Epoch: 1 [33280/60000 (55%)]\tLoss: 0.459428\nTrain Epoch: 1 [33920/60000 (57%)]\tLoss: 0.819237\nTrain Epoch: 1 [34560/60000 (58%)]\tLoss: 0.773166\nTrain Epoch: 1 [35200/60000 (59%)]\tLoss: 0.557691\nTrain Epoch: 1 [35840/60000 (60%)]\tLoss: 0.854719\nTrain Epoch: 1 [36480/60000 (61%)]\tLoss: 0.497524\nTrain Epoch: 1 [37120/60000 (62%)]\tLoss: 0.582861\nTrain Epoch: 1 [37760/60000 (63%)]\tLoss: 0.839674\nTrain Epoch: 1 [38400/60000 (64%)]\tLoss: 0.557275\nTrain Epoch: 1 [39040/60000 (65%)]\tLoss: 0.419819\nTrain Epoch: 1 [39680/60000 (66%)]\tLoss: 0.694659\nTrain Epoch: 1 [40320/60000 (67%)]\tLoss: 0.678524\nTrain Epoch: 1 [40960/60000 (68%)]\tLoss: 0.514364\nTrain Epoch: 1 [41600/60000 (69%)]\tLoss: 0.400510\nTrain Epoch: 1 [42240/60000 (70%)]\tLoss: 0.526099\nTrain Epoch: 1 [42880/60000 (71%)]\tLoss: 0.387087\nTrain Epoch: 1 [43520/60000 (72%)]\tLoss: 0.730123\nTrain Epoch: 1 [44160/60000 (74%)]\tLoss: 0.678924\nTrain Epoch: 1 [44800/60000 (75%)]\tLoss: 0.425195\nTrain Epoch: 1 [45440/60000 (76%)]\tLoss: 0.656437\nTrain Epoch: 1 [46080/60000 (77%)]\tLoss: 0.348130\nTrain Epoch: 1 [46720/60000 (78%)]\tLoss: 0.487442\nTrain Epoch: 1 [47360/60000 (79%)]\tLoss: 0.649533\nTrain Epoch: 1 [48000/60000 (80%)]\tLoss: 0.541395\nTrain Epoch: 1 [48640/60000 (81%)]\tLoss: 0.464202\nTrain Epoch: 1 [49280/60000 (82%)]\tLoss: 0.750336\nTrain Epoch: 1 [49920/60000 (83%)]\tLoss: 0.548484\nTrain Epoch: 1 [50560/60000 (84%)]\tLoss: 0.421382\nTrain Epoch: 1 [51200/60000 (85%)]\tLoss: 0.680766\nTrain Epoch: 1 [51840/60000 (86%)]\tLoss: 0.483003\nTrain Epoch: 1 [52480/60000 (87%)]\tLoss: 0.610840\nTrain Epoch: 1 [53120/60000 (88%)]\tLoss: 0.483278\nTrain Epoch: 1 [53760/60000 (90%)]\tLoss: 0.553161\nTrain Epoch: 1 [54400/60000 (91%)]\tLoss: 0.465237\nTrain Epoch: 1 [55040/60000 (92%)]\tLoss: 0.558884\nTrain Epoch: 1 [55680/60000 (93%)]\tLoss: 0.528969\nTrain Epoch: 1 [56320/60000 (94%)]\tLoss: 0.370189\nTrain Epoch: 1 [56960/60000 (95%)]\tLoss: 0.379404\nTrain Epoch: 1 [57600/60000 (96%)]\tLoss: 0.263894\nTrain Epoch: 1 [58240/60000 (97%)]\tLoss: 0.432745\nTrain Epoch: 1 [58880/60000 (98%)]\tLoss: 0.455681\nTrain Epoch: 1 [59520/60000 (99%)]\tLoss: 0.483901\n/azureml-envs/azureml_de892a6d0f01a442356c3959dd42e13b/lib/python3.6/site-packages/torch/nn/functional.py:54: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.\n warnings.warn(warning.format(ret))\n\nTest set: Average loss: 0.2073, Accuracy: 9384/10000 (94%)\n\nTrain Epoch: 2 [0/60000 (0%)]\tLoss: 0.390797\nTrain Epoch: 2 [640/60000 (1%)]\tLoss: 0.214512\nTrain Epoch: 2 [1280/60000 (2%)]\tLoss: 0.226415\nTrain Epoch: 2 [1920/60000 (3%)]\tLoss: 0.491764\nTrain Epoch: 2 [2560/60000 (4%)]\tLoss: 0.333604\nTrain Epoch: 2 [3200/60000 (5%)]\tLoss: 0.514239\nTrain Epoch: 2 [3840/60000 (6%)]\tLoss: 0.430618\nTrain Epoch: 2 [4480/60000 (7%)]\tLoss: 0.579474\nTrain Epoch: 2 [5120/60000 (9%)]\tLoss: 0.259456\nTrain Epoch: 2 [5760/60000 (10%)]\tLoss: 0.651198\nTrain Epoch: 2 [6400/60000 (11%)]\tLoss: 0.338269\nTrain Epoch: 2 [7040/60000 (12%)]\tLoss: 0.335233\nTrain Epoch: 2 [7680/60000 (13%)]\tLoss: 0.518132\nTrain Epoch: 2 [8320/60000 (14%)]\tLoss: 0.363488\nTrain Epoch: 2 [8960/60000 (15%)]\tLoss: 0.437092\nTrain Epoch: 2 [9600/60000 (16%)]\tLoss: 0.362660\nTrain Epoch: 2 [10240/60000 (17%)]\tLoss: 0.432337\nTrain Epoch: 2 [10880/60000 (18%)]\tLoss: 0.360611\nTrain Epoch: 2 [11520/60000 (19%)]\tLoss: 0.305427\nTrain Epoch: 2 [12160/60000 (20%)]\tLoss: 0.347859\nTrain Epoch: 2 [12800/60000 (21%)]\tLoss: 0.408770\nTrain Epoch: 2 [13440/60000 (22%)]\tLoss: 0.469975\nTrain Epoch: 2 [14080/60000 (23%)]\tLoss: 0.673716\nTrain Epoch: 2 [14720/60000 (25%)]\tLoss: 0.388876\nTrain Epoch: 2 [15360/60000 (26%)]\tLoss: 0.462371\nTrain Epoch: 2 [16000/60000 (27%)]\tLoss: 0.530107\nTrain Epoch: 2 [16640/60000 (28%)]\tLoss: 0.448767\nTrain Epoch: 2 [17280/60000 (29%)]\tLoss: 0.412764\nTrain Epoch: 2 [17920/60000 (30%)]\tLoss: 0.301494\nTrain Epoch: 2 [18560/60000 (31%)]\tLoss: 0.465599\nTrain Epoch: 2 [19200/60000 (32%)]\tLoss: 0.434249\nTrain Epoch: 2 [19840/60000 (33%)]\tLoss: 0.324006\nTrain Epoch: 2 [20480/60000 (34%)]\tLoss: 0.447446\nTrain Epoch: 2 [21120/60000 (35%)]\tLoss: 0.291222\nTrain Epoch: 2 [21760/60000 (36%)]\tLoss: 0.557065\nTrain Epoch: 2 [22400/60000 (37%)]\tLoss: 0.552659\nTrain Epoch: 2 [23040/60000 (38%)]\tLoss: 0.378901\nTrain Epoch: 2 [23680/60000 (39%)]\tLoss: 0.360550\nTrain Epoch: 2 [24320/60000 (41%)]\tLoss: 0.283795\nTrain Epoch: 2 [24960/60000 (42%)]\tLoss: 0.475816\nTrain Epoch: 2 [25600/60000 (43%)]\tLoss: 0.283652\nTrain Epoch: 2 [26240/60000 (44%)]\tLoss: 0.276265\nTrain Epoch: 2 [26880/60000 (45%)]\tLoss: 0.527902\nTrain Epoch: 2 [27520/60000 (46%)]\tLoss: 0.437130\nTrain Epoch: 2 [28160/60000 (47%)]\tLoss: 0.277132\nTrain Epoch: 2 [28800/60000 (48%)]\tLoss: 0.471580\nTrain Epoch: 2 [29440/60000 (49%)]\tLoss: 0.380154\nTrain Epoch: 2 [30080/60000 (50%)]\tLoss: 0.232072\nTrain Epoch: 2 [30720/60000 (51%)]\tLoss: 0.366567\nTrain Epoch: 2 [31360/60000 (52%)]\tLoss: 0.469628\nTrain Epoch: 2 [32000/60000 (53%)]\tLoss: 0.440017\nTrain Epoch: 2 [32640/60000 (54%)]\tLoss: 0.421814\nTrain Epoch: 2 [33280/60000 (55%)]\tLoss: 0.367687\nTrain Epoch: 2 [33920/60000 (57%)]\tLoss: 0.448384\nTrain Epoch: 2 [34560/60000 (58%)]\tLoss: 0.550283\nTrain Epoch: 2 [35200/60000 (59%)]\tLoss: 0.609798\nTrain Epoch: 2 [35840/60000 (60%)]\tLoss: 0.461334\nTrain Epoch: 2 [36480/60000 (61%)]\tLoss: 0.443838\nTrain Epoch: 2 [37120/60000 (62%)]\tLoss: 0.306666\nTrain Epoch: 2 [37760/60000 (63%)]\tLoss: 0.432083\nTrain Epoch: 2 [38400/60000 (64%)]\tLoss: 0.277025\nTrain Epoch: 2 [39040/60000 (65%)]\tLoss: 0.298752\nTrain Epoch: 2 [39680/60000 (66%)]\tLoss: 0.427435\nTrain Epoch: 2 [40320/60000 (67%)]\tLoss: 0.374736\nTrain Epoch: 2 [40960/60000 (68%)]\tLoss: 0.246496\nTrain Epoch: 2 [41600/60000 (69%)]\tLoss: 0.662259\nTrain Epoch: 2 [42240/60000 (70%)]\tLoss: 0.497635\nTrain Epoch: 2 [42880/60000 (71%)]\tLoss: 0.237556\nTrain Epoch: 2 [43520/60000 (72%)]\tLoss: 0.194535\nTrain Epoch: 2 [44160/60000 (74%)]\tLoss: 0.258943\nTrain Epoch: 2 [44800/60000 (75%)]\tLoss: 0.437360\nTrain Epoch: 2 [45440/60000 (76%)]\tLoss: 0.355489\nTrain Epoch: 2 [46080/60000 (77%)]\tLoss: 0.335020\nTrain Epoch: 2 [46720/60000 (78%)]\tLoss: 0.565189\nTrain Epoch: 2 [47360/60000 (79%)]\tLoss: 0.430366\nTrain Epoch: 2 [48000/60000 (80%)]\tLoss: 0.266303\nTrain Epoch: 2 [48640/60000 (81%)]\tLoss: 0.172954\nTrain Epoch: 2 [49280/60000 (82%)]\tLoss: 0.245803\nTrain Epoch: 2 [49920/60000 (83%)]\tLoss: 0.426530\nTrain Epoch: 2 [50560/60000 (84%)]\tLoss: 0.468984\nTrain Epoch: 2 [51200/60000 (85%)]\tLoss: 0.370892\nTrain Epoch: 2 [51840/60000 (86%)]\tLoss: 0.300021\nTrain Epoch: 2 [52480/60000 (87%)]\tLoss: 0.392199\nTrain Epoch: 2 [53120/60000 (88%)]\tLoss: 0.510658\nTrain Epoch: 2 [53760/60000 (90%)]\tLoss: 0.376290\nTrain Epoch: 2 [54400/60000 (91%)]\tLoss: 0.273752\nTrain Epoch: 2 [55040/60000 (92%)]\tLoss: 0.234505\nTrain Epoch: 2 [55680/60000 (93%)]\tLoss: 0.610978\nTrain Epoch: 2 [56320/60000 (94%)]\tLoss: 0.154850\nTrain Epoch: 2 [56960/60000 (95%)]\tLoss: 0.374254\nTrain Epoch: 2 [57600/60000 (96%)]\tLoss: 0.292167\nTrain Epoch: 2 [58240/60000 (97%)]\tLoss: 0.478376\nTrain Epoch: 2 [58880/60000 (98%)]\tLoss: 0.303128\nTrain Epoch: 2 [59520/60000 (99%)]\tLoss: 0.376779\n\nTest set: Average loss: 0.1297, Accuracy: 9597/10000 (96%)\n\nTrain Epoch: 3 [0/60000 (0%)]\tLoss: 0.450588\nTrain Epoch: 3 [640/60000 (1%)]\tLoss: 0.361118\nTrain Epoch: 3 [1280/60000 (2%)]\tLoss: 0.374497\nTrain Epoch: 3 [1920/60000 (3%)]\tLoss: 0.312127\nTrain Epoch: 3 [2560/60000 (4%)]\tLoss: 0.353896\nTrain Epoch: 3 [3200/60000 (5%)]\tLoss: 0.320840\nTrain Epoch: 3 [3840/60000 (6%)]\tLoss: 0.218477\nTrain Epoch: 3 [4480/60000 (7%)]\tLoss: 0.295629\nTrain Epoch: 3 [5120/60000 (9%)]\tLoss: 0.339400\nTrain Epoch: 3 [5760/60000 (10%)]\tLoss: 0.170357\nTrain Epoch: 3 [6400/60000 (11%)]\tLoss: 0.416447\nTrain Epoch: 3 [7040/60000 (12%)]\tLoss: 0.320326\nTrain Epoch: 3 [7680/60000 (13%)]\tLoss: 0.318410\nTrain Epoch: 3 [8320/60000 (14%)]\tLoss: 0.384793\nTrain Epoch: 3 [8960/60000 (15%)]\tLoss: 0.343415\nTrain Epoch: 3 [9600/60000 (16%)]\tLoss: 0.284627\nTrain Epoch: 3 [10240/60000 (17%)]\tLoss: 0.151805\nTrain Epoch: 3 [10880/60000 (18%)]\tLoss: 0.401332\nTrain Epoch: 3 [11520/60000 (19%)]\tLoss: 0.253159\nTrain Epoch: 3 [12160/60000 (20%)]\tLoss: 0.339563\nTrain Epoch: 3 [12800/60000 (21%)]\tLoss: 0.237430\nTrain Epoch: 3 [13440/60000 (22%)]\tLoss: 0.311402\nTrain Epoch: 3 [14080/60000 (23%)]\tLoss: 0.241667\nTrain Epoch: 3 [14720/60000 (25%)]\tLoss: 0.265347\nTrain Epoch: 3 [15360/60000 (26%)]\tLoss: 0.367453\nTrain Epoch: 3 [16000/60000 (27%)]\tLoss: 0.190671\nTrain Epoch: 3 [16640/60000 (28%)]\tLoss: 0.313052\nTrain Epoch: 3 [17280/60000 (29%)]\tLoss: 0.368028\nTrain Epoch: 3 [17920/60000 (30%)]\tLoss: 0.268639\nTrain Epoch: 3 [18560/60000 (31%)]\tLoss: 0.341066\nTrain Epoch: 3 [19200/60000 (32%)]\tLoss: 0.457961\nTrain Epoch: 3 [19840/60000 (33%)]\tLoss: 0.732400\nTrain Epoch: 3 [20480/60000 (34%)]\tLoss: 0.330679\nTrain Epoch: 3 [21120/60000 (35%)]\tLoss: 0.279778\nTrain Epoch: 3 [21760/60000 (36%)]\tLoss: 0.305972\nTrain Epoch: 3 [22400/60000 (37%)]\tLoss: 0.402131\nTrain Epoch: 3 [23040/60000 (38%)]\tLoss: 0.345302\nTrain Epoch: 3 [23680/60000 (39%)]\tLoss: 0.251726\nTrain Epoch: 3 [24320/60000 (41%)]\tLoss: 0.152062\nTrain Epoch: 3 [24960/60000 (42%)]\tLoss: 0.149305\nTrain Epoch: 3 [25600/60000 (43%)]\tLoss: 0.364678\nTrain Epoch: 3 [26240/60000 (44%)]\tLoss: 0.067165\nTrain Epoch: 3 [26880/60000 (45%)]\tLoss: 0.229927\nTrain Epoch: 3 [27520/60000 (46%)]\tLoss: 0.236894\nTrain Epoch: 3 [28160/60000 (47%)]\tLoss: 0.486373\nTrain Epoch: 3 [28800/60000 (48%)]\tLoss: 0.453053\nTrain Epoch: 3 [29440/60000 (49%)]\tLoss: 0.283823\nTrain Epoch: 3 [30080/60000 (50%)]\tLoss: 0.185119\nTrain Epoch: 3 [30720/60000 (51%)]\tLoss: 0.381274\nTrain Epoch: 3 [31360/60000 (52%)]\tLoss: 0.394533\nTrain Epoch: 3 [32000/60000 (53%)]\tLoss: 0.392791\nTrain Epoch: 3 [32640/60000 (54%)]\tLoss: 0.230672\nTrain Epoch: 3 [33280/60000 (55%)]\tLoss: 0.393846\nTrain Epoch: 3 [33920/60000 (57%)]\tLoss: 0.676802\nTrain Epoch: 3 [34560/60000 (58%)]\tLoss: 0.160434\nTrain Epoch: 3 [35200/60000 (59%)]\tLoss: 0.211318\nTrain Epoch: 3 [35840/60000 (60%)]\tLoss: 0.245763\nTrain Epoch: 3 [36480/60000 (61%)]\tLoss: 0.198454\nTrain Epoch: 3 [37120/60000 (62%)]\tLoss: 0.243536\nTrain Epoch: 3 [37760/60000 (63%)]\tLoss: 0.151804\nTrain Epoch: 3 [38400/60000 (64%)]\tLoss: 0.176093\nTrain Epoch: 3 [39040/60000 (65%)]\tLoss: 0.237228\nTrain Epoch: 3 [39680/60000 (66%)]\tLoss: 0.146441\nTrain Epoch: 3 [40320/60000 (67%)]\tLoss: 0.345162\nTrain Epoch: 3 [40960/60000 (68%)]\tLoss: 0.400378\nTrain Epoch: 3 [41600/60000 (69%)]\tLoss: 0.259152\nTrain Epoch: 3 [42240/60000 (70%)]\tLoss: 0.569659\nTrain Epoch: 3 [42880/60000 (71%)]\tLoss: 0.166401\nTrain Epoch: 3 [43520/60000 (72%)]\tLoss: 0.220592\nTrain Epoch: 3 [44160/60000 (74%)]\tLoss: 0.303227\nTrain Epoch: 3 [44800/60000 (75%)]\tLoss: 0.193691\nTrain Epoch: 3 [45440/60000 (76%)]\tLoss: 0.257408\nTrain Epoch: 3 [46080/60000 (77%)]\tLoss: 0.391211\nTrain Epoch: 3 [46720/60000 (78%)]\tLoss: 0.419841\nTrain Epoch: 3 [47360/60000 (79%)]\tLoss: 0.121861\nTrain Epoch: 3 [48000/60000 (80%)]\tLoss: 0.176442\nTrain Epoch: 3 [48640/60000 (81%)]\tLoss: 0.534631\nTrain Epoch: 3 [49280/60000 (82%)]\tLoss: 0.296596\nTrain Epoch: 3 [49920/60000 (83%)]\tLoss: 0.190096\nTrain Epoch: 3 [50560/60000 (84%)]\tLoss: 0.360826\nTrain Epoch: 3 [51200/60000 (85%)]\tLoss: 0.427482\nTrain Epoch: 3 [51840/60000 (86%)]\tLoss: 0.251076\nTrain Epoch: 3 [52480/60000 (87%)]\tLoss: 0.319904\nTrain Epoch: 3 [53120/60000 (88%)]\tLoss: 0.228778\nTrain Epoch: 3 [53760/60000 (90%)]\tLoss: 0.180340\nTrain Epoch: 3 [54400/60000 (91%)]\tLoss: 0.236512\nTrain Epoch: 3 [55040/60000 (92%)]\tLoss: 0.206779\nTrain Epoch: 3 [55680/60000 (93%)]\tLoss: 0.323677\nTrain Epoch: 3 [56320/60000 (94%)]\tLoss: 0.406382\nTrain Epoch: 3 [56960/60000 (95%)]\tLoss: 0.426768\nTrain Epoch: 3 [57600/60000 (96%)]\tLoss: 0.595419\nTrain Epoch: 3 [58240/60000 (97%)]\tLoss: 0.175457\nTrain Epoch: 3 [58880/60000 (98%)]\tLoss: 0.301019\nTrain Epoch: 3 [59520/60000 (99%)]\tLoss: 0.419139\n\nTest set: Average loss: 0.1049, Accuracy: 9686/10000 (97%)\n\nTrain Epoch: 4 [0/60000 (0%)]\tLoss: 0.352631\nTrain Epoch: 4 [640/60000 (1%)]\tLoss: 0.343671\nTrain Epoch: 4 [1280/60000 (2%)]\tLoss: 0.170439\nTrain Epoch: 4 [1920/60000 (3%)]\tLoss: 0.289486\nTrain Epoch: 4 [2560/60000 (4%)]\tLoss: 0.096597\nTrain Epoch: 4 [3200/60000 (5%)]\tLoss: 0.263759\nTrain Epoch: 4 [3840/60000 (6%)]\tLoss: 0.369941\nTrain Epoch: 4 [4480/60000 (7%)]\tLoss: 0.326594\nTrain Epoch: 4 [5120/60000 (9%)]\tLoss: 0.174094\nTrain Epoch: 4 [5760/60000 (10%)]\tLoss: 0.442069\nTrain Epoch: 4 [6400/60000 (11%)]\tLoss: 0.179002\nTrain Epoch: 4 [7040/60000 (12%)]\tLoss: 0.292742\nTrain Epoch: 4 [7680/60000 (13%)]\tLoss: 0.209898\nTrain Epoch: 4 [8320/60000 (14%)]\tLoss: 0.401671\nTrain Epoch: 4 [8960/60000 (15%)]\tLoss: 0.205146\nTrain Epoch: 4 [9600/60000 (16%)]\tLoss: 0.250836\nTrain Epoch: 4 [10240/60000 (17%)]\tLoss: 0.156622\nTrain Epoch: 4 [10880/60000 (18%)]\tLoss: 0.214578\nTrain Epoch: 4 [11520/60000 (19%)]\tLoss: 0.155916\nTrain Epoch: 4 [12160/60000 (20%)]\tLoss: 0.416294\nTrain Epoch: 4 [12800/60000 (21%)]\tLoss: 0.197429\nTrain Epoch: 4 [13440/60000 (22%)]\tLoss: 0.154103\nTrain Epoch: 4 [14080/60000 (23%)]\tLoss: 0.377950\nTrain Epoch: 4 [14720/60000 (25%)]\tLoss: 0.338084\nTrain Epoch: 4 [15360/60000 (26%)]\tLoss: 0.242834\nTrain Epoch: 4 [16000/60000 (27%)]\tLoss: 0.139219\nTrain Epoch: 4 [16640/60000 (28%)]\tLoss: 0.242067\nTrain Epoch: 4 [17280/60000 (29%)]\tLoss: 0.189929\nTrain Epoch: 4 [17920/60000 (30%)]\tLoss: 0.358215\nTrain Epoch: 4 [18560/60000 (31%)]\tLoss: 0.354969\nTrain Epoch: 4 [19200/60000 (32%)]\tLoss: 0.303644\nTrain Epoch: 4 [19840/60000 (33%)]\tLoss: 0.322343\nTrain Epoch: 4 [20480/60000 (34%)]\tLoss: 0.225422\nTrain Epoch: 4 [21120/60000 (35%)]\tLoss: 0.614347\nTrain Epoch: 4 [21760/60000 (36%)]\tLoss: 0.448674\nTrain Epoch: 4 [22400/60000 (37%)]\tLoss: 0.362976\nTrain Epoch: 4 [23040/60000 (38%)]\tLoss: 0.100357\nTrain Epoch: 4 [23680/60000 (39%)]\tLoss: 0.289331\nTrain Epoch: 4 [24320/60000 (41%)]\tLoss: 0.405818\nTrain Epoch: 4 [24960/60000 (42%)]\tLoss: 0.212617\nTrain Epoch: 4 [25600/60000 (43%)]\tLoss: 0.348597\nTrain Epoch: 4 [26240/60000 (44%)]\tLoss: 0.351009\nTrain Epoch: 4 [26880/60000 (45%)]\tLoss: 0.341456\nTrain Epoch: 4 [27520/60000 (46%)]\tLoss: 0.297527\nTrain Epoch: 4 [28160/60000 (47%)]\tLoss: 0.281190\nTrain Epoch: 4 [28800/60000 (48%)]\tLoss: 0.187359\nTrain Epoch: 4 [29440/60000 (49%)]\tLoss: 0.178844\nTrain Epoch: 4 [30080/60000 (50%)]\tLoss: 0.201243\nTrain Epoch: 4 [30720/60000 (51%)]\tLoss: 0.305701\nTrain Epoch: 4 [31360/60000 (52%)]\tLoss: 0.370592\nTrain Epoch: 4 [32000/60000 (53%)]\tLoss: 0.241955\nTrain Epoch: 4 [32640/60000 (54%)]\tLoss: 0.278765\nTrain Epoch: 4 [33280/60000 (55%)]\tLoss: 0.284302\nTrain Epoch: 4 [33920/60000 (57%)]\tLoss: 0.337426\nTrain Epoch: 4 [34560/60000 (58%)]\tLoss: 0.277304\nTrain Epoch: 4 [35200/60000 (59%)]\tLoss: 0.221228\nTrain Epoch: 4 [35840/60000 (60%)]\tLoss: 0.150985\nTrain Epoch: 4 [36480/60000 (61%)]\tLoss: 0.312087\nTrain Epoch: 4 [37120/60000 (62%)]\tLoss: 0.170111\nTrain Epoch: 4 [37760/60000 (63%)]\tLoss: 0.291135\nTrain Epoch: 4 [38400/60000 (64%)]\tLoss: 0.160971\nTrain Epoch: 4 [39040/60000 (65%)]\tLoss: 0.390679\nTrain Epoch: 4 [39680/60000 (66%)]\tLoss: 0.434802\nTrain Epoch: 4 [40320/60000 (67%)]\tLoss: 0.281539\nTrain Epoch: 4 [40960/60000 (68%)]\tLoss: 0.172577\nTrain Epoch: 4 [41600/60000 (69%)]\tLoss: 0.348624\nTrain Epoch: 4 [42240/60000 (70%)]\tLoss: 0.380416\nTrain Epoch: 4 [42880/60000 (71%)]\tLoss: 0.483520\nTrain Epoch: 4 [43520/60000 (72%)]\tLoss: 0.216825\nTrain Epoch: 4 [44160/60000 (74%)]\tLoss: 0.320874\nTrain Epoch: 4 [44800/60000 (75%)]\tLoss: 0.213358\nTrain Epoch: 4 [45440/60000 (76%)]\tLoss: 0.218650\nTrain Epoch: 4 [46080/60000 (77%)]\tLoss: 0.221090\nTrain Epoch: 4 [46720/60000 (78%)]\tLoss: 0.325981\nTrain Epoch: 4 [47360/60000 (79%)]\tLoss: 0.283184\nTrain Epoch: 4 [48000/60000 (80%)]\tLoss: 0.072845\nTrain Epoch: 4 [48640/60000 (81%)]\tLoss: 0.206940\nTrain Epoch: 4 [49280/60000 (82%)]\tLoss: 0.423454\nTrain Epoch: 4 [49920/60000 (83%)]\tLoss: 0.475285\nTrain Epoch: 4 [50560/60000 (84%)]\tLoss: 0.128978\nTrain Epoch: 4 [51200/60000 (85%)]\tLoss: 0.195609\nTrain Epoch: 4 [51840/60000 (86%)]\tLoss: 0.125730\nTrain Epoch: 4 [52480/60000 (87%)]\tLoss: 0.137783\nTrain Epoch: 4 [53120/60000 (88%)]\tLoss: 0.375247\nTrain Epoch: 4 [53760/60000 (90%)]\tLoss: 0.243497\nTrain Epoch: 4 [54400/60000 (91%)]\tLoss: 0.236100\nTrain Epoch: 4 [55040/60000 (92%)]\tLoss: 0.266795\nTrain Epoch: 4 [55680/60000 (93%)]\tLoss: 0.229095\nTrain Epoch: 4 [56320/60000 (94%)]\tLoss: 0.167610\nTrain Epoch: 4 [56960/60000 (95%)]\tLoss: 0.240640\nTrain Epoch: 4 [57600/60000 (96%)]\tLoss: 0.153999\nTrain Epoch: 4 [58240/60000 (97%)]\tLoss: 0.753790\nTrain Epoch: 4 [58880/60000 (98%)]\tLoss: 0.143998\nTrain Epoch: 4 [59520/60000 (99%)]\tLoss: 0.310583\n\nTest set: Average loss: 0.0843, Accuracy: 9739/10000 (97%)\n\nTrain Epoch: 5 [0/60000 (0%)]\tLoss: 0.227892\nTrain Epoch: 5 [640/60000 (1%)]\tLoss: 0.162702\nTrain Epoch: 5 [1280/60000 (2%)]\tLoss: 0.227571\nTrain Epoch: 5 [1920/60000 (3%)]\tLoss: 0.148511\nTrain Epoch: 5 [2560/60000 (4%)]\tLoss: 0.187414\nTrain Epoch: 5 [3200/60000 (5%)]\tLoss: 0.194418\nTrain Epoch: 5 [3840/60000 (6%)]\tLoss: 0.276495\nTrain Epoch: 5 [4480/60000 (7%)]\tLoss: 0.268769\nTrain Epoch: 5 [5120/60000 (9%)]\tLoss: 0.163968\nTrain Epoch: 5 [5760/60000 (10%)]\tLoss: 0.349296\nTrain Epoch: 5 [6400/60000 (11%)]\tLoss: 0.217248\nTrain Epoch: 5 [7040/60000 (12%)]\tLoss: 0.195263\nTrain Epoch: 5 [7680/60000 (13%)]\tLoss: 0.339447\nTrain Epoch: 5 [8320/60000 (14%)]\tLoss: 0.224461\nTrain Epoch: 5 [8960/60000 (15%)]\tLoss: 0.095605\nTrain Epoch: 5 [9600/60000 (16%)]\tLoss: 0.196891\nTrain Epoch: 5 [10240/60000 (17%)]\tLoss: 0.218742\nTrain Epoch: 5 [10880/60000 (18%)]\tLoss: 0.071347\nTrain Epoch: 5 [11520/60000 (19%)]\tLoss: 0.403286\nTrain Epoch: 5 [12160/60000 (20%)]\tLoss: 0.149740\nTrain Epoch: 5 [12800/60000 (21%)]\tLoss: 0.160939\nTrain Epoch: 5 [13440/60000 (22%)]\tLoss: 0.236512\nTrain Epoch: 5 [14080/60000 (23%)]\tLoss: 0.348727\nTrain Epoch: 5 [14720/60000 (25%)]\tLoss: 0.190054\nTrain Epoch: 5 [15360/60000 (26%)]\tLoss: 0.272029\nTrain Epoch: 5 [16000/60000 (27%)]\tLoss: 0.427739\nTrain Epoch: 5 [16640/60000 (28%)]\tLoss: 0.322332\nTrain Epoch: 5 [17280/60000 (29%)]\tLoss: 0.141410\nTrain Epoch: 5 [17920/60000 (30%)]\tLoss: 0.098900\nTrain Epoch: 5 [18560/60000 (31%)]\tLoss: 0.252387\nTrain Epoch: 5 [19200/60000 (32%)]\tLoss: 0.182150\nTrain Epoch: 5 [19840/60000 (33%)]\tLoss: 0.133239\nTrain Epoch: 5 [20480/60000 (34%)]\tLoss: 0.126683\nTrain Epoch: 5 [21120/60000 (35%)]\tLoss: 0.370189\nTrain Epoch: 5 [21760/60000 (36%)]\tLoss: 0.162514\nTrain Epoch: 5 [22400/60000 (37%)]\tLoss: 0.272352\nTrain Epoch: 5 [23040/60000 (38%)]\tLoss: 0.298543\nTrain Epoch: 5 [23680/60000 (39%)]\tLoss: 0.235891\nTrain Epoch: 5 [24320/60000 (41%)]\tLoss: 0.187710\nTrain Epoch: 5 [24960/60000 (42%)]\tLoss: 0.185363\nTrain Epoch: 5 [25600/60000 (43%)]\tLoss: 0.193369\nTrain Epoch: 5 [26240/60000 (44%)]\tLoss: 0.155984\nTrain Epoch: 5 [26880/60000 (45%)]\tLoss: 0.388923\nTrain Epoch: 5 [27520/60000 (46%)]\tLoss: 0.192868\nTrain Epoch: 5 [28160/60000 (47%)]\tLoss: 0.535787\nTrain Epoch: 5 [28800/60000 (48%)]\tLoss: 0.161020\nTrain Epoch: 5 [29440/60000 (49%)]\tLoss: 0.242179\nTrain Epoch: 5 [30080/60000 (50%)]\tLoss: 0.136554\nTrain Epoch: 5 [30720/60000 (51%)]\tLoss: 0.190672\nTrain Epoch: 5 [31360/60000 (52%)]\tLoss: 0.118027\nTrain Epoch: 5 [32000/60000 (53%)]\tLoss: 0.278750\nTrain Epoch: 5 [32640/60000 (54%)]\tLoss: 0.418058\nTrain Epoch: 5 [33280/60000 (55%)]\tLoss: 0.287063\nTrain Epoch: 5 [33920/60000 (57%)]\tLoss: 0.279596\nTrain Epoch: 5 [34560/60000 (58%)]\tLoss: 0.181579\nTrain Epoch: 5 [35200/60000 (59%)]\tLoss: 0.443592\nTrain Epoch: 5 [35840/60000 (60%)]\tLoss: 0.095470\nTrain Epoch: 5 [36480/60000 (61%)]\tLoss: 0.277385\nTrain Epoch: 5 [37120/60000 (62%)]\tLoss: 0.263358\nTrain Epoch: 5 [37760/60000 (63%)]\tLoss: 0.190867\nTrain Epoch: 5 [38400/60000 (64%)]\tLoss: 0.176580\nTrain Epoch: 5 [39040/60000 (65%)]\tLoss: 0.360235\nTrain Epoch: 5 [39680/60000 (66%)]\tLoss: 0.172416\nTrain Epoch: 5 [40320/60000 (67%)]\tLoss: 0.174126\nTrain Epoch: 5 [40960/60000 (68%)]\tLoss: 0.202162\nTrain Epoch: 5 [41600/60000 (69%)]\tLoss: 0.196991\nTrain Epoch: 5 [42240/60000 (70%)]\tLoss: 0.224622\nTrain Epoch: 5 [42880/60000 (71%)]\tLoss: 0.180406\nTrain Epoch: 5 [43520/60000 (72%)]\tLoss: 0.060447\nTrain Epoch: 5 [44160/60000 (74%)]\tLoss: 0.322497\nTrain Epoch: 5 [44800/60000 (75%)]\tLoss: 0.239324\nTrain Epoch: 5 [45440/60000 (76%)]\tLoss: 0.348920\nTrain Epoch: 5 [46080/60000 (77%)]\tLoss: 0.240017\nTrain Epoch: 5 [46720/60000 (78%)]\tLoss: 0.237575\nTrain Epoch: 5 [47360/60000 (79%)]\tLoss: 0.142648\nTrain Epoch: 5 [48000/60000 (80%)]\tLoss: 0.227562\nTrain Epoch: 5 [48640/60000 (81%)]\tLoss: 0.254358\nTrain Epoch: 5 [49280/60000 (82%)]\tLoss: 0.135818\nTrain Epoch: 5 [49920/60000 (83%)]\tLoss: 0.386120\nTrain Epoch: 5 [50560/60000 (84%)]\tLoss: 0.328150\nTrain Epoch: 5 [51200/60000 (85%)]\tLoss: 0.276833\nTrain Epoch: 5 [51840/60000 (86%)]\tLoss: 0.308869\nTrain Epoch: 5 [52480/60000 (87%)]\tLoss: 0.246442\nTrain Epoch: 5 [53120/60000 (88%)]\tLoss: 0.240874\nTrain Epoch: 5 [53760/60000 (90%)]\tLoss: 0.114337\nTrain Epoch: 5 [54400/60000 (91%)]\tLoss: 0.217325\nTrain Epoch: 5 [55040/60000 (92%)]\tLoss: 0.223010\nTrain Epoch: 5 [55680/60000 (93%)]\tLoss: 0.138459\nTrain Epoch: 5 [56320/60000 (94%)]\tLoss: 0.283678\nTrain Epoch: 5 [56960/60000 (95%)]\tLoss: 0.158834\nTrain Epoch: 5 [57600/60000 (96%)]\tLoss: 0.164267\nTrain Epoch: 5 [58240/60000 (97%)]\tLoss: 0.290795\nTrain Epoch: 5 [58880/60000 (98%)]\tLoss: 0.451639\nTrain Epoch: 5 [59520/60000 (99%)]\tLoss: 0.349018\n\nTest set: Average loss: 0.0797, Accuracy: 9758/10000 (98%)\n\nTrain Epoch: 6 [0/60000 (0%)]\tLoss: 0.311334\nTrain Epoch: 6 [640/60000 (1%)]\tLoss: 0.129143\nTrain Epoch: 6 [1280/60000 (2%)]\tLoss: 0.227222\nTrain Epoch: 6 [1920/60000 (3%)]\tLoss: 0.157591\nTrain Epoch: 6 [2560/60000 (4%)]\tLoss: 0.205490\nTrain Epoch: 6 [3200/60000 (5%)]\tLoss: 0.421089\nTrain Epoch: 6 [3840/60000 (6%)]\tLoss: 0.157544\nTrain Epoch: 6 [4480/60000 (7%)]\tLoss: 0.087023\nTrain Epoch: 6 [5120/60000 (9%)]\tLoss: 0.130669\nTrain Epoch: 6 [5760/60000 (10%)]\tLoss: 0.059450\nTrain Epoch: 6 [6400/60000 (11%)]\tLoss: 0.121786\nTrain Epoch: 6 [7040/60000 (12%)]\tLoss: 0.177859\nTrain Epoch: 6 [7680/60000 (13%)]\tLoss: 0.217464\nTrain Epoch: 6 [8320/60000 (14%)]\tLoss: 0.183426\nTrain Epoch: 6 [8960/60000 (15%)]\tLoss: 0.237282\nTrain Epoch: 6 [9600/60000 (16%)]\tLoss: 0.210031\nTrain Epoch: 6 [10240/60000 (17%)]\tLoss: 0.256110\nTrain Epoch: 6 [10880/60000 (18%)]\tLoss: 0.155481\nTrain Epoch: 6 [11520/60000 (19%)]\tLoss: 0.166967\nTrain Epoch: 6 [12160/60000 (20%)]\tLoss: 0.144590\nTrain Epoch: 6 [12800/60000 (21%)]\tLoss: 0.229593\nTrain Epoch: 6 [13440/60000 (22%)]\tLoss: 0.092102\nTrain Epoch: 6 [14080/60000 (23%)]\tLoss: 0.144247\nTrain Epoch: 6 [14720/60000 (25%)]\tLoss: 0.459083\nTrain Epoch: 6 [15360/60000 (26%)]\tLoss: 0.174974\nTrain Epoch: 6 [16000/60000 (27%)]\tLoss: 0.146433\nTrain Epoch: 6 [16640/60000 (28%)]\tLoss: 0.291392\nTrain Epoch: 6 [17280/60000 (29%)]\tLoss: 0.203127\nTrain Epoch: 6 [17920/60000 (30%)]\tLoss: 0.255063\nTrain Epoch: 6 [18560/60000 (31%)]\tLoss: 0.167576\nTrain Epoch: 6 [19200/60000 (32%)]\tLoss: 0.171914\nTrain Epoch: 6 [19840/60000 (33%)]\tLoss: 0.215950\nTrain Epoch: 6 [20480/60000 (34%)]\tLoss: 0.246624\nTrain Epoch: 6 [21120/60000 (35%)]\tLoss: 0.242730\nTrain Epoch: 6 [21760/60000 (36%)]\tLoss: 0.345666\nTrain Epoch: 6 [22400/60000 (37%)]\tLoss: 0.229078\nTrain Epoch: 6 [23040/60000 (38%)]\tLoss: 0.283169\nTrain Epoch: 6 [23680/60000 (39%)]\tLoss: 0.246430\nTrain Epoch: 6 [24320/60000 (41%)]\tLoss: 0.217211\nTrain Epoch: 6 [24960/60000 (42%)]\tLoss: 0.168141\nTrain Epoch: 6 [25600/60000 (43%)]\tLoss: 0.297715\nTrain Epoch: 6 [26240/60000 (44%)]\tLoss: 0.200130\nTrain Epoch: 6 [26880/60000 (45%)]\tLoss: 0.344390\nTrain Epoch: 6 [27520/60000 (46%)]\tLoss: 0.246202\nTrain Epoch: 6 [28160/60000 (47%)]\tLoss: 0.272422\nTrain Epoch: 6 [28800/60000 (48%)]\tLoss: 0.117001\nTrain Epoch: 6 [29440/60000 (49%)]\tLoss: 0.246031\nTrain Epoch: 6 [30080/60000 (50%)]\tLoss: 0.138119\nTrain Epoch: 6 [30720/60000 (51%)]\tLoss: 0.214345\nTrain Epoch: 6 [31360/60000 (52%)]\tLoss: 0.134483\nTrain Epoch: 6 [32000/60000 (53%)]\tLoss: 0.201771\nTrain Epoch: 6 [32640/60000 (54%)]\tLoss: 0.201668\nTrain Epoch: 6 [33280/60000 (55%)]\tLoss: 0.111183\nTrain Epoch: 6 [33920/60000 (57%)]\tLoss: 0.093289\nTrain Epoch: 6 [34560/60000 (58%)]\tLoss: 0.171475\nTrain Epoch: 6 [35200/60000 (59%)]\tLoss: 0.178729\nTrain Epoch: 6 [35840/60000 (60%)]\tLoss: 0.144986\nTrain Epoch: 6 [36480/60000 (61%)]\tLoss: 0.302206\nTrain Epoch: 6 [37120/60000 (62%)]\tLoss: 0.389723\nTrain Epoch: 6 [37760/60000 (63%)]\tLoss: 0.268302\nTrain Epoch: 6 [38400/60000 (64%)]\tLoss: 0.358240\nTrain Epoch: 6 [39040/60000 (65%)]\tLoss: 0.241359\nTrain Epoch: 6 [39680/60000 (66%)]\tLoss: 0.282464\nTrain Epoch: 6 [40320/60000 (67%)]\tLoss: 0.205064\nTrain Epoch: 6 [40960/60000 (68%)]\tLoss: 0.106739\nTrain Epoch: 6 [41600/60000 (69%)]\tLoss: 0.076333\nTrain Epoch: 6 [42240/60000 (70%)]\tLoss: 0.157558\nTrain Epoch: 6 [42880/60000 (71%)]\tLoss: 0.217494\nTrain Epoch: 6 [43520/60000 (72%)]\tLoss: 0.183687\nTrain Epoch: 6 [44160/60000 (74%)]\tLoss: 0.217155\nTrain Epoch: 6 [44800/60000 (75%)]\tLoss: 0.108482\nTrain Epoch: 6 [45440/60000 (76%)]\tLoss: 0.324247\nTrain Epoch: 6 [46080/60000 (77%)]\tLoss: 0.352494\nTrain Epoch: 6 [46720/60000 (78%)]\tLoss: 0.163462\nTrain Epoch: 6 [47360/60000 (79%)]\tLoss: 0.154820\nTrain Epoch: 6 [48000/60000 (80%)]\tLoss: 0.174164\nTrain Epoch: 6 [48640/60000 (81%)]\tLoss: 0.196258\nTrain Epoch: 6 [49280/60000 (82%)]\tLoss: 0.226030\nTrain Epoch: 6 [49920/60000 (83%)]\tLoss: 0.306971\nTrain Epoch: 6 [50560/60000 (84%)]\tLoss: 0.387282\nTrain Epoch: 6 [51200/60000 (85%)]\tLoss: 0.213550\nTrain Epoch: 6 [51840/60000 (86%)]\tLoss: 0.133755\nTrain Epoch: 6 [52480/60000 (87%)]\tLoss: 0.176044\nTrain Epoch: 6 [53120/60000 (88%)]\tLoss: 0.282900\nTrain Epoch: 6 [53760/60000 (90%)]\tLoss: 0.154157\nTrain Epoch: 6 [54400/60000 (91%)]\tLoss: 0.138895\nTrain Epoch: 6 [55040/60000 (92%)]\tLoss: 0.254137\nTrain Epoch: 6 [55680/60000 (93%)]\tLoss: 0.107765\nTrain Epoch: 6 [56320/60000 (94%)]\tLoss: 0.118788\nTrain Epoch: 6 [56960/60000 (95%)]\tLoss: 0.142051\nTrain Epoch: 6 [57600/60000 (96%)]\tLoss: 0.176375\nTrain Epoch: 6 [58240/60000 (97%)]\tLoss: 0.131573\nTrain Epoch: 6 [58880/60000 (98%)]\tLoss: 0.347166\nTrain Epoch: 6 [59520/60000 (99%)]\tLoss: 0.217951\n\nTest set: Average loss: 0.0690, Accuracy: 9776/10000 (98%)\n\nTrain Epoch: 7 [0/60000 (0%)]\tLoss: 0.142441\nTrain Epoch: 7 [640/60000 (1%)]\tLoss: 0.078599\nTrain Epoch: 7 [1280/60000 (2%)]\tLoss: 0.121731\nTrain Epoch: 7 [1920/60000 (3%)]\tLoss: 0.070044\nTrain Epoch: 7 [2560/60000 (4%)]\tLoss: 0.224216\nTrain Epoch: 7 [3200/60000 (5%)]\tLoss: 0.104122\nTrain Epoch: 7 [3840/60000 (6%)]\tLoss: 0.228575\nTrain Epoch: 7 [4480/60000 (7%)]\tLoss: 0.377044\nTrain Epoch: 7 [5120/60000 (9%)]\tLoss: 0.296184\nTrain Epoch: 7 [5760/60000 (10%)]\tLoss: 0.099891\nTrain Epoch: 7 [6400/60000 (11%)]\tLoss: 0.269691\nTrain Epoch: 7 [7040/60000 (12%)]\tLoss: 0.240640\nTrain Epoch: 7 [7680/60000 (13%)]\tLoss: 0.171192\nTrain Epoch: 7 [8320/60000 (14%)]\tLoss: 0.306889\nTrain Epoch: 7 [8960/60000 (15%)]\tLoss: 0.238503\nTrain Epoch: 7 [9600/60000 (16%)]\tLoss: 0.286252\nTrain Epoch: 7 [10240/60000 (17%)]\tLoss: 0.171058\nTrain Epoch: 7 [10880/60000 (18%)]\tLoss: 0.208866\nTrain Epoch: 7 [11520/60000 (19%)]\tLoss: 0.418091\nTrain Epoch: 7 [12160/60000 (20%)]\tLoss: 0.115058\nTrain Epoch: 7 [12800/60000 (21%)]\tLoss: 0.159557\nTrain Epoch: 7 [13440/60000 (22%)]\tLoss: 0.085076\nTrain Epoch: 7 [14080/60000 (23%)]\tLoss: 0.244673\nTrain Epoch: 7 [14720/60000 (25%)]\tLoss: 0.316326\nTrain Epoch: 7 [15360/60000 (26%)]\tLoss: 0.370775\nTrain Epoch: 7 [16000/60000 (27%)]\tLoss: 0.235262\nTrain Epoch: 7 [16640/60000 (28%)]\tLoss: 0.296188\nTrain Epoch: 7 [17280/60000 (29%)]\tLoss: 0.224960\nTrain Epoch: 7 [17920/60000 (30%)]\tLoss: 0.162341\nTrain Epoch: 7 [18560/60000 (31%)]\tLoss: 0.136551\nTrain Epoch: 7 [19200/60000 (32%)]\tLoss: 0.111435\nTrain Epoch: 7 [19840/60000 (33%)]\tLoss: 0.173483\nTrain Epoch: 7 [20480/60000 (34%)]\tLoss: 0.170351\nTrain Epoch: 7 [21120/60000 (35%)]\tLoss: 0.109828\nTrain Epoch: 7 [21760/60000 (36%)]\tLoss: 0.219692\nTrain Epoch: 7 [22400/60000 (37%)]\tLoss: 0.085780\nTrain Epoch: 7 [23040/60000 (38%)]\tLoss: 0.076800\nTrain Epoch: 7 [23680/60000 (39%)]\tLoss: 0.163377\nTrain Epoch: 7 [24320/60000 (41%)]\tLoss: 0.178391\nTrain Epoch: 7 [24960/60000 (42%)]\tLoss: 0.311988\nTrain Epoch: 7 [25600/60000 (43%)]\tLoss: 0.215559\nTrain Epoch: 7 [26240/60000 (44%)]\tLoss: 0.199207\nTrain Epoch: 7 [26880/60000 (45%)]\tLoss: 0.201917\nTrain Epoch: 7 [27520/60000 (46%)]\tLoss: 0.163283\nTrain Epoch: 7 [28160/60000 (47%)]\tLoss: 0.107533\nTrain Epoch: 7 [28800/60000 (48%)]\tLoss: 0.046209\nTrain Epoch: 7 [29440/60000 (49%)]\tLoss: 0.173062\nTrain Epoch: 7 [30080/60000 (50%)]\tLoss: 0.088925\nTrain Epoch: 7 [30720/60000 (51%)]\tLoss: 0.068962\nTrain Epoch: 7 [31360/60000 (52%)]\tLoss: 0.223214\nTrain Epoch: 7 [32000/60000 (53%)]\tLoss: 0.096083\nTrain Epoch: 7 [32640/60000 (54%)]\tLoss: 0.327635\nTrain Epoch: 7 [33280/60000 (55%)]\tLoss: 0.278620\nTrain Epoch: 7 [33920/60000 (57%)]\tLoss: 0.223806\nTrain Epoch: 7 [34560/60000 (58%)]\tLoss: 0.121638\nTrain Epoch: 7 [35200/60000 (59%)]\tLoss: 0.182739\nTrain Epoch: 7 [35840/60000 (60%)]\tLoss: 0.172866\nTrain Epoch: 7 [36480/60000 (61%)]\tLoss: 0.180873\nTrain Epoch: 7 [37120/60000 (62%)]\tLoss: 0.298984\nTrain Epoch: 7 [37760/60000 (63%)]\tLoss: 0.251939\nTrain Epoch: 7 [38400/60000 (64%)]\tLoss: 0.105321\nTrain Epoch: 7 [39040/60000 (65%)]\tLoss: 0.200500\nTrain Epoch: 7 [39680/60000 (66%)]\tLoss: 0.309791\nTrain Epoch: 7 [40320/60000 (67%)]\tLoss: 0.114949\nTrain Epoch: 7 [40960/60000 (68%)]\tLoss: 0.066153\nTrain Epoch: 7 [41600/60000 (69%)]\tLoss: 0.327437\nTrain Epoch: 7 [42240/60000 (70%)]\tLoss: 0.179023\nTrain Epoch: 7 [42880/60000 (71%)]\tLoss: 0.089861\nTrain Epoch: 7 [43520/60000 (72%)]\tLoss: 0.111230\nTrain Epoch: 7 [44160/60000 (74%)]\tLoss: 0.108233\nTrain Epoch: 7 [44800/60000 (75%)]\tLoss: 0.145669\nTrain Epoch: 7 [45440/60000 (76%)]\tLoss: 0.122024\nTrain Epoch: 7 [46080/60000 (77%)]\tLoss: 0.083490\nTrain Epoch: 7 [46720/60000 (78%)]\tLoss: 0.116002\nTrain Epoch: 7 [47360/60000 (79%)]\tLoss: 0.200240\nTrain Epoch: 7 [48000/60000 (80%)]\tLoss: 0.363707\nTrain Epoch: 7 [48640/60000 (81%)]\tLoss: 0.294594\nTrain Epoch: 7 [49280/60000 (82%)]\tLoss: 0.127643\nTrain Epoch: 7 [49920/60000 (83%)]\tLoss: 0.202008\nTrain Epoch: 7 [50560/60000 (84%)]\tLoss: 0.159551\nTrain Epoch: 7 [51200/60000 (85%)]\tLoss: 0.221197\nTrain Epoch: 7 [51840/60000 (86%)]\tLoss: 0.266463\nTrain Epoch: 7 [52480/60000 (87%)]\tLoss: 0.073967\nTrain Epoch: 7 [53120/60000 (88%)]\tLoss: 0.350092\nTrain Epoch: 7 [53760/60000 (90%)]\tLoss: 0.106500\nTrain Epoch: 7 [54400/60000 (91%)]\tLoss: 0.208859\nTrain Epoch: 7 [55040/60000 (92%)]\tLoss: 0.209937\nTrain Epoch: 7 [55680/60000 (93%)]\tLoss: 0.215286\nTrain Epoch: 7 [56320/60000 (94%)]\tLoss: 0.117026\nTrain Epoch: 7 [56960/60000 (95%)]\tLoss: 0.132321\nTrain Epoch: 7 [57600/60000 (96%)]\tLoss: 0.286004\nTrain Epoch: 7 [58240/60000 (97%)]\tLoss: 0.170485\nTrain Epoch: 7 [58880/60000 (98%)]\tLoss: 0.196613\nTrain Epoch: 7 [59520/60000 (99%)]\tLoss: 0.293870\n\nTest set: Average loss: 0.0657, Accuracy: 9801/10000 (98%)\n\nTrain Epoch: 8 [0/60000 (0%)]\tLoss: 0.315451\nTrain Epoch: 8 [640/60000 (1%)]\tLoss: 0.114413\nTrain Epoch: 8 [1280/60000 (2%)]\tLoss: 0.129036\nTrain Epoch: 8 [1920/60000 (3%)]\tLoss: 0.141999\nTrain Epoch: 8 [2560/60000 (4%)]\tLoss: 0.118697\nTrain Epoch: 8 [3200/60000 (5%)]\tLoss: 0.126823\nTrain Epoch: 8 [3840/60000 (6%)]\tLoss: 0.053924\nTrain Epoch: 8 [4480/60000 (7%)]\tLoss: 0.296224\nTrain Epoch: 8 [5120/60000 (9%)]\tLoss: 0.121338\nTrain Epoch: 8 [5760/60000 (10%)]\tLoss: 0.255161\nTrain Epoch: 8 [6400/60000 (11%)]\tLoss: 0.170684\nTrain Epoch: 8 [7040/60000 (12%)]\tLoss: 0.092008\nTrain Epoch: 8 [7680/60000 (13%)]\tLoss: 0.283091\nTrain Epoch: 8 [8320/60000 (14%)]\tLoss: 0.027133\nTrain Epoch: 8 [8960/60000 (15%)]\tLoss: 0.195686\nTrain Epoch: 8 [9600/60000 (16%)]\tLoss: 0.343612\nTrain Epoch: 8 [10240/60000 (17%)]\tLoss: 0.108563\nTrain Epoch: 8 [10880/60000 (18%)]\tLoss: 0.223832\nTrain Epoch: 8 [11520/60000 (19%)]\tLoss: 0.175617\nTrain Epoch: 8 [12160/60000 (20%)]\tLoss: 0.145828\nTrain Epoch: 8 [12800/60000 (21%)]\tLoss: 0.178722\nTrain Epoch: 8 [13440/60000 (22%)]\tLoss: 0.151158\nTrain Epoch: 8 [14080/60000 (23%)]\tLoss: 0.183155\nTrain Epoch: 8 [14720/60000 (25%)]\tLoss: 0.110281\nTrain Epoch: 8 [15360/60000 (26%)]\tLoss: 0.282224\nTrain Epoch: 8 [16000/60000 (27%)]\tLoss: 0.097411\nTrain Epoch: 8 [16640/60000 (28%)]\tLoss: 0.264533\nTrain Epoch: 8 [17280/60000 (29%)]\tLoss: 0.194778\nTrain Epoch: 8 [17920/60000 (30%)]\tLoss: 0.235924\nTrain Epoch: 8 [18560/60000 (31%)]\tLoss: 0.236801\nTrain Epoch: 8 [19200/60000 (32%)]\tLoss: 0.178174\nTrain Epoch: 8 [19840/60000 (33%)]\tLoss: 0.218752\nTrain Epoch: 8 [20480/60000 (34%)]\tLoss: 0.208353\nTrain Epoch: 8 [21120/60000 (35%)]\tLoss: 0.193034\nTrain Epoch: 8 [21760/60000 (36%)]\tLoss: 0.138453\nTrain Epoch: 8 [22400/60000 (37%)]\tLoss: 0.175271\nTrain Epoch: 8 [23040/60000 (38%)]\tLoss: 0.157295\nTrain Epoch: 8 [23680/60000 (39%)]\tLoss: 0.156248\nTrain Epoch: 8 [24320/60000 (41%)]\tLoss: 0.153413\nTrain Epoch: 8 [24960/60000 (42%)]\tLoss: 0.084870\nTrain Epoch: 8 [25600/60000 (43%)]\tLoss: 0.150966\nTrain Epoch: 8 [26240/60000 (44%)]\tLoss: 0.160973\nTrain Epoch: 8 [26880/60000 (45%)]\tLoss: 0.231433\nTrain Epoch: 8 [27520/60000 (46%)]\tLoss: 0.144396\nTrain Epoch: 8 [28160/60000 (47%)]\tLoss: 0.200417\nTrain Epoch: 8 [28800/60000 (48%)]\tLoss: 0.152939\nTrain Epoch: 8 [29440/60000 (49%)]\tLoss: 0.109962\nTrain Epoch: 8 [30080/60000 (50%)]\tLoss: 0.134907\nTrain Epoch: 8 [30720/60000 (51%)]\tLoss: 0.088782\nTrain Epoch: 8 [31360/60000 (52%)]\tLoss: 0.129031\nTrain Epoch: 8 [32000/60000 (53%)]\tLoss: 0.184744\nTrain Epoch: 8 [32640/60000 (54%)]\tLoss: 0.155463\nTrain Epoch: 8 [33280/60000 (55%)]\tLoss: 0.174192\nTrain Epoch: 8 [33920/60000 (57%)]\tLoss: 0.172103\nTrain Epoch: 8 [34560/60000 (58%)]\tLoss: 0.201503\nTrain Epoch: 8 [35200/60000 (59%)]\tLoss: 0.287885\nTrain Epoch: 8 [35840/60000 (60%)]\tLoss: 0.133675\nTrain Epoch: 8 [36480/60000 (61%)]\tLoss: 0.243534\nTrain Epoch: 8 [37120/60000 (62%)]\tLoss: 0.196020\nTrain Epoch: 8 [37760/60000 (63%)]\tLoss: 0.101380\nTrain Epoch: 8 [38400/60000 (64%)]\tLoss: 0.108299\nTrain Epoch: 8 [39040/60000 (65%)]\tLoss: 0.159048\nTrain Epoch: 8 [39680/60000 (66%)]\tLoss: 0.204734\nTrain Epoch: 8 [40320/60000 (67%)]\tLoss: 0.238383\nTrain Epoch: 8 [40960/60000 (68%)]\tLoss: 0.592663\nTrain Epoch: 8 [41600/60000 (69%)]\tLoss: 0.116080\nTrain Epoch: 8 [42240/60000 (70%)]\tLoss: 0.039719\nTrain Epoch: 8 [42880/60000 (71%)]\tLoss: 0.148190\nTrain Epoch: 8 [43520/60000 (72%)]\tLoss: 0.241765\nTrain Epoch: 8 [44160/60000 (74%)]\tLoss: 0.235942\nTrain Epoch: 8 [44800/60000 (75%)]\tLoss: 0.175277\nTrain Epoch: 8 [45440/60000 (76%)]\tLoss: 0.143608\nTrain Epoch: 8 [46080/60000 (77%)]\tLoss: 0.114853\nTrain Epoch: 8 [46720/60000 (78%)]\tLoss: 0.232284\nTrain Epoch: 8 [47360/60000 (79%)]\tLoss: 0.321072\nTrain Epoch: 8 [48000/60000 (80%)]\tLoss: 0.310765\nTrain Epoch: 8 [48640/60000 (81%)]\tLoss: 0.102070\nTrain Epoch: 8 [49280/60000 (82%)]\tLoss: 0.372137\nTrain Epoch: 8 [49920/60000 (83%)]\tLoss: 0.109344\nTrain Epoch: 8 [50560/60000 (84%)]\tLoss: 0.382866\nTrain Epoch: 8 [51200/60000 (85%)]\tLoss: 0.270467\nTrain Epoch: 8 [51840/60000 (86%)]\tLoss: 0.061211\nTrain Epoch: 8 [52480/60000 (87%)]\tLoss: 0.233812\nTrain Epoch: 8 [53120/60000 (88%)]\tLoss: 0.176510\nTrain Epoch: 8 [53760/60000 (90%)]\tLoss: 0.120536\nTrain Epoch: 8 [54400/60000 (91%)]\tLoss: 0.241959\nTrain Epoch: 8 [55040/60000 (92%)]\tLoss: 0.183966\nTrain Epoch: 8 [55680/60000 (93%)]\tLoss: 0.125279\nTrain Epoch: 8 [56320/60000 (94%)]\tLoss: 0.152849\nTrain Epoch: 8 [56960/60000 (95%)]\tLoss: 0.219788\nTrain Epoch: 8 [57600/60000 (96%)]\tLoss: 0.077843\nTrain Epoch: 8 [58240/60000 (97%)]\tLoss: 0.304191\nTrain Epoch: 8 [58880/60000 (98%)]\tLoss: 0.363550\nTrain Epoch: 8 [59520/60000 (99%)]\tLoss: 0.326421\n\nTest set: Average loss: 0.0632, Accuracy: 9807/10000 (98%)\n\nTrain Epoch: 9 [0/60000 (0%)]\tLoss: 0.140965\nTrain Epoch: 9 [640/60000 (1%)]\tLoss: 0.206063\nTrain Epoch: 9 [1280/60000 (2%)]\tLoss: 0.189364\nTrain Epoch: 9 [1920/60000 (3%)]\tLoss: 0.367962\nTrain Epoch: 9 [2560/60000 (4%)]\tLoss: 0.108362\nTrain Epoch: 9 [3200/60000 (5%)]\tLoss: 0.109142\nTrain Epoch: 9 [3840/60000 (6%)]\tLoss: 0.270022\nTrain Epoch: 9 [4480/60000 (7%)]\tLoss: 0.200647\nTrain Epoch: 9 [5120/60000 (9%)]\tLoss: 0.162118\nTrain Epoch: 9 [5760/60000 (10%)]\tLoss: 0.167245\nTrain Epoch: 9 [6400/60000 (11%)]\tLoss: 0.188903\nTrain Epoch: 9 [7040/60000 (12%)]\tLoss: 0.280550\nTrain Epoch: 9 [7680/60000 (13%)]\tLoss: 0.116265\nTrain Epoch: 9 [8320/60000 (14%)]\tLoss: 0.602693\nTrain Epoch: 9 [8960/60000 (15%)]\tLoss: 0.148682\nTrain Epoch: 9 [9600/60000 (16%)]\tLoss: 0.225477\nTrain Epoch: 9 [10240/60000 (17%)]\tLoss: 0.133642\nTrain Epoch: 9 [10880/60000 (18%)]\tLoss: 0.116083\nTrain Epoch: 9 [11520/60000 (19%)]\tLoss: 0.348113\nTrain Epoch: 9 [12160/60000 (20%)]\tLoss: 0.219562\nTrain Epoch: 9 [12800/60000 (21%)]\tLoss: 0.117716\nTrain Epoch: 9 [13440/60000 (22%)]\tLoss: 0.218508\nTrain Epoch: 9 [14080/60000 (23%)]\tLoss: 0.323755\nTrain Epoch: 9 [14720/60000 (25%)]\tLoss: 0.211174\nTrain Epoch: 9 [15360/60000 (26%)]\tLoss: 0.451853\nTrain Epoch: 9 [16000/60000 (27%)]\tLoss: 0.155174\nTrain Epoch: 9 [16640/60000 (28%)]\tLoss: 0.134905\nTrain Epoch: 9 [17280/60000 (29%)]\tLoss: 0.172428\nTrain Epoch: 9 [17920/60000 (30%)]\tLoss: 0.306172\nTrain Epoch: 9 [18560/60000 (31%)]\tLoss: 0.133085\nTrain Epoch: 9 [19200/60000 (32%)]\tLoss: 0.449040\nTrain Epoch: 9 [19840/60000 (33%)]\tLoss: 0.084722\nTrain Epoch: 9 [20480/60000 (34%)]\tLoss: 0.188086\nTrain Epoch: 9 [21120/60000 (35%)]\tLoss: 0.222472\nTrain Epoch: 9 [21760/60000 (36%)]\tLoss: 0.275132\nTrain Epoch: 9 [22400/60000 (37%)]\tLoss: 0.287421\nTrain Epoch: 9 [23040/60000 (38%)]\tLoss: 0.105733\nTrain Epoch: 9 [23680/60000 (39%)]\tLoss: 0.157949\nTrain Epoch: 9 [24320/60000 (41%)]\tLoss: 0.073462\nTrain Epoch: 9 [24960/60000 (42%)]\tLoss: 0.240201\nTrain Epoch: 9 [25600/60000 (43%)]\tLoss: 0.060848\nTrain Epoch: 9 [26240/60000 (44%)]\tLoss: 0.173801\nTrain Epoch: 9 [26880/60000 (45%)]\tLoss: 0.148143\nTrain Epoch: 9 [27520/60000 (46%)]\tLoss: 0.180779\nTrain Epoch: 9 [28160/60000 (47%)]\tLoss: 0.393192\nTrain Epoch: 9 [28800/60000 (48%)]\tLoss: 0.239243\nTrain Epoch: 9 [29440/60000 (49%)]\tLoss: 0.064345\nTrain Epoch: 9 [30080/60000 (50%)]\tLoss: 0.315658\nTrain Epoch: 9 [30720/60000 (51%)]\tLoss: 0.105739\nTrain Epoch: 9 [31360/60000 (52%)]\tLoss: 0.246439\nTrain Epoch: 9 [32000/60000 (53%)]\tLoss: 0.145221\nTrain Epoch: 9 [32640/60000 (54%)]\tLoss: 0.287615\nTrain Epoch: 9 [33280/60000 (55%)]\tLoss: 0.310717\nTrain Epoch: 9 [33920/60000 (57%)]\tLoss: 0.322760\nTrain Epoch: 9 [34560/60000 (58%)]\tLoss: 0.294462\nTrain Epoch: 9 [35200/60000 (59%)]\tLoss: 0.168697\nTrain Epoch: 9 [35840/60000 (60%)]\tLoss: 0.153495\nTrain Epoch: 9 [36480/60000 (61%)]\tLoss: 0.146843\nTrain Epoch: 9 [37120/60000 (62%)]\tLoss: 0.176622\nTrain Epoch: 9 [37760/60000 (63%)]\tLoss: 0.400825\nTrain Epoch: 9 [38400/60000 (64%)]\tLoss: 0.197533\nTrain Epoch: 9 [39040/60000 (65%)]\tLoss: 0.109741\nTrain Epoch: 9 [39680/60000 (66%)]\tLoss: 0.049689\nTrain Epoch: 9 [40320/60000 (67%)]\tLoss: 0.253087\nTrain Epoch: 9 [40960/60000 (68%)]\tLoss: 0.222971\nTrain Epoch: 9 [41600/60000 (69%)]\tLoss: 0.095467\nTrain Epoch: 9 [42240/60000 (70%)]\tLoss: 0.043052\nTrain Epoch: 9 [42880/60000 (71%)]\tLoss: 0.105347\nTrain Epoch: 9 [43520/60000 (72%)]\tLoss: 0.133342\nTrain Epoch: 9 [44160/60000 (74%)]\tLoss: 0.266375\nTrain Epoch: 9 [44800/60000 (75%)]\tLoss: 0.156081\nTrain Epoch: 9 [45440/60000 (76%)]\tLoss: 0.206747\nTrain Epoch: 9 [46080/60000 (77%)]\tLoss: 0.158561\nTrain Epoch: 9 [46720/60000 (78%)]\tLoss: 0.416148\nTrain Epoch: 9 [47360/60000 (79%)]\tLoss: 0.147991\nTrain Epoch: 9 [48000/60000 (80%)]\tLoss: 0.112567\nTrain Epoch: 9 [48640/60000 (81%)]\tLoss: 0.100846\nTrain Epoch: 9 [49280/60000 (82%)]\tLoss: 0.103345\nTrain Epoch: 9 [49920/60000 (83%)]\tLoss: 0.205922\nTrain Epoch: 9 [50560/60000 (84%)]\tLoss: 0.097610\nTrain Epoch: 9 [51200/60000 (85%)]\tLoss: 0.071967\nTrain Epoch: 9 [51840/60000 (86%)]\tLoss: 0.068125\nTrain Epoch: 9 [52480/60000 (87%)]\tLoss: 0.057313\nTrain Epoch: 9 [53120/60000 (88%)]\tLoss: 0.162428\nTrain Epoch: 9 [53760/60000 (90%)]\tLoss: 0.097614\nTrain Epoch: 9 [54400/60000 (91%)]\tLoss: 0.075174\nTrain Epoch: 9 [55040/60000 (92%)]\tLoss: 0.095530\nTrain Epoch: 9 [55680/60000 (93%)]\tLoss: 0.142529\nTrain Epoch: 9 [56320/60000 (94%)]\tLoss: 0.132163\nTrain Epoch: 9 [56960/60000 (95%)]\tLoss: 0.201932\nTrain Epoch: 9 [57600/60000 (96%)]\tLoss: 0.238939\nTrain Epoch: 9 [58240/60000 (97%)]\tLoss: 0.037396\nTrain Epoch: 9 [58880/60000 (98%)]\tLoss: 0.077772\nTrain Epoch: 9 [59520/60000 (99%)]\tLoss: 0.177759\n\nTest set: Average loss: 0.0559, Accuracy: 9813/10000 (98%)\n\nTrain Epoch: 10 [0/60000 (0%)]\tLoss: 0.112115\nTrain Epoch: 10 [640/60000 (1%)]\tLoss: 0.089035\nTrain Epoch: 10 [1280/60000 (2%)]\tLoss: 0.177925\nTrain Epoch: 10 [1920/60000 (3%)]\tLoss: 0.147350\nTrain Epoch: 10 [2560/60000 (4%)]\tLoss: 0.170561\nTrain Epoch: 10 [3200/60000 (5%)]\tLoss: 0.207891\nTrain Epoch: 10 [3840/60000 (6%)]\tLoss: 0.340160\nTrain Epoch: 10 [4480/60000 (7%)]\tLoss: 0.229032\nTrain Epoch: 10 [5120/60000 (9%)]\tLoss: 0.335419\nTrain Epoch: 10 [5760/60000 (10%)]\tLoss: 0.101219\nTrain Epoch: 10 [6400/60000 (11%)]\tLoss: 0.085085\nTrain Epoch: 10 [7040/60000 (12%)]\tLoss: 0.053658\nTrain Epoch: 10 [7680/60000 (13%)]\tLoss: 0.106224\nTrain Epoch: 10 [8320/60000 (14%)]\tLoss: 0.146947\nTrain Epoch: 10 [8960/60000 (15%)]\tLoss: 0.210157\nTrain Epoch: 10 [9600/60000 (16%)]\tLoss: 0.167598\nTrain Epoch: 10 [10240/60000 (17%)]\tLoss: 0.184822\nTrain Epoch: 10 [10880/60000 (18%)]\tLoss: 0.149518\nTrain Epoch: 10 [11520/60000 (19%)]\tLoss: 0.091374\nTrain Epoch: 10 [12160/60000 (20%)]\tLoss: 0.331635\nTrain Epoch: 10 [12800/60000 (21%)]\tLoss: 0.345818\nTrain Epoch: 10 [13440/60000 (22%)]\tLoss: 0.057789\nTrain Epoch: 10 [14080/60000 (23%)]\tLoss: 0.189208\nTrain Epoch: 10 [14720/60000 (25%)]\tLoss: 0.116747\nTrain Epoch: 10 [15360/60000 (26%)]\tLoss: 0.101344\nTrain Epoch: 10 [16000/60000 (27%)]\tLoss: 0.116675\nTrain Epoch: 10 [16640/60000 (28%)]\tLoss: 0.158562\nTrain Epoch: 10 [17280/60000 (29%)]\tLoss: 0.173697\nTrain Epoch: 10 [17920/60000 (30%)]\tLoss: 0.167972\nTrain Epoch: 10 [18560/60000 (31%)]\tLoss: 0.125186\nTrain Epoch: 10 [19200/60000 (32%)]\tLoss: 0.116458\nTrain Epoch: 10 [19840/60000 (33%)]\tLoss: 0.107688\nTrain Epoch: 10 [20480/60000 (34%)]\tLoss: 0.131942\nTrain Epoch: 10 [21120/60000 (35%)]\tLoss: 0.189690\nTrain Epoch: 10 [21760/60000 (36%)]\tLoss: 0.106075\nTrain Epoch: 10 [22400/60000 (37%)]\tLoss: 0.100791\nTrain Epoch: 10 [23040/60000 (38%)]\tLoss: 0.151750\nTrain Epoch: 10 [23680/60000 (39%)]\tLoss: 0.242852\nTrain Epoch: 10 [24320/60000 (41%)]\tLoss: 0.367772\nTrain Epoch: 10 [24960/60000 (42%)]\tLoss: 0.160668\nTrain Epoch: 10 [25600/60000 (43%)]\tLoss: 0.209858\nTrain Epoch: 10 [26240/60000 (44%)]\tLoss: 0.267443\nTrain Epoch: 10 [26880/60000 (45%)]\tLoss: 0.134159\nTrain Epoch: 10 [27520/60000 (46%)]\tLoss: 0.176844\nTrain Epoch: 10 [28160/60000 (47%)]\tLoss: 0.083609\nTrain Epoch: 10 [28800/60000 (48%)]\tLoss: 0.093472\nTrain Epoch: 10 [29440/60000 (49%)]\tLoss: 0.133502\nTrain Epoch: 10 [30080/60000 (50%)]\tLoss: 0.207314\nTrain Epoch: 10 [30720/60000 (51%)]\tLoss: 0.095819\nTrain Epoch: 10 [31360/60000 (52%)]\tLoss: 0.165338\nTrain Epoch: 10 [32000/60000 (53%)]\tLoss: 0.172792\nTrain Epoch: 10 [32640/60000 (54%)]\tLoss: 0.200346\nTrain Epoch: 10 [33280/60000 (55%)]\tLoss: 0.188566\nTrain Epoch: 10 [33920/60000 (57%)]\tLoss: 0.063107\nTrain Epoch: 10 [34560/60000 (58%)]\tLoss: 0.208076\nTrain Epoch: 10 [35200/60000 (59%)]\tLoss: 0.336500\nTrain Epoch: 10 [35840/60000 (60%)]\tLoss: 0.098523\nTrain Epoch: 10 [36480/60000 (61%)]\tLoss: 0.239501\nTrain Epoch: 10 [37120/60000 (62%)]\tLoss: 0.108441\nTrain Epoch: 10 [37760/60000 (63%)]\tLoss: 0.161891\nTrain Epoch: 10 [38400/60000 (64%)]\tLoss: 0.232178\nTrain Epoch: 10 [39040/60000 (65%)]\tLoss: 0.281599\nTrain Epoch: 10 [39680/60000 (66%)]\tLoss: 0.202701\nTrain Epoch: 10 [40320/60000 (67%)]\tLoss: 0.313276\nTrain Epoch: 10 [40960/60000 (68%)]\tLoss: 0.149932\nTrain Epoch: 10 [41600/60000 (69%)]\tLoss: 0.078690\nTrain Epoch: 10 [42240/60000 (70%)]\tLoss: 0.068174\nTrain Epoch: 10 [42880/60000 (71%)]\tLoss: 0.114682\nTrain Epoch: 10 [43520/60000 (72%)]\tLoss: 0.278032\nTrain Epoch: 10 [44160/60000 (74%)]\tLoss: 0.207701\nTrain Epoch: 10 [44800/60000 (75%)]\tLoss: 0.149129\nTrain Epoch: 10 [45440/60000 (76%)]\tLoss: 0.209997\nTrain Epoch: 10 [46080/60000 (77%)]\tLoss: 0.181944\nTrain Epoch: 10 [46720/60000 (78%)]\tLoss: 0.071149\nTrain Epoch: 10 [47360/60000 (79%)]\tLoss: 0.088598\nTrain Epoch: 10 [48000/60000 (80%)]\tLoss: 0.196593\nTrain Epoch: 10 [48640/60000 (81%)]\tLoss: 0.195960\nTrain Epoch: 10 [49280/60000 (82%)]\tLoss: 0.227564\nTrain Epoch: 10 [49920/60000 (83%)]\tLoss: 0.051203\nTrain Epoch: 10 [50560/60000 (84%)]\tLoss: 0.105916\nTrain Epoch: 10 [51200/60000 (85%)]\tLoss: 0.176384\nTrain Epoch: 10 [51840/60000 (86%)]\tLoss: 0.054657\nTrain Epoch: 10 [52480/60000 (87%)]\tLoss: 0.107465\nTrain Epoch: 10 [53120/60000 (88%)]\tLoss: 0.072626\nTrain Epoch: 10 [53760/60000 (90%)]\tLoss: 0.187904\nTrain Epoch: 10 [54400/60000 (91%)]\tLoss: 0.104509\nTrain Epoch: 10 [55040/60000 (92%)]\tLoss: 0.174006\nTrain Epoch: 10 [55680/60000 (93%)]\tLoss: 0.122760\nTrain Epoch: 10 [56320/60000 (94%)]\tLoss: 0.150131\nTrain Epoch: 10 [56960/60000 (95%)]\tLoss: 0.076365\nTrain Epoch: 10 [57600/60000 (96%)]\tLoss: 0.127536\nTrain Epoch: 10 [58240/60000 (97%)]\tLoss: 0.233154\nTrain Epoch: 10 [58880/60000 (98%)]\tLoss: 0.113188\nTrain Epoch: 10 [59520/60000 (99%)]\tLoss: 0.282389\n\nTest set: Average loss: 0.0531, Accuracy: 9837/10000 (98%)\n\n\n\nThe experiment completed successfully. Finalizing run...\nLogging experiment finalizing status in history service\n\n\nRun is completed.", - "run_properties": { - "SendToClient": "1", - "arguments": "--output-dir ./outputs", - "created_utc": "2018-09-25T11:56:04.832205Z", - "distributed_processes": [], - "end_time_utc": "2018-09-25T12:15:57.841467Z", - "log_files": { - "azureml-logs/55_batchai_execution.txt": "https://onnxamlistorageekgyifen.blob.core.windows.net/azureml/ExperimentRun/pytorch1-mnist_1537876563990/azureml-logs/55_batchai_execution.txt?sv=2017-04-17&sr=b&sig=NNkIC62xdG1h6156XtjtgwTJ1ScXlfxhBiBicNNoExE%3D&st=2018-09-25T12%3A06%3A00Z&se=2018-09-25T20%3A16%3A00Z&sp=r", - "azureml-logs/60_control_log.txt": "https://onnxamlistorageekgyifen.blob.core.windows.net/azureml/ExperimentRun/pytorch1-mnist_1537876563990/azureml-logs/60_control_log.txt?sv=2017-04-17&sr=b&sig=i2mtPt6w5xHkEjpkyfl%2BSD1GPpIdpzIbY6sVUQ62QMo%3D&st=2018-09-25T12%3A06%3A00Z&se=2018-09-25T20%3A16%3A00Z&sp=r", - "azureml-logs/80_driver_log.txt": "https://onnxamlistorageekgyifen.blob.core.windows.net/azureml/ExperimentRun/pytorch1-mnist_1537876563990/azureml-logs/80_driver_log.txt?sv=2017-04-17&sr=b&sig=CvqNHP18huWuXWdi%2BeiPcnztgJfI1iQQ6fV6Li25z1Y%3D&st=2018-09-25T12%3A06%3A00Z&se=2018-09-25T20%3A16%3A00Z&sp=r", - "azureml-logs/azureml.log": "https://onnxamlistorageekgyifen.blob.core.windows.net/azureml/ExperimentRun/pytorch1-mnist_1537876563990/azureml-logs/azureml.log?sv=2017-04-17&sr=b&sig=UTaxvUU4Ua%2FpsXPwQnSIV%2FbKK1zERtclIIjcTfbcSzQ%3D&st=2018-09-25T12%3A06%3A00Z&se=2018-09-25T20%3A16%3A00Z&sp=r" - }, - "properties": { - "ContentSnapshotId": "727976ee-33bf-44c7-af65-ef1a1cbd2980", - "azureml.runsource": "experiment" - }, - "run_duration": "0:19:53", - "run_id": "pytorch1-mnist_1537876563990", - "script_name": "mnist.py", - "status": "Completed", - "tags": {} - }, - "widget_settings": {}, - "workbench_uri": "https://mlworkspace.azure.ai/portal/subscriptions/75f78a03-482f-4fd8-8c71-5ddc08f92726/resourceGroups/onnxdemos/providers/Microsoft.MachineLearningServices/workspaces/onnx-aml-ignite-demo/experiment/pytorch1-mnist/run/pytorch1-mnist_1537876563990" - } - } - }, - "version_major": 2, - "version_minor": 0 - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/00.pipeline-setup.ipynb b/pipeline/00.pipeline-setup.ipynb deleted file mode 100644 index 69f07953..00000000 --- a/pipeline/00.pipeline-setup.ipynb +++ /dev/null @@ -1,81 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Packages" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install pandas\n", - "!pip install requests" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Widgets\n", - "Install the following widgets to see the status of each run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!jupyter nbextension install --py --user azureml.widgets\n", - "!jupyter nbextension enable --py --user azureml.widgets" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "authors": [ - { - "name": "hichando" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/20news.pkl b/pipeline/20news.pkl deleted file mode 100644 index 396e0177537fec9411c623e06be07d6fd55e46ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5610406 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�eG@8Y=BL_o<3Q=XQ9{LEH{}^ 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%0D+R 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

Vik1PryU}C8}vKha(|A5S`i6#ZMH%^>i6# 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℞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

P4E9LN{Pqp5H}ct9KT!qbCIpD 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:Zx1)TA;ibQ!R+iL;)K zeWECEAs4`L6yJ2eU?1G7#e#@MSJ`fwNydHD^ZCScLlfaQar_dCg<&=^Q{6q{e{uSc zU=+9!Gnaq2@pYr(8UW{smfUNZf<{kXB2`Y2@%4384AF`Oh*)qvUZnFdUH@0&Pe(-R zX@q@-Bujto9VFDa*tgkcuq!Fu@-vzSVgy7vV9zj%CSJqj^uC38@>MxFdOFsu&rjd{ z$d<7L*pFWm=Y|5#Pl?=C$|WYBZhc3Cr!DW`xhJo&@A2mHy=#+yy!Mzxy?fXFWprsv zG@Z(MeSL4aZ|t2hddm}95Uu3#RdV&R-^VQzYkG6M`snMmjW%q4uaO^d=@^WMWa>w& z>yIC8=6#rxeWsQFJKx!ehkVP)*ML)6_Nf|+$?K@lN`@$+w*v4Z!VI=uU=Jt zdE7QM716YA%}y=8^g3+P>keM%KaEf*A3kyUb_;VFH;aZQ|8~y7!@4FT8|Z7_t%N6F)kN*RBoUL)4~qk*8KFPJ z>7$wGSBjlr1G3Y!x4k00nSZYSdSd(;0g4SsE`{mAIGyD)$yE<)We76-Y=={KW1 z#u3X9_&2UyU;6m{>r10gZhZ8yz!+{^W&s}dOH!czp1c0v*!8pUW#I~o?v#0IXeX7A z@F|G<^%>(U(efC4glX_AXyLUqP~HVV7qUbTe)i7%4amA_$V>&(j$fzCL-G|_wfKNW zi40N3HD|2cHI6gRO&&S0Rg#nOlEsl$fp2deqc{Tm#z6w64xiynRf*Sy z_~eAtqro=S%!JEV#;0XrVNeU($^>sya~mg^;Hz!JiwOOHMvri+j_9GK!QmDG z{Ql6%5@khQnuW*rM{6!!3N(2*=r_N#nD>So8n2_k!Oc{LG08sPk3|45h2s)Lfu~0%67_ir=~EM?tGhz)X*i^ zL@@*$*(OFsJzz67&}sRVnw5hMl@LL4tJ-)h1yjo;a2CS`$PhC(agV*1L zAl(=ueTZKX^5PAUh$+>Loq;Sr?0yX96XM!Z!4`MLCLxenvjhl}Wa=N(oeNFXf}3G# zKkVo(cC}4Z1LcI{qzCwp{RPAwIc8l&^ZMvErOM(T}gtS zO#e`Ve)^k)dWf%yW~KOv&AkvYRhPVDZH8y+q2!aPkxp2 z4jU`onU9(-G)TUe)RuMhsiG znITRf^xQ4Iec0v*U4E$>%b`{@@eKwW8NE46xrEfs+>c7sp-7#dh@e(e@tXT^iCeoq2pEbK3 zbx`I61(XyA-ZLhv4Sqtq|&m4vICDt zpU0_(Z|BAACf1(Y5IY7MGz*J0|7>~Var0ox0j0fS-E|+KT_zY0wVo?#NM7OQ zANk#s(`3=Wt&m626W7(&o<2HIk8PDBc!;?YTO{a>|E~MC_*K%3v*`tY;Ets22&4~0 zxS-E1m)_JwkLD1n*vV@-(l|{FqEYG+Zk;wO<`~nsW&WPMd`*p(S)V#5#BlTwl&0#L z={*W+(MTM=f)dMg?`agi$U#%Q5=$m>r=1rsi5T|nBFPXhcxK^Y8z`%(C5T@kLZMBz zt39nSHuuL*@>Xh9(FJ#DM$w|tViN01e+wM1MEef5u4;QXF0#e7;8Za2L-{Y7+3LfU z^+$c;O)(K$JW7K=EVe7_pM*O-hnv7ho6b{I{My??#6 zeR1J+)N2Ij)V{@pnxZ*=%!>sVA(60fA~;^M2sJkl@fgh!Iue&iRr79<@@T+G6ILLS zqVi)7BoGlqXq*>bp!fPJ;!ufUat5bojoqAxOO96nne zm=k#pZ8X(E!<5>j@KQErB$NMC339NvEkZ?1&slQySpq=Brht-U^1Q@Z5Yme;)CIeoLA{0;8O zba}k71BUsFr&I^TLjh_%I>BQXMTRFLntH!7qC2g&58Njhf{TEV4G;Yl;M8#t+95R%eS|(KDhKSdrb3JU!u8Bu^SEfbGjI z6Rq!{U}b)fg&0iR7OKLE1>>Amr%O;%4}Rhi#v%oTac)SapljAE$?O_N>j-B|?AIed^`n6_XXkzo{Q=9_Jx?o=Y` z4R)c~#D5KRxWESd$KtbQg?DV7M_Ie$nP9C_h&Ba?)K!}kWJpy+bFd(|QUaN+yjCg? z_Bwqw;AJr_gtl5?2oc;nBO-Wd}QK{VlzsY=A3W9o%ms5mX* zt_3XP9AG3THS`N@GFuhk|8c$pT_@c zlD^4mo&Foj!>EGs>9&f$RSB*v^vWdGfcW_K8JPYAf zu5|deZjwd}D`~rB)z)B<<5#O}(?!7%R>HlmDeGBeDilnrWzMdHLc z*`fnkG^#g&-?iYeG7oH9{`#}=0Y-pw{@|R^T3im$`V@h0(|bG&pdHO0g40VLOn_#@ zS(#68poeEwAL0fg)uWY2HnGQx{k-&Gv8&5C)b|3!4cd}7_^O;%ts8z+kVMfje~6FK zke!rapmsszITj#qk_prDDmV`tbfP7^R=t9Hh;*c%b1glfX%A~HLOf{NU^kDZT>`Rx zm$*0Uq{s(8q4+m(Y8mB}^A9q$&E`_9`#l4|>RhA}CtK9T;hrP0L^)N0R4Dx39fA%()e7mnq>5?D*PsLkeorm%s&)L>t^((_6Hh-hUt*o2j^bZcHnQ9kHE(cdQQjVg>%h)Q+fl3X4EM(09*}xFH)X^_ z8gNn~F1~;y=*h?+kS*7(29s>Hofk=|pgrRucY8K_~%|F|@?#pI8H zZ@e-UAkkJ4(PIYYK+@NX5X!)8#>-O_%6rr}hD)~*NBO`J-6Yc7y8s1UWAoUOFV&iP zwKBKet+WX0Xh(6{e$B5iTqqdsD3-_RxHbOW$#d)H08CMxqu>?2v?EJ`E; z8!r6`1REX5NQ?}a%8%S?iD)HO=4l1Ag>Ry{%J%`0AzpcIJm~x<(#5FD5Cehzn64(% zPalG#-iM&^KRLj6`Y?IMGY8YDDFYg$spV1!%Nf9ay=tsyoxN*r4*5G(dlm&E?svf5 z)iu3mG)<|b9!z4pl{y8(X>oG`)+Yz>O0 z7@?<@!^X)q(jG&`zCsu9{s*41#{G1A3I25w={Youcd57K8m z-;q0T8vI3+8sC@5gj*Hy*BEpTNhK5 z*m1a8&O>5=MC>kJ#VV)^CCIsFLjTzwT>9`-Jch}jw+t+1emAl+FGD7#EZ;AIzh_?q zykMI!26UtC-dqVvH$u<;Uc8{kq6O8uEfN(>mN6d32;|ahdgpX}W0n@7g=7yE0}@(* zew6_HJ~&NU7^lE9+@)q$GNbXFVN>sA|0dMg%!Ca+u56D0(Jajpa0!?rK|BjUp9uZX zS%SJB0JQ=ry~%ay9{92~eEBse@-=+&CATzIiISyFCMWxYXP6cRJo5B7jwu+(@ZG}$ zd)3n%{rKt%eI7sh;FFI>Y9uWWpftFwWPC(4C6j-Fc|-7un!XG>;WD`q$_2>+OCAv@ z-?Bq=xbu^x(>Cj06^H+nY8>JbH^-l2W7pk!T_q`26yrCMhn25&>gjz0)*@5+;zhr; zpsCkLt~nG)4A`*qnY-s=Y}pSienI6XTOuF);uWd=&(N%ND}A%noO&d0F-A6!4BpRO z9{;-!7dk0J9t4AjQ|nQAl;iuW4;};`RYv!S`RBwqZyADz7k?xRfIAy#Wi*wOLMt%g zlz3;@R2CKaoF(yF9A)?b*D9H#9_We+=Rt0;NeKgzNFFoRQdkocA!y8W#RkH<+zv-)C@C`&^0+x?quyQayvn}x2lhr$}LebA) z-*iW5r`If~PrI*)F(7f`rOD)k*(_2rUWK5c@wB@L-t9x6q=H2i2BucJ>z`z z^yrA{KFcTq|FWZ0m*Hooqh1hZjwz-_!VD~gOkwB;mGjQydrM!htv-W_(LIB3s6oAe zGFVu-%~yxRtkrZ2d@^v_Af{n67mm^A!C1gd%*?p6EX)yE%wQmP~D&bA)m zMd|=3s>Nr(yPP_j34AZjkTxEyKbz<_jAGLirfa&}P}e;THFtV0fpfKFVlXm#!!CTg zvSD}kawCul1zFiUyN!i^mD)qVhR7mCWf`nZ)uj49CL5~(_s%T)r~v|nTRxX8ov45V zM=SAq3w~$G0Ur;~M7Q9CV-n>kIATo{Q;y!^lHBRPCb#&L=!l!}S&lB651xeF#}krM zj+=bQ#^4UBRF&*~!Va#yxcK1*W1eQjpIrf88HS`EDRxjjdhy!<9Xk+rsJ%FHEny;( zB~3GNL1M{50GkNtrFkB;IP|;4M$Bi+#>#lEnW6})frGVMmh`j2NK|;eRRPJ0W`rAKF!tyoF3*efO0sYegU3@~#Z(-)AQ*vbF|Y+k3YYlrA=j?z z@H8x?GAqtjtWA~C&>h~V=#nokyaKxpIsG0AL4yS>U2+*;N$?rBRjJX<1(xn1>JQsn zXvXG2w3(uoG6x`abTxLPK5;fB7UCW;a;&d3oS8YayMz1PledtCkP}E6EAs<86w&%s*F!)sR>)fi`UBN^2t~^{8 zXu(RFaT7>!h7?|I<1JK2z;Qq(LbzPTcA&taG0R5l?DmMN)hh~yE1T^5F$!mOgnyDt zD6c^I%}D^wq+Im6;Xn$3ar&Gr-Xgtd`o~hoA3+_OH0B3yO9Xhsa8Ju~LkiM+T!IZw zCg)-N8cL)G9vuV{(752z#8LHzVVL2W#s1sU!*_Cy+V-TZw+zx7=C5rez%l=Mlv(rCkL8=bJ8pQ(f(2C)*53N&h5X@yd#;RC^50E?g^oh7q7l5^r*6W@t%< zpdz478-*6?VppuSb22kP=T~eap_WH9C%_!{Hon&# z=bK>5kTWzINmLEi&nsb^5uU8w9e0R~i!J@1`rvZEkpT zE}2&3dvi03WJKWZZfE@#S8$cKIiz;d!ZbCJqRybZltORu1f(xf_2UPxki3>vNWQvq zcmkDs3X54>8{rp6)X@JTFL9*|T;%MXkXePl()>!?%+7{Uk+t#tSFmb?FIoM#5RC&v zTy$d{h7x9s*Fu*w-2PPj(2Bd<|MBYdA4nDd@gM!-7jLf}kN^DI-+s6C{C9u4ckOpy z&=-v2tF6CCKm@6+p58z!zrFW|APG2R|i`Y zU^RThjh7lEjp~p4?9%TE{t|3 zsyru({ymghUD^s6Lfu;r20{{1_1YXg$)ZEgH$hlCboZqJTZ|OEq-5alzEio1|%GVpTN-1cP`U*)$N}{#?X=`=MC!-YPpqZDwfnJ9CJCGyZlX!8kGG+wr%R zd?cyw9js_s!8NGd{b-ir%|C(9{yGm~L0S&|` z6h+3t$RBx9>nU9HiAt?@q6J*xXnLp&sT6|8&K&@NLozBV)iI)qCMi&m#z8fA$OEiI ziA$sSehCgFOcmNyZs9PDQGnJ+(YG-O6lEzt6>p;}&z23#t9CGj6#a3L?4_Q42p`=o z$Q$CgsrgRExe$cLVssB}yj)JLXtj zNW{(cO;%3(!g!&_f@-g~p`4u)e1wQW(@WEw%v^?Ky#;j|rRolnZg^-r^)_dqyLJaP zKM5i?T;#duDqcv;tAcX_oB;YdI9RaW_(u7h)b9|$x6)y-eXV`AdxUQUaCG)Uis@Yc zBQc@wfNE&n*|3Rjn;?blePBgK4cR^zX<3D>usv|et+OtTY~rTDFU{2Ss3XwD6i#C-5Hi*;e>yOB^5AY zf1v^b#}dl=y{bZVT*kz)f)AeJ+}!$ zy@jH{uPS=RT40w}lsx5ipS@YlIWbAEG3XAna#>^r5JwW?D@;cCrN9!5hLcHKiteTFLUpcep!nNx?S&G@D{wb_Pc4 zfiC)nadB6wXyir7l+bJ>vQ?M-Mc<9X7kE4%NZwtITIKSHt$1v`Xk+@XYi0Zuer(%- zvmU%kA56K{$Ecjy^HxDa zbOw(Z5*}QC?^3@>ghc=j9}NM&vv*oyOi3CL042dKk?Ai68At+)7S~^}KsTEq$~=Iw z?yFOj&xOf`j~ArL*wiQk7thng0!(y4P4r-fp@Gc5lc6LAQ%p)@NuUMqWya<3f3>ho zd)R3#dV%{}(3TH3gQq%W46mmC%^rmb1;Rg?gM&dj-^U@CBl`ce4B5wzC%=Dmq>AS-+BHBD??gq0 zt4XP3+yd~mpP!p~a)sW9CuCj=$|}@$)HX^RVkqC6%K`Cu(>D_I@O-1-{tUdpW{ga@ zQBwR`he0{g8O<#aAR^9?PUXnJ3Z~o~h%QK6LM(|k&6Q|#cJ6QG6IjIN?2(?)mt5nR z1C3WY30%VAivyISBv>knU>}lniXD6zrx)It{u{EH_bI!D%S1B(n-?B>Tjctc2iWni zubeF)hcOOVDqhoDTC$okbG>Hlb%>(-1P$w(;`y#`k0q;Wr`^f5ii5q}B-HgHI4xu&~go zoEwC+T*A0DP2If=@eTz?ly{&!y70>`GlT?M1#NMvVKP%V_4MBqY<~vWHZ;1QA6T2% zZ?Kc4C*2ZnNY6r%ZxK)ajx4_fbu~}RIM5PN&{q>FT>4350*Taw!wLbZt(32paOZuYQJtB2}(nINUCEK*?CULJ*d_ zs#*cJkew;hc7hplMOHxYHX3v}tRym&jTY~Gq6F>hF zwm=tg$N@=MMy{$;*`o_hy(*Iwj5V^&0L#q`jp)F%5;cvnB$bSD;E^R|$fG2IcBsa1 z98n%Xh@bhklJ7()+J}vUKBpB@O;KFy`NJh=0sK&+cuO4zp_`ik+vYv!)H3Cnw}J0bltJIRb&I zINQvj2#TZEz<8-eC?O&4#Dh2B8)J(&A(M?gUL~m*5tzsyw7NCkBouY>-fb!#e0t^A zzaE0Q7!kQc_# z@@U5RC93UcgCx7e0BR7Dd8k@65J9%>31+Sv+J&bQOP5*$;c@{fIisd*9l~PnqIV@C z)q=(8{@<_ocDrYIqSz4etfkiRXt70hpW9Em`5m0?;Fx>%s17?grGFKY8M?2&)egh9 z{1pD{OFZ`zbI=9eJR#ITYVaK4Op%152Q(>{Fk%I&sj={W4|eNY@yZukA+`ve@oQ@e zRrS1T>bac=FuCC?WoQbZ=ef6kWp8U zj5FGxRFs*MW@X-ErE)y1@^>dB`hxB6*@6Vsxta_xA~$vRkoDr%>np*|m4|noj0}t2 zB|L@9vZseR?S!<;DtL75qj#@;MB}JeyN7v{DPd%QC#Edrrm+Gd$EF{Rog*YV+ z{2?w%z5ok_Nu+RfMwk7a6(euBtdIBZK3KDDNDA=#5MV_+ zjAm^PM>1rj`xB|l`D z#6VL03|qW7PsgENuPQo`;=q$V*#||tU888-uUt!C0>7GF_?i}}n`?LP`U3cHU{YH} zEP0?(c~Nvw^3SV}kuC|Ov{nDT$slsUP$LTa>0Dfsdn3FO7z!o&_U*s0pXt9Rbp8*7 zm=?=CV6-!pdqHjaNb7#af?Jkx1IXwh0R?Kh00K%5e2u-h{diYcHGd*;%6k#>MzDh- z20PnD5D2|WTOvnyFi`33cc)E?Gb>jbkr5CHGAcE*=~i(E^prSyUOXn z()8bVv;U0}TW`tCxebcF7RK#nRV-hXR`v5Zql&qHWqf8| zB0Ehja4W?;mJZKPkn^fQf|6WR*t<$JdJ58;;hx~gIO5h?t_-eG7Eq*icNQXZ74Tq? zy?n>h|G;(s-@p3BFFw8T*83lD8S{8|@|`MB^4vX~dtBO@POm6w;?(BWt0WT;e{Qy^ z2B#(?L9Trbdl1(bap!Sxyx|`YtbgD1Q!}dga0B#*DxMJS!OPpS6V$Qe8{l1<9+lF^ z(c9p4yfm^OJ9_w9{QZ`rnSNJiQo4Fqy#Pe6)P#xH(LxeHB$^%oL6M~~>(S{_%9EoE zQs|;oqWkKLG@t~3WBL8=huDMa3HTJPmC`NE!0}|b9+J2AIEjqo4Hta`5`UT8s!jtK_SbHF z5kk5s*vNbmEf5AhG~qA|>KdE$guopu;E}Y<$`iA`WaZIB3<`#m?YO52#nN|%yE;NA zKo2z1J!;26D1i)ffcC}_!yhjk% zoaMPQdmSPT54IBvVFZwzoHNj1pqeroeRmbaVZgxTt4>tOhN@PaDcZ7Ua8fcSe@Pzw zUzu^JYtASU&`9Tmv)44h#vCMAu=Bi-?y6q8RAn*{y6wU}gj_ zcE|O%1A!Cdp3`*6Y1VLlD6|u^hg+c-AqNZ+(Vj9alkkK>J*y*A5OFyN?Y7Wi{@{@8 zGR&DhkQaw4A$T5I@k1KIor*jS5a~;kX3OWu>*M8ZJX=R}5p1tngwdTheWcqqj-tE^ zqa|sL!jJTEIv}>_RvCT8_v=XWy!vCP^q|^t8dY{KvGZD4qdf9B?*);jNl%Cg}Wtc;W@$y&{8h+0$P5;LYV1c zn7#QDU5d(ZDMLJ(mxx(g6q&=&+~0Vrt0 zS~`~3BSyI|w`#CvuLg4)|AW_^y*{S#G{*vLoUntm=)ppOWrp@`V{Y=V zpJ8rSM?cBju5jze2-S#WDPf<)IP*ftFhRz8#VG(H9r=um@Iq-`p!oh=zX;H1XSRHZ z{&YV6ih_Basa!KX9Y5KnGn|z+i7>{?_3bK5|CofjwY9aI*n8aGI9jc{mVaUmPj+9i zpd(TRXl3qwePAwsTpe9H?9rfjx0IkGO@~JZJ$)*9ZM+a zGDg9!UfDIsiR{0Mm$j7@TnsFs7t!WeHyAkYtjc~9|l-Nx18AR-I#v-pQ%SKN=)p02&OEGK<#lHX!=k1Z)| zA7@RB#*D#_gR`Y22im)6S<>#=5ANPxukLy%?5rIR!Sr_sBL(i3uUkZy(}BCo@sifS z5y7)8&H`j0qWO7MLznnSMK~^R1jOMjq#mJ_)R5`LEB7|Ah>y9l{%6Lo%RBPIo+V1= z33kBWy2jnmm27CQ2nE$zI}Ff{c>r4_)Mk;E3F?A$t^3eTbsc3ABa{Nh@7fga(xa{I=9sY(O(I z5vZ7j<-05m3ss8h6L?n;EmMNu@C-_R7z4;jRSY<*Aim@Q>@8}S$%nnz$v7q?v+PdPGOW7gP}2;^P=sR8jDTwbAyH} zL#JTxQSeL$!CArC|KfM|PytI6=)MvfW zUfYQe9qMjaHo-^(r{7qK!d8UW*?=gL8(bV$V<)t(h+jwpJt7%5mCILEJ(t(X$${`v zQI#FENLn3Q_6&ls3(MqriXEENjn)qSA)38I&C^G%Xkt$%O;1YECDq;Tx|>QrJDN=2 z5}W^ufAA_YI5FJIW%5Uy6BH8`+Z$Zg%RS*MOY37(F{yWwq$>jS4dLn1w5li59yV=_Doi&A zMX3y57op{axS);V@fjW$LdU4%T*mrvZZ%091bmDm^~iejGE=#W2*5z6uZM$?MfFr8 z1&vq@cJAQ4^N7%1?L!efnp+q{^DGw^v_L|7YY{_aMgoWhB};zIz;dQ4?S& zqKAmiDK_6Hvb*I0%LPFg)c<4~B`JgxC@RFtb~Zx%05>f=g3-3xfV|iXaRs!bO6bEf z0c3R6+_Pec@so}~pt`d?c98ANT4k1PyoKnTIWQ8Y67gv0n zZGv2Et!XL%rIl1=Z%uWDPg^D)J_0+_@{$1sxzm-2Q>Swi^PN%Th-09 zQY9cEBd`xbNoxvK;a;}bv{eZo4aJ0&bW>u(w8A1j<=VLUg!iYZy+98HE=@s-?9>Bs-*yTKIzoj3VUB zA$IbO?S|}vT>!(Y;TS^6;usG-btqEo!!h02#dEhF9+N~(v%+L#)ISx=P~>6RoFS!g zQE~ra1KI+?v=dwxc$hdJ)L6dmJdyn$CJT3m=qB5jl249J-*-7xD8>gGn=JHhlYaQE zv0u`C0y?t$P%aTR!G)nis*j25HShB&ow^Afumi6YLPU3&VKW~zxbb*lizk*&4=D9C z!@9~wSwJg7Cp3JBO=b6Zsz3G!JZv2^-T|>iY7lIgBL7E&H0hViDZTUCoTW2d;I$Ds z&PbsPhN*z^oNq7y&&z6qd2y!)dWsT9xO_mDik@z>QGE+btkkbK{bfSwM__C$U{dV( z$t}9UIPgjblzWwh`7|ua@^BDs$Gg?EErb^9wz(dU^ zVvU{jRc7t(4!M3fI9NTb_Y^F#Y8!tEX4b)0_rRnYC&K8(!5)-kv>_%tly2mhGBU8z z+(mUkHGRZQ3bdKE>T$GinAXaFJ`)ubRo_>i1AQsg@}5atT*6>P+i^MY*n(@7=MwSP z+JH_+(?1oqfAWU}#NmkNt}vKRU=v@Y+vOAG(&3=k@z64v2EN^5_?EV z`HL-@Sje!7$~|$^rsw!plNXB-OuiqZl>1dBC5o++9fT|FZ2+j9I|6UZiZx?q@V3_gj69G|F8ipm-|&EjL5Xm zx&jDW&FBI~*E=a*fsfjLL-%jpgI?q@`Y~*f1MxNV^8*7LDb>LOrP|XBok&!z$T+c2 zuvD3+?CJ-C)`)b0{?(F)!l-i4_xbgFEG~qW4ykkmAta>UDYc}^P=x~u5Ksm&p@r%J z(eRoN!0}Xv*NF$MlM4uB^eSuv9p4*-ZJb}JF-b)aR3Z%fvd}x=nfM_z1RzK2Qw2!y z5S%juU5zkhG$B%?4x$H^wkX<~l8?SxuJS@sFc@r-y%tt}yKAs%J0ox-xy1pnQ`GQI zmDyCmzB!;d0?gC%(fo%1eVN6yX1VcJg@|qF!U55NQLhZ=5-~b9fP4wQ_`S{B{2sjrK40Z%GMt8!IZTE^9cen$tw*7?T6N?(u*d;Jb&KRbC>F()J;@{X9SS ziWGh_X78zQ3MdU5o=tdTa?O@MZ?yTCOy6;V|7kTtv=?ua z&oYXnssW*tMM|Kk{3#~~8dYe6%0J~+?r;t|FJXY`N2ws%wfClfecgzzsEK{pSo83) zfCi20s$r6@Gi3a6oViev{jf#)K#u=%$7_H1lfQ4>`YYbsKhV$}-`k>b?3n&6Mxst> zS@rK<SvUhg+`Ypp3X3;cyN$K?hv67NSe z(DeSs@t3%3Z*QHyq#)+^x%zXwYA!UicYAsBtK~1hSXp_vy!K#nXZg3A>yIWI%WEr> zmGy@_yn0B6BIh`CK&*`9-&26gbbXXBGt3uvRySyHH+lAC?cV*($?Bb_{b8z6R+sO* zHGNl1yox1v$5!{S9QDVLi+ii9r7z& zy2zMPIJiR+g%eica|Yl1m_NVie=dH%zkRSD8&N9Y|M0$LjK@ZjY}o~ESFW>!4tFxf zm(Pzt_qBMpeJD;m@2KZkXy=sdXx~t^E3K%#TiIlMJiW9oG)3gr*YNt2@of_n)%fv+ z0bkY8y~*^~LhXN-*O4U=8j5g3e+aq{W;EA@?;o7JBnPf_CT4lK^cSiI%OZK!h2{qJ z8jdPO>C}7=(66T~P<%qaBJeOFo|d%ljd(K!Vt2gppX0@y(@orb{BgU(Sc4Q8}8x0`7Il#p^sIyNMtekjJ>> z6gHCi6PnxR>hcGbEvRb-IAup0%?Eqq=J@XBWBd$f=TvLpKL|#l_dJ5(PGFq*h0A#k zpr@@9T6Eo|+I3dK@hArda5vLT&qM_BrN~kTQW~$7IYi>=O*lYad>xLWmKb zK3#d7N|d8*3Mb#P*U`@L?ptk;w`$CGHp9Z6tgf!CwgvE?yUX9)954QwjD&0Nj6eQ( z{K*I74?q57G89XnO^8hz14#kN`_IKvQ&`fPBE;U?9Z8Ot1E}v$B6_GYmSx>}c z%%+XB!{+W3LZ!1H>Hw)KFVsZ6x5hp6Jd^80ZcN@^9wWS-mBLc`T$r(@%-74`y!SOF zP4a8Wy(hw`N0uiG<^`wE3kVh3a4MfLuxTCNmy~jx_{cDv-qZ|fE&raN_~4hwmfOSw z1YwfJOWC491LZ&1qv08PxtcAcYp|uG#K%Zmp4Vd>4ByAug8(6%3KRCGW6~$E02OFB zXI&~+q?icKrsCgcTdbPn9No33W5;;PrYex~Gxsukte|tW^p@Cuw)@H$(-!lh?hK19 z&$oiY=U?Eo!<>%YS0QV&YXBsjVS^KKsp1=8m*wcIOqNI4tu7IUv73diz1%fUMc;De#N?o`QPxes=bIEaf zh~RC_9#CFlfmaec8CllS#^TP`$_^yrOL!LihD{%nD#|A$e8LBNJAA%j*+#y#ij>l2 zdiAWU?{|>-HXA1Kgr#MnR3o5%fXfSgX$vLa$%Y6Uj_hDzY)fn(e9rxicZOF*NV8%qsborP^qCKU@AAavck~Dpj_>-00w~|tyadek_-wKNX z3#^`Z*d}ADNXrUm9cKIL#6LStFdA2K!YL5%kZ`uxZ5iQ^5;%E2!G6vO&^f{-pxzuk z+&UzDbwvIqRCaW@yZZ&E;Q1s~G8W0uZ*mLAt9OpdV}>zhlMhI5!$bqH*RS3DH2&i| zyQ+iUUHp1{{rb)8?=M~d@Fol0Oc<|@ZtkdD(CnO$%sJt5u{MZ9tH6#g(7ksUsnrI= zDuwL?(2ZN@Uc!!RU{C2$L)6(Eg*o2tw1Z0%48W-q^N{`2>`6ToY`&Y;)>O1|_X#T~ ztp4iJIu3)D>cPj11y)B34hJ% z{dgWWJwyC?Y@cr(San27I}sQ}FEw2huDxA?Ec?3+V=mH2nn)uLhvUF2dA~lpU0F{e^ z>qe`AVB{kYbcNNj>)JR5TZT)a0K)Y{oF(GTLw|G28^e%{zx5qPe53QoXzl5%k~M?5 zl1AD1tclb@T!qIf6K40SR(VIJfH7?#4(=E)c;B%~<*?48#}B4v8l;YoLeNnqqv!kQ zU{4hqB`1abba@ad+S`Ne(>J3qFO8#nCqS;l0N>K~**7t)r_dP7iNr$M@MWy+@RFG- zPso%2db15UxnhsW8J52=R$6A2r2Z+&Ha!fM4iT9d2K4EuKE8u)ki!|(cpM!U3wu4= zTAZY@$*;l)J5<7ui}6;9RkWG#=!(oEeZuhET*7UPHLE6sNm4cDp~>Ry69?YNI-xn+ zLId%^a~XR<6nl z3%uWN$ZDUb_P3f8XBIHDp#Vyr4l`<#k4ZoF8fE%#VE40?S%Yw}!;B82!yR0OL`=2J z?1H9eJ5nTsDigT<)M1H<(uW$n?Gzc0UCPvZfm}MADu_LzN(@exU!p>#>mcGYK{!~H zYTi%bGUBBdd#aIww#<>j)}2@%j&tsyXDw1Fb$;rj|wA+wJx_s zbQmlv?MRuLD|Uo}yE9h-R}R!-9=sie#uaiJs>0%7^}W)vn%@dTnGYZ7QL9!{oLhCa zJuEwyZG)PLqQ^UhfZ7X%=*k5 z17(pY?49`Yd?oV56)=i#9h$^}*8&z^Xa$ieDhEo)1_0)Uc~rBrY0Xc#LY{=JQA^Ku zTgy8qhg2`!KcJhj`72FZvrA`PR1W}ALg0FC^4-q9+}OL=l)8NI()D{68+c6j)?4Iv zWmtp{GD6u5d?7lZSCLpp5S#3*wAk`$8Jh3;~a zbxb+WxV4KX*QKhNytl+Jv5@eK+eXD?7n%xenEzph;4M}g;jB+b2)sxi zmVD?-YVve;#UOT#7kI)Uv1Clqf%;JS-I-Er8R)Q?B!eT=!>0`_# zi`7!ptdm>-TclM2KyM-1C&L-SZg+b@ZeUf#v|-dpQp-}<{xTnfy_B2s0IxnLfk(e8xN(A1HfVtteR zs(isZ*P3K4v>zBKH?agmQ0v1-%>XZBN4)1U3bJQ}BC2%ra2&n1fx;Y5Fqwd>L=fAn4L-{)y7MOC_$D7cp~B?B)-iWT5m~|U z#4n$GeEo~FV{|QA{BY;M&es0P#A~_otzXW4W;S^Ya{)usFZ+&^Nh(X3v-7n)Z%(i2 z64*<((_R4+VV~n`*&!iBbv$Tt=KXg#o=P0g{vZjoQq+Y-YIa~?ZyLUV)M!q#5CYWK;M<=F_;%IT%3Q7pN>1H;CNBHAf@v1`rfh@2{ zsEF*v0qp>W)v8vT6gj+7!h4QoDJrfbXx6D1HFAQ1*SUI zwwTx(4BV@b4M#$=3JC}y$>qbhBs(Q;nT4}e9Rui|m6PK6UHjN1Z>aGCa^*Im__ATL zi}Ho&QF{inyEuaPMYHhLj^jG~Y}a2Ug!(GVDE;`u_r2c(`>zHCYSvPVZ8O3P1Ry{a zq!c$p+oT1GcJzy1^mtA&fBb41lDoFXz$8-9j3KX!Rr~`3(hcVYoT6lT zlQYLB_M2i!pmK~2?pu`=Q2LAi#C%)o2>M+2%QNS>tpPL4B^(LBMXTXSUvLyfoUOQC zttq9bIYwkoa6}_ll4(rzE}e?&%Dme{hs5-35jBxJq=~*stbkZwd4}_1YNRT=$%9u% z4;TIAo!?xWe88_41oY8hEo%9$pUX; zkxB_vbW=x=MzCIv0p+2k?!tPLtksfp7zd#!s#V03vqk1VxqStQMY-VH#%(fMV}c{+ zAai8yAUAchkT|0QA_HQldwZ;J0I2A9Qrt{evq2ja)y{)8jM~KjSW%v}u4|4>M@3tq z$6qBrSI3KwRrPUFe4Uo8(gc4)qok!GX8d--5eVXI*YK>aJ-WACXv%_6-Rw+C(#ggu zsKErR9E1B(eh$;ip!H-<$;-%Y*fAUB)%sFTp;|LVZ38=Lo6SDsmO23)Nn;+(4<1Dn z9HE7w8mn0bfZ2Q=$^{6@$2ZFs&`ez&TjE)XL=NU5jqnPeDCV$CumdJ|tMX9u8f;Vd zPsX(3vD|ROi0r^jt9C6e+lDYGE+(QTc`}9{Z1L)l_x$6GAsA5}(wV4 ztCMI}+oWi)uxfwXGi$1BA=@2fft|KdX_ErQ^ukuRh0df$0(NbbbbmhA*&`X3k&Q-B zjEc2bX2nSXP*WYj*boY%yn;g~IIS^Tz>e)2k#g z*oK8iSQ_4e*3cab?i{~^-Dyhjqe-El+OI395}yD47C#)2W#m#~N+Y@K@`2KTq0X^ji?m{Y&-Y(|13PR@HM=)G8Smg`!GQQZLuE)3)r?XlAyz-Y`F zEXKhqF~25J;J2KDsyZP^H$OJxUN02S`xSnPR{F{#=|I5hM5}sw(Bn(5aOvvcoGZC{ z^qVj{2luvWKP&I$eCy8Bp2XV`p9s|r#GFRC5`*=WmXlnn#`h$gwwn5~mJ^I{K|c_v zLAgU0a%|)oS5@{!bS_f@m(%x!3|^{py3%a&ndW82l~ut*`dw93y&=Y4J~cs1T!dH1 zUXPlmf=Lnz$31K@ETkwOe5SWuzkm-&^|%angPx4$HN!os?k*Rsnw^T>$8J696s@;Fn?$}Qi zARs7>Qs+`|HzyE_J;J|%%M`Tt4ok8Ibo)jmSGp({+Remzt*c3L6x8H(RyJk^^>|wP zT)zs7W#amXlF|;(d*K<#6y1aY`r26&tR*^tXno`X!9Y^bB2l{LpW=YAq~X=@93M$d z(2y3|H`@l!u~DS=tfwW!Z3nbaU@5j05kOV%h*ZVXapsUskcd_WTHqY<5BCMttyRG= zxiAER5MjXxNiT-HMuvkF@>^`YzabdW43B#;78_#IsXzquL8c zloKgWU^jy-Dc6KrA<{*)=(*T4G*zxc&wZ)DHKz9txrN56UF$2!fe^PA(p`I{B&{cX(zGS9AD zxjDXmXGjAI4J@a-a~55@SR)H%Pshk@S>SkVA>k^nE5K_<+yj&AGMdeB`RsVxR(GB^ zk8g5ijLvkL`7TqIeK@}M>8CfwAK!fc{nMkRPxGI8c)FWN@%Z8Pg9}zTUI9RWLCavJ zGNQ7&WQ@^$W^cGw+{`gFXT6jhL4!o6_#2-tV@Tj!WxtQjkzT>X5cd6n{yghFad!_} z`!%_NZkjS1U~owy>2J|6d-fF`N{}4WCn(z5w6*t8_;I2vKTmDQIeo={7Gj)tP(oCK zEqmuSl?sp}m8fhEvd|C~&&YryH3za7lX}Ntd%L$x3Zxg;qQ=triufl-yVa(KLzj$p zW7RF%BW}rmN&jN~bf1|a2N<>q&h|&TN=&?gd@c2Ehr(COlt?egxOi3MZew^#Vs6Vd z!7m|7^#OA@;WF_d^gtPfv zT)*%vo_a1P(D+X?Z{`BFX%h&;&(xJHCoklpc*bnKolV*UT#8s*^!~&aPq2G<$L@_0 z#2h5&by40vR9x3+k@995eGXlCwWoEL7C2xn^kb40itrr5&e;;jGlOmp7OW`M3sm4y zgF4I!csfE1_`o8J&g*Vtqq7=(2&>3B^T1g|J6GZ{yvCON>f)3{_Zg5qs^N$|BHs`w z=6W3bz$)TTk*VQt8R6$L;^gm@AVjyfQ`NQf|KU~CQI65hxip<6u7ir$nB`@{kKQ** zqo7<0#MXD<$@-LqkayyB#1oHOQMBJ&hA=LZ&1djx)>f(+K0>##aGyMh*Z68lzs8Z*@^~3paa2%oU7}Dn%A3KXSlE zr~$M3dq@I6r9K}fsjR^BRkDLYoETpncJ(LtQ*vORg=Xgujpsi2=)2WN9#{E z@5_C)EOyThccGJw^{4e2>AK@DN%%%8C3E-o>ixAxcgBmW%Nv`#gRAVuryd3YiSW?Ma>6GxFe4qdXkhw*((s(b)YxDee=%FIA22$OQ_2B@x1utvra~x`#E6n^ zn7}~}1PCOjp)vbr#-$Ro1u1^wB}|mOTI?`Pzqm8*()D?phl{Ileb0ke|-=)Mf9dDSgHO=YYv;bTX8x`wDrHTiaJ_ znBvmQ6iJ|;$!&7!&iX86kT@RNFb7YcZO9a+B7!|ye*EC^hK#d>D*TB?4dffe*-FU~ z78*$2dQI=+HxB=-GSzZQUdLA5C7QCecVffeyWH(?65k&(1+p5%N=rT(+TXOP+kV8) z;ZdS;WYfY%pzmnfFkV>*87|XyF+i!wq?6TkNbV)tEW!tKMssMmRfR7=5NoDJk00M? ze3{&7J(kd|i+s4@Ee70+jVl7K1_mVi3-Ctb7g#wxST{%XoaT@o62f#?z_4~`hs6-! zZ`DP5L!+v*LJyG!lp1niM6eC4Mq7GB{HAsq(bCkOGOP+j4njeo$ zoeL66h0Sh?nJVO4`2>X9%o(e(;j6}1jc$^IV+_H*e={mC6rW$88&l?lF1P?_en;hW z*C09F&z*N^m&~S|pLBUxI4g{Y+MXetQ7%6mZcoqT^HpR(U=Ec7I@aqFAd?u?0t!kA zsFf~-1-Dohdzu3S+74n5-^1CN!2q6jO^$^9Vw+Uhq)`NXe#BuFlb|A?m|snEAA%~L zA3SD{@|03-OZLz6ihEDjf=aihAIX9K82&%k1hZwYCS@GDj)jX~;5m47Tp3VM(`gR| zVVrRn3}mFnN;NOH70c%0YjPWpZ$Ete;OT}S#$8ilCyg4?e+0Enm11}r>cenpO-6s} z%8ac;9iUuThV@(4#!s$_mg@uq&PYmO_vFkPncPb56WG+_3ncwX^d{~tD>8KLK%wM3 zEiFwy7BYVXWH!Z5o$l2DoZuolu|a(~Ed~QBm3`dcUU6+PmtksD9GV;3e;Kjh#PTPk z#JPU;xCq;2?<#FL-84Ni3oc$;53jY6 z8~^S0E>H08;qF`0PX*dP0BH9%J~zpw1>+K7CB$uyb&dx`jUq*eA3GFF89|kcF9KjZ zu4?Q#Nc@hD6A|Upv_3vH`>!j=e3m+spv|lum$7R&PiMVDaPQIb#u1OV--j^ksV|QFc1fs6&GOGq?OaQBF%cZ-%N`7 zWRHrkPxmHc2Nw(_ipviM*`x^}9y~N3?fFSl=8#D#*6MW@0T1po$Pa)*FQe&aZsM^- z!I^()X>?DPaRVQH^8Ux~M~a~`V8L-d*FJo>{{u%>($dU4DRsPZXK5|{9$T3`RGSTi zBfzAZ&ui&(e!CR z1s+!xn}bc#xdWCJ`zu^KdnrF*da3nGw#1+zL)6yX-uRX-5h>X++(REJlr5Mawdoud zt%jKV^z1bk@zOA#0_o|W3)!oc+p=c7-gQ^SZ)Zy8-G!V9G6 z(WnA`rUm4y<1D8%QN$~Qn?l8J<%d^J$Mi63jHb$?5fzK6Te2ySc5IF=vIC&O&<3TZ z0vL@N_!PE_m1OjaEBid}x@WG=IFC_-AR|uomR?xtA-k#*>03aDi4a8ZyH1&C)s2;{ z2P3N`ae_6x4H{H%nBD?*dCjbt#;4%(#6OX5n9_6}PLmvP)CJZK+7@fSZKDnq`kIyH z)IiLhy`52PhH5w(-FRpGgj+&E$3e*3u@Qo-P>LWkDAHyb(no3{R}aIp+iL6g%A-Tj zB-?67oqp*qYi@f8?kt03${IJoz-BEaxm*RnAcqk+^kodo|G0>2tU~g z&7UKxfR{<~^ug{&FOfGlF!msumRHetf?;JjHZE4yb7JijBVvUB?t*Y7^Vdm3pX5834&=fwqr`KP(W~Y7 z3t)h95|ldI-AkFigEBXM0|lAx0f!h3IFSJxP&ra5r`8eM-g$WJbb{-zA3l{ zZ*%`79^0&$JW8HHmu9R;VCW1ZAr%yrzaodQdeYO~IiZM-M;QQv2%A0Wg( zP?3*XBp;IZp+#W#m!aGWn~r2X9nhMgh~nwzff;4+o4E9`+Gz)T@C7xFD7}+|=SQ*e z79Zq71YFO4%XQ{=NwT!=2jk@U^+eqfWomcp;)^s>G{wgExDN5*=bvweifCG4%rWf4 zG??h8U^RR_@QJ(&PT;WPTq`-m^GEK$O&E#$qSV-B-{4JdL3MxZ9-Riv!^Gd+JJxs> z74eX?lWfgrIYd|#h}JEO3NvYS3_>U>FCu(UX@2A#)uaa<{=kRO3(7NS!1p!F>- z*|adsL%YM}@`2{bs}wd?Vjp6$io;qT7T`pte%BcgJ-e@vf4BfQ-SNhQhfl`WC)fDZ=oY+-Ll{^p*_A|3@W+UX+$=-fdH2@O z%rU(s&ivQXnTMfIBAz+$J=!cRGvw>1WY3V?Y&_88u|v11R9Z>u6Dfu4Vq8Q>F-@xj z_ktp_lTtyn=CbOfbmSK|1uXK8E%1q%d@I&>Qi41)zXpTY=4fH>Wb2R?>bf#ul0=|r z3u5!?maiYfERmjsvPCMiBrcFvlDWw^o3J=CqWc=39MKE8?pv$lG(|pu=(9FO3J+8p zj7eER^iAh&&A7a{$q92)U;N$rMPLH0@XbtY%;%o5L~P5uTg(k$IGHbL4y-axflQr_ zkzi9c=*SrHXD7F&UwCZ)7drR-gR7L#tF@#pPCUO}bJXn<@PY<5OV@Ej9Gp_WaBFn` z*%DWUZnFrfaK#%ft|H!XgC)c6?5bM*GK?@+aOmAfiq#l$Uv8_zxMp!APmi8Jt0*4W z+T->+1+sLXJlyqq@SpqP>pb%X?SrS=*GZ>7Kb>40z1&VZ_2szcR|Lk`-bzxQ9ev)gKPUp_^gLzHGrZf@Ub0fSr5uPpfh{ zn@m^S)Yrd^n}p|~#ZI8eB7_To)q&ld)G*%%Izh%8fBTx@&%A-l^hb@`rT~_bFvilX zk2z+n1CTxOz`j4Mg;!T!U;V)pbZ9v*C1eV@QgGDr_M6uBgf)?;QVQPU*45`%x8I4h zMJwv1!Qe@F>Ef%Ut#{}#_G`58rRVLpAC|WL?Kk5me|^36102?;)Mgy+-)?o8nd=q*{(Ag6|Nh{-%iK}hvPE;y zF~N1{AWq?hj7VdZ4wm1HPp?g!>GXR2=f=djPPyH*dUE69Pvhj$0#Udo+nB~zG2DSQ zC|>mNfnzuLJL2T@gQj=z2)zNr3c)e3OV=eV30Cy`VHHbbcd?XREREU4@BjKbJPI~` zW$+ooKjJe~I;>pj=aN1T;BK?p!Wm&Rr5!WtY*~y4zH$bj6&{lcOh@g9{jkXxP+Zvj z#`*tdym(5}GaLxl^Y4xKu6u{}fHJ=spZ)Fhe3AYBdb~B+;@{_!=lr`p*|u$=Igtnz z{lz*vnJ1b;Em1Mp@fZXz&y1l5!U{+AUZ_CLLy}F1VhDg6>?t95Ycjnfef^2)Dy!dY zjz9R|X9fQA{S#a*XQafw-okmbb++}APz-lx{TwId^Yg9OGz8eER&Z&XoC)&Pe)j3_ zUK4)7CfzzeIw06>Z;Snd{hxiDEY~ec5BIk&kh5OPw12>>cGDSUpSstjS_}aDq zlX~-K_&eJcmPG6mlDI5p`wZX>J6c)-Zb%Uueaf1`5Jh025;qihef_ES@uMT@$s$DV>m!u#s)fS{3$@_z&w;{t{P^jU#{}1b!A5ZKz^qOT(!cqe zI!-|{xpD>hx=S)RN-ElKTmg_yt^Lu#^y1|?+7Sqkt^+D_=LDrYg~a14XAFVZIX~K3 z!qhweZfgnTMi}!LeEx6#CV6`yY<)BMFKS}Redf1Qi|`pW<2amHsDAlm*%l$C5qA~X zMq6YYau-Z)!H0fi!Xc>Orr>pCcLebUG^$KZc<1eXyu#mY?JV6Rl#%pMLTzWG+o)7| zV|lWI5xx%tLo?%MLLSv zM)>igKl91l2=`@OU!hFx!zAbb;L7s$Y5#A&%|CS1d}9sy_zAdPWB40dxqr_-Y_GO8 zy*a|qEcKu9@ud;IqLT9fOL7h4A#Ne#)XQ`LIVPtC#ebj6JPB?f2(ONx5^l)Pr4j0* z#Y&_8;-%x=xPeE3<`feWSWu~sCuiG}3(8DpKfj-@Djok5RqBoze0%NvYqV-hcA=MK zSOPZpE&3;lO4$UP-;C)#_u#YQQUm3oJC0bK~w5X%7@P-o<(Q3L|} z%Adp^X5okjm@H^a&je%nq+~DFLa>7vuw{~_&x2V2DbYLNzE>2$9Zbj?ywz@m-&_!p zMjwzH`uAl+FoxsVDNeY@ z9yOwJsC8PtIHc|;$s;%x;q7$ZriTMO8MZfCo69iAd^Q)T_T9Px&|`y@SUbqm;At++ z=&rq*i0SK>*~scIb(apmV2rRU=moWkn|Ziqr(;V!g6O4kHzB-|<{G~(uy_~$t9`e? z5$4WTDJ3|=*sB;xA4&L<$_&?1gf(+>ZHN-1Ae6^Z1cE7K;(kkz@E#}vA%V(+`kMlA zj+s-(OV+Ct+*t4zE(t^ySK|S}ZlTIu2aZiVz|GzR=Pq=uy=>}Ggi`8eL2jn3rbamxd z<0!{dl304SF%yaSJI+oz*LdW7(P1`fEHs1$8j^SDrfv!UTzxxazeW3cvTG)r84+Kiw~)~G6mscvg;Q) zvy72MyIiz!Bzo)n+)*N3ud z6~TE^8NDE!k63)m9~p#~CK+iUxXyH>OA1E3%!0(HD8j%*z8zKmr zRok8Rb-`DcPf0SLpa>`Isl0j2yE8(iA(ml_WKegw1px@!45RUg7!x&KClJRiJR|KB z(|nfb1N(5P#&W38dQE-w5i5PxoRXIoSIFi?=4KFZSrjLSqGcOHI3lHeN6*n9w+)TO z?iW<8Yo9`~I@*((Y8indV&VA-Qab4;8LFn<+)p?F$&6FWNGg6o5CsQbLeh+cDf6BA zE4?r;hs$~_8Q4^%fi#V_5$)Q$kVP7fMU$iH2P#wv)yVT)%UYK(bx*S>`Qk<88>y*m zjj{p;#mb=xAe>r3@aM3+&x0uI;%E=2$esEu@MGT6I5yV`Ahk3isL0b`AI1gim}2>p zfNOvZ!0?Okfu%*LcN>yc|d`I35IIM z4M6?YlC&=gh&ED39U;*&Z=toeL_*lal&p+b^ATv70ZogX1;l}k z78XGi_d*Mpfad4Xw79=ux7CR6_eH3wL4L7aYHDicNqqBs3N?F%k1V|Flzdt4hk6zo z5^q5Vo_ROY?cGrqmsR=79@Dv&X99|01YQ(^O<8Rt^(S z8(WmdrP*54et2ADgxAZuTSC2-SB@%w%~jS|L{9FjfUFojE$4&wnL9Ulz+(35rfcW3ppU($Pi)H$eR9LR3U{J zgF@-G%|*hh>rsS{q#Q6FnX8;i427Rv(8xXdJJATQ20V34i?UN3nIwDRrOyw>VNMME%#1*R2FcT z?fk`YQHKF3u*7WIrc>+M`S{&~vv)cCQ@bi4&W@woZdJIU1jBR12wz(@DQjiz|F~wYk2$4vlGYc5SzE4n} zS4kDxZz^b1EE~^r+`S?K_G}+0LOhj-Ai*Nb$)%d{Eb}eQ_F-q_I5QqS_Yk0VGkzB< zhJ&2$zI#xt(IP<$v-Ac;K z9Eu*t2ry0?eJ^1Qmj9~ziZ?3C1PDHo*1RG*{4EuqQ^E;9K%KGBhSvMx*Hi0rp@1Jpk5^h<$EWm{cXwur$`qV9RA2*5RdN}ww}4r zwzbD*F|YaQ`Ic39!00NPD@tDd0WObLkDjCHKRMVjr~YXc(Nb%xt!HowKw&}ycwtrd zK1KgwjvyieqimK^3mP~sb!8A(FB!$VWHMR?BfTgnSa@T~8YjvgaD9&EcBP6V^MA}y zLm5JE?pyb)5coPBbpefJYl(btcaIc&Lj$_np#d=(jPsrZMSKN0tg=Y=KGvdmYE>;f;w=erDw=|$l~lXu zeZ?YI8^e7Ji>PF(q&NASSAsiYa7>^dFVdwvItL#7Aeb9*#(Gfku#O+WwTeOk`V-Cq5{b{HDmH{a z5QSZyW9)fZnOqb<>lWK9QebqCCgZg*H}}Sb`DSh{6e*w_Z+Oy2U!mf}xCTlkwSjO> zvzsbnjkV**MkIR9!UE)=M-)5!FV=iu?Bk4shXQ$HG#qV~J?jV5*U3F<5Aj3dyKIV|Cn+l{4T)P$ zd(rifm#kD_K~^jT9nrLbiZKZIGJazE?sN!Z|Fv%{Cc!I$Ef7KY6@iLoQKHPe4Op7t^(=6}oJ7C4t zIu8|C|5ORTj=me_O<2E9A}7?E*s<_{kgYjmsUNx@J!G^1*z@;Sy|@D^j{YarMW<&J zH^*^w2S5~3C>cQu8AoPI!D737am3-CroRdNlmpq`|7@=N42UB3S9y-k4aR3GiPS-; zsI&nJh|cF#FV8y03t1}bT;K`HYSAL_Dj8!ngIAYiXsSjf(!n)G-FMbHtB^!yW+L1$ z8-WlGQg(#-62G5}#_ShdAjIwEGpXA0g1^yh#oapn(Q|VXx{cWzoj{KfB~kMjnfosTg!`YP075NRwb0P zfa$^fZ7~RD_Czd;je(aiv+li_Eb6Y%GKweZB}x}C161fws2b5?8QPD9k{L|HSh!!> z&>^Qy-Zf}t6X!|+@)k$NDAO5^AQOd~%|Dkk5MJWAIgBI@m3^ITX6|*1Pcvg?HvFe8 z9AJJ4BRxb7!60Mi|Ch7339|D_^SqjPM6CSus!%5KV%Lz!(!{;rO$Ny)OMDod$W zW?Ahj3ip-rO3G4xsBbE5%S6nQ2$rmdA%ZpR*|7pP1OywFY-Y!r-K+@U_xnH3dGAfz zHQj@|%a$_V_q^vk-{0p1sbs4(KPr>6B)&c5DnWHMX)a$gbevB~(%1|Tz)!C0n)lz# zKdab7-XI%##$3!2-<7Mg5u624a+|vqeA+HfT@fmPmADC?8BxL!AyhvSu1-;=F|v^W zM4IKNv6Hy!>P6MVR^0-iAS zHYCD5Ml};N1M!8ph>3d@+p5~oegT+{Xdp+;7F7^c964G|^LCkehRgt`u_4uOFd`A= zb1GVg{8$SA%Phwp$hRp#mD}SWXbbjSpT;NFTZPU!L(estsC@u@e7c9I6=vSiE_tV(EjufgO2i>E=rHH3!9;X* zOB*N~O$X4scRIoy5}#uZet1xhq=74HawZ0u04w!Vjm9Qd;k6QMN;{Efsx=&vhEp$M zCJLnldx8Y!in1dG*D#V&!G?GDG9R$cXn=1_DL)ku4qTOPuE^kqR(55K?^(0}Fmx z-aGfQEwp%MbGuVvHwM4=$M`%K0P(><0Ba&dbl#$Z6;b}8vmX!b44}X`L{{lX_ zzYY_wLY5e2Vq9Qfj-w_4PfJLCCH*-mc%9?c3z_Ym6QVbgU>jGAeIz>5OLcC$H%{v) z7tv68>b1j#?R@mmw;>79(o!}B?V62TBj(`MF#z4}c_{se7-LG1}wA2E! zhBRtPkKjI$60uIt=I?;vcS^p!J~QsSiS&S8+z{Fm{)AxQ4}cIi z8+w6)%{svKA?x6I#Hcmgw58xp$;W+CL1*j-s=1}LUqhg1aMSJje{`{ig*GEAYn8=8#?xqbGG`&^da+Q{iP*45=05kLfJ z%qmL(S%Nt?A>txdp_-6#S*Zc<7+;w&Yo_7yJXS%dn@Qu$Q*aGuP!T&2Kq!foRZ4Pd zayQsQ{IHTOQ91EPbvxH1<#jlB zvBv4}^PW-cy2Rez7*+(&umL`l#ux;bY*12ij6#v%H`W643ZNNahIG&QPou!PB7r|0 z0})ZPHBc3}&2{Bup1~Jm4huNdh!d3O7m~N%2Es0a=!7(CBS;+Za~IQ!XsEv&PO;pZ z_{}FQFoj$-U#a*e|H!q5w^A~F&V9)KZJ#tg2@F2P!DVE+mgwdgc5L4a)wWzA_jbOWK*U}@u zILY#HVIW zlHh+`69LF5({EeSD+3Bqu;6#m>0kl4#j>~rGMS4o^lDFs>0eddBc+ab5-!WjVbACv zF~-Rx93nU%2fFXZ+%tMXC13QgZM7u?ne}F%A>F*n7GzLpO=@LYs&J(SAM5DplF2&g zv?Qo0W@uUt4*c3KW_ESY=~2eibQ+z~7rL|jA^#j`tRf_`Sq&Qt99kk4&CIt}4>>0d zWdBvJXSQu5*K~L;pk2i*!wgcR`uR>d1Bj9&!xG)c>nWR5=5~Y%pL+4*-O~QWapbD3=JbO+XVt; zc99h>Np(8n!_kzLin@o5S;nH^XQ_G>LB1YLk1k9yz%NkaX#^CTZ>lMpVXqOx8`Yoe zt86lMBjG=%&=-#>QlTIvSd>_oe#e3NI>A@s4wM{RfA`)0Xkw3Vh(0CKQx&XzfVS!e z=}1udA}3-gwt=Y7shq9;MsECn2tnmqszmPByFMv*v`n)1(YmJGflF>!_8 zel`DvS8c=b;23T+w-=Psv~bp~O2cq6mX3{ztbz8mHAVuMu^dZUVzA%X%D${?^f=4p z6Da_pPzTAuyblSZ6#C(6VKST%2b>GKKDGR?DPiy>_`wcgw!(P3sylW1uz_LtgzmB7 zy0~-CLt3h2v`(Hx`0DA5indgM;&Co(av|I7He28mf+xJj$Wo5VS#JC3kxnZi$`)x& zojbSpH{4kEX2DvsmoMv&|BNc4r#s{==(ajcQlJAwCGtpMI;*S?;S@hfap}$j0X2X{9I(B_CK~ zqP}&)5D);wd0nQ!NrM05#bF}swy0SMVTLaEavE;%8xSe~;n6Yx+k0N~DE%X(LFN)C z;yMo_-7Gxxpcql=h^$?KMNB%sTd&Q2;x)A?UJOn4nbNA7auZ2{8XKxN;exOFlY*i@ zImFl+2%+AKb9>FU Y>xJ~Xpd*U1iYDxZ|!AC^4)>UCKY>7px7q=?e;~(=SDQpw^ zstK-l6@s)IT9K<2NqC#58G?(})gaA^acV$C{!8Rc43Ty@VoZ5u9 zWGfRJ(lDU|5aS>E)W0dYLeVh`Mz*k$#vHE?#3I?x@gY@4Swlc@`p;0R?aiA0XS*+K zRfU+|7&++qdSZ;SD1wJsIE?HJA5`dkn|McTWp>RSP-(R1snv2Dk&7pm6SRlF)j&$! z*jC`R!N5G{} z7nGeQ&{uXR%bj#;&lE=b1vIwmI$4*_6JxjLMyB0{^O1bP0tGJz+FOtQ_7)(zs~yoY zv1@^De|hiDV~-tqi{Q9}@VIGuzB^7&jpY#>EV2`o~Pd5?qwIoGmIzPv+g z(V;rf3f3X;2rls*!O%fj_jhB?#UA>3Mq0zvY1nA~hEM!98L+FW^d1--v(zKdVxY#5hQaJQsc=o@>7_h8@m7hsQO+NHO8|`h@|9gmjV#iiW$IJI z?3EdD1_K;iU=8^EE@V*H2(=lo3&G)Zs(ALN3dA?yr| z8okAPCFBsnA|@(UmrP)y%}pr7p z<(*@~vsNJo|6!7?g#M5LTO99v9*(VTt2t-;o8vZOB!<7BJkP-YGU|_&kO3Jtyq!5C z?0pQJSAqaUo<{^g;|Blu@3`N3yhlQai6+q8>4o_MT!Pg(dW|peF8QfLR*2-RdknMB zvGtNIA&Mm;ges<^^S?}Nk$3AzUoe-RiOb0UHsup!3Yi{}wc5?R6~yghp?42A{?Q$; zuLoS;5)iY{Nb=1%!?N!qJXVY5V3!3{IwuD)g@A12p(UhgF}(w1UzB0@D9Y zQ__elF1?4as{5N|aCeViAK{!t?U3KdP-z$xG}?cow$??_gCh<`%_PFWWg(Y@Il8h1 zRq0Q+h%KBFjDB{$1)0wPha-7&0bVe-1Vag^gVy~sv~^vc@mXdwA$B-+Utp0ummaHM zoBek6ggFe`w_h;7YhlCMm3v<>wXa{hUqkKz1~pV5J@{BqM+Hz28%N||3`BUXDA+U{ zxV=3vIs$jtQD$n85EflV*^$Et9y6u7qku8d0&Ch93&01DetT!41*P}KCU9JzGs}_} z`23aG?2bbk0>3{ZF|a^>KE-k>qBH)zy?x7@Hg_==sa6?3{Wt&jZ@6y+t^IJx{K2C| z>+i>JR);@#wB70}srp|S@7lM%6phbj+3nLeI=CD>nmS|YaxsDIgDZjQR6&9S-6^yL z(I%<9Sr%cAF;bcaG!enZ@Mx>8j0pLy?MRFaGXu11lz|9oIKfAqr-`?-`kfp6&m#wi zlgl&Dj*boQ$4xKtFi+KOtIw!YHe}!N!F${TF-ld+G8+E7%KAJreIbadF@X$p;6;0n zT3&E86l&(|U{zq^-F$cZJ?4&{NQX@R&l|*;z+gwhn9Q-l7}RpMeh5Q7c0oeq1U6D6 ze)tBa)br7pe+lCqL>8weC^b>|jAQa_Zan5=#a1`wl?g!hiZPi^+N-N3#v_4FmqM9h zy3cSN%7`ggHd%%p!7jiq)Y?{91c4y+exib1OE5$&wSqcHaawm)zZWG7CZ{}B#33e` z0~`AR2;eQzsszKSn|}^(-S;vvwL3$b&tD>DA`6R2qe;@jbyqkbS=g0|2D}(Jz{$dw zVo#Y`@g?^$ zFq6Q|pT8=!D6bx(v%E#fDRbw@BbIDa(BJMeYgWp7uy+ui-YS$AfHm|@F& zuW~q+7Sx-R_Xgp9eL#yD%VQy7e2h|N`Pvxwty%rShFosXD^pbakEpab zopCo4bNz^Z%&)vYxf*(n2XW3N*xLr+UXJ<>Z2(kz6`GS^yd~`dm2@Z#mw#q+9#L5j zw|KH*PO-SQ+~RKG)q`+T?`Z`pDrrxKj|?;lH&_!#O&t)dQp-f<2;dEIrjfzC0lPG# zg_|?Dy^P6`_Cq2Q6YN`S)7jA6*dQktrp>&V3jOOx`u%-+$;o)#;!dDQDZa~9K3;ky zIz}#>r=_u)*JqH0_py6GU8XdhKF6@#ql?+2+}buP>nE7Q{^^oscX72rWXe|z4y5@E zJtKA~QURHiSQ-=OC>s4vhZ3B*UMJ9DF=j6K!wUCc9~3$_j5%0_MOj}nVUAAkx0rh5EfrwamLG*B7dJ1S^JbIET7c3WXB}+6ca3dSo%Fl)^Z?dwgFWDrMXTd#uw?~HIH$0(-dgu9@SBi!GjybMHyx^h& z{zVx}pW?jrxlBZyFYpk(>?lyBEO{{Fj=f;)Okz&}P{tUPijg^t=$a4G7MpFIQiivN z9v@>8mkdlclNjM>?3(b6g~PMAxfBvZsg>xbqU)Kgaz-$wf7frICF62Jwb;dgE|#;} z4(f7zxlr*|1J85xTo&3{{l}`>|4!>CR^9`Az7ayf+Q>-|v}H4O2|o6AoEk?2(lcD~ zQcCKUS5dKANwrkf51>kozp6kW0i{ZsTT=|jc6{IOIV86-pslUujDb5nL#y}?=vr*W zsVobKVnt)1apZ_#z70`VJh#k>LACImsciVpkJnNi_Z+WEi76t1b4aIhmu1B{Q&T7T zvFSYfwHcE0uY>VgY3l@gor-|C3d)m|c(jGswi2uu4?5N+i=EE5v}dXRE>Kw~%0Kn* zF{kDo=DYr*{%`dMk@x>%C$Yj0{*PuRbg&F^aViU%BvYBdYedI}8^z|8Z71}1lDsSE zX-l@PT=y7Tz|T4eOVkOZ1r-zHi|Iqeb0ejt78?E<6^pTwrPf*J7%==l1K;#fK@iYC zbMDYj$Y1B~!`ZaUrzngcB^{4-iv)93u)v4CC!0TI$6XY{LE!!I(I&4B%S_Q>PKY){ zlpyDFc3xqrb}Vryv9Z%82|-rc3wMrsghPsh=zyy+B$EthOKG-4pnk`ldfoWSzSbQy zC;)=^stO8&tP5~J5AQ*c=3OJ*%lI$>(#>zzfKxt|xb+DUG~Ta~La20I=c+76vqU zP(TlN3BM2^V%$0nk*~q@7}6ny0bw6pgRe54+ZHG|Ovqo3HK)&|3O<{|BlH$X_Ehn6 zAGb&Vunopc*Tb6TBupB`8NiF{VH{M;$2k7wZJ=l`kr}@RVVO}73PTptFU*Xh#POeB z5CC^vJkgYmqX1J^1p`zfVHxULRRAuV%988H`K109fOS+OCOD&;h&jxAsFpQm&{ZidrSD0skl@HC@l?E{$n`g|K?lt;v2cHB9)D&uQey<&Z@>W{@O1JC3qO zdXBc}z433psBZ;z%@QMG)5I}Pk$?ti$a7`JO-LS-Klzgon^F}RY=9#&RAa%)IE2cJ zH?Pi6&yMt0u<|1ZX!_9r0`P%E1gtd&Y=bSb9uIOwXr>!(JVt5{ly)@@S{L_xK`|(M z4N?~+Dyfl&j0iT*qQqiXTE+3Mc zP*^Epqu8u!Nw8dSILTqv(~zOe?_$HjDoxF{EA;2D?CfQNF2gypO?I%Qvf+f;;E_}n zco0xq{U;g%|Kw*i7o1dB1+S;ZKNbHAswayK`($rZesghNQ+tz4jKjy2HtgiLZec{X zqtTDI(Ens(b(@_?=H=QEbjK8=z4!*3&K@1K`3|>0dz|{cJU@Hugni4Wth|`tY33~5R>5{uKAmq2SSUfJ=xy$#&SyHM_InN+z1C1q;9#vwM%~%$tt^foss@a8;nv2%a9}TO zKAl3@&+ILBfPtWA+fegG!8@WVe3)kt0~D8)aQ6A-{MziTRA|)i`4qDTTxPX&0-Lbq zsNn=NRqM=Z&9EUOuE{Afa0fB(fM$T9JoW|0M6<+O3dktTD5M%DBgh0KNf!)$3SA~4 z0s&bL4~sa@0+^cE!hqt@qn*{)a>M^f$T{A=hP%`zYcA%Gxr}x1@%$#YC{(C;o?ny& z&dez4{cPifYCpyLd#J*_viai!Z+K2@0;W2B%5|>J!6WQvIZ;Uj&o#k8Wrh?Ajx8S0 zi-{e?`S}cG_Od3LOTN@cu<@Wwv;PlbX^%DCt#WU1R zEWGPu#uuTX!-(H(@zaYlx>!;A*Wk7_g z^-p(p?jT6`GU9>QNe^37)9lc2c>dyI@ocpaM*ppOv)!)eHwc9BV}wC(XXK(n{OuyM z9Y$aV2*=d%7_hO76jX6grUzRn$geZUjg+p-#CD21_l(;^gb`#1(j#25$aXE#bs&Bo zTdZP8mGrj1up&weWc%3(4lvT|2()VkXufK-VMe3_Jq(_c%nlj11P$YdXR|aGJb809 zl1}MIkTU*)LsgDQEX!Khj93-gHM%{N2+^!fru#=Hj-}x7V9_#x2u0a$d`k2iTOIzo zhvSZcKs<$Kkbf#~i8@%yjpr!ExbX!ef}x2L+P*JM@P1mc(XEy30<%SRs%$+IL|&}+ z#8BeT1XnunOQyU~>9K(%MvzpgS(0c94g>|j>01jDrSMDN<{GVNC$GG06ql-}8Y|i! zG9c^_i$On)tzcnRwKa`yh}ozI@y&+2av_vqQKCJj6%C}i9e8k>x4GET@b_RoqOq?j zytHnv90z=goz)X5_Wv>`hJ-R+9t8~>VS$+n@g8tbq?u5juz!Q~;Bm^`@^77XmnwkhMLVt_YxuRdLFy2w0j<5>7UF9m53csct5;Mm4b` ze1E=W2Bpi)p)2K{Q)<;e>A=A(WxUD!3)?Y}@ty?Yx&4ClATx?6$9%nd>cRiD;tWVD zWlN&48rQy+Ug!i09iR9%d~-mOXEO5hibH`PLCJS*JpgjHn(r_*n6!vP#C*A1dwchP{?|6Wo%KKGFY=H3WykZsI!A%y`IEt~KQNB&ug+e2_20us zcMk46_|*NDCXL<7;+hjb=edrn{Z)wzgbCx4lt-%zs6`4`{&jJ_E0C-i20Z=UoC9wI z&?c1_IPboOvnZ9`JAQLQ#SoHUbtwM-o1dwfd+be$OkxOt8nOeM8VsEZ#(*)66|gZI zLFS6VZl=ng(Pj=l1)XDo1i5|eWbsG$kFDbGQZP~PV=LA#Qg$FM`1mV_<;S+eAVFq9 zkNqNI$+-v@$JPZ72LM!+JzWLY6<91~38y;ERn4gIJ*TLQY!EtSNbDgV3^d$Oh<`Nqo%0@1@KXZYtiQt)oKf=J6fizcm4!m3;R~jgrXJBfq+pO z1(jm(Dboxf`WJ)^I71Dv0v7@q6QaV<%H7yjNo@;5e{H_`hfkE2oQ>WFC53I`jE~8s zYir9ciY29C#x~k5?ynf2u}Xf*za%7abShz53}_TH_zUb5FQ5>Kh8u$H(e6!)Gj)Jd z0pYY%gz2@eLv0Pjrgbhk6Flu`5g3tpF%F@enzZ^9^s`X@G^4*`#g=-5Dy?Iv35^6e zEg_j83E$NP+mK&`JR%UuqSglV%LF@%T&q==ZGe!zBhbvh@)CKMAto>+e~!i{q~aAS zv@F_bEq_t{fP6B#0ziEx)L1A;gb2=e3{u-D=g1MOXehN#hpZbLJ_^!vAY(%i5{ejLHflUjqodee)O}^Bv z%Lo|;@^TZ&)92q_+sbRH(_Pp7fB^Ftm~I+K2*wQf2-#oSpXGsVR>q!033zT$d#2+Qxt8}we>l6$IJO0YL(=~{?(9$%=eiepsT1oIepEEzc{-f9S;N_933urnf_Y%iT)r$ z8d=BR{bSbJ`nUb^=lb@%^jH*}Q(f`~{mwEUZ`y4{ z7f3WDd6S?IluJGmc7*U?>kCWXdgyA5DX2>J07r-`rDAuFnqkPpQD$gg%r;C6h=8!Q zujBMZX=0XX!+A4`rHajxmdDkeUJ4$d(y4^7BT}!rxYn7z( z!iw~_-Xnp0t+MH}C^)J^F-;lXuD`ot{v@mN2yFdwxi!C1Asa+ct`D@~jGi!p)rTnc zc*9P-GeE(-<>xpJ*~uAoiWr%5{5*6)35y7ja6ymxi+QVhy$Unzl||`ZEmDUOQYUU> zM9DTHq5qbYJKN*}t>Xye3Hks=@2kuPBqJmB>;Q`by9}~KwV9@eX$GlWdW#AN;6Tq? z=%)Z&5OYqw%S6!$eu5lgUxfADg35JxR4&I%%Gl}-2)FV?XvjK1u-30FSU5}d30^R& zWHtmK!r?W^B4KG@qF)u!&!4{dwkm&}Pq?N82L05p+Irt&$w3QSc`iGSpD?{8>6{I6 zZIHlzTe&F|jyCc?JsiiNBiSA!gO`nFS?t>4ww>S+dB117AlVj37?mAZ=T`y&cMlWi z%JO*vc(XOkL(lZT9#1>-DCH7jqB8`2DO|R=Pn|(duIvcEv4LvYKq;de^^$_7fswMZ z0B6rVi`9`qHhcna7s`W-Xmhue#04L04P0*udN)m(zq`ukZ@ z9j>X&%9$KKz^mC*9bw~bAcuiRp-F8tA{9nnL(&fp`J6pV6bMC>Uk-RlsNN07Ix%aA zHo+|;1H84!B(II*M~TNCSt@c^*FXN`#?5yNAh95t71{n>ZqOonX*VrfE^sGy!af-y&Uk^wyUqT9-+O$1MoHNWG7H`Z;h=o17E;fvC&Qb!Yh`R#- z^D9R87_^D;o2+MlNjcRQe-|Rx7QTU7L#GOX-&k>pHo=2FNa&Tc}Hj;4) zN~9(-^efS*;)eaPaUj-5@={Txo};ECgo@0dm6A!5vi_*ijB4d0=BY<~lp{y2B}l4b zA&$7Lrs96CKnVSdoF&-266n?wYs4OtTssDJJQ|ARE5u`aUHi56~-_{ zhf@U2*NE;VUK1X(nkxrKeomJyRa6lKKL6W|e^l>dXUpws8N0HzCfEK^`J z{GukKZcH&-JG<@0ga#2qM3}4^j04rHu?MTEBiRP1!uOR}EMi zw!lz5bi>=`d?Ld-(Ml&I{PXKPZ3=Kf`>LKuMu|_4{zNAt>oKn+%-^-D@%yQ3a$^l* zFbs>N{9>v|Qcu4~J9ks=bSf!CPoXT}Kn&ulgN6;=EAej%4>k(n>-PY`K+AgH90lsV zGL<>HBbW?JRog;CxtO7_6$&n2dqn*3m9PiH5`LE9T$B};cc%*WV2Uw+r}M*M@@Gt> z^CNPllfM)z%+)jG%Zxwp|02-i1E-9Wtn z&8k;LVOZ@VIJ3!Wex--EJ2|s#MxG8cGIDKW-5K#!Ww<(XT6U{DL1D_)Be=KDO}+Wa zjgO<3vQ=e)p`QYX!{}>d&(=O1$*<~`t31+;7Tg+cYzaCw{Ju7J}Hr zO2`zQN+nFT((UF;#3?T&uAUK!dcF0_LFSmpBL|qdnv-OxwOVStI`dL_4Edr9<4`r$ zsZeYP!i5OvOeL4!N|A|MAzf-Q$U0igf;GpNKF~7CS&QJ;6O-%6UZx$_dyVP=KR%X8 z{u7DOb^KimM6H%n1ZV4j4D}&lQPj_u%7n0!DG~>`D=DP&8E&?q9chpnY9KR8^6pv2?Pi<4-j-PyP*1#fxrG% zZE9iyh%hPG(H#h1LDS|fmFANwkzeEYr-Nx>l}cBg5Q;!O#BqRf zBHZ&Yz;!ws8nKWzspE2}+6@5-Uja^@AL|5}Z^yfXMkN6+-|8{R1hUof=AdPe`WE@x zk`N_5))2>1SaTHyT=gQ+qV^gHRveRS1YU0XNE)|-cL;-!V5ghRfe=W?e6y=W7h?7h zvp|$=TEYMD4*PmeJ#&u;2O9DV#!gYVJwq@?*+j9e1t|IPVmp7l6-B0mOB(>5f8Y|B zVEgC4nPlX{2+UVU@L_^MB|7I<)|lprjCcI$C)pXqc$&&l#E0(mhSeW*Oob7M!C-?I zN<@O;Jp(khgx(vMofS#AF||p|8!KlL`kOJ>}jcqG1p^xnjBjMIFMN;eFKe@#iQMHXB7l0uE{yq;72@_p&HLm}EpY zoju<+UZL*y71*Do3x0erF&Q1~0GfSjdvu~caX@(k?=(E?3yL*wtq65OQOX(UQ4JT{ zobFO5Kwu=KVJ~{T2Z^?p9$S^Lm4-`82Wx|*RPn6CH`im zZ5z}gvr=E4NH`ABLE&93Lj0FRzgpf~0MCW;D!w5=Ogd6sYd*0R62 zCv1N8%pBJ3pH;O**a_ZVlmrY0?4UEP8M<%oP6Z4S~q|X+3}EwKfb>j1`~W z-00+umvJ$vf8bidaVrb#riJ~ScMt+aG?W9_wL=?#w+<)cRnVaL*Cq(MlflNF;ii-E zAaj@r!5b(n_jAM`0*H!F>C?=&K0S-#X$YPmL%3DIP&HYg-~4)(7<0#BoIuz~fs{Y( zBjdNJ46oY{*?8TMvVrnmE|p{>3F!C(K!kawjKM{E`jY-wnUMm0$y3QSx@^}ES`P=$ z@PpZNfp8i_zchrSU?;;ZR*<=TEIq=I`O4XoF`O$!2IE>S#)UjWV&29MTRoSVKA?1o zZVO^jh=*?k<(#`vDpCR))lfwUtv+k5LhEz+<&EL2m6%0qg8TBZGsZJRj`dzq611WbF>T!?)(w2{b0u|Eu|(o##8sQcG_E zWdy!SRGUPA=T49~LP^!6a86pU8clz}7)M0=KN25Xwr)j)ozltj-sbH>t|*jzO_+&C-YYMJ+aPeh$$zR?E>8V{L{U3hwJkj zi&h;l&Bi}Y1r4>^R!5(C`v$FlG6VJfuTxi>1kV=$9Pj($gwamCP6{pq+2jtuh0NBo zeXw_MX|G!(ln}7FRfJvo$bB={HiITZTjM;Oc*I0H_E4VeI~ila6ngdxQS_E!(V;b` zpky`=C?9)b5C&jrzO0Z%qS=9Um-1D0W&&PxwcF2IQ zQ1g)4PH{fDNS*<%RLswB?7WXGt9;&K{@zC)9DcXW`~vmiV*WQ53(7ubAHV-@-X_=t zmjpjTB<*F`jG6BZx3PW7aYAxF`U%na&%BpF=xJj>|1`45! z*m3n-Qj3TbMpT{orvkNApJ1DxTE`RHp@rq@g5ZZZ$@{WPMO%Xu7HE!OLH<8q-*7b0 zN^G5(r?xF2^vkVO$9ST&<|Gb(>-Oz?azY;ADU69%bnWuf9JwoX;F($wz@a<43sK7~ zu>xyVq1QNMq)h!N9GCSuUD_$&8#T3%XpKC=ZvpyV=LZ6qxhw7J(WMXA>vKON9)^PGIDvzwC_Vi+sm zP5dCG$g!k2#bJ)Xb}Mju^2+YmjOmRif^;OG5pG%Is&UPpgIrZXcLkQ#O4bZxvnYV( zSxLuuBX$iUzFN636pM|<1RDFcjOr2WkY^YkAXgE7fTw1&7DuiYz1M>hWs=Fo!=&;gNM(UFHReQng1TqqXZ;_U(GW zI%it*PKY3_RHoC=ZvB0jR1csm_R)f-t%I6&$|u~MxH1R_suH^Xk%jeqXzzqZf}T*w z9^5Ajk-Ah{#*D(oCA?+OkKe~&WZT3c2uUlqL<^AOcj5~rZTs9th|q>p*izR6M9~-u z0+CPQUSnW@;B4%{i_j$83KQ0f(@alyTl7(40&AeU2#Y*_5~x%))J?DM6fjz;KlxUe z(xWCqL~1%%G%%SZBR>NFsX>u8fH@A`43jv`l){z|S1fO5bu1-+2_=(GhKfo9)eQ04 z>SoEw85g;dM)3Z4qKS@XXP&j<2t85U%fA_^<#@d<%q1X9n~Tya`iQ!jr_@t#{l;z4 zGY+#;P-+Tl4|$?yBsIbev-FxUl@ILH&$M5(e<`I2zS#r_hh=+Fh9u4GRiYrM-M`Bkda>#p3KhCP8BcwC#uho&7yN2B~ke2(wLtm250Hqb>f!uOpr+N{+R zL?yi;de7pH{XnY;`?kt6<^0@JJ11<5rAp(LD(KqkMEd$Kv{Md%ILwUrwq*;_#QBC? zz`lfD)zeUuo5At45RXsv2w?)R9v>Se%_c}hI{olTqJb)$6CLDCM<+U0OA<15!zU@I zlgWjIp@3hlPTkrur2pC3im`PrAELa_W0DH~&6^6+n;$fMGU9f+jm?{^fPc!Ee zeBS)m{oT*+eDTHZgZci!?!j;O=a23@+``UlsjoA~(VY<3;6 zs57RIj}{!r;>+bJ;crgH=^3kufJ54)VVAof(a&-s9TneDC_bYeZKPe0Wjc&fnian_ z@CKS8)r-J-W3w@4e**kao3zJuf*ccwTKra$CRz~fWS$!D5RgfbJt~4J);4XudXa|r z>0-GVt3)Der@$jz$%~(LjBvccDW?;fPQn|-nRVF@Z!qX4-A6HL>dcCoEb#68Cdmc; zSTPo@ml77Ii{N5xzc(341Wnd)umio=DxA7wIDodDQ>UohWFHSW$29i^t*o4n3m%d* zdXQvw!kSJ_jmkkF5S=Qh)%Ar-G{&kV=fIGL9A%T_-@PO7Ose}oWr$V{Brc=t!lWh2 z)y+tVYH|P*paT*ld0k?wB&+hHhQMt+E;q?&fC>9!J!?qY2hLhwyY+hU-8R`)Y_-b0 zRR(lYB;|UBr}#cj^)c2^WW1>;sVwm?B780p*?)$4`;1$m#d4bU>5%x<>Xpa+SB_&z zISD4J>Hs8S+A>#^sa6`Y6-D~Z@{RQ?79pLI<-Ml}=SfNNnY~NIO^B`L!a3iI5MDfa zgWl(vAumnyPzPAT=7SGDh_Xy|3qgapPUL z5R*D>Tk=P--Umbx7(a#O{8~A{wd~&#AaRD1)6}5+*1Ld)TGG^{=q@3_j-FY3N6N}O zXxM?~kGtS!^#e1}2F@0Egly$XwDohEzH@-C{OLw^8;u?uo&Iq_SNH|ZbFXKQHH$J| zD1d#&*q)vL5R3Tl#q<9vp7)UrUMj_XtwO6q-7ziWeTmcBeQ9C@h+AsWenb+XG#|GG z!tO7ZZ&JOV8T+8*4(1q48=-L9Y(4_>!wTZeHKH{=vH+&X&w@c+o#~XFKn{cm4Xi__yg{QRZL~MaUw0KVM=2 z9iQI}a}v=hE#Qf6W{Hn(0va0=R=ExHXtsOd7)&2{HxK;tA3iXTp zfT4C#hk>tZcGk5Fkh*p&ei*nv1zAk9);1)X&Ake%l{o!(e)ea7Hc(2{#(COf7L%6~ zszFyvX5fYJCpH3IvaosBlAK~1DzVadSs|J|%=c3$OaIXC@$a%> z>y!#i&+lxf<(Wl5;sNl(6^|KMy~k*jNK?ioWbAw)r_Kzm zG?xVOHJiE$sG?-p2T@Qi={~RdqPBA(4KP$NlT-ojpzEyok)>y~@m?_#8mlnbBNdX; zdogaXsp!)b;Lu@5LB(_c0u>2;d4x*F9dnnCrLbEUGzg_GWy9*I64YUtV7qX9XyX`- zOQWxSi5zne}WRB_uX~oGWOrK)A^|X)c=FjHN;LrPgitM9QaL0aIeYHbCVD zF?Tp^`w2OqDhe2pAy6=73(};xY2V=0qn1RWXsYK3C}hopy*-~#)sufVwiIuRa~g|e zOphQ)WyK_6$ZB9Dy5MGP;&m3ZutR~zP-1>v(-k6yK2h8A^H53pq{DGiiy}^$h$*YZTyzE z3A%4Ta?U7!O&>RH+BL0YBB_WITn}!Dev|HKec{2Q4pw6S)zif1YAQfq`Zf#{L*3~G zG=2RxmlXim&Rmn(2Us)(Bnm;t`|@}PbOIud&uLkAhR9`99PzXW9kx9G>dyYp=l;Q8`3|%E zA5G!7Pv+O(z46|6AAa!BwK+Bdy~-5HG5_=f`p}6)faU`Le(?G3{K}2@>@dEnR>{y? z&tWsmba_NGqE9(0k~enVyZ_{>;I{L)mg=+REKs3tXe7kLy)U=P*P=`LC!@!`a^Pzw z-akG2diM3#PoLY*`TC#H5x%;(*f~A^`s>+jbs;|f7cF9j_aZw$;M;&036A!RG+t+D z1^$@(B^BL9FhDIJOES2BbZ9p#+60>0$ArWcg7LsHB{V(Iz_&2)k5E?-%kJ^^?)S_q zFyBG=urI_JKGOb+qqiYuo@76M8qQ$l+;0wnx)gjyZDgVW>CSt`7+!*16&|SQ<+KXE z1TvvS;{M{|@Q8>K*XtOh!65elj~6fa0iP(+WP@;tR;@(c4gvtz1yQ1MQ>-C3d_hiA zaX`JE(<27cIuhne{inB@(cg?K;u8!;i2Nj@Zi}Mt@~z6=TJ~CRoJ0h<#{AcdX8>uR zO7y?iXH>I(hv${w)x+F0Tfk!J)iUC z#qa&)9^^|^1CxU8-MEdi(cpJ^Wdo$1r^u;M{bI#E>L@|NozrLzx#A$ zX^t1ca#1lc7b4RtjM75g;4JQjbT0$i7ZKiuvuy@i&{kQImu3_G!w0Y@;$UFJM?P|K zBRRA!TA>_0mbd_0XGO&TE2zf~jW?(@zE~Qe%)DJpG(L0v`Q37(=OU}3 z2`ho0E`-ev5jH42UfzlLaW5$vBDhJ>Z0e%iWt1wWh5i~smnuLTy~QRwPllw;u+$qE z*X6vV?W&j}!9TKUIOw`x z2&>JiN|cK1%*!wHb1)=51&JUcpoFC$fGz4`0iGO?8%JYn00qE=Dx`A-9i;iEH=-3h zzT$zmo*jM13tN8)K#1q^$1vHTvUQSkz|)KhdUuR(?S%68iXl`0)Km})+rnlH_t2k0 zcR$DSXTzW-BB`Z4`>!71ghz=0$5nk|-ftRY5GYioW;@udWAY{$k}_Ap%K<1!NQ|)r zysJP`6`<0R8XfH#(5_*KCir)xnRleJ#j*3oo94JtXmPZl*aq-ZBUJP4d};vZ97iy+ zVDmNcG2c5N$HesG;v8_}2V*br)hB6_!W3hv_#e{_Cu?4%feaoKQd~0@(5Weu=OJc+ z7UvZKlV&r(wtO1PxWP}&)6>-(a{Z-wO3;U-LW=V4M7&~j7mBIx5^6YpV}*brb421( z5=huo#WldCNr}Izu_lt4^Ie)Tdgtng=FwnuM#(@J3g-9J6+cNUv(OraW z0C+^~=+~_4uAt@RYIVklqxo)?84k0>rA9`|!UbeA5nhgXb?Aso0eK!D^pt_R2LtGl z%m{Nwg0RKdC?RyW)$l-OVhC(3Va|e-i}OPmFIMWZjIBYAg=}m{fu3&w?f7gY-$@ZV z3W_}hobSNj@7OwAsU;L*-4#(A2yumQ3BQYAhSVs(OO6a=?;TvD>OR3(J!@W_KRDP~ zeHS&2$#EB4x2K4VW&V)1_LqB~f8q43TtJ0l$ID>Et?x4=Z~LJ&Mrd^z-+_KG8=^eo z`2PMjwwQWpriU6cv6LFWxt+)B8`;Qkc&6x$UvLzUF-9zo+3Jnk{4aloHL-`&J6tah z5z)a9urE45)e2CBpS=(@gY8kt;{s z7m95_S&K0fx5v-peE0Ae%tNK5KjH=QCCK?gxfPVqMhsGDgZLwH7e8ithcA=#&_?gz zRap>NU#HJ;Mv8Lz)cWj@FhXOIR{aFw*Gr6dr>q!~ArResy90&^)Le^J630w)07R+a z40w8qbfW0-jWaUHxo_&R#6oIz6dwSHv=W-Wh1~kvt~o+K8=F^{ozBStOvc^VbAE7i z%FqCin=2DojdSAN5b%ys+)+N@>FR)VR<(13t^rfgO?y6@xkkAupa?1bJj#3INM;@J zW2Wex)P6uMBSL8$6D5M%ddJwUgFieGE z!I^ol(3Y;eu*%A=cKzdzJ{}Z_v2dU%YjRW;+hg!>3m<$R#2ytPgq!X!h$#Td{mdQp zL$zMamg*Qn!&Fj1pa3m`*4ghUZ*jQ|p~Obkvrpo(76KWlSyFiHot@PPFu$4=yP8H) zD1y7@gbDeI~)vBjaFB63ZVBIq1AsX75w}Eb9u0~vuTiaOwU_#nO=+I zK3FsKcujRf{0BN8OhYLH4l0x%8!&ghgb-r^cozs&zu1{=o{%8sU19_(A(rCpF7tB& zq~ocKy(+I6%K@VsN=OtK+Rjv>TR3&Dze^x$7g8V`zQrOQIa01IYS_Fg8)VYAStv8* zrolrjz`GGoL_K-GF9R(34PJHC;iW^ev^Cm4vIEDF+h6(AJ*Ea4Jk3@N`?JI_7N9}} zgK|O>A@zf6Sq;NF`A;4TWaIguLsFwiUIJp|b?m3r5z1K3ikMMpQm_dRu5WM$eiDLe zBMo7@JNYjG(`ziDDi?CHTS_z(128nTv82wD(`V&_4vbA6H9xT4+hZ*#kCt3`e2YX;h}U>y29**rQ1Zt~DZp zf&W)-;l;8`trOrj4!}(^@*8m=cwslvFLO9ou!=R+BDiS#=c|A8v z&Qx9U1(|@UFHS5oR9B8&Phok^tpg-1E0(eDf}K?)^5*+V+ye3xv#mS)#zYI;DyI+U z^s#8ny_y`v!7ks!_*drHpyfCs@|Ex3a#)^1@fE%eYQKEn_7z=|Nv24}fPXEV>b7(? z<8%eQ-i&jE+3%4`rM&EzvV`VFfR)<_L=J*M9R%>>R@E;YuNFy|7p~l=P+{lB_3axs zu71Lpso&F~`sNSl5cUvI69E`(gBVwStuHEt4RcV1NjUB+dLLe78J9MU?aelSE&~n<#X8pHMJbP*CXvXLz%?5aY0q zn%fHLN}pb4WEG@Jm`u6n?{s0^hCX#20*MQ^hi^cbp#qP{M zqzmKL?K@W|IK(OC3A;4`$0P0(K>a-9np>hJ5jGE(FNuHfqkHG81;(E<`^Se#9BJ|X zdP$)q38fRhL3WI}%08bZfs*{Pe_?mei#NBw&iv9{r3Z42Jk17z`v?fn*_R{b+ zc(Qby=f=xHiNsLNcxM2_&=AA%nCSotPq^5&j2HLH8e8LrDtEzZK}lAjQPSD5XN{O) zs5D~7!sEkKlU-0&O){!Wp!wu37j@Y3NF0a*xT_c`uFl@?O>pi~N;sIA>{R)4-=`rC zO%48>7H$8VG^@lZdynsiYCJ68OYJO12cmDL8VNG`iNqL!Zn_|Mv+jgAL#RBT{@v2^AL~Z}x zQCx;4&ZyQs&>>-oiaut;;*<5FQcVoGHd1IY0ihZMTQ(eYP zn8Ib^JweKCpyb~Ipm@76VTnnQiblCuAvLUv7coJVMWuj`#ULCB zE7GQAAcX1u{6SHD&yA^MB($gZ>1di6h`>R_!`!*8#OFL2Oj~&4h4;n4MpmK=>Qh4My;Z{ z&EDOEG9C+2KT=@_nc@^+WsK68U|-ZsaO6lh!qtjm4LBEV$Y&|E7(O-houjoV%Nf|3 zTk5a-pKIJG5)dKT*Z`WH^G@|F8(809S2n&k85uD_T@-9{k_VRbuNZ1`zv>Yu1%2LwUudd^N0o>x$_p}dc4G7p3HS((|GPpqYDF1 z^b1}Q)E3_%#_$j>(teG*vpn>MOJrT@EjV+&D%(m~sOCT;pf>)XC8Bf9gOnMhi~KM#5pyL3> zs<$N{oN4Ub9p?U2_ph6ePKM`<<*9fB2L;;3QSJh##r!&T#hfMw(cxL{ni`@}!mbNb zfE13O<)5r*nqTWGFoLS7AfW97j))J0^DT^8#5B|tdH}`h@CL;ufMk25tlUeW5u@&u z#X_MFDR{AZfS(i*^P|2}g-t2es|B!#LXwiycsgh(IjeWg@#1_ZwgvfC+?ez~)b1E5 z?H@%lznM{f5Zh%j_(qXU3J%#{RPEr=I6!=7ompdNLp+$%Os$w31R84*;ok;)6`<)v zbw``te!c>IbObUDp_L}8dS7SAULB4P_7opdCP-Zwb z-2&mm?du=GMe|!$P3e3@1(tOusWj^F;aFw7TaaXC8CyCr)9jNSlUX`Y?IeWt2=y@WaaiYC3%53eMPxPuDn;Ljl<)d@|WXND3~@K zqi0ZJpq2Jjv%ecj$C|M*ULxx#_r_kWXgTI0XOa~l63EiTQhFFg;&fbF8s2wyDGyiR zE9^{FI1L^mR0@Czo56^LTbCn^0LOhQG%yga@cUiH0pqe>b#dCdW_Y=vt&Uv6B{3Sy zSb191SG};|&b{U>3bo9ki>XCN`pg2LqnoIu>V0hUHh@^%swtlJW zVpeExHmQ3+w94FX%okF)>fW{wi8%d`0JjDOUfY_nF#zqpz}^9yNM;xMqa_Z5pmyKT zGV&k!wf-z|nw-z=tKAK;S6)r~m4i#$o*d<10TESU(a!;;5w~lzt$f9&lC%sp*r9o4 z`pQ+*Y=e2X@+Bp7U_>{V@#qzavkJDPgQL}M3azMEeTMR zWIor6K{9Afy-Y2Z(Ty8AV6Ev=cxrs@sf6ICiO~AH0ZB7R%{>MLAx%_w29ERhxodh93|2~W*Ey}vVTsO+((gXW(;YCvf`NxYsf=R();f(5Gi0NtUB>= z&A{$m>R>NYVjIyY!CIVEv>Ztua&g&~;Q)%tlNdL6Pj(R^2HPeZvSY}rX(j;2afu;H z5De&Y@-}5>Ef3Lu{5n6a24){WsWQyhXY>`ppK{zBD^G(uwK8vSSi{Go8mLrV1tWM8W9ko2>~KAf0jQ)aDj%OVyDUZNG%86{o5i@5|^q zS~NR;6g$M;jII*SIBoj%r2f3t4x8(M%~eX}lxd7Zh!Jw{JU|pn z&+4-yW)QHR{DTS2`Q=g&m9GzGn#x?8d9s0o|1dB&Hgkn3yOLN-R7y)h6>P!E0|Rv% zGqss_sQ|LFy{jrTF|fBP^kidYgWjM`XwMxY05-Odb7wcR*JCMWdxiCT*G%Red5J)8 z+a)f&zwc~#ZxJyeb7_?UBV_cXiCWuSPP}2G16SzdUfC{|M@CSQ&$K-RB61A!amNVu zDZ|fQNfqh}mkRCMt@^Rrul z7sg*FzAQ4Ztbsw9#zTe_9F8>lmGX*(e%t7BoK*2jvc zT9n#_^dZ@fsAXUsyWJae?AE~=Of0O>=aeLrK(OKN$yqxeKN(Dd29ZB)r~ws#m5w^? zZKElk@k9Yfpc;vE3*>}a>1O(rj4NTq4R5f7Ld4H=tH&4Bhy;?7ukM@;2W1*WuBo&C z-Z~hJXHiep7cC(*1n?6i-B?WlM{+qOvf?rq5Km-OL!t0H5#$LAlCY49ZG<>6RFJ!YiyG-ZlQw& zd%66!tiKVmouY@9QPb8Aq7nFtm<<-XcRqigzI7n7PgNE6$P1YK_foYjV^xvh@Gs1n zKcwVloQM;mj66H=e<|ooQR%*Aimc;ph>aO@`Yd&b7woD#Cp|txap-uz}bzP5WfHT8X+qviDc8;a2-8yRGI_dNiI7fMw{jVXkoLMN#Bo;1cPB3Sia*J~BO5Ob9Tq z@RBVzongenDfWQ%1^6(LbI&i1xCfR8soZ7+7dIa`s6!LeCX&d%V8l&OBHLJ_MwS7` zD6NtazJ6Iwu*8E>*%5wjY9M?fx701Li5v#ORV1zCVcVf&KkBOuvI<>e4^i!RXvsB5 zvO%n6vIF=bV66&?*y+nPihDADhDhL>(Jh&6U8kKj#G|p-TP)oTfQH(S4p>*>v5W;= zF|fxly^Y^$_#1~?9LtD~W9v$D999m7}l9`t`O~D0sH4(T`(u@g^FLu z5YdCN0M9t5$~Rm)31)vQV&dS|B`1D$RFsuzHZn$-_t^j{*&AJ<5wF>nb&c~||B2hI zyz`U8oovDcVybHH+(dJW8fKB4X0AteX!HP3Ee@USn?tq*r*XficOV{k`*m#abr%VTt=iY7N`Yx z-aCCbl_Dg}lV_7!u*MNAS?Lrq>VgD|5&V5H4xx^1P2pcbqhB~i>LhmE4bkrXb0I{4 zf?eO8BD8r!cj{ZJlJSkTv*@X@#Qg%O`HoPPx@ZltrP*o=m!wIREgC3^_C0M zy0fsHgKN(f-(%Z6O7wn(`X`D?q-cJALLEXW<8MuyQ4&TNg=J}*-N>{XknckgM=+^S zI@t}hCNgja9E`=QS>%&8Y4udf?&Q87D3OTt2-~(9qS)9Beq%el2f=J>J^V=oUl9B> zlXNoWaZ2Y#UtU72wlXvOg;7sQDYT9aPS|DF9o6StIZnW!@lH%{0|=aZyxdZowXuOF z#EMPeOpqv}Fej{OQja%BCS3GR0gFOssAaucV{^RNNL5&I{(l2H*UOAoH`*J2;%MvV zqY`;|s`9vE?h6@wV$Ber#G_S}Vy0m%aBo)c>FSz-H1wMS)Wr-P)N+`h*yPLEs}>V& zC^bDjBadt(czT)Xmxx9o$P`)R;a60BY*uR`GAm0o<=ec6#HfWrH#)?Ho8*`~*wHr@ zogC{#Vtk6oihe+hhG+ypGMT%61}QkJ`04AEIisOUa|kTngnJ2jIHX;|QlqeQmIKnUFQhUL)24hmQWck~JL6E^Bx>17DmwtZWx{|C z*gy4h^TcYm%GmMvP3R>BQ+)xBsEE}9)cU-5qOq_>f90(}HJ<>ZO7l<{oX*<5X9B|w zC^qvd(heok;WTaY2-){;l#o`wtjmjrB251rObHQbiBi^GmrV{b1g@BaRe4IX)sey) zz^{%oITIaeH6qTPcgneW$pKR#1i3bQY_6n_!m99%$Rx)y)UFp23x(0^C)gX>3mDK8X09ET0F&=J{qwI^NEP-P!}-7^gC4fEM&^9ZY}(SH2;IMlH1H72?KP zig}UyUI0__uYEHfQt0&cB}o;zBdw!cc8G7mep|vBJH*C$?_DDRpCKPX)2|u8TFKWY z0ce74)yKz+L>NJx(IHAUIeF@9MM(WMGeR-rDDw`Vy6ye78Nyokkp%E!e?nYOA}_M_ z2kVaSZZ6L;ZjEutWK^htMKDCXUl8}f$~3Bz9MZ5SFU{-K4Vk4rkj?3=paZZeNN50G z&jVO@$!bZ3NGM`j@`7GWh9i?gHtREE77Eo*)b1;Y7#NKnkbNR0&M)x5U(Y{yHI>P) zTTAM9GkzDrCk^tMO)lcEICXrO!btus3@bD#E+U=tmDvY2##PRxMOS~9HEVfq1cIqH zN4XoQFoQK?;FW``v8lL=U;&kRQX*ZzuHI+ve=ffW3FJOL7PH9&qGQ0_-Z>-tWYPjw^tl;)N$pGZUGLv(!-zHH!hN9SMHI` z%rL05^DY!HRA(QdFrd+}_l7R45zmrtjZlNd#|HxDR#-yYYwu5i$T)C7!>9cn>6e#3 zXCPrfYcCsCMst5%cm(p$Qk(c3$rXmq-U!Y3Mo!DDo}4zqWBP3k+AWmVYCkA^35=cc zRMKFo|A^zGRl8;|f+vKzw1D8a@=f{k)OyP3qe(!3)_;JnC;72kRGFb{31L@Bo5WUI zl5SfPv25db3o>H9zFafa{35Y#zQTxYT1%_O=^3Ibp<@7^3HT|pPT>PT;p%NW4dT$7 z1+DfD(H*#0TUeWjT_w&M2wN+xglk))sNitHOc=0QNfYF=wn9I!*2;EIkuv1sDFxXBITVQCyG?xFgzmgoXRKudk00#G@;aTv? z>&q~HZKjwDH^5ox(Lv`Z=YK;LSGluqS^JE$oW>|XVaLaF=UwYPqJ z$XT7JVsW*vacubm%(rkaJV{ep0?<6h3HLz`9U*toKjUC~dpg*>T_Yf*#43O2*Vw{s z>Z6GQ@}R)Z90}cQi&8_h1#bs;;O?pEWKgX|b~fhT^D-$TiyHb$E4iHCDl0mWAtEuU zVg2q;=W{>Sa(x1#k6EF>adL(Z!Nrv#p#_v~4Nzq#dRhRPZ?PehYK{P>t(AC5QA-FY z;~TPHaG*l-^Z;RPoYce*BQnO$6ztKvp+KzzR>asfNn>x4eMZ!iI^K!Mc$i1fVMGw# ziCy8=c3Hy0B@G|jY5n72wrgOep*hs31w96%yti;8tGct(VH;3LbZE7`@jE7dqSobr zUvPbD)GWK^@54GO%%OXa6%&kXBV7@TAZCp(iX8Cr4Vs5bIw=bxv*m%DT_E<(No-q< zVD1mft7=DJKvT{EMDHs5nRtURh$N^L1guuc58fXq2xa(Lc3=h$Dy?2OiiiAh+qJA9f36oX zu88pD-$m+Ra*Uy<%s5sU#9U8J+-?aqqK>6(p0t?MZ*0-Me{{M9!0Jp|`%jjV1*d8v zL$G0kPGH~?=uo7Pol(qReC7tVZqsbI7wl7df%-1%8XS&ka zdM_AH;R%#pKI|GUzYJ@D-|@lCx8jVi--1YzDdm)-&?Pdaw_2cwWy)05pP`c(&B2&) z0=+yI2A8 zZ!RI+IC@fTv8B|?RyIklo`TN&_;~fFD0f4uZN8s9m#Q0YTQwdCAv zcKF?K&c>Uz19)+XXn`mjE5A()St_O2MkN9vYsS2uVy5ob_#F56sGX3_g-3pv+(`eL z6i_qQI^3EfQK&u6Jr)QVk2CvZrU#`DC{!HrzFz0pt=H((V^G~W50K$KCKguAM{I7I z&Fx1JUmR<^Ta7uWQ!^g;tIGRo(U9*P8UZKervTCL-a6)rl`M1HfmX+8gmT`oeg{Pr@S^XJ-gkb4_9}@c^L1AoAA+YXD&3f?BU3J-J zh=!f=q`n<5%1xzA1A4#G$}!5rytJVv?15L{5gckA7qjtXwGAW8Y1{P|5SEI7wV4XL z^1fy;$5VE`w;^;!{NnhG^b~KUNhi&jZ&SMD8UE7DED>d(kE+(7V6D0y3co6LOwnZK zk`jW0^4cu$^y{XauDr;3K&MH1kIGT(UmW5F)brV-=%I{`1w@ie=~#Ah@RY_p%4%j49 zi#`PQmI*54)sk(MYLysQxnI@X5RzZKMt(XGLPp<$bwLB_wO6yyNH~l-jz+ZT@B5n8 zBC+f*_R*GLu>(LdZsQS0m~m`1TtpEt`nAlDlVo7CM848Ln(N+BwWh9flg9x z!I!8~rVOqbXKkBSI=RV@mo25%u4n=S&FHdNW6nx zzNt}wp_-y?XG(Md?1oM<+IMs3X7_6WWJR9_U@G~FfEZlTa%}2g?vHZ9C~aLkp8XR= zLQw2a)(N5aIyp(Ijj0bbEhnfsz6vzQ;rP(KAxk2hA~lOR%OaFC6O@0!tX@`|Y})Z! ztoxcx7eyC(Vn{0GMgz<(NidM94@sq|<}=^E3l1y(n{y`FCy>fBx9HkwAjnRsWXc9S zq+*25$hA@Y@O=Iue3oqBPo8{zVhy81L5`$n=_txoiB>--0 z3w{X@eo@qt!5Q;n{poXbZZ1ijY7_YBcujpwTt1ax5?AKF8ZWYf*S8~7Vk-K#f;1_J zAf?f0RJ~F&BdTr~NKc{aC}QA^Vv4DZYO+@|Mm1L@uKBiQR-AhRk7>`r87vP7 zLx(4}CK^|y{uFT&q|z#^=z>{N^gy|%wZISMM}-A81&4*c3JzGb+}HJ5T7qgrc!fRD zCPJr1HA@ruVBkOkP*dG1&mL0CPq63g74fc2wH5OM;irKD#2(OuL@_j^F~pV?OT5)d zy+D=`cClq+ga!GngodnxT%nV0jo46h(MXd*Vk0nksiYczu@N?B(xugqV{#HwC3<|C zJhaxH1~II-VL8Ux^G-{kYQ~?IOs9xKOw4D{%`nmO4K7zgAk6O2^Q>)+EB!^?B=Z@m z)fXdbBvR)0;q>cFe0h&Toy%E0LEDvcZ7z>6-*ZyYRUSwGeiAks_RJz9V8dwW?-C9H zV}^q4@DD0pr*uu}W~`XIhp3Qw#T`ThOv>sO0vgD}%W)@`=_J-f#NT=EWTX#3``-xysSU3^SERGUnt2&{S9DsWF^H1o7=M7BIQ6r#sio zPal&EiUDD0Ajhsa^WvDvB%HpU&#{-R1L5O*thn5}%kc0Z(GaNz!4=VP9MupkzA1b+ zcT+kIRf#7!%In~v6J)Nb)fzF#`+K9byv+1Sve@dt3`z)+L0}R+*&>lR79b0u7Sf=Z zmU@skWNcII;GN|U*ljqXb5rGK+~(o{M(iPTo~k4;W`>lLGm3^tG$Y4Y#1`Tv^4m2RmP`O&uIgNyEf6j6gDh#yeMU!t;BJV>SdJUchvz8f5A~&zna3^Lv&s zWUW-TmXBttlrv7|73JK_KnFrFCErTs(2!C_w#PTAFND3@ zBL0Y#M9?2$p)P2yEg1X2G}8oe=nXul=yNbU0uE9>zo{X|6I9Uvp$j7oKqB=lUuh+# z<1R(}$w#z-ctF4+MjfM5Jr`T;*fk4{MTux@-*IH(*oOP9>NaVs6F&W9p!svaubUXY zeznV1_^HQF4U37c z%m@Z&Dbg^e`6wHO-7HGUf97lFr2=B^Gjaz?^>eY za};7MMC@!&>E8_N5!)YECBU-X6hN0Cw>nbjNQ zjDzp1G;|c=0dBr|8C-HT~rY~*H@dsxFlodzOCKd-|aiZl%#b$8kCEM|*Hc578_V0D=#v^=fs7bA8 z@?ve@?mN&5Bf9DjDo-a>xLxjZNNU(WcN*TT9f7!++I`eNtd^Oq30Hd{ZukT;WHM?n z2v{`z)ASd zSc@N$qGrf3L7~01)h7?r2iE2E?QIJAKg5dEFwRsS(+gixJm%MX;8$a@r}%6B8`T!<(k~>n_p7#LSp^ zHDwJLW659)U`b4VYyl8p;|h5rRsy~rj|+AYZIJxffiNxcnfQbDfBE3aEJD3Alic7! zWJYiZ9`dsM?g_J&rTD7MP|#XM2E5Ca*7#|-%}|Rk;mfS=)wpIPk*A2sujlC#{*{c8&^TJ!>#P)_&Qnw2~jDNO9zAR@frfeKvua` z!3|>UP$k6EAvbw&qI-FF$z_FMCCA)ZGwI{Xe*EwX28`gT=S7KhxIqlpngfYc^4dhA zPNy<9^woYt3^hVgxnIP(oJq*5&SDy&%8BGx*c&}YlZP&dCP#>@UI>SgoHKFEX3CYV zfU%6D1D-Z;!pF2lrQ8rm)F@=_XSz_0j(@w*u!pH8Ie0*xnhjgzB0&hRNnT>-hm zLcut#3T!Q6TYRTTNRAHwg`yu|iHOC5sBkFoFZ%hK7aUs>_ zqzgEnUZWbv;>Cg#v3g4e*nwX=%*-^}LLXwOkBI{N5wy3$kV3jHdntXgfvOI2)1AG2 zg9?JZ`B#g(kC%57k%aX`W7y4=pG>X=n_;4Wnp1&p;#1?*@K%y8zE5TZf1l(r zpm=4DrVN3&EJdg#CVHJRN7*IbhQoo%n`}PpDTwaW-vrTYVs~TS1IF(Z#EP>Ok5u9f z7p$j+j*;z2hE+5M+P7q`8iLkxlM-zLJwzY$mA|_C<=r+nx%33Eb@F7g7>oLVNCNjm z5HLUk#KevP_tdTk+A-R_Y{yiwVcu*fGQ(#(WleKIoubabi}hllfPFH5M&DdqYKx4 zUR*kZ@CunpO_py|X;4uft%fOOiig2c>(T4ONah$M66-b@PFbA-T}_mu9X%yndF~A! zV0=$Ihs%Ps=y;l!p|Br?^$8NyV1M6uhLuq>+=cz5(fWy^L3YOP0$kY3^rC1OcifcE zoRD3oE&75)5Y^$H{L+XLUgA28)rQOrvkxMgM0~jlK{p$`XAmG=FJdUTN6SPGIKhuF z2Si*Ix0{R=l>SdgH#yQEFqn!nd%<6a1K zwHB3aJ8C>>b4YWF(+$#<7bT4%OMEk`(q)KS2onY*geM1XNLTL6G8~;ka=yp5s)eLhWnj`y z4arr^tZ^2uJH;Z*O3cK4*Fc+?04MR=)?!{vn?5(Z+KP|d3gz%A~$#(&?NHR z0C3_E`?2rRh3haw(gYcV=OG=k6_vjfz6#J769}aW!8BhFxpAQH+5tqGLM#w~lX(_3 zH*U1S2rm^@n;JurTi!B9V~PfrV8wC(#1^3h$-N!hW1~+wbe049#0I7xN1e4bXVJs3 zW^sjLyRoOTeAKc(+F<&3R<9G&LEc0)ww}VaMe=p1%i?PXsAPb-A`&VbB z%Ik*^7#hBYY=XBB&Pwa$vK+pz5m&gpb0l+?BjD$RNCQs30mvmu2pSEf!x3e;*sEE@ygogB? zv%+E+7HuWnx8#?VrTw51lcnZnTY=m|*cs9(E`o^yQvDa?@vsAm0CldjfPo?N zgmIo{$nXxKqXgYu@D)k;|An zEg^nf^n=)&#^U<0hDIz9rEHVHBu`zY=O-kC00uo2-`cm_+xIcz02e&Wqk829BPlaB zN7wx-e@rfS*Zna;*KrEe>}*8Q%SFa)KMG5;q@>AvK#RW&Cj(j&5vr_l{ECK*H6zsF z9sFr`k`1zo#5jVcUE2pW8#hJiSefg?@@?hc%9LwuH6_saFfxwLABcPec;J$H`C&>q zXf-K2&IC{pXnhD#?Id`C(ktTKVFx~sP2Y1rCrcVdVe+cClQv~AGi=|12@bTYmZT5R z_-5Ir*Cx2i`pW&%D-8stZotAF8<@yUrbCnmoSb~xyol1m50?pe;X;^#=tC}(Ak&u3 zT$|lRI>5vSJvDZ=3rX)PYzUT40SSX+4nVB~HQ+6Fh!7h%J2BVCJ@Y|*`A<~Zo-Z#B z&$c1{T)!v3c?~1dw3cb4{%}p7(OIWL9uTP4nFx$F#O3lM0=F)VX73}^C&2L~?Dofh zK%#66`ryUmF;#g36MajcxVM@D^(>_g3_u=nb`_HXunq`eNM67xaiQT-ss<2ZsWTg7 z`es&xm}6UNPprdhBbh#|Q2Zm>q!7KYexNZr52z6YXPOpSmjSk};^)oxQ7hqykO5-|%>80RH>4b@)80#?7 z6{d2jK1NyL;P!E1`4KYls7Qc#7jfqCgsF4)tdSs%WmnJ@_Bhe~(IkbtSFw$CzQHNXz!jloeMVmqSL8G`#vyY_y^p*m)2xIX|9<7QTDMDbWCmL`|9k zK?aqnWdL6pC-l0e8VQ-#YIL1w_9mDuw7ZZwJ`0pD4g~A-r{Vq?IjC2ES z=wN(<=zK_`8CJ^%v}`%_$%WUYXEu9*xUbXP-FZDUZm%T+ekKk0iMbDp#ZIU!t75n$ z-kOYtD)IWK$i`HN5FXmeNePM)=w)vTUQpy=A6deMcIH%r6vDo3n8vl>Jr$V#{8%LE zqZ1l9?;gyq)IdNd141d56Hr?wbAUZfC+BPcl;vnCfO}#90*~l#j+?eubv8jxfvD0L ziAWutMS#(CsX7&^D*e66;gwrUHx`%eK(nT=Mus3)vb^FfQ8wh6e!I`T$uWen3lNf> z#hHtL?%}p?^44!LH_f@ko+Aj}(MGElc86lz7L?ylk`Up+fK5=iweq2VJkB{F2gbO!6&KM~N!! zn|M`f@WSyPZFGO)S?kMD>>%q&M50SuCs``&|RRj zT1HF&j5?**U|b54VYJ0QpVJHuLf$)<#;jD4F)T6c;ybRJuxp)3?Vxe*@KQN-jdX2i zQKLj;=MEP0+mxj)gqXzO7w$r++0*peP&at?I^Qpl?coRR1A43&0LfPJcvj2>)#x3| zytvAynDUUfawOJ&!g#ak^*7fUjovb8-x(Zo6yBRlKa;pNAz6RgRYAULUC+kg2Nf?j zqVv&gUz#I^i+oV0k&tFd!fD^s0S!m9@obq$&<_DLdx%A#Y>d{Xa;IY8v4;fvxawUv z9~q*)!B|BU?9o!AbE9xWOZj1v#Y*uY>zYFd-OAzhj!StnS}R2loq8?3M8b00az&10|U_H;PGW*m?{6dRW(#$Uqaqc7laE>UF(w6TF{)m{s2GfJR= zEU|=boc2t$Y;MiDGAx_vk2PO`c=3RWb-)u%bn{*Qf%@2KLPx2bDn>`s`ui=xP&fUc*<_>C;m zHcDEQA|RN{Qa9VCjA&q-vs6Os%@PN|r9KdU6JDD4MYeY7p-Q#|&I^~%_&tVv1nvPR zTus{bQI`-*lEH_}1e1U&eTdbA+*l9Dw#Z9$Xna@E>cS+DgRgn=}*TnCjgo|3=cR_6Y*~tR{g8sJtv=fh7z%IL)xZZGcY%)8}j^Ddb|d zT4a#7Yx=X#`c!$hXzNMI;-JHA|7?2&+Q#)S}qC#6;%yznyE;vW-*G6NIvH zC>Eave8^Qw*e8^B;9iI9b8Qn9`fwkADhbjlKe!u}_=~#WzWC8#%+CesU5gqAVL5CZ zEW_Hk=_N-LeBGN}fZepIkn=CezPmd9n*T>DUmgA4SRE#VJSM0#U=y3@ySWSiO{i4P zgvDl^%jVQBCDa(KtJfEM6*V+#_KHT3fl^*5kM58g_GVDJCaK0kQ%t@>So|{a{Q#|O z;VHA@<#uG?x1tPN+?7|x(vEKd?mU(^E2C!})>4=5=fi_`V`pH6F7wh!f}LTQIPcv0 zV|=IxLmA`Arx2OSwq__GJ?eDe68_Z2L^k!C*m+|+H0*wV+Jp{Fff(Z&AwTo_I_l|# zIctY(!hmTCHcrnHqwJlX5wD-o-;Lx6*s)YdU;YbA9wqfWsfzq=~T-s^buE!J=;-l0wg zSEsY1VboAlh!~hFbX9!NM*=^Y6V3kmpnvHb*dIo`bE(J)oir3tG!G2u#|om!O%#MJ z(RL>H_h)5Ggr8T>lvHbjg}wXCV+=#mAUeNfbEEXTc$n9QUgYWFH5*)d;bVYYDv1I_ zIO($VjjDr2lnMlKaXl>{K1WeX^KU}YYl|yhQ|XcBMFHh2ZF^mvYZ? z!hI!wsJ#xC4a5IL=*S)8wVlEDWUC;ZPEw;o!>!+qcg$;j_`ok{O0qwpXYdp$#FJLstSa4t%Ji;RPoNtA_H^6R8th>v|PqBfIBe(PtLZikKEq960;~|&5W@V zN)u-n7@m|Jn_O|OnNy2}qXFM)W~Y~PR1)y+q_0({wiW@@*TMpg{nz7XwdQQ_pTRjm zMyNO6qY~pj(6d22Y8oJe5*jL5i1~RCv?Hbb?hY7>`wDW2TCix4nGf{V5D%=|*+E_) zzM3$?!m~P!^^FVS4fhJ|29F>^wG^RC%arCNL5Gx#K1jd`5^W}}R`zhc-Cx%73%W$x z`7W1r@!e^5Pvn!YmsDxoI^VSXz5IHtHn^v?U#~H^`&7Z)GsI{5{cEVdJ0@}dQ;=uW zWG?f|zdz(;H5F&p7SgL4svYir_F+%_Ns9vUaKFKx8xo9_f#s9yqJ_kU4_%GO$pE>s zCXL%lLTFNfio46odOVtarjGtNsd&Bf&cS@^^sZ|1UxrkxJdD%h$q3}6P9al2| zgWC)K z+%JISXXm6@3$OO8ZZvNE3syq0W-G)oQKq&Zbw03!u)-;F+sq+!X4BWBDpW*_cD{RL ztHFlXvbAzatBNbi%_K*#bft#6j3O4`aWbl^j9CIPV@QA$w`wEA=xZar^Ypbg3`=1L zC1=umk)gIJFV=*Z@JMRL4w&EEdv7i-yQjb2osffe{0hP&fT}@FF|@nDg$ZIDuuxKx<^sc{*YT-Axa6-&k#vP~wwE#k8 zj<^z5HbC z7C)bni3T4HXuPVrnqFim*~yO$h;6w%7>BGmN0qm9lx|o{MOqlqMlSf)=wsfSX7`;)H#D6H@$k1nsR`` zDk`e58Wlip8q_w}o(OU>ZGg3h%6qA#O*ZTY21UzPZn8Ron2NhGhswaf#}Vx-!BHcl|^gm5_m93rC1 zT{TJ{ry5pLT=<*O`f?*?v#+l-S)0)kBZl%Kq0Jt(hf4Sg(FGCTyL3X;RpybAuS2`! z)$un`5R5zqNL+I5x0c()7KG?9RFt`M#BdL`OxUvy7q8+D&mlkAIC3*`6oqr1a74ub z{=dSq=&A6g6;&1E00abKQ%MqoPl_(#ZaA<2m(&@}B#x`KVT0$aq$S5LUP~~II{hLa zYH!s@Sv8oZ0PG|YlFOw%WI2vdwFu>0UQDI78MF?U5e^&A!eI%;RL6r9MJ(*nh8!V8 z*$>PmQ7qA)tIb0qcr#vOtlHwMNREzmo}0y8TC*lFQ_?c42yoqN zNEjkR&XH}6*F@k!8BxirP zF+g-J9<^W_zR|S#Luin<4QY3;u}@^7{%lU9Xj#6Nzv6EQKW*V9Rm*6$q@B(=l@*`? zjCOEr;I$42({1MsuW=o7i7xG7)oqh&oFQa_$gy{9B_kY!pz)y@B>k?Up%Fs^3}^Bp zNktrc#B~w_UE6_Crmq?r8kV% z6mik@)Ox_K9lCAvZx$6@`cb<$$R?q>l>s(Y;R74*Z1~=`p0>{iz86vb@&!NBButAn`kkS_BLTpU* z%Wt7(W*d?HjIrN0Ly`Ij&N19o=_*4*hgfK(YUGKTa79A2I~#7SUY%<&V3MF&aD%*T znX{~AQ$A`jan`KX9gxsoq>f?A9#pE$W7NXHIz5 z#ewNpl6g`x1|vX1MJ^tilCsqaw72)s{o0(-?<_HGbpCAPvnjh|b`{;qm_m;%E!{tQ z9V2gzg}^h9$aHY!o%jtbkBRm(JHTMXp^&b;DT`sB_zjFh1x9e9Ssc(gZ|L^>NG5M5 zq~!-S_RQPoeCC09m|P7J|D8U?$Tt>a6pVAd}QChZkC73dEgwHD#o#|M__H8o} zO-qew1>l-i%~-8{uPmk!W7ji^7TL=K@aw^rlje zVns5LUmA?wIs3N7{BJK_?{`;4m=@I8PfNomIjk9aK$Hg=4f2cM2d=eNZm{-&=cFkS z;%$PlU0m~5AdiE+vWU-4%o7M{X5o?m4;kJq!A~4kT++F$%cfIDy_ExQ*lbtoIJ6Xo zV8Q*p9~J=E<=Ci^JD7yCKEZ8+WZlIt+BL42k*@u@)xLhyY4t5rtp@7fI94p9Z-pp0 z0fWL?xR;Cx$+V{|Ag8;RllYm&$t-s3bUNvV2p>X;gGx{JQV)b4qckHB6BE}0;^b4J z)}K`$aBv(PYLczx`E-subX@0(0dt4_jy7p-?wCc9SZnk0KnddMC0PfVCVz=sn?2wR zLO#lB`b#U3g%D!z(}I~COVxG8Xoj)fn4unSVHUe$yxPTzlZL|pyeu1C59-4~;#sD4 zY$%N%`)gy<;vt2FcqK0Zezfts4R0qMdUkSth|S7aerI_K16 z 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�v=yvG)XpH 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

JDg+D_#OsZ1nvA54)|EV= znDzm_{;QCM47qIvhkP>OU7)yuzGNDoL6=t`=XNvDn}lUdzlB5tV|O-kqekgLQYjUo zGDzWNfP8Y5m30+Mr(lSQwcKd8Ms>}3ag&A3%b9@CWF6Zvxk)TdS&92@X|IYVC^1(4 z#|~=B{am~RZ{XF!`y)^+;3c=%c$iSGq2^$NXsbn>Qo^-c61;DXAM?S#StWZ`Q<}l) zr%EY4{stfYv%vP&ACWCD+R(2nx5XI)_lfklWXhVo7Obdy?xGdfWHcHiECRymUF3ZzBX+wPv+K9HKJ}GEUH- zi)IyB*g61vUp*}0>OAEG2oQd)aHfDJ2s9Z@ok|sskYB`lR7oJa%nl72X2ghVj$VrF z-_R4-O)9c^01ApuDu0_ya*R`wsV< zDTWIP2BX4l1|E3{V%?=`vY~rKFmoO(eGRW+%dW3hsaPE`!1efdk+A(7tG|huy*fk# zf8<}~l*C||o5fL98rbkP7Z8=j7Y3TZ-2VWl*Qi`lr-D0d`do^{bkI%0fP6;x`;b=M(;=e#QkCMN0DVb}ZbHV?zC zs?rD%7Mnx1N{=%{KQZpUP7P5l=ZLIQQ6$@xmxxovd#!PtngFJqRB+QnTH;B|Rlw-O zDl-m#MC-&*V1;`fxeIXv9@&@&dBHSE49(Ypeh#~q{*#5@!jzJkkWzu-H-R+38GCJ2 zK+0!ZW(Qt!fyKq34hEkzP#frfQ~Bmi*rT4<*lG)=C_?j)?(SGHTrtf6i4+J*sIZE9 zJU=CEw2btsD`n^cP^8AlHg)|KhyHB}h5h@)BjF>2!geg}{2}m0>izq~Bd9^q?f-u! z9{o0g%fREKzgqnn6Lz{7DKy9HVqSH#+~6_7a2&C;B9yu;3CE_~qu>bHA!;U(cZ~== zX;$f`2?L)t3(^t}qbidrK{Po@wY-T^ z?4;GtD3@&3VIvNlWWDBildBMccslQ)L#sxW?6(33OcVg2>gEy8MYF%*V5G8}%uum3 zG63GNp=@P#N}o}j9+{+MnL3Y|xx~XtLE9Dyn|xe@(fy%JjTYrAal$yJDpuKI&hL7hrLV1?@fj1+@=}qE<|hS{1=)g@t(<6Axie z^xCmv>RgHAh3ouy{Vm7Es~pjg0^B4(n=54b-OufkOmRrCNEXmSEcz1K-R7=cwcy=g zmI%4mBgrfdI!H8c#2g{^5(8q*(4F4{;mvwSApyWT?9(Gn8TFQqjr-5?7oE4_7}8Z# z!j+5I!^wC$!pSo@=Un2f@+eJa5dE^Z+%%#xT?tf2Lh3Y%Ui6w@x)b}70D?yxxew8K zM4xA5MKH8i?$E#qaY`}?B>Q=yw1sR{1Q+pu_UohS;|7=`^LGgtTITO56y;u$c%_w~ z0bCI&hjQ>xA1ri&ordIJ1G`WA(mxt6h_K8Mzx}y&uh?&p9wE>z9c|+N(tm*84A*R( zE_;J2L8ebGxYd7G4XbTkpA^Vc#suV9>k>!>E~2c|5e-IE0PD*g>JSjJfAA?nFu#L^ zF$2fg!2xhCMDq&I1HD9f<46`8-FfT+W7odK&3ba*(URV`RC{%VKH|QGz9syd!}OU z>b>z}qPIvuKK6S;YbKMQ2-Uy&5iXs-2Y5$+Kk&8~?tr#NuEyl3ztiXlx76Jg9jvV-048a_G0KYGyM61Ew6IRxGazpK0n>61Tv#`0NRpU+ zn502%^$FJclh7CN1Y0X-edkL1BP~5Qj>QtTP!sEe#_6^v(~O?$1&# z4fHF7jNq7x`(RkAGiyYSjC_rBSb*pToMBtJ_d;~mj zP_x2Emx6`hD>-waVOTT^>5FEQjQh+xZPDvO041no;N~jKrLI&)%B9jvh^Q^rqLL(A zCyhj1#o}kAr%8p}CAqLkYCxATpP5i?>U;fU-W+jA6>eHfZEZc~G=_xLvs80jkg$Mm z_C@ZeVi{C__L?KqV)L6KJVKf}g>_h2j*Xrho+m3|nyfMW zZM5rb)py{K3_mMc-qbX2yyQDuHW`po<(`@*KsV(*h6d)_IOIcGsEVFKpQGu#Jb7$y zng8W?zx&+=H?~4)>3vfJX`Oh8GRA!y;9v+$*fycDdxw;2V_jh8U1U2Tp*Wb`qv`BC zeNH)YV4tA#lf7RUM4^e1JUbn`vRfTZv@>?6Of2& zWIvJM8A@IE&g0S2(#aE#;Q#s$=on=0(&Vxd1PK=4ii^+G`eWeWtjkz{qNgIJ@^b0* zPgnm$=+JZgrzbDXYD*k8QYSlWI=l(U$iy$D3(!x^@g?@%9#2lUo>!O4%q!vf=8F}S z2E59->G9&N4?aW&rBAL{D>E~z+rtk1W>W%)jt{1uy(jo4)wzND?Oyd7Dbfo%p`5Yr zI&BFZ*3Lq*PP!fouChp*7SYZ@jExRL4I+vfnqtQXfY(|b7sgq!h`er;Sw5Bov4;gA zqI#9f0oG2K+8jkm5z?yOOu0b!N%}z6?n8$Fbeq>6dTNX%B+*{2D*cDurP4-4SS7g>d7x?5!U4n8Km`z|7ZBD11|?M` zkam0g{>LBEm5eA_@;mKczfC)8EHS|Q$@td$Hvq$=so)2b*^gHE)U-)x#_4A#eEk z0MIj?$3!<-Nx_IMbz`vrI7V)`+S-_QZKENRwwkVPaal0mS z9(sb{OL!Lg=-JU{#G}kjNKWN`9w*OA%ax-@Y#9Nr5)r1gnr2aDf|&gh3Diqw>&8NQ z`OVma{(89W-c2H{XbIadoHWBdFWjTN z8@WhOG#jM(dQ+xWCXXg-lc$rrbYbpvWGKqiWy>UNRN!+la^~=7sv;V`p|F0JWm4N{TC76*{!L*Q?|_x`Q%<0<707>n3+ z%L?@ay#c=^hnx2Ad#IV8d~oxVn@jJ$`|iyfNU@nqYh6}u37S^bM=BhX9)fYyZi1mN~Rste0 zRZv9zRa#c&zhz@-B@$T)Wgd=*2XA(Vr#pC#W6>DuXRS>h03u#d?sda>@jd?blsR;P zB#7I49=~5xi6JuA0BN#*OX8_j; zY2wP(v~c2}DKKyW9`kk*(kcOZsI5Q^*wN@KRtp@3b#NL%G_*_ou5>bR5fLN$O^59% z8zxxUcpw1DDLA1f)eg(xSb=j=AYRn-)Bt2lL}ppF zX&-vU6&CMpb=-KG4YRQOyBDO(vZIpy+`=3>tfu~A>8tF17qL+py>Vj!0pgItavT!E zl>Bmj^>kJxqAknsl;G-9_zH6Bu*0i@0hEy?1r)osQ>h3eT5f{5hVe(x(eMxElGe&H z*kcht!1(oH$9Fuq8>5>az5faAb16LnmQChxY_@?wlfwPE<)#dLYe>BM{onQb(!_jMBjCVVkSJKUtR+|3!MjZwQUN)ira) zvH+TPRnI2fmzCPWx*eRYLiP0@YtHn>M^)R_B7MEpwGYN(%*qJHhqnmZCNUeC6y7MI zhxwcuDM;rpkwG0aMbCVYGY2(}gBq+#!QV7@p{z+NZhJj^@U;vA1USyW6ddopd>wDw z8zY=-cpON*v}!;3+Q0v|5r6;T5$&h3rqQC86GXZ}d=95ExFABpAGwgbDbrCbt33)Z zv&D0}33;Px6xe%7*5yQ6pdh)u}QMZ%1SERO;c`M zg9ZP#lIaCReQN+^`2;Gl9cb|Czdp2_za%0lF~F-<=?WY#d=Fq2?_B)-wZt${J_kL( z*J)u@%xe~*PR$oJ7|Py)Tf2-^T9InBYlu2QM<~Oc;5(Gy0eq3pQVsyL%zrxwS)(iM zol#iNDNv@wpoOYSt11$$A`Xywc0|0Vl5&=&g$C4U?TTFNB{*430wOw`Fx`t_`;h|-@Ez>INipXDre5n3Eq)K6 zmY4z2?&S;ZiS?uOeJLq}%jdk1NTs_HspzS!scK&$3{tuK_=r&n-k@7lw+O&3+Il!8 z7bx8Hst~Zh%(-ftxOTJnLOugQ9)YbB5VcO2tr-S$O6&^f9nM<;x|t^3#Me=TvGP9> z4n<-o(iDsG8s+h8Ae8DwG`7I}f6%WC^oVz$3Wb(L-K$8kWvcSprhvUJrADE=f+m`{ zKS&6sF7#;~kyM;JVa=@;$#_xL9)U0CRK|j9Vp*=pn_Y?f*&FcL+2vMk1TYP{A=Cg6 zYU}tsi)Xa~a9c-_lBNX(69wIacx*?H!9| zNV?bs%wKbbg2N80JtY>7T0CG1DRvzN#zlH&dxF#{(2tD2-ZBL=ajBvlRu?s1_Z=0e zz=@zF01Lwd^{K~;CTrYBLLc8jD-nWB3Pzog?&CdVTinCYKEvZ5fA_EP-eaN}f3*+W z{XR>cGty;@K%Z~{_evBJ02O&g6Hh9V()_$6Mb04@0yAUw^r9~LBC)Yh)RO}_qY9lI zDE1Uy5ZPn24$J{NApu2P5TWvX>0D5tZdc(#nnhJ7e~zC*F2n}VrZn=M;L>krZa||q zkD>zrs?tCZ zof=6&hzq3VkJV+bDnn3)3l4&$C3MWKemJ;c#F5@}bRTLA%ac{fxVyXHhUyN)6_Dud z7rk{|zh)93mJ9+;w{0|%4px`uJeMCJd2LjJ*D9>MfHmTA){mLTaw$A2eVRW2s#2Ac zV{To8?L~7Dmz}iPcBN4)&*7KbMBC>K(n)G`erT&oom<`RFgGA`BH>VJ4?Y8vmgIB`%VeAI@TG{)ocH`A(Qh+2n|Aqzz`Cd?$9 z1R%cw-Qy0*EC>io*0GZR9;=FVQF&r%X=${U^3ACncl+cU1>2vL`Bz$97fF5>jav(W zgpEW1B<3`VT$lnXi_^uWp=B$CRTE+ zOIrTTP$<%j=)Lw_Hw)58)>2Jjm_h7bIzpfXOtD?C9i*h0;?UyPv$Sb6FX1ICsQ{A5 zBBk(AAVxW~gu=Yh9@*JH1~7_e3*>WqfX|W4&8(|eg*y4SQMyWkU>)k0SIhR0j=ZNx z2eD~1$Le3+{9;B%>$D~(&p7`V<3IhUSio@N#*`!b<`71FM&jrlOvT?UGynuQ)x{=! zOKkkE!ox6Y;MT!(pfUX+t}8v;>nf)z<&{*W zas#Q=j9h}+1SEhPN!@W|5CloIh|N!cV$1gb#~=xk5J7+j2uajUI)kzIZ+s$6GQzWfk<_!(hW4Utnvh z-7C?BX>3C5q;#vhLVk^L0W=|Wea|Nd*~rDJ!{!;Xwl+x9$4BG!iRH}wWUOHK+r-lj z^Kn`{6$u_Nose&!pplZ=1o28t1{WnJZ!CWzD)=rQFk#jL5Q?)~)=6X++hISNsj7N{ zNEoq`iS9v_g2CChY(mY;DE*o_=9_dVlPJk~>#8N}9S)6$n!HSfiXQ5?M~;UdZhSy~l8v{VpTH zsG}pzWs(vn6QZGT=9{yw-UQWf3Dbi;(oRs9Emvm{C+}o!0&*A|q|QP|t6Tx`f_rd| zNkJNJK%kwd2s33#vLvrc;F1eOG<3*pE!R)TxO56h(9&jP)Vl;I@K2TxPnM58PPum( z={ZU2{Uy z2s6t*Vmt@Euayn}pgGRFBjzMW4kHE;sr=ee4cRb_$!*Z}DKh&c$RoQTF>&gmGWL9W z<`t<-tN{tiAJ6(9F3&$bJf&5OmQ`<~gC_V*r`&>TGe;N*LK+zBhw@i^^I4IVv_A!y z{*;2cpBDHn5PT8~1R<{y<-(~020(W0#UT^I5_rTvZ!nJWq{>1%MgCqP*P!rBQ6H$E z&iZLeR!Z3jxW*flp=I8ed=L7adQ#Vdpt}x~q;;pB*-r5)q)n^x)sFnCT3dLu?`n&H zf+Detb(AI(+zQF=lAxA)tBDR~jr~NeNg^4s-kkqhcdmXWEi`}^<@$JqI)ZIP1FLC{ zrI?x)!xU3DBxn3$nVaUHeAX<()krL^Er=Px9vGq5WoIf04rfCy4D1m&L>uQ3Ks9c) zP8Uh=oXTSGfL+ExPMWow);-|}HTF$;d_bNqiZT&4Vj^4 z)m~Lq;@97Lldj*D1`)U=-z~O!54S))jadV`2%pp0b}4Gl?d{EnD7i!dI*KrJc&{Qi zB&^8_;IJ4@9LI%vK)nL?SilIH{`QrD9FV09d*YclXflW09wXQr5bfaQ35;rQ8{<3a zJ_f&@t1wKY6_Eo_1$(`Q8%w!?rLKgm?H9C&Y*|a?vkkv7Qk5O01yOwJd)h7KoN$f% zEg8UDn=T0FNQeYGinQw+lJk@id={Txw+mY6B)Sad$|f;%4QcgX2fDLT)L@rMuZH4M`KH@PDM?O1Cz{g0jeJuby~r8HmaAWAz;-; zGe@eRsW@&T@^e7)L>e=uS`Rv~W>a*32!cVNLp5SU15IE6zp4^qA($os9zGlG2z;h| z%88&Yl3iApfwhzv1oRi5g)u}$f@(9PzkpQb8aKcFeEF8~u4R9C3cK}E$SJ1$pjhDi zd+qO|zxdU!xc$;BapLKIYgtUqRMTywt`zC0osx_Z+xlGRt|vGNmYBN-NG@6CL6Un51x?35|2zNp!!Z z*JngRWFPA)J~;SG3e`R1v$L8@z9S7D{fMe_r`#ZL1nsd;i9$PF*UqhQEBLclv&@mr zKf{6GI5xC3qbH7RbB#j(WS!3;&B=)ajhBv>0e;wE4PA6MY>g$7g;iAPThP-})$6?D z^&$O>Kx8BC1&&=M1;q7<_QSg~CZ}kuw=5YXjZ|%xlr!znOeF*B!jU`s(1nql_7w66 z&95B=34KnqlqepQJV+vsil{RaQgyx!UHKAvCHKDruo-oW%cK_$Qw1c>3wP_T1>!S`op}BQKu>{8oB=5jUOVh0QprefSu!d@KG-t&oB*%np zQR2A-k;xt1?0Kfbl3i$!Sec*yo$U61r2gUw{$h9o03M#`=O?6RQO^nD);MDtv|}$E z9Ph3fs!P^RSwe{6KpFCiN?3jO{$=ROhzyK}`s?1Xs!^*WU~aMRNF}&Mb8GgTv;ZE5 zd6c3@qK4Gx1`=YW{dLW=27yy=(14I<7eBG52UJ znW8cxSN$#p$+RJ7=j85mz|cw^8w{}Xuo z_goVE;j^@ej-{}Pb$Kf(A5(D8EilBNEuq6bpmfb#I!aBN zpFs%V3Yd*$Pc_s5*31ob=sQE}gsdnsgKm#Wlts-D$w)j0-L1_iO_TExVA#6uv5yg< z{O6gIS;O>qw|5`iL#!&YpT9f&d4)C)obJ1RfbeOvRbGH1BpuHG@w+#Nc1Z%+zC-9T z&+~OoMA=WiYR3NRS6AknKQr0|k<5u-a%CC8C1O?nnVtWG82VrSt6%-K?*Y=pGpYM=Wpg=GNqVhLVi3BnDsSFR2#avAs@WVez)I+5#%6Mt>T};`TE%lRGse&K@qe}LQQLNpx_TmrUvHNAL zH5wiCB$P#5hV)rgWkZn({+Op%R3qeWKKE{UWb-cyH0#nYepd&rk=dR( zR;Q0Wpa1aoh&Z9j?gzsO-ual%mfxK%zdU~7Uw(zE%ar6$=?E~Ic!#b~9n?eMN@1wI znEQIaNqGMkPWL;VTgG=sGnO;cmZAKJ5FTo#%mlAG0mJRC@$#s(wuT!y6B4K^ZL+)h zz4iaFNFCHUZ$H>YlmwedP8g{!E^%YRNhrwnE#4htnx8D<#89v44akM_<|Z{tsW~FK z0Mml3`aPpT=gU9;SZX_(StK+Je-sA_zreAZo2-EK*{lZWugGb6xi9qbRmLu?h3D(x zb})jr=vw>wF$v6REN-@K6j%gZA5aUn0zxe^TX$!`rY~fBK9`t7vL)jy!%88?{zSp0 z(4OUZ)J4LV{Yx0RKf*kz*J#0l$p-6TWhz8;a`Zdgep)1s%zljTE!wi*U)HLR9|M7eYjXkq%9cd^rB=Do1XG>J0xRBKMm=eD|Ab;*rXRkBcf1 znE7@{Nt5Ga9|xSFfexwXA7HB3Hr2kSfQprWHw&3TQNFsChRq|1(_?#X^>eW&T+rno1P-d>qNY&OIdTPC2z$^q(e!hNGlEb zoYR7U0#`Or?lhH=!n|xgcgW-r9h1Rq@02ZyvfSpYc`Oh z22@%H5=m>DRj1A7%hG#)*^kGW0a}dQ-dA)5qfFLT53p;p&$J+5^}>2p_!ZM;maHX43^NTS|A4nd;#4BEb6WCj z`H_mk*@|rXMAwk*ED-n{oioz@elr>nwHg!^1~gPSex>QnbU9=T&{U`6saVj?5c$?! zo}FuZX(}!&A=Yk^<%z|>0vNCUf-umbg-`7l^frs6YNKh^zhtc4Sa0d?Jg**aAlTOC zy0`G)65prn;o|7CrV>%&c^^bIZo)NokAX729Ghu)p`j@~4oO@) zgo{uKx3&81^AkF7wZoUD$I7iW9zEKX$Pd7wh(mV1K7aAF_Hljw^N+J7wQ2)K3x@EX zl-uRCm{57?+qQY=pF1^3-4GY8+p`2V1vNrp2x(?YS#e#qB}Z$CDI-L0Pas$74wUuP z%VJ`2sIu62s}UA7wUSnJja$S`Owopdj>RTFvay#=8_~qd>!uS@u2_9x?W;JBj4LC% zp>H-onzIg4jt`ex+{IclPU3a%q&;l8T3SaK7{{|+FKf~;9NA?2S9q!{%%_*wW3b~@Nr8z*mFBm^0IY3y)D%(? zaYa(-0*QdF$oN#;dd>qN2%uk@Zu%VsNyKABbX|$urbu`tDVAQIYC=f4lBMU|rStTR zn0o1h_5$$4t`vv456|!%K1xm5EV8n{H&Q23TysAB@zY`2u8XqRnsi+Nsf0AgCPG?= zVfpNpm(l#f*CG+exjV({b+oCdPh_C&*Dcn|SS0}-%KIUxGF%4|Yl7C@rL?8`{f3l< zkxfe5L|z9+QvTi(T82I{t@;W-`a%NCS0Ue|aau*+p3#%v2)1?P(v;6UdpIaYj4-5H zi|+6$6pwr-5P_N3YZCc5h2SaDHAPdu<3aeuWs$jYrKSHre8*(R=fru6J@dv2)Js8caO2x# zU??GMtQ9?fbpKAz*`x(Cu&(_RG84kJXgfluyOHEX<3M6e1MXiBE&4o>#mZ-3=g6`Z zn0kLi4UqMgb?Fc?3O6p!F3 z14o<_z5nn3(O!Wad?g&tAFV0p{L%e-Aqf8}b0RwQJ)Bal-WmO&ZuhciBII>Dcya~p z;*2OKhISGl$;Tn0l!wQ$Q$k!pjLoMRq7&+dviS7LN_Yxd{wSC%0f^9{=T0nxzl=N(Mw4#3PGT6XA@*3MtyhT zi=)xrcMK%gQ=UY`-K&dO8ckQO3Kt7NSiO9ZIt~-n{1!?vbB*YLck!EvMSD?6>mT-+ z)^`%WTbCP*_;GxAkP)nM0Q^#mXw0!)WBQl?zEYbpJ%g!8qYr6)jm zX}ecyUJR=CiQ}8T7$|2Ociy5uWbm@P_0-r&^1WpOZo4BzG9W33>|$P1iFm$ z*=9I^&#HjS4Pl%q)cOq9f+!MRettPCvZQK&xNWwJ_Ked8n}!8yB=o?1;P=@)=bzxJ%Z6>ulaNet$j&sNU= zlfvr(?Sfko+F%Cozj%iSVsu;IjgVz%!Brpc!xVdIV8L%ETt~2pD>mQ0I%5c&4Hk?b z_#a&HfBY|h^{e%=4H6+@JRu{IVI$*Z&~%J#_}FNA)d{(LH-I+2%Xk+0;vq;ruhApL z$x>U$y-}Vjf`x|L`S?0HpZ1E-W@hYpk_=ulLJSPhS~kh>q;u+w4bxqX@G(rJbby*K zFuJmnY#bd8Kqigd*)8CJy<#XzlI9PjVwUZc>bdNYK&_RHGzyyjE5`0Q*dBIP+H&<*yI}oX=B{tVh_QfA2}A9{$;@ny=3X7V zWr|WYJS_ZMK@!`f{hD=>G~#R2wB&Y4A`VdeGc1$$l(z&bO$vnPJ7mthjMA9Qm1BBi z)o1wgWdt(P1DXRn`v4mQoq?Po zyjTF=FlGcl$=*oCc=-W$t!#Hd=BH&#%**P4Dc@8hM!>#3{+S{=>>py+`mAd=)1#-w zMAi00p(p81WZL6=mGATjOI{k?=7QI(txKxy8Y;*l%x)4wOy#N=8>_eZKrL1;LG+Y^YmsXh`{^~StV3-*>$J~>jrIf02n6Pz>#>E7ak>(FP_oL|Es4oL z-E>7k5W|Ls4NuPJtDo7u!@K_o9S3M57FZ**M;gI+e(+7TK^EgbiWco86{(wq)YI`B z=t=jwcnDKdxgfnN1l(HyWMrO_mA+UWVv&}}LIT$$hR6Z+VErTHHgta}kTL7n!>|rk z^a-*4MkO+-dtmd*cj^J6QvJAy>2s~_m>lMyL6y{*Vw`Mjt%J-(TGdrQPr%%O zPGQ@>Ic#pErg}gK3cS|bA^9~$$=!14KP)hI-WwJgSTN`5d{HJ#qs?%`@W4>7%@#)X zup^qvhYl=$mkfG&P>my)DS}c? z%rj}FSzW$;k#|EV%BYw*!(#3onbYa5*&a%1ti1yng#YC|j!wnmFLbF4Vl!~1tFoAS zZ){ZD^R&b0M3%GHOvstBAXjpIYWH62f@<)|8D#vd%4<=$VdbPR#xxF^)0+lo6@iIV z+4_99?D6om5r#IUBaF@4qzcTjR-RUkAkgv!5fv`ZMY}uxx2dD1R~z^YW_3b6s*0Oj!*mg(hUZ6yqy2_d^LZQZl(dIY}7`k zSvJwcL{@YcVKX#B`HNcqxAQC&B#_a#NzB>Nh;i_obq1D#V+K^|;^j;9`#9-@@nPDO zh|Q*zAe8_w^{@P!=D4@SDx_W6s=4y{I3j6eP3Q5fNjBdc&sk7ubQ<`Pl@Yz=he2U5TPi#WEe%N z%hbNUG7NMCi$V ztZ>xED-r|*w%8Q1VQ2TCeZsT`wlzCo@&OocR^hKkG$_lRCUB<}&~z6O{QBYY`O6F}sHz^I$MWBtA9|4gj>?^oI_4UUGL)yu>vgfW8@tc_ZZs&esoZegVc z1o1sM=-o9?x3nDRIf=$e1}+=vzLI6+;HS+snKj?6Gj@Cs3*28%)uaAJR7 zpPfGwX#Z!X3qkVqw@CrQFd53v*&yo-XynwYOc?-)H|7baDMlr>;@n|*t4uz5Q; zjH{coP54q$8EBWsmYNj1?;v(`W5osdw)PHMHvL&t0wnE^ww}p+v0`1ZvK8mg-T5Bq zrk}GAXh9Bv{)^?cvh6f#szOeWf*c4?0L$x7k6wF{+qYL{{n_crgBLKFMieB@#1GlV z5JMnJKr_XbI9Vy>)#j>|C5?JJn?c&F^!8f@Nz|NVvfGFC=KbxxgUyn`I;gD_jd-sz zEJsOLikG4IAS~K$fGC?!oQIF|om7rW-$*jR!Z-Y(M|zx7HSEY=w0Gx)v)O&X0ekGB z+9^!Bn7urC`?oYmyyvclH|Iw}_S#<{R}Tbth5pJZ-8dtGbDnaP1LAH8j6}d}Z?h|- zLB!KqbtD@=CbUUKy4+Q;35wwoR(}5}dmdwL=CoSYnB!3GI2jiC)M=W=n&pzB&5qi@ zg2gd7$!Dld_<^cz>Scz#o){};nn*lj!_WOp0iE%*xY5XI{((`~_eTLiIsqv5$5h|PFv ze!qX#1|_lsn`emSBAeO531}=-@tbm3+LOklXi#GTmd@5OSJb>jZl#d{gy%2hl{w?t z?qjAaYSqY80RQFsbVB-JirlK`?Ye65#uv;eN9C=4{WYqVNuaMT8IQffC^n2%DwlhK zETXT9EPaSKTW(6#$?@A>ySuigwzaNRd*A@&k~4#-Ko7Ui3-7skML(npU@&TOo~>U_=> zBuECoe-)0P0SX@kYdPz9k1XGO$-d?pqNgYZvGE)RF7pLHF)#~^F{l<^qn*1n5nr|xx3d`v7F;j3wRfM z4K5QU5}Ya=u@Zs|G<{q8FOFW#f3Qczg@E0sNbD}lk02ji5ylS=9uGD=@)tUKE-+sS z%>M>pJ~$>O@t$oT#^Ywb zb0dRlvw#m_=-w&V%gdvOa~c)%uYdh(WDKKyvCuGiAX)wwjxW=w5?R`wnV5Q|R2|ZX zs1{b_wuWR;sDs}OjkiZu7=N}h5FH}s^!fYQ?C^&lp8oA2X4%b^r;M6fIX_uBe717= z+M1yAW8w6_OLPhM9DtFRCu?t4S5AI;g)k%vQa0-R<%^#`*W&7MTF06JR3?o?K^UJ? zWtBEY1?wcCL5$k9S7{T07;j#A#O_j2CtVt) zV|poQTiM&%2!d8N9`2PfjQH?LkCE65@sp+)%L?Kpt~x%@4B1QiRbffEx{dwFGHsQkC*-!M^u<7e^nT%KxiQ+R0w5fjObw{Vm$QuS?3{i%_ ze0zWS312$<=>mS#FrW3%wA`z8pXAJ=G|skX1&H5b2d>!GMXu)*S_%q}?GpzC03q#&?|dJ{tPn?EJNm_}}=? zJ*@-5-_;P)$unPS=jf+v-0pC`yn1{2>l=zM2Cc2s^xumWBoJcY*(-8>>AtW5{d zgHQM8JDX49f>2x6TExK5z4K!(%eu~mKCX$3LN(urAT)YF(FhaVH)gX{yp_H6jm`O; zt%ncq?5;n$yZ`I?);^b?@SokCO>aS&U)$f?+S$E#Z~xl-$tM4Mv^n2NawN$d^}X6UkSpPjCzuav6cDG`u=*X zdj0!~JB8qnQt!lYb~ixAiLC4MBWo9`452I17njE2(M8=h!+3>|XR$-gDMVIY0Bj7F zxL1eu%4T5xc*K#|vXdEXZz$%TX`O~8ukCL2Wf@892ibPdi_MXMl4 zQ~LW}W7t_CozR9Xmq{i~#-}|S=y(?`4!O2s(vnz|{Oq>2PM@u4wz>&(x&#vuYN1B< zpX%s0c5tkppMnouS7IyHh!R(G{Nc_S(=@NF>2%KSSmqp$aa!4+Wku|3!#KhrI#sTG z=x-9-JvyZ+@u<$hKx2Gh5W@Sd+(Q~LZ1re4ksv~B>>&ohfJ%AelhF$0XT>xqlec4p=ta)j{By5KuKaHWNHLlSaE2?Ej#%M zd^oU-39~pP0%x}LWM{rcY@4L`*Eg_Cp<%kRn0Dsrx)93fSRQMbvbY(`cm>f9!8z?S z0j31uj!u6(#^W)7#kPM0ZrH#VEiSQb6U;*f@5sO#o4Yc=6@=jQ$V<@gdp3D=ju>E5 zO_dm??41W~GsbU!zk6%Ycft+`ci?_n)jzU6Um@7D(otFzAsB##3 z){dSpFB5-)^{M57@}QDLSga)u|B%OI4mWyoIZEhP&GQfzGAP zBbR&{uzpG3;k-sLT)Za!xs}r;cWO^{lZepdd#MpgDtyY0im8Uja?)-;f!3x)ZQqdM zHP~B0%L*ppd4Y45@EV%x-qk6zVnz|7N6-S6!Zl(Uy@J)A@jMEGY?bcjEuy$esfs3J zFEeWq2y)^8;0LnS-^|w0p5RQz^f%RJ$IJZT?EEFxZThQ9!tGm4giZRW#i!fK)aF!F zu9+a3A^Ed;`U@4JvbchnEO4Av}D3thynO)4D=;Jtra4m1iQcCwx~E0 z>o^y|dQEI&0>k+mU-6}u+!LQLJlAkc41oi38zXl|WVUx^GKNW!gFF4xZ2n|Jvw8#9`!lIBmLr7v_DG83e(!{PiIbV@W z0umlZ!dNohei~yz1U?h!#_GDibl)!EZCJgU1##~9DoD>kF9@QYFA6wnqR{hErXE%>FDTnd0?(?N{%;>{=_HFbO8)CvEGU zp+s~nKSGyqMBgDQ3Z>ll?p09;8pBLYZuScD#8ry{Ku+b}t{w?2fIQW{n_?`}k)xon zqzF;5tNfscevn{*sunSBX5#wnjv}8)cu?S<>(4*T{^8GZ;e0Lfd7Q+z(!_u6=ue7( zF_sb_OJ(@U8QjZ2V~B|>qn%G(2y;q$1FsnKijJln=MHqMsvS}nXvtQMP{xK)g@xOK z&PeC1R|5@%I`V+Qum6V=Ts}n+ zr`%bS_15z07m3Xxsp;}~bNNPm81c=y5pR%0Hdh)Av_OF7G2a1iRi z$D-n>erldrH$JgKA-LR}qOg$`vIovYvj?G9j9_9VTEi7pR{|E^bHz?;CgC|<2eM)) z=!Inrna{@9943h+TS!83tpFdbnWb^?JA|UhA>B7`7P?+};!@I7r z{Or`;{c%jcTsnb2Q2ITs;!wGVbhB-|E89&}-e?wT?71EQnRpzW{zB>!{4ksXD2yOT z=cM|wcONAAou?Y~`24hu+yaoDC)%JB&w$|fhK7`~w~{^tPfk|mzq@BrbF4V|Jh6<) zao9a@DPuN@C9Rk0?%t`=eQtAAi530?4PXUUWh$?7-2VALDG>i327Z1x4WoaO&`q}i zKl1nP-x&X9m z7GeSze)Tm>ore=6Oq*S@+gQR>@Yj`sRH$&1qz^UkLm3VA*MljHroM`fiUbUN58ft+ zbNw&-`WA=*HJS~pQMOY5K-J{$Y3u)8*kLSVRa$2eaF~PhYLYq^2muD$8gfA{huUQ^ z(lJMw?a}059l2gUJ^zSsP{s_ulgqc*dd#2mb$`7&U;1j5yPs~{y1Bf1u)7LlH63)mnRMhxrWS!yl*;W429(vjyg6N?IQ`Q5&H7Hbb zYJ$b-qocQ$Ux7?n(N>u2^S6?izef`xJ_3L}IK>jzuAJ9C1$TN|6R-)|lm$=!SWaNkcKuHV^x zw0^Mr==<5m`ok^0zO%K?bNdHd2ahT7*u6JD*xY!qv-@!O{`a$;EVce{zP|ZrcW3?a z!PdrpuJ@^c^7`HFt(~p?0~TcM*&bnyyPG@fM6FzUW&ZW*>K9+jshbZs_a3NSMkc)V z#p){iez41R2mh8od&@V$T?6)?wm=IF-E4ZR3Wmu_;1)i!qlw_Q!NE2HjKEh0a7E>m zPKr9(G%`uW5Q7V@a)q+^-qF)@Y7#47o@Z5(CAJ79MXe>a{BP7Wvr*H)AXha_6OSJr zVrk=K_p`ixwsdmzf@^G50|d7P&)*YTGa!C|3s z?Q(T(VV5^or@O>vK%=x?0#`*pADoj#rrjofC(hDpC%p;4K+ekf zg{1Mq5LiX>dN$m>j8z}TZ@D?nYB>#D%__S&?UBUhty*uT&;0SpdrF^(ud~^`?{>54 z`<&&FW)&pw3gzF~Ogfkd4(Foka&>dhiGiA>-ze0#NY0XwBZ7RiZ0<26wojmja|oQc z8XxTH+Ln@Rj8X3}Vx3x6vc!@B_^7avRX_I30KB?h89{4(93nk?;{8vAdA_Ys?We_@ z=O<_c_;4M8S2OTvonvyZA(M;d*S4(a)l;u)9DEOM-#e8AZ5n@T2L9jKl z`D#EVr?<0_zkWKU?2QM>J-45WDukJkV6aZj*soB1hyqwD`-EjIof~|UU>1U6sZltH z_vpyi`}_AcP@5)Xa}QYkTPzvYl3N=ddNhzomh}rOB(Wxfbc(9rn0eg)+E6g zzF#?ir@Z}Nql%aA;`@o+&t{W<&bfvgy_?DiM0)kZR)rObfIDXBBfE-ZRo!DQk3zhp zuT|Q!ckhvC)GtQJA$=Pk@)u%B^k-2dp)*Lz5a4MM5M5O@z~9VxV+DQ2TYSTAmZ_^$ zKt*D>&kayP60ry}(A;`as$Hl@(aIRKkcmxV2US}oWf?Xl9h|VL_{};R0vjyn0lOYT zV8vdc!{-R0iL=i*h^QFUs7KG>sOk&KHqPGAt6CxMZ_vb{+Z@KNr^h4jo)CDafNavZ zEd(9q!|MHP^;RO=U)H?~NUD+tm1IZUiUlak0=QEuj(S9$v<%qg(qRu@ z8&E}&$16XIm%RCg$QV=^gl9Y;I@s)#Bh})5_?r^Dx!z5Qa!AL3A7XVGy6fCKoEjV=N>4xe<6}EQPm)6{VAauZn9%28|Dz1oDJ$fs?kuPfZQ=(xJ@} zU8&{Zi8eZiED#fkW4ze{^y-WT8FUPh*xLR1v#t{`i#{wqPaPpoB7_kTY51*B~ zi<+v;Gp8?@_2!1E8<5nh=OwD0@%DA!MXnf=4@eG1d#2P~gE%dc?0^8AVsD%eA0X4m zaOjX0FOP1wc=}@OH*OHoAR~&8JZUWv8D(hkSSTiCEK-{5mT6KnF}nv<1~riamQ71J z@sT5Q_g|5?u>cW=05hq&hqk^0ubwY<2SR{WWYm**Z;!UIHzAB3x<$xjlv3Cvr?GQk zuJ&M5#|8~e1SiNOStpN9thOEll8R8UY!N|&wUU!BJA$ZyEvHpxHQM9w4NVv6s>V)^ zsRWQL#VZa{XF%#Clgj|6wdph4Tj?+o_Og6B8R=L=IU>}^pVRWdEViGyMWWK=6%*$Z z;2aPTNmB%;5uY7Fj=As`FegiN_Cr;%zrNx$!vGDHms+)jjGTMusOy+Q&!)t;R6 zHxU1CsO!eIbF=BN&va#iF8n$=X(C&?&p1}*)$%3+YpOtv=_d~puI^$+u0&i~Hn(#A zqso7qQl|N$#(!jvnmQ%`VM|iokAs#&;jioU8P~?PavpxqcoSsy!XEreZOAb7nH_Tu z?Z6=4Qeh$b3v(9i1|JD50av=0sb`@K z591`(O^T;Sz)J9_JVX}!NJ_vIRyZh_$kfU*D;rGtr2!|X zrJc-Bv)AErwanprj#?jq|HbRupPeCMxMpJI{AXG3zx|)7s@vV(-h8yN1>aRxhhBsI z&+DIKDu@)(cbi;I{b;`Pc>B)gqxsrea(`kb2FYb&$y|$f`tJR*>QbQ(QGh0IZ7~Ly z+rBuB!mf4Xasj>UhOyIT`~lYkPL!|YQZKlv91ab1#JkgltDy|tb~=|iLBQnh8G{$u z+CJJ8-_A^OS~(C}pQ1()r?zRe+v?cmVAXjPNa6Ag%i7t%*I26x3Cj+wk|g$r>I0D6 z=GFv7_y3>2XOx>4qp)twxH{j{<6m;H@df;gRtKn^w`(bDyErLL>ms4ca;r|NDp|{Pt^h|# z$%Q8BwD#@k(6H>Q3S7|$c==#PMr-D4!7f{}+;u32!|vC7!Br)o=ijL;Q~$@zs)&XW zF333dQBe9t|B8``2R=#t&aXk~#_rC+=FY+XZ)dB^dMqCh?*972&HeekhwBG?4}z_1 z)7r8c;$VILge>R$;K}a%+s*IEgFfEbc)%JvWG^=k_GdSirwcyX+}&AXf1>pOR6w@KU|?B8kc z+q%DgzzagxdPATO%} zlYHLT-MP>dEbGU75TNFX9LKs&*#wyvlyZHxTfAHXu2FZMT{n5sQ***65P;(`< zQ?vC)q|2emKTBrqPosI%gHjZ#xNF$|U4<&`)QRLB3|sPs`%`gT(#ozY>PVwCDO*LW z+7@FKWH<`5*$Dd}@(3O!9inv^F?l#&(?fZt={2Ku;V0wqnB_jb22-yq`+A2Mi(X?B zq>k`6oa8y*y?mEW8FR%jN2`}N#)5%ruU_iSe}8ytdYwRWy7L+GHAYr^(v#J3=#xcI znGI8av~43Ln{m%_h$K|zVZyY0RfdT~5fZ)Vi^c3`W1p;Ezkyl0-7vo9(ZA#JMeFU4C4be9N-L34eOewGVWSC6a-~3mCqj*bA2#KJVBrlF#v|9Hd8(ieGyWSYeE1M&$XMM49O{?vX{E^nE^y^c?bNcr1a2iiNpa9rt z?rBm1kl{Ppw1jZjt>1ogMn4@MNXMHtSUTgv2_vlujsZ;k0REj92XF}Vy{W#Ikp%lU zEfY?qRO7rEY1+f*)S~MR&_Wj%>EJs;BbbBd_Hr;ahaz)Je&yP9A(EL*?--kL)Uf62 zIi|>vY!^1!-z+_TvL^bvOqwrY?X2GVEAlJYeo){C#=)aaRKsIrwtrT?{_1Q03!~?+ z)rh7gCKgFROWeoNMWq61fFHB@CVvD`6`b&w&K!TqHvWMxW|O+l0q&E>{pXjQVLtz= zo@Gp*OXv{#H_J;E_kvCS@$o-PUw-k$XY-{mZ`}H9iCwJbueC34@fl04eUVzg?V^K^ zufV5Ew_Ia>n}_-7tNgXL<{ERW+E`qysZ>I}>8CZUGJ7>7zxmK^=Y)83u zJ4b2T$fMCn)92mBO}0Ua7%!%zj`#A{jay9R+Dy{U>n_1`Oh%?lR({*V7jrS!c1TYus5wIAzmN#kJmz|y>(oyYvOK;N#s zcKu6sedGF#uiX31>uZ#B@z+;5N|c;yfIEiCbTF2`Cp3G(8*x?e(sKe_&uPz{YEcBwA+N)P zI>(`Qm`H1=Yv#=hg1y7TU1`ofQ3h2riK5lHPYD@N$wIOLEO>R_vp zrZM(F3B%ChkfoU*(NbsrSq$&+1Rld<=V|rrVo0aGD=lPx?+OgNnN^n4Ju2IQpD}Da z!t4NFd4O74TDu&HFlbvR@~`9C+~@RygfPve$JxefltRfdO~?fEZ7>eYj(cuYg!)-A?9R1aK?b4is=E6F0fjEn5sO z=G|D-b4}QJ__CGUVqyp%Kyt!^WhW2XykTMrQk>gqEMpGn(QQEH2A4i>RvP7I_AXbMg*itiWNUPIVOgIY?J!ihdOgu&86EZfztf zd(o3L^PB-=G@Omif*fFp6ZCz)QJXz4Xe1+NE)Qz~2ojs3UxhSC67PveHfpme#!@vA zH}2};=5ACUMIu!lR3c<_tU8hhOIjRvDqvr|nY7mpO5ZI4IrJ)m|BR(*0-7s^yhW8- zJnD^4=O5X^NVKTIXcKq+!Q&9QX}d;-3p;F&#d$IfZe$79LfdJulg0z$aL}+gWj_AyBZNTmIj7F?v!VTQ?OM{tA1MHl<7Z zRvYWa_-fuCXsD84)YtILeAZIa#UnL#@t7v5{(4-`DFgc8=twnK6dDFigu_IqNHXJt zc^&d~TxhHWMFj4kQJvcG%74V!`d5Zm!Q1w;yJtuyNVZRAWkdq%Goq;FVk>lAY*AEI z_^UiQGx-uD?_+kXVWRIf+4(W!+rFd}v-T_kiMwIAXXMZlIND|6tW#QlZ#?c0-qn_J|0Y)O~*lIflBzrw^&P6I;YJogl| z)7|_5)G`{9tLcXB@W=b>_vYJly!wuU(06SR(bg8}iw20&eFyBWL8uFs;TvT?Z+Box zs2-;8pS@2u+gE|Z{GuYYl}=Fo7~y*J*7)cMB6wyUhBfIy@74JE#3=1MmZ@VmHK6k| zD)ZY{G{7=B>gdP$W@?7LK~s74h{`_FZ(4dc@X|QODb)Zqk*TjBH2?x0V0V+3Pg&11 z7rwi6>Q6tP-}0aohrtJo2vjD5TP?Zw)4SDZ8J1)wGH+BVZdTv#}_VTm$(h}Rg+E^6u&(n5$NHN;#wvGs_m*B_5xc8jeAe%a{T6oRuDW)PG}DB_I- zcP|&Yv|DP!!_I321pT#F0Rdc1Sr0xp^mO#I3EDIOi-P7$I8NBWD`AddEq*&ZYZ>D? z;T^{U41fdh1?Ag?Vl32dK`t=O?Yt!%^O%}wMGtFtQ82zxmpYWy-*m0x)tYYu#v}~} z(H8v%?S(nRud<3fR9xq!Z~KSB`Tl8syC~%wsTN>brJu3A^xHF z&U+9rCc*pm;bd3~|C)|mDr-}vK*dg(F(NOs%s81>Y48m=qr212o90o7m196L#V2i} z4eh#kqb-i**?eUJ5G-}c#e-B@oKYAS$KYezOGLmaZJ1ICRg^?aN(4#Su?e8UaxGV~ zcHN-m_Q2n&uU1&SWfe*9-G%NU9FlBDbtm(tehu zYpYAB8MF-pkrk%^IMK8Rl<#6J;qDGb>cl?nb$TeQ*N(H*mg*)0I99)YV6uSmt|LBT zyYs|oKA=J2j`N^daN4z7&?J3V0A-k<3a`n z#Ek?)p&b0A0;H{~FW6}nnxEadq%QOoeVNv^lXWQ4A6qAKSxj5PDKBn{_XP_C-V<#E=`rHdFZ zF5yQ;okndiv04Q2a|o&29|cTR3rFhn;5O>meRlOAHeXQkO;J&m{N*$|5BEQ>fYQma zBA&67rA>g~y68|rl*Ln7H_M88Tx;@{PQC+D&?3w}QQWnF$}s!o>IOYX*@W5Agv|#w z8zcj}sTzGflPaqPbYMUd^I$^_TKWBL1%jbCcP|O58Mh)P%<0nj(gvzVkBKA}i`Gyj zG%IcWIq6427UiqNEpjAwa4N8@|2EdE>@GdcHgwLfA%9SRsOINK16YCPB*G|y#Z!Yh zLBp#^YA;}#YCOh{q>fb2k)|I+R_MyHbVXGb+HtY6RmC|8pp&qXDQ#>Krs2skLA7jJ zlL8PPKeJv7FBp*CJ-ZvCYGw_LmJrBLaIOgD9&NDKAa%iYHK*ZEgicR`*2{Dk=l}LP z8(8rGP?h&OC6Fe!*h%ZZM&ez`E>0pW))ACs0ncn2aB$SY0UT58iy2+eU8NJiu12y* zX~9QNOW888K8R7@lLA878X!Hf?<7~)Z84uu0XFe|U2FI7wN-%(PoR(w{y1gY7Y|k~ zm;BL$GC?KKWL@Bkc$Ch(aJh+C;4x?>CPlmaLE}zA#1*X5QA?Ykn=&iK+@cW!q!F%z zSZmi~B$hG6*>$`X4NZX0XTWYer8}0iiNw%)$-ff)sUSx8zY|N~7=Ev-98Th+QEa(v zme(}Z1bh#CVU>aycrVyOl{jTtq}zlnI&6ikj;sdjR!- z884(#-4$Z?kX}7uq+B}(TJboEc5}fSbs{`?pW-aPuH96cbCIw=_Y2ep<`$nEl2_Z{ zqcK4~4gMcAE{AJYF)zt*^oqDOnfCI?{UhU$0yAQ+N&$etCdxJLad$3Gz)bC*0oxXm z6L#2+F%NZo_?iESln*$zgBN8Ls$jENWw_OCp~JDHoauLU5YnND_g-P-{;nV1_sY zFxC=N?sJN5ofO6>yo#{4AVg|_ttEG%Xm{YnJ+_CG69rHu#!VNXdV+~oh$X{ADg)nO ze1E2ynSW6VKXShox`#5enCv-2{2W4M_& z;D|$P9dHpZllMO3l@;wS{R{7=M@E!WK41tzW~hB2oUB_!s1rxe#VWI}Z~fJB0#L1X zAk~bmD4{uJEUB?#M<`0JlaPrHio{+m&#IOqG=WR{&H}kRC_4Q~l)e*C4d}*Gvfz|@ zYU4qbGJu2$^4pT2aq(Ts)1X@$yCx6MPe}B=sB~nn=ixg zd*3Rg(%eZpHTt?;KTOG_bN?fnTE<~$wi97NYIA5BDo?$=Zn$r?ihH>w=apX1jN*GAsQOvnnXU(bLR5K3$ISQLGh~$BnDwMqf`| zIzE1Snf%g3ln>XQ%y&s~X*pKJGx%tTtX`~X(agy)RD=bZ3uPvUsC_IRsuhR`s*=8= z?a2NK9rn;0w2OQc!T@oj6L7h(xwYq^3(WJ&++zU>K-mi7-EnB%v=|B{GJSs-i)| zC<^*Co7qymE*5n?u0b(eW)zAj7HNXB_OR5?$NLziR`0CKilE}@Yo8xI<=WW-fMbK! zIU*L7ut&0HeR*w$k@5w%>Lm~J_L3507>%RhmJXrz&e}>mM+-0s;1$=5l;Uns z#B7qlt12_33wD|G(4%+Pr@KI4rPxO^H@db;ZJT|;OynPr(k5dzvt`INT=Lz%BT%xS z1VR5P5}v6g2_Chzx+}==4+_c37c7;qtHF)dz^xd zQ#cSBYvUMz(BQ8wXz2y@47u#SnBTgopEu#kEChyo?R7na?bE9tdKMAuf~npOW6X^| zc|K-hi-~VAAG!NO%~a$H?UJ9p=AxckWfz@u(DNVg?x!uIS>I-8sJwii3ha0B(Xja+ zdTk1~h*@60xb|8nr{M(!_k&khzsueU&*@_VwFE?i((v`rePy)UX*G*1(s@f#B|bu< zg)(aS1#IO2QNcJ#q)nnZqt3yrZ-vxrxBd!=iSvvmrAHc5=O+$`0=?cxlH{t|kX1oo zmhnf1CZCN_409F<^EIk$ry^cKDr8|ljd6PW9c8W7sUs~;5qkQDz zZljW#bkoB(;8j2qm&D1kFk+e49|8ZEaKLY%p)w;vCY_u_)0}@W8L6+(g7I+| zjl9637SI4xDWmS6MoXQ%=#mgwX|St{hq40(_%yl;{`g`}tnwPQ19<{8l#m>WQnHED zuXKCIZMtr7+AYuoZvw__0Q(Rv&Hp>UUMuH=#FcUU#9ILnn@b#_!t|IsyuB6Xmwly$ z+d4D>DP5@E8999=eiGcl<$wY9q@N5e_8a@EE)KywU#t! zH+C|=F&h#SNo|S?XqEcZ6#RO+hVCX1L0d)j1zj(MYeh-@`djdzX*9*ffVT<-71DDl zAA*zn=+GaA#^l*%Te$vJO4IVOM&93bW%!iGgdt&3yuKHM+*^DW4~A?PfEAfBT1xt5 zJN+2`ZdSI`f*n}Tv@@hn;Q`k<632B7Dku&KJCiMC#N+fd4oKuhWD);h(-0BJKO z#Z7hz1!mKNH7^xDB%tfTrdIp$sZFp=!wE5NOzWkHHVdKoEXU7391nF>Zx{MGiS_X= z-lbjm>cj7kT#$gEV|7Deetme`ELq@s=TNwhY;VoL@q3U22IesjoP*p{74RW|D%leCRr7ZK!%S~4ECrMBU@WN*07MoYqMNQWBVWoAP!&s$ixTB{t`EV2(XqVtFnbpi*4+xQIyy|nD%9pfZQSt z{YNThP4Q#RpsA<+HF(0S1J94qqC9X$ zvuf|J?RsLnA*~+d)$U3oNvYX)HH2nKDUCK#B`A>2AWC?|Y0l=3()6BQjDBwRv(A#l z{N&t$c$EES-E&`5?7A9;SJqt$;n*L;xS8PRYet0NWgDXyHza4hhQaFylU_?o5-W~r zeHgR0;4i`4Mj47d2R`NH9%F<;71s_Y9^k=Q64~MPPQK#m2O=P?Bc%zo@u7ayCb|s; zzh-!Tmo=t0vfdCPOCqVsartnh0ptR(=&ao$B%maLbbf5&%P&~ubd^#&)CrDw4JnhC z5rBGTh{F+MfLKS_iJL|FAF>HwArR!X=E3`5nrerT_{K~rMOP7iVfqnKCEO$VBTc2D zCcNS{6>SY?4Tx2LBU~GVntv7QZ^D;(SyrrStV|7QNiCJX1k6L_8Y;YYXj(ab!Bk!# z!m}IALm84x=#=5rCB3~Rs;~4CR}st1DbU~_O+%M-tYLp-lJ;^dy>GSyNY!IVJa?*) zhWqAts*z23i&$dds3*M6POfpv7xLjKjOeI`?t_8U$e-P6liX?dxEccVy2h-`_3RjBSiGGb->(bRD2+VbvT5 zaHcKT20FU^QXx&}UWuJ_`wEM~aI%r@Wg_fY^-iI}RT`MN8;&iFFR8M&);GkNc=G{2 zmz@<4{)%7Jc#F--lP%A7%bvzJ)jD&LJ9P(8!Kgi<2ZHYD^XD+}IAGb)1(K3I{AX;>B;?<|_tKdHZ$( zCO4PALR$PDH7wCRSpKdx#H=mfBsGP#Z{O^v;l=_AJ zv-g+3@UQwJ6P`wZ79e0Lx7>TN53u9(cl&&?iGdKjG^J3&p~#Uuwo#cVgz{*E2|YXb zJu!!<71hM?i@Io#Uv~Tttr^aS{I`wJiYAu4zP3_uzDI*R@wm>HQ0eYDLszk5_iJV~ zcSVh@ZFtYn5=;Q2>a`-5^{IMCha~T(n4y~MUZ_Z?T92e4l`t+Y4v}nDuF@u`bX%u? zhIorqY{{!PU6q_Utm^lLr_k>NgQI%!<6%$9xL1AaYq|qk)NCIVqyD;|&|fz+rdo2` zo2k5o*Yv%$RG6zofSC5hd%_xuY@M#&Sek^$={v{jP$*aqbM92A!-+_D)ymnGbmN_S zeVbK60busiH`Vjr9Q8f7Iq7%JnU76OKjxY}gx6j3pMw@UU}lZT8L_6Vixa+neg55g zxnVxp0XRhg{|=+qaS3$P1agnu1TzHC_gsf}&nWSljUg+y<0b|$K@2qJGQ0a5o$8Vo zLz4M%yFD+Jk)$Mt@Qs1YX_V4<109&nP9fKHz- zLie09C@o?-jhVu_;=!b*P{Hm&7P%PI z`Qc6&7eR0UZ%i@;`;CF`{X65a^#SE1*t1~2Ps`4SUm!m7G7;45NnYf zbZS~C)WXAQc0k`ZSXzkA#LREVnE)u!gnp_BXiKm@B&+7oT!GC&l0-rj%j*>hD`};b z9=oT;tcw-o8>NxF!(lfPSzDofXsi5w;6Ga=97{ZysSoN}4RncTp|lY7MT|(F>#_{S zx-`J*4lylq1p?!A&ibWaY@L)>@Hwrzfj3es-14zgtCXnfIH3+t!%Qu#f%kEANNy4K z9Xv9)i?~GMuxhWS=@cC|jQ+oH<|#$bI-+X8D@4$x7C93<01$489yHK75zRt%@Oruv zquffyAjMLUG^ma~ikS~A(~y%(cBNy?Ron!MhInUauJl_Be0)t*Xd|}m)-ttWLip^2 z+&RV}6y5d3tQ5xlrNv7V1rgmf)esW}(FvHm!&T1fs-_922*s9ENa&_bm=5auGP9;t z>VT?^oR72ET*UeM4V;oeZP5S_L%$oQ{ha$B_tz)b@Ud=oTU_m=2?>&;mkk2)eeTZk ztu;)xmRku*y4K^XybTzvt>GcL9UWaPzwYHgA9si9>P%8bFh{D!eCR`|2ZdSVXk}iO zKswlp^L&^El~W`XZJ|oF4Q0P6{A-~+IOPh(DRAl=_*_(Kl#$8zT(1@R91mgT_IXEB zqZa^vNCe%bX3;#bNQGdpd_QO{+E(8{h6G-1UAF8dkjW`JW{c4+t^k0>Z1jqGN&fMH zU`V65U#XYEIHubpLXkNMDnph0ewfzFP_wssF0Q!{T2BoS(IA3iAc;_%j-OZ0>;J@q zWb5)|yAi4dN_3 zr#+?$_}jNHETD*C3I?lWoIUrYN`0kiR+}SX;8A1sC0a(2AG-n)LW_jcEQeP1J1H*B z28FggVkSi9FDbgAGR{ykJS907g0HODvxfj*3T}Au>v$ALm9hO$k4~Pdmtd$p&$y01 zVHPkrKDanNMst&Q-!wu1P{j6W^BWmWv`*0O7QX zSQrM$W3+T@%^sBpIs2p zq#4{eI*a$xf%dd26^q5MD;}GG8V#>&`^v+%2rl&SSc2A;bRz&N9St3z;mY32y&eZF zI&MM!=tVB<0|FB%Ebeu}=63mnnYsR(x&lZy^U^Eggvh=kwX8gcXl|Jp7b5e4M}xgnFM57k}$Sa0TJd%Zzux!zQFZCRD2Q`^6b$ z;?kVPEodJ`u*;rok&D#nVIsbPUWbSjgf(@(Bt*nqMjB`@SO4SjTlpmd2}DksPMQ?8 zuNZv8WpzPJFJ>}(R+mKN`Zt!S@Dz*e?CrusNAycD(xVL!vhi#FEsngk9dh`*ipvqCfr7AXh@JG_x`k<4TZK)Buj^jYi*@v@ee}1IqOp()wjm> zKEL%5fmErq=8)u43wCpwfkR;=s|Ij*hf>Pfh~ACSk1gB=v7D^Z?zI8o3umM1TTUq^ z7%_V=anLJt5k z*ZJ_R_a)AHsY+pC@iN#cei_QK;4eF@G~zjy*Y!voJoN)jy9x~vnzSAaI5`K9Q6EHl z6<#Z;?-AmfdkPz;h_~o9RjnPXK2M9dtIqy8rk#MV_$cOH0sz0|#oTm}P!oGb`!xw? zp5`j>z)-r+)8j+NmJl`|GwN{+fqPKtObZC37Ms?iUNGQ!;SIeMhEeRm-ZcP5sd^70 zj_Z*PHZ!D&u3!V+j>Q5F8CqwfH%wkplEnp@)P<&aq=i5BkU;+oV#2RrWpy8v_K zXKpDHHM@NL(W*QJ*3kKAL(ni{777H+yo?zEgo4i*ZM%0yr{Me^65MeBG?;%+*X(t< zf>rjB4$$&Clco>f92!ho-iJm3@g5JT|F3gz%1?*K$3?H-@%^JyDm7k0n*<~{L$aux zQ^F7+&igg`!RFZt)PwRrb_6nNWZJJX3IFiD;W+Z;A8+L9ag|fpa9T4)LN*P)UsUwE$;XWASgLF zX=jK*Z&I6Qp;BlS;rWC0JMFuDO2C+?XX3>uxKr*A1b2rLKp>`;P@gu7dIo7q)I2zO zGton0fr?I>JiN)LS4wcb9MgUrjP}Ip)&w#TCEl+Dt7A@*5PMGS&pq_-eoi_; zShTxlTfO%D?eWW(@6*@UUQd9f(END+^DX@o-oH=IvD>C$sM%mkwQ|mJnem*~kSgo6 zhQV*)#BLB2nL%D2MM_^3q;gtXo|}L@BD8C@I!jW1Lyv-#8?o2~uxK8wQxb z@=X5>q;W1@5S!+*Q{-w()AwLk%mhj6DcT8^}$BndP6_jHA)A5kl>vy^3+r%p|_3A7Nt0K5?>}o z4o?3*Bf5B>of7Np6H}lLwKUZ7GC1MvCpx>@b?N0?VEm<$R{4a^L!5)OGHnOAPod_7 zj52Hy13X*JqwZp1e3qU#Ltx1ZYIh`5!&iD7R?ps3m_U zy<pMJCc{`l8Bppu7q)sBNzqT*6a2zJSGd0C7giT35gBt%=V`tzFDF{kl|t zfepQ}v%aYi0Cydu)D1PDYJ-e=m-*$0$I@8h4#)wd8@XKpPVu82%Nd4|G$L8;J)@)C zvpky#XjG*{QWq6(zI;!$q-+=7>h?2`x^Hj}vDIy*h5g1>G631R3y>=%0Jhylrs?=Z z6?=a8PeUHqn-4mc=l941@SQ5qElZ+BC78A%&Bp!G#;X0%Ym9w`TsM%@k-`S2+{w0~ zT5eAcPaDNgNFV6G*2F^VzSN|yq*yT>kmokm3z^Nr4betVBm- zpH0Vs!7!A#!LWz#2%oSLhW2};2a~fQ` z-pFcD)}%i~?o}gt0H55(IBaX;##pYIaCSciT+~Yxo1SVF1y-U7j`l3u8_H8Mu z>&t5$sy$f(B~`Q`lmeZO3K$$3E$^CzL0yRT+5WKjeyf#T+S}hpB_1~CX@?ta=rDw< z_Td@i6L#y-`RDV#=~?@jU9Su>i|w}|ilK&eAo>0 zEd@1ftH1ym$6=7R-e%`judW3@=HD&e>;S?k-``JmBT136Lwo@z`Q$5b(>K^OK-*)t z!pA!Urj1&aCR3X_{>^~=kQ(q5xL1xXU7n!>DC>d_P^3gU(GE^Od*ir|c!=&p%3d(v z8nDFjF8`7q6PnTc;w%tc@aj_uU?!!Y!7m_@I2Zn@QS@FIbNnoIc>=1}CJK#)@$)Z>!UwI4R zn+hg1K2TX|RS=q}&eq_iGem1A?!k+O+UQ&mBPgr?J)}S&pw;#clHVu3&9-^Tov(rlR&nUNAs;i5{Kjt!bWLB2guT3?AeTRRU2k zO*bn$FOJfBu=#3yR+Y(5_B^D}TOT-BBQn<+$^=+d_Hzbc@d1QzbM`NByU*U7VbiJ{ zpt6Ir*YD2|s4`rkyZW9gEDIt7R;dBe>S1P8JItfK&?_;UDXnRov^&BV7ail3Z=12l zGRBB==fmuiTii4FEq4d)D;EfHQnMLL4kefP8Q->7NZIUzGg}fn*DWyhJck z?0uP^?w^T6h6z%_gyq}_k3|tZF?<~K6b1rfb(j`>E;UY@Ihn1&BaTJ)Z@MiSLNMlC z-r~0SfV$qb`p(v{+bx-q#gL-YD(fB@2Cvn@Mb`E3_@_f^eOjp&(OnW!*!!T{57lFh z-SqxLlk0uB-^hxr^7iN$tBCGK5(7MZh-4mPg~b<38<}P^`+%FX2?`Z?aTwp&z>sCf zix!DHF+&KF8P(mxz9U0>#Ubf+NX?)d5kWqZ6~6U9S-&cT$}Bo`GtR+s7=_5a0^NBz%^Yr7=JB5hU(yWON8CIvk^`d z_Jn(?(^>hCL;MP%0fA4J8T}?S@|ErM64j=-77dWZ;kvb-pzgCnL`39q7fg&i8ZT%e zrms*5G)Br%?UVzfufJHALI^5PL~46`5FI~B{41}e=t?qWi83KNqMI4M*P;WvLuvA? z-ds%DWW$Y7i$j3P7Ko?dk!#+$hJBg2Fo#^1k(m6#3={X9k{dJLKm)QC)NN%jfYSYv z-CFQ9k#i%|%am!)B2@^XT}8t{6>^ZaNyKYa87ivWY&(|glw59s5#kyq!yZ;^SjJ6DqFqh9QmBSQZre&Ee*_ zk<>oY?O6)BZDJDgje(2q!WYzXzaSIdf(!jEqlOv0^Hb@++pGu2Br6qzpLcQC;;P7< zYwO(T1Xh=4Yu5@E{R%we$Z34wTb}s?Fb~3INDUL?2mi{a<)?|u_tl5V{0M^H5YhHR zDz!gUhDjSl;l6q&7m*}Nw?q=~&~cLP;}tSd_{(gG`UwnupwFB=-8o=KNrDuvE8Y&c=cLr6_9EbD7dKkwH^IM8sPezVj~uiWoVnaIoa)akQK#jB z)i3h^ix3&UBpQO#E1U~jZILmU5+O1R%UFhd*wZ{?f)rmE=$4x@WKDID$CSoUNu99% zP?iVxjsY$ZGwKP9lGBub73#;GmU-7y8gd-=8TM8;F~HAO(~f#n|IP9DQGHiUp{R(l z#w30)0r5l2uouxb`^eEV{z3_#p;A3im&w5(+N)@>ekx@mK-@?hTMSkFbAP0o1ruko zmk8siLS{l7Ng-Oaq7a-m%)^4v`jF`uw+^}I7I18fR@@$xjA{Aep&4XB=7XUR;CAcN zH%8C%2Fnx_x>TdkoSqo`SiWY?1rp8WsLCi!N}n16f!cHnWu>L_NuZ%@|0IOJOD&oq2`3R?@SnV+G>3=` zz8(UZa!FYip**i>Qp;X()D#1ei*B?;tX!=F_blNu_m`Py3<3q5L%s3Z;qFI;2Pgt zJ6Sg_hM)&wA7VNZaZcQB{Bl2Ta6%&>eXNOKnFN_q34^=f2{ORWYvt%~h?J=EekaqA z&1xPmV|ZKm9Lf*0ezGFYyE8E2R<3A6OIq->QC?CuKHtgVafU!>;2>p81UQ|G%CM6o z4ZGf=P!hpYjBbGENqp2V31<)7qiP}0mMRdDg@9qb0ecbB$mms78WA>g0#Fq}))6>t zh!$_eFfnG+Yr_@*0y{DnZ{Jwill;0#uhbUs6~qX<@yWaf%64lFO1zOx`f?%ynoB^^ zMhT;@rRpZPNRsb7X=MQ39H)%cD=?XTv|Kl^0VF^enWy}x!$fQ$=#>5osMiNclF4Gw{jBt#DxTk020mwL_$7pyW8#iy=`}U;<;y@^ndAzBOKv>;EBUSKkxgkwRZxf zR8=Q>*osmKNbFpDt#5tzYY0<93oJV~gpZKA0U)a{+=rh`2$MlA$pEWmENz*s`Jc*n{Q;=qMPUTO_Z-nF?T}!N2)`m z=Ff%yUbXK!r2wUe>t=M0jZ&^#DdDi4U)VKzF(?D}=GOO^5`*W5`!Ak7FL%3#8_z|FC_}Z{4>Qn4oOhd=6Ouln zqCuN{A-L3m!H-RsmQc9Ngj)-qtcHI8=M>{cou!k^!e9TDFHDcnV?#|z zQ;J0udhs`GPs5T;{xVKM%<3(`1KywJ((rZnTV)+@F}ZBKxQ=Z&HtdUHcU~{SK#8yS zz8XqciUo-jYS+AYe=uF?U9Plt`J8OmM1U|HvX#u>9gole2OI0DUvYGYFeay>^Eeh6 zRoqb1*RoOL@z30ly*`q`4ui#A712aqffd2^fQV^%fX-hdmNqO7m>T5?EW$$TJ;7lM zS^+9&k*^{s_&>gH_k7^tGz-yU)iy|gOGC+Q-elCf2d_2&e|7o@_{C%tH9)} zHTkEos1xOthgamt8!AgYq%}DG2+&{k3_@hOB{al-n z6#-#=`b!Hm;vao4{n$ur7^*S3E3 z3KiALRRO)Ge-@Wl@{jF>4&RU)*DJJF+Wfk>m{$;jJ<4r2ME+@^R=q-N%_}T7+g@Q2 zZw3o?nu{Opp+d9?Z*O&~J+zkB^p&M%$1AkfR`lz#S15|@p8PX=`vZ7v!`@_PB~nUa zr9C=!V5$!Jb8iIBey#R(}yH>hA~2L^{r;oO-|Y!aNMvCN2m2#O&ls zt4@AB3|n(K)&rDs?#jMR@vv-}lR_5#Vs+>_t*#ty55wh?$NHW#ZG!hQF&U@B{e?cd zpxWhW5f~~M9GSN#;7(s*7C1M89|{Fw2c)(cQ`Cr+J6M zE!L5|e9D6$u46W&L`_o=^EV;C5d@Xq6neoW1N*da3Yq6@OGLVx2XRVuuThl zpMCE{oUj==={u=w05P!HdBFAu*cE2-7Z^gTL~r+w!mz&dq*1d{sH%x$OfIiEC)r(| zK9-L}R{^?=a5YvX{VXTTYkHHhgZFB9|4FcO^py7JrVuEhgO~U_ud>1yk&1~6SyRYN zP370q5UWb(dsR?)s(F$5ZY!rCa$)e=F!U1y{}W-=hqzxdU)8iUARuyFEg!hQgVk$0z)vxB^M{ zL_2)*kDJB#??f)`e*h!I>zo@S*sf!LQHZ16UQ@F7GcfI}~{INyd+kwwhV^X7GZR?Wx zLM-#a`2*!6d>z@xjIPo6aWV6!9lw~d>k#&s;2~&y`qX7H^8@JhMtMijN~Iwf-6Hw zsc0w~q4;(A6rBPxk!XRnOBx=d7fHeZWEIGnS(*t9-48}TZa-CdBSajZ15ucWr4j_K ziPotlOkyC4cGG!;cA#WU@N%nQx|7KnFF9zA|08YlA3Z`H9$iuEkkXlC(vTG78ZQut zjacnZqpAI~n97OsVTR?bM`c=E&59x66P22X-o|0C&+$|1pg5+k3Dm*rWi#cqbPij7 z*YtIP>(`(2-Rh70a7QaK6zDhP>ZMK{D&`IC1+C!-DM?sFH8S{yJuE^meT(~v_#D{G z!|@7C-d>u-D9zn~Jinm%7y3C5%?{YnGrlHW>tr}xs&tKe0%^FbB5D(BRxPGlC(6(rDv{vpdH z+c=ns)&_++2Y)*=~Y}rNl4u?2%S*q z5Bo24t@sd>dcZ35N$ z0FBZ-UMY+A({G&7+K{So6gebOQUtXrhNIC+gP(9zNZR${h>25Z%R)sRUAMxUB{cEZ zu++^&cttX?!^hYJC_sTbL8{undFK_$PP{?=ldJpf9(4Jldw4K^5%bC`OKdtP|6D!v zb7QnnTT57zFiD-9AS$7QEVKuU%a9fA@UIcII=Jpb)OI<-1g2xEufr@ye8uSntm?iB z$%CiYH^I-ig5Zh@!vj+#_ripQRbsT^tEojiYo`i$-fDq90C=^Ysl8)Chrit-@No()4%}nt(42!VvI})5&^SZhauS3nAX~_3{~Uu!C~r`Tl+%m+kZY-Tji}y2JAM z)?n*!zfj}nLnVjYU>eXVWX^Z>jGa~d9}YVFNp@a$^QBakt;ZJ5n+T{&WtC97%;e3@ zA(@;M>k~0QC;tshNOhp%LjXYF>Yn^KA~jGg?DDNqR60I=KO7b$)KZERy)e79y;0H= zLjyM1$#>{5P&Jrym2-;~>jTU&*~fLoim66yq}8sGvq zH3Ics#mzJ%Z7lPT*O1QD&*>7qs|Vy5<`9Ly4f1 z%^e;j&^XdRuYEQ)KHGbgJ9;u>I!7A~2xBd7hI)_k8WJyms}|*a@v?wQ(kK+vS*e_o z7_+#gtM35jQzd=64GuD2dBUfnypU)DXyq%O4e-o@r0E$uqE1jBB>X^c3ny{6bj*XZ z5jMgH1$M8c%k%Lk(X^a<-X)zW7`1Bmw>7s>5fC@!eJQ}dni>La}9bUghF>l zgIlLZm?Wi5J7>Rz2`KMZ6bPpw{%N+K5?YQdS8z))AS`-g2=E}Ig9E@YsrHBm;0MH6 zS}ziiE#>o^ZTCP@=0*6Y&}UMPLg)fg6b=37_>I^^SPa*#Q_Bru`zLM9wm?Ms$p4KR18zR7)}T}$8>JR0kG-Z zVXVel!XXXRs?fF&2T7oTIAXBYW1R4d_s!@4=JSOt1|Ursp<6+-BeaKF3;+-bJ%n1) z9r!c;F3X==I(h_U!BnVm*UHoT)~&q~BY`Tj$kkcyOEp$I&54`V4-FOGCWzE01Ph6gCuNGZka3a#Ip-)K(GcAcoCuf zU+-TLj}{gp3tu+$y;Dnoa=l2#t@uYIt`rWmC#g2ule>d3+W92 zQMx%*h*CeEP`GN<3`#=oXqd1N-72*TTgma_1T+W6M=G<96(;xjeq25`W0uX0O>x}t zG;^V)s8_9N8SSiu7K!l|hyazdEh_O8cA+CRSu(V6a{{P&GKQk7+ob7p!(E4%7zhmU zdYXYAx^T`8b|CLo&66}Z2!Rv}dmMGU@kuqOUg=?)3C3iKj|8&`2Z&PyEQ|j1L^_LF zdTEHVB6&hv_$_B3?`5c7bBTASt2)6s|1MZNY67Pdch@F*J;aT}j%8eBgYz8yQoK(&yL{zvl(Qgz=rd61;0_ zlOm$fKq7-TNXjZFXLy4vh|tgzojRIv@<;DIv|B0N2vf(*)ZeF)+(-=Hhye3k;#RC9 zVzvSzTLmrC)0aH-HDLJn3u^P zlhGNkkCzWH(~DK{K1rT(0!CZLJv$BU3|TNbRZ- zxD&rnl<9O_e8)vv@le4I0uI!gCMhn5I}i=9GCp4H!`^0JXiubyhOo2g)WaL35k3rP zi~ov6iXJSf1UsrF>>M^e<& z`dki&9P(nTJ4I4&SZHz=Wo`n|@Zy~no+L$=#4ZK#z$^4~xq?sb37}>XPrNyQOL#yK z3`XY{ia`T+OZ>n}xo5e9L?&?voIB3%41Y0BD)JR!Fe!R zL?K|R1p!x?zoE@Pjp&#g#q?705SwHN*7e|q((gEsE!cbm(zCb#sV5dDG8k-tu;i|c zhnjMvn4OJo&|QdFLmuKylC+s5TOp7wgN_ zNzSU0lEX4Jn5~Sn-s}`faly2ReW!yExD*gb*nwq_-v5E}6_LJm1HQ#2DP^FlN#mpX zn;`oX<65u~2^~h;SXnw>-0XHJV~eci0cZYNFe2aBox{DOc^E4iwivjcMcA)Cx(N0C1{NIQKS)?9oPa@ zD^EtUd`t2@?53%s2iiev@wbBZ1aall_{?D{O9q5~)ZInMpI>mc3!;m|N0wyiI)&vT zx?NBMF~9m`N;L}730asuaz;o+rfwCJ5yr_UAwkHVeVu}(R)vH}qyppXVk)VN^(gun*gcGB8%xuMaah?v)bHqnTm zjXgJtx!HLXz8S@jaWB(z6^@CTgb5;sheD!jrgbF$N0Q5slw=u}q)54r$Yvrt5qi6($Hzf^yYeeu7@F23!eg96JgYn(cNyKLDO~t0rEB zrye~H7g};UBVdp#mBddED~=|0hUFa?i$th9#Yb3l>aV!7!^bHjwWnBQksj;&%vo-7&8gfuToWJ320AxJJt~VM!K5$eI(93WW9Mw%K`u zW#SEo=-?X)aVXXuSq@25z%-;aBYBhCC_oW_6k8HA7>uyrrVhY}I~7d9Q`BZrJbk*G zT4kq4P1u~Akw5`~54)!Cn|&9KZ;_{-ilr>xP+i2w+`wI4$l*nEmLMDl@`wn%CtHYf zGPm(?CQs!M|8)v>e6FtuR1aDYacW9sqZm=ZC7vPO8C2J;@(B{R7q^Yy>Kb_yR~ac} z6)eFwP{+|n=`*5M0V!doO@sm(%?29W``U|Y^LS-0AiR)aDJc^w@op~_DS?yeCUm>R zYZUP75qi4|L9c8o`D)p_q@(ubKGn#qf+QOypQPvlzZEqj0zVKTGPdk+BrZc9DE%<6 zXwVkKn!<4~dO;23L&pxTn--j?2*>&YQa5pVfjHa;uzddfDDdY|#!H9AA&TUd;Fw~& zP%SZ2q8r%!^^X8YAlxSI$}lnbIF3=SR+8D?GxBk~j7{okr(Xyn{Y^RIaMa|kMO+!9 zlqo99*1>^G?i}3Y(gk3wWt>TTqE}QlV4qc5d~m$q-?Fo7l?b30!A4sYr!YINDlpS|K6f=`lpl|h>EY^%#m?~?1(gs z*p48XoNIhtGt9(z&#}v3l^A;5vEL_oE`K;dSuwK{nXLLQfDzV&+9T2@X)K@~41}zC z@SZOxuLKPXVNLSN&FcGjxWjPaJ#|EsytgZ;fDPSaCeR}stInegb@T|e7Tq2@Fd$!P zjVQpRz!={Vaz1@_+koL;i9+Jp~z4*91#=PMC@=0b0PKFvzp=2k+ z6M`)+i99=n#)3Q1d7P5V3^hn(m69HE97f>4pmIW7fI!1`q6Qas0c}i(K*2p&F}3r# zJpaJOAj?3fH{?k8irC2%WRNAw*`i{C579OGef zSJ9ILeiPF1m|s1_N8*g}8;U|E#p~Iv4~=I$=0Ym%s>{E75GJt)ZJ-ii0~@E>b1LSi zaF{Ka>#Fxm5fM*Yh>5*xrZQYuc&CnHIcA2F(`^QfEYM|rpJ}ILG~dG8z8#(65!E)! z*V}PXg*3;fuR|G|7N&Y^Lmcz@=<;)RkCKCkJ%?4;%b+`uG7~5%eJF?*Nfn_x zZ&9Cvf5dq(IdftfaA2v6Hx1@e;6Rj_-5meNO2zvNrME-g;!Oz?A#hgEG@?WdR4rC4 zx8wh%r{#M~1w(k#Sp{VrAyQcc7@D9Z$7v7HrU)r7 zC%MDxJ*PwCwspssx9VU*`YZebpF?HoE2(Q1Qh(!`1*)Fj%SzGFW+{24?UZCmB02yh zkih9_&4uVe3AO#o%j$#a2_MSRPfapml@}7bO6oD2(_kh=33!qh32FU_YT^|$Bj{V@ zb7>>>+Ry=k1%ng#TANNIm(p6s4E{tM4%0w6178>8e(fGWLj!2CDPg%@%CQHyZbTid%tP{14^9vqo!?*xSa-qW|() z7ZyEMi?41V@+An0yw1z8b1_y9mC$;*v+$wAxK$-BliC!OW}(R4e;-$%m1)_6jt_A- zpB;(`2ace>zqQ-n8oW4Y_V%`Qdn5-@W(-DtQxz(_YYtvCc5hLE2wXKcw@5)E^7(G^ zc`^P^bpAa`1;{+-pIlF7#w6Rrl20UUB`|pd&BKn!T6n`w2?CDOTI3t>XITM@(>p|I<>GyTRy;bU^H;5b2yqC`b; zCDxGhboHwG1tAl(yHG~JXT1nMo+*(%bYU(9?jimXdc1M@Nz?1_#XtbQ`_HfRK*HcLmVcf_yOYGl7Rt zSsr}L1#0`hy&XTI7BSFZdK#NHT-o}fsk2)JAj1gZazR_mUp9FpP4rl)11Oz0WEI>2 zIGBstoTpqz-d)c>O_#|{aV1(hEL^{UW|~^|_4(wrluy`DbkqTinR!bD+&@T00G*H*9`$5<6|VRP^tq2;f+9xxc>F^5+) zSiT%y4V6e~N|Hm}M&AIC1?K zxelpdB)kjQbzc?JlMrQiy@ZDwYto{UXow?j;FE%9=0G~Vb6}dq0Oy)^lk_^T*Q5yeUymMHm0JOI($yAHUhkH z^GlsQVv70O>c8!8lQ=@nIrR$qsyabM@(@*xIOVv?=gL`CX+KPy5y09Ml7Jcn^j{J` zj3?o((m~$bLa8bjU>*F|D4HS}?n&a`j>Zd*>}4J_*op z3BsD~oj|?PU=_2vA^NuxcZRf2BORD6($7CWI(N7T1C67oN4fWu_ZI-&!qD!CE(OVgA`Ud%w*xkbumHd01&lPbWlUo{F7K1cA z6aGPrtdRmcXvU&kNXJSzP{p7;r@0*D^Y!>Y6KMZG7|43L`VZMVct+1pflpL5>Q9R7g00O0$z6-wu!7b{49FX2@O9cUG4H zeU$y8RMWw1pkFb6eW^TpdtMzy7f2xoOqUu5y<3W=^3#7;=~y&+-Q3;!{dzIGA&Zz4 z2H|3qK%AbeGlD?C7mO2p)H0>3q!bE*2R)(_IFTmhuS!*dQUHmVI{ly#;a4LKpH)f@ z?Bz+hKP2g7pgbKwJ?DnotE;s3W;NaA>e|A>6B-#UED%N*paRno!w=DhZ^2K{2b>P0 zdKs!6xWlA)GEQ%CTfWr9!K#NIP?Qq~D~)UgIaTki zloyfqq9*c4?QsJ!q=t18u$66qF?M?OhY^{A8wk30REm#}aCp4sS}$;$eM5=lt+azpE6vb@F83{pmpe$fUEKGN zF;xfF`-|~^p|$@dYj;Zm4y5w{hPn@yxS=&E6l^Qu;SoXHRq<#U)NU>h$AVUdPPmsM z#X?~!Sc3GNK!nZ-IAkb><6%03o>;0Wt=fiI?31FH&5p7^Z8KljCDtl#9RHU(;J^EC z!*C6bnOFg?x~w5A1;(ze*A+Yxsi1O9CS z9;^sRi=D}saYq_;#~xpc-)Tdy_78V9Q{yw&enjzTbak?4T;4pg6~JwweBH1S-VeUe zZ1eoWD|si;b5fU_stJI$92#{j$CvQy;3eN4?2wp?SiC!hevySIUWv2eMN}cW>xE=9 zArs&w!m(!gs=poHDn1d3@F$sYNuAe5^?nxdVh4y}+^%K+9sO5svDabl(tljmBz+ov zRCS*d>FX+$-hu6f&MKr%FfB*)w#NPaLp4hCZ>If zb_;^h{_Usb}P6L*ViY zcezibxfva*a=5+{Q6bJ$_Bq1WRdiK2rmcr7PqsR>*JsE`uuS(S_FQjFcZ0RMGr9#& zw~<>Xh)U8=$hgQ~k{IO?d~dhP22&n^ngXTN1!OBN1MI8h2Q=6x_(>;ck0XU8i*c+T zF}+h!%Ds!z)JwxIO(;| zq4R{Jz(lPvu!4$cFBeIvBmw~%EJ;aa3PRLk2xvif3PhMyO!cbz@>?`0Ty(-yJ;il+ zYOTxCP>imy$jPtmM^WRK=#MXHeMXFDaiP^%T%dm#*)r|N`P0s7yU|&l`gBFlw%SXL zR)?O)JloN;{S%2ltP#R zu8bZTE!*nIseTP&jc*AS=pLp0pW}2(OX^nb^?P|dK<3FP7|4e4=ncri z&!D?^jp$Vv+a3^*d?qDTqY;W6E{A`BE7eVPRq~67d5)s`(HJs@{Gcum@x*uKQiC*g zDYHM03ob{ONenC!9 z;F(?pGT-LvVQ_mUuvjg5!6g7BIU<$fcO(iEn84o;ww#{)zJg$YkmjtgQCxx3eM$t_ zBqzPwX~D^f@4*#cj>orgkOW=vxiEo)!L=8jpm#Sq{!az-X1TnCS|S#Xb3s*xoQ)I$ zfTN>eV1m28r{!zR%^ z$VrJhf{K&?!a$&ia$Hm+$HSZg7kC!5$(IFDR~Sn(tURs`^BjhQGNKGt($Zl*C|KON zEUm|>5>X8dKvptIKo|v=7!m|O$g+X$SS69DbhAp(aB2@EJIQ(N!Ua-N*lQ&$lfYm< zHNmCN=#(-gPRwRP=QKAYz<`~FZgq3q1gQ0jmBfl4b#0)2ap>K^7fLsDmlx^-6*G!_DiEvOV7;=wfc&}D;LHb<*^WISLptPw&;u~A zU+uQS0bt?Y0wRO7XM${iggh^2EQ3olN19h!aWRwQ=$0#?i%*?}XOc=yhKfop(eX#` zF+w3NY;k(xYUjm_iof6?1nni`;y6U&kFqz1z%p%1@QHE}7cyld5d`dzfWui)%p@;` z=s0-l{bE=3la^W{!=QKARf|p-c#f#f9OA-PawZqA*|*ReTCogaG$w>9Vm+7FsK9^^ z>FfY}WMcE~@M@sIS0NJ*;BhYETQfr4&s2YU$O>{2XXSq!KOc$r&?!XWN8hM=lF0Gw zY@KwOay9vzR*frU0U1R+p-|UYAAy-BT7rC^5xgYoWOIp3j1)#JauSXr3A8<%sLht(nx zaLC9-cGxKC{@J2}mQ!Fr%`{@RGF_}z7RsGRTUT%7GCNS>@fFq!jQAC%&(OF5^Tl4+ zK4+>4JJ%bn%M3XYs4$95U=2L2FFqy|O)#QTFfU|Llk70S-?0_;*~ zH|^1)+mpy$_JHEtSR_#o0|K6r1B03)B>=d~38t*5K)*`0ElMwX!gN^y!;qiQzu+Y%#kvr+8m-pENPIjnEQwj6LsJX6AO8c>c z=6{6Kf`DThy9?MfRg*_lD?$KFY_5>lP;8_D^>I7A!eFEl@3_(=A z1d3@MdOf_m7!B>q$R3nTixqsNoL^i(i(q+P19?f4UBg_8yQCdA0CL^Ck^6B>^O_iw zLC6ebs=O!aj0V1QrrO_OzBla?sd?ES!iapxOS)3L=9CyClU9*H=gFyS-qf!Qob57% zd2Z@WiithuV`kRQrL~d2d?vy$>h9bin-2Dk`mI&4{P0dZW3T@TCvuHDi>=lo!kj_j z7whovs}t(uznR>fG;t<0k7*4zY7TFMB%b!v=K9n2FQ#2;>T{42O(e}wuB3@_FAZaH zF_X*+t(A2TbSE+d>#=v~Jormqo8-c0Tae*7_{YUy2G6?S77p5Nb}23FJ=~3<`>tv1a-&Sp?NQ! zD_YqML4h5(2q){mS}j}szb$6A_MYuvH?rm)l>srfzy^A#)>XP6B$PC7-Y>(b*MDKf zW15-xe#n8#d<3^SPeEz)nyFcy51AQ|P=G$pFztrPGc_Ox=7bvMZkXbY7+>6u{1k9W zK%*82a2hVNn4urbu{&Zbl%83>xbZ{&WY(FR&BO?|W9sJ7)i4M2h4@VQ3Z%PWDWEh3 z64d&w9?OiWsmy)FG}*>j*H?p%EpvFhADUl*If0C{-=3{2iX={hF9f?pirNO5M7Ppl zD?WQK6^UZ033`?-phr_L`R06b+vH!IPE9tbY*EVzH%1hi3;bIjoFs@owr|%bw{fGe zX78RHczAWi%-YftE+Sq`5sqfu&|ZlYZ-VA4Ak((GdD4Ut+#;Z)rYyVNa$&L6UW3Cg zw^klE+Dn}Vjw(9jyTAt?R)4;-yo_t=&F};KNw~DrSjrp&_Qy?<(2CA#k2DvKYVnGG2yHs~$Q?Mw*axjuwIXDC z(Fd2DL6t`#@pr-T1>K`|)x3IuN8tuPMEYF*Dmj4`AoAT)?Cglz+nlO~FDFf*b`kJp zK?YkCPgp|Y2T#j09UL?uw8zx$#)D_@{N5hX)m&1Hl}Lo7S{>0*tDs>!JEjgxDrOXh zMIE;^lz)c~fDENmCX6!$**!uW1g#7xs}@s=c~+w_yOP^x3L9Al4MhPnD8yb3+(tuD zhR$eCkIb|xAqxrpGvKHcd8$|Oru#eb@vK(CRX5{=RQmoUJTwJjxk76a@@ zQl?}=j_KH*ZU@iW1?hs_D`qEOl(YM{IGFA22D;(|v)Xa?^T~c@udm@5xCjs*5KK0u znJ=&Ar`&&S_=sP4T{(RnQPLd*vq&@!Qs7P|jlaGT;{LM#J`^)de8+IGX&@5#w4Z6O zFBvNg+{+4E5NgH_1b9CfEUSi4O_4!(m~a{=KJCbh8E8mRZ#YH7QW?yB&w13031k|K zrj**iB-wT+oEyzf@WMI_JHh&%+2!!6L6-yvmn?I$nnzyM!BC3p8rKhal~UgC>ou-|r=65E$P_b(Gy) z2^I;I>UK7Xw?0E2kWsS#Xzx@h54_R2qDo&?1ujP^H}51xNuwbOD6gk@jSBYghF;+u zf>88Y_b)1D(n2UTZUHPls}V!fVdU3({KYl=(ghH7FHMF~F*9YaUVEO|~b@oR95FU{i-mE(bVpQqTs{x{&+?f8^)hsKp4s z#qI1)hn^l%{$jdVoagQ(Uhx&+=)AUu(X zsFgMflV;Fz$Q&Zl*cXQL5KdkvdxXxNEZ z2R}e5#0MfmcR1L)cV1MiW{l+F~wvR2OtQ6zz^ zHZDGlr4+72HV7w_b1={icdUdTg|yB+kMRvAD=VMW`XB20_m%y{rFLU=bq$wVavjjO5Bj_N zM(W?yu!(bD1`5c!DHHQV)qK!u$dP-BNal44d2V!H^tZr7(_l+SrKEHX?IYA_Nm9cQugAz^6ABoBIkSBOLIdh6$=Y()^y^!@+-LW z@N#E8MsI}k4`or{Js`gaLA%gdSW28uSjNBL*ffd>W`Md1N_`5u$_lvFIFyhny`G2_1}$GU(z3}NRoQhdPNw9C%u^=xQk|CUrl^|@HUZhnN<^+y@5ZwL?GqEOqYP5L zH2%TCBJD@fEht4Mu(TuEktrCItUj2T-Acir@wkdw(ULpQ0)FipA0>_a13G~k*rrk$Nuwf$BV>t_(2!LN%y~Y2-k<*#y<3@1Gc3v{TNH?( zS>Q;VDZkJ<;nW(FuC0Ic=7qoJWBszD&~bUpP=w{;+K28I>WKLuo8a}NGO0u%( zm?!NTK+CvFe$cL(twj={CoduU^)Q>7_owsQ-QUi0gagYrvllru#FDmEj*hbcEkGSF z=4^B$-^om>P5TET00tbye`zr^D2T?@CLA0mlT`xzpxbx=0IpD^v|& zi6NjkGpEAwge{e(G|jTg>=sUn)TLADtT`hbB@d~K#Brt3&ONnItT{UNcxAu0*<<kG&Re#o?-I-7Deu04A_9|J}c1N|iWQ8{Tc__+h2erf10 zr?>8AVyX=$=?qmfY30(0^H5SP6lTcY` zE1P7ovC?ky`xh$#0O#1oKC%@Q9t141d3i39&KW>>5S5ib7tjT&d||q%dF6#os>DPid=oGy5(2|B5)Q- zFjE>X4%Hd6)JBO+uu4V#Gu7scnboB=+AI*&rr?~2SD%8LI+Lcg&{+lpB4?j6v%_+2 zrPEnxEc)ZQB_RqX9i1Gceay)7C|o5c7zv_2;&@uFYDZbofxL#PNtE(}XfiTv3Le=1TA%%C`-!LA92c zt=N|u8#*tB7beJSDa^j8B;m6SHEyBDjh%wQWPER_?j`nJyN0*aB};4&G{Ey2;{mIC z3erz?&R^r>@m7eyN_?Rxh<=qz~xu=vJxzf>i!xa{RZ~5sl zP?+nSO=P^aq{&An1u2G#qU(Sa`N*n4`G?D=hs47q+SkyE`=>Dr)&9+eRk5jd@~yt; z&j)|zvrgjOpXAUe51DLh23==h)QSqBER3U+t&$Qh#fni>5^qch97wyNiZF6mEAB5s z4}?ik@p#Tk(|r8A%^1~CqNcNd&}I6x4Wp*B1!x(OLi3_C(wZe&i2XVMR^@S!6$Hz3 zyjbNg7>;vH08m_5@g`wHysD-H;tR9@L#EG9p?N$MC<2a*evp?cn4sG_zK4^@vBxp8|}$8f)u z)mF=KYPGJ*&ULlhQXp_wo(3H1ELLm3(lwlT?(#ZF|BI!hG_c%eYCROU+lX}CkF?@| znIMu|6(yZGj{gPe7b&nHDJ6rkI)blCxE#8MBv7q+EArzKRCt-+5$om4iM(NFRDsN$ zwH52Z>^j~t9T%8FoBJ>0YY(>8kDzcsbq4A)2XmTaXOt&87m-}a< z{UTXHgirwzDst*Imw0z|_sL~~`UML~z7VBKh`oSjrzer>YKN;ccak=p`V7;CVFulv zC^W3v$`{u6L>-T2q*~xn{6%#H@c|~1v=MC|@4Yy>_Kg2)RT2GD`W~b%rG&$^GjGtX@tO5kWiJmG|bfDiHx||q?i9mR7Lzf z9##u_-PLkOItVW&x%`gK$I8o&B~C`}a%+`VM4P)Cpg^jrYp%<&TZ=zOZ%Pe)RHY8r zaImx0?Qbcf=Qd`Vw2_A#%lVD+F{D%A zrS3P1+|3H(PQyfD=0{ADbR(Wt&{hQ#N+rNk6KZ%L24TaNOvcqsAl8G;E|-v;^UbYFiq`R71%e}gbt?O^yAE8a15xFH5x<>uHj z;`oH{6(8!%yeqZ!h`)i}u3@*~0l@jX)XaB24L}V|Ej1*k)M-K_R*M>W%7upd3fE`W zw`Dvk{GE6dUG9lf@Ycl59siFt^sKc5+99Acio{fD&%s>vd!&BWy-^{Wt zJW4}VN-37hsd94}-0B{!5yK>!FZX8gGPC0ZG1)nItAXiz;?5V2iGIGb(5kdu^^W-j`*aOs-H2I}uOpb-` zT7$j52~I6MNIlKzZQ_C+864`WBVJlwPwo^Fr=N|C`qa>lc&glGiT~jLlI(o=F#QE- z*Ql(2@>4+O;uYx_FfqG^_^R9be*85j@v|!pICJ+rO+^7TsXdS;=uIx4M8mcKz2Qi% zb&LvD3JswEwXTMxxF@@fNU#NmA{dp&Ezee?if7dlITq$%`?WL_aHNwHEVzIWX)3Bf ziAOsVPa=nwJ4_M}9z;twZkKowdqv`m|9c_azxNlPebyIjz)&_Osg*rh79VQY<7<+* zq3p~Z^5|JfdwTY5oxp#QI9I=(PcSzjy1NAh91qT$$hvzVmDgo{sN#LcYmTn zvhoMqZjy`Q4nCeMN>FqvYjgk7edTS=!SRV|M+e;NbG~t^*h&K+b`7E`&2Exar z3cP!-UReN+tCO+OnEnv>fG6~7!%Z6H?nq%f1EU|ZMgG+35?2vm>McI;z)?Ykma5Ju zh|Si}JSTEuo?NupmU(QV8KpLs%w?_X~c2b#qMSNB@{oMIBG8K?Cq*GnCHYG@;pw`$|3+E_zm)^YC`1h}8={kXw? zQ)XXPzFRR~Xb=KW`K6S^{*6S^{~$X1C+dy*yNeNh{1nxr6NScupy}S;Q1$&3pQ-Z2 z;3Mm*lMoGp=?E7DjI?*RPgU<}+>BK{f_kXa8Bi4OzoQu?9$Jo$EwHtT0h@Lc4qan& z{6A_p|3bSdiXUXX14{@_FHv2m<_bp#9Hq{w7rlb0RW}T=@+-@87_c^nm*uW36xRfG z-;P+0_epeVlAfQCb`QrHaDRiL>UC)HMkf{x`>;rQQqJjb1$KO(LFzR!dh-Y-ujn!IE8ozKtd?j^xbgDLRdq26P zCQUlz;zE;J)jN`jE}kSdCPUz0v$g)4-98OyX}a3~jsVnGWoR(_8;AHNn}6FoD4TQ@ z;`)T5>LFD2d%L}-yUm^cpjvPLC!9Zlk8)V10 z<&h*b99_9;ccRX$lIEzlLrurJWeq_VVyF?Y-HGl1qFIy3`OuVQ|HNMH6$0Ga3vxz8 z&o;(o^FuCN5!|p2$`4vKR&0!}tdKP%IFlOwo44n0UhCP{YI^Zi`77hMRU_PYx9BKt zU!D{c9ksIXrdCEfM;{9YMhVZZ9LYMo0R{oG9xX%C6Oak+%(hAG9c z7knqWVoI6PS%34ZuR{3@{fSGKjDgc)tr{hjuOMMu%>BS#hZiC?HRHukZ>}54BE|qF z)<;+WKkMojX#6{DfpW`drsF8Hq(?Z-3wIPi5@kCfM@ zba-n}x?Y_lrTX$Kau+wl=@q${Zau1zVkRYuW3Yz^JmJ5C)VYMAN(BP`yEObg7T-Jo zXMh@eXLK-X2zsy_0%|diD#8NqQ(>sM{a1B6OEc1ppE6l02 z&Q+$YB58AAq7eaf*?J6dS)c+Ryt{@M z;WDOv23NC8rbi5(MIT2V>B8u{IhpVa!u$58pO6aqx}OfuhD4A-1g0wSAyyg;3RXj! zQk@8f+elYO(l+FL;bHfH>DAD8VA;iXm`E^016?nc5=jU~ac~r#s11Yx5I2(f0F!ux z5K`+%;;cZ%&v1Rm?*Mz3ODU9Jt*t!5s+QInMxP#(84hfG3;YEZPj-<0Fb4Z(8aSc{ zlz2iO$V>@bn|mcWJ-}0cCy|;-km}{fzTKohxw3#2vLBO7iaq6RI(1}JHOK#pILAMi zttoOfkrIWB$Q$`(jdS71+lN5n$2QAkdZangWvQQ-!v@m(?GKdu0^7nO%`AHDw^ zmkrxy`5u#UQyyXBiFZ1F(#fDVnZVMqIfhV4np^U8NWUDNOi~Y5p@aKZfIBC0x&mDx zvA1$cRT@ES2c_oZ1C?ze4OJ^EqVz~s)844KRSBmsOpOX$Z4m5*)j=9QuVZ~#D3DJd zI^a4pm4tEf6MT6x`jR(;ORzavxxPh>B1$@-e3d&YKuUN2xjcQmRo$7;TGg^R%o9N} zZYLR($`fH-i3P1U@3@PoT80GPSO)?|SGdKB@jnxS{vXy-PO8moE zXRFt$I$`ltgQ&XLW3><7W>?|_?v|on?jmH6AiVHwh5QXzvi+`@1<(vfHj=2ZHL^sd z5nLbPHzrMk1Ylq>xss_(f7EDB_eR69_44zZugCvf8-Fg!dZBXN8wy8IF7JX#UZ3HV z5)Ts?E{_=R$J*@j@U)?*g8pL4!PB9FV;vTOEe)oagWVvsCpWks@u!9(MJXuIXyWZo zF|_BEg(k@P=rp@aNQ~xE6fPRmpg?Yn)!v>{V8up0dQKP0`@^3#^&ocqa2(DleNP~C z{lkx#X;2zRLLic*E^NyV830JJP51+P29kAlQ7GfqQ);*{CGsP=C`=kw)(hwg%@|4K zUW_&qG;(`C)inq+Z_01aFPY+U8sj_kt=NrJ{_0Jjd6!>=&DjBE96$#k`fV+nEnB4% zdc4H#e%S8K zaag)S&BM813|NZ|h3cWI@lE?-|2OKW-1@Dx0&x*&r8^nGz`d+?^%L+f)uQgOg0K*d zu(kEw&JX3met*#0dshCgJm?+{%JzJ_{C)8^fBrw-kjyx>>0;*63SLo)gH_d>kK!MSgciBg)?kX{S^2FeJs`=pcXD z{D3g{&?K&1{;owO+{!|8k;0Ib)!#oU=apc0IlKnB6;5y-{W?GHkpDt4IYI?|dUeV; z2X2}Rj=nL`<>yKHy%y$cV|qL?)vzpIDn7Gb{xxkOS6a)D%MP`ki=DM){?r{`lV{dT zvG;Wvo@@E$E0$(_$~RuB2~rimx=4br+;NZqdU`HJg$64zHFmEXt49_F?kO+LwxmyBl5yGq&BotEF`c{bin=4to4guTE8iEQGtDD}(k=@l*R4@hmq!+fRta1*7M=M3Lc zlIt9;vKue@-NtVBpdYys1Gu7b{RPe)w3#S3<_Kv_(S|_pFKm^;o9B|Tk-N~q2S*FLR zGu%16rI(xyf&}}C5t}SBET2B@i-Xo*YAr3Vg1o;|{^upZzUC%c#iaa8%KB9FigqsM zupan;*CcW{Uo`vlfKT}h@B`SMvhzB4`6^RX1DV)wsViy=@$(<|aSfD6HPca_f z=XT+PkSSZ|6vatH$XnfdhVl zCWm(61cF?JQS!8q5F5?)@lm3~$W@7cJ@zcLY!5z3gP+0L_lkiiZBsQg!3p_5%8ql# zSWQ32?h__BNa(J-n)F_TWbgI&*OuwL2fNCh)BQ!cXDMJ2 zS@JP~!TGesa%-u4iiLNEVTGc9Q|vP^<30Ruf3NtiMHiB-wfrb=Q?P@Z!hzs@aml20 zMp|$>2<`RNNV}vd@7BeoCzf{I=%m;_rK{hNA$_~&Cp1E0UT86R)oPb3-RH8v6s7qN zS$qOxt>45OV!^4tN>^}b5;5vZeKCVXB8;oOyv9%`)l{`^kyNM%`@v$PLk=a)X!8Sf zfGro7X%1UqKZ2RgoX3)pJKSVUj*hcRK>wnc#Bu9yTZM~k)y>Ty_pM@rP+3IAqZ{pgObUDK!emc;UJaE!O; zGWG8E>byBTZeIOV&K;n@mz!8@egf`$PyW>LFbkk6*DZO^D4QANVG=@jo3b#x=*=6B zd7UCeqghf{f0OZr&`b$yhR;i|mhpt+5i`rE7)l52x(}V-hPbd>{ZNq+EdHG#3=_#I z#gA3zH+ihAvKNHgP9{Eejs#7o49X00OKVlBY zh-Ajn$==OCGJk;WO{jYh8DTr$C|Cdk66V zu(&cR;0cT&I?o++Ag)u^5Fn`zwZ`g%V8*VK|FF_pr*nkYmZ`ft9KM75MQ+~G@(Sg` z2bxD)&aFwISze@LP^V231k?cg=h&D035abCFbJ5Lcd0S#)UAsVO6P=S)KnH{oKa_>g6tmHbyPbPE%SfLr>)Radg0Gle>L#GJrva$ahHQ>c=w@H2G z-uC|CW^-%vgvix|eK`8_2T-*5K> zRC*XDJWHXC2vWe`V+tHHQN;r3Eh%%A^I<>@8Qs>D2FH^pR;)$w<;vp1hc=n=Vm*j@ z0iY7+-d+^M!ixno(Z%_xj)a%PCZB_)8G0X)Z4} znV5k2VD=2y#~KVZ%w~NQ-=v5E&OEdpU?OTB6WRb5bxE6|;-_+|%b?Kx@-|QD(8CAM zd(UX3Mh=+!$NhQy`B zE+eZse@)jsdB-~6j#LDp;N?yEn?Eq`=$nh{^QPK@(j{?p`IT6s5KsAW0(zczPxTGpF$Hc`9UhJziag# zQG8773{S};)C$XSeCnlvEwDO^Og9Q&j}4^6Qj|(_E&k*dxp`x7$i0p3p^s8?MppEv zbMSrOTxorVYxf3+`ZY*EG$q@%kIjS~kB%WnlwrVpnBAv+9{QqT zA>a-1R=()av3gW~v9=(~NpMz24>b;9x2%+i#B0g#jNlXnx_dIM$UoSgz^!`C_u86D zD)ydw=dCsHUTW-w{>oZ}rs;7j%D=uw8`e5fVR-0jLPkTfvoC5+%>4`BP$L4{LbYKf zPNl#G!Us@=gCS1_kGno|rz(X$U~)JRl)sFw=|_3Ho)qRF#y1TCL@Q#_l0ajR5P$fQ=}4FDE@4g6QMb+SasXhuZ>_ zpdRtf4LY58w~qS_3J^QJpyFHol^|5fx{KkF22IhXOptLk2TKQRjKgzji?N4ZkECru zLaJCLTp@qh2CW9}a~gyE29WA5?XMG|CHPg%HD` z16b>Xegtb8)}U`zo(^m7cqb}06=e&lyihX7UK#ihd*B}?{HeEmDumgN`H0D&jRz34 zSD0+@SdMcin}~Xkm6cX}ztY1Q-KJL3CH8S+d3kLq{=6moBkvSnT}lD}=4vuIIUY9O zPTpYi&>5^ruR$rX73xr$$M`3vvV94oQV1xa6nULY{c$WnO4@z)gHxjrkkhAb;^%^&Y>Cf)#RBF+W_Cy2n%9)@kD+=()kPQnwFjZey)-DMlB zLIu_-T_<8Cr)aPlqtb)b900U+q7BIdc!jaVW)iqQ1{MpEe?A4Sy?%ca^G(X3Ngr6< zqj&Wwi`*!n5t zvd1>|Q7N7AYs}IeGLSQQ(wl$}yBi;I)8}k*PMm23yp)d{KuFF#`Lh||sf0N+Gk8?< z45t)HEAp!cdtPb5n)#QVPy-2b9{zYX9?u&>I0?$`%jbuO0Wet`>||msJ2QjKL%^58xa@3pv|0^Q@Ay z$=6@uS%RrGM)n>5WbcYgBdE$?H6f?n9uWR_iUTCZWx*R57i3T^a@sJjgtp{c%sN0$ zK)~rBqdOys@^F+Sg%Qd**|AEM6H8}LFuSy;My&VE#{gCdi9Y@O{*y4Cp7EyISROcr z8URW%AJFe|C0T;T5gpJ7pU8@Ua*>;G8Ks|OVZ@HS&uGhFaM!Er0P%<8D;pS7!3TPS}63o1m&7* zSaJDrc(kzCBrBvAN(m2_mb9VHN_5}<4)HQgeLG$s*wm>rKI}~!awwKGUYLEI?9Zx@~Wi@ z@-MLl;`jIvwP_`o;iy8vY*S8;$8WXKT3Jgcr6x1_N#&EK_@W#t|BWQ8g)Vh|Dw8t6MSp9K$fXzniDL`THfFG9X-V|jlWqwaAog8DU&sN9noYo7=q-quGS9};a9!-WUR6Q zVe)+(+k3|7mfET&_HymMt)Lmo>M#XY;4W>(Ks;3dNmHI#Dxsg_Eylk#_!k&M)oue7 zG%#jsUt?e9xIrhZWU2U~{}{dNJ&cKL-Uul0$Zo$M2%_l?vcjZ5lHlTua$c%L53yzi zkd*j^GC*h`kc1130AsjbVOBN-LJW}k6?r4r(e&Ssz(M91gYa8gHq=`XU38RnsgM~q zG-e1dl$4Gs?o;$2(QsdB;ZkuAHm{D+tt%=q;?n!=`}qTWLoe}I&JQoH&xQ?k#;~ss zwnHrtP6S0@$uI-&6v-pp^`Sgd-ZML&`U*B?)j&IQW^hudJ@qAOi)A#m8RFs!9hrsR z{D9}49rkF)(d(6S&qhBs%R_>OoHB@j*n^~;$W*qd(&ry1G-V$j<5CK~_pn8!5Vjf$ zW3Mi@8cU0vrMS1wni$K5s(*El*=yU~JbcDfsxgxsupTnFQzis}+ z9Ks|Ngwmf%(mgGbviFBhE{!BB&UQfMTT&Z|;pvV~d2EIez| zNv`VhA*I;Q^(|S+>O+HU{qvKFe(oFO5z#Fgtk3ll2>QUTpJ3*EE(rc9?<H z-lVkpCI@g0rS#hn>CBHF21cyL8s2{%U-raE0@SY>ers!hYJ8R?qlV8D#j3r5VT<``QM zJwKV`jGYw;!=v+Zc^Qg(1N0R*NU|lVL6yXra`sNo@JP`87#wB|49A68J?A^v@l-bqwBN3L=9rFG@moTBTJ6R+}lXH89i_pb#>JK5rz|v!{;IEphO|JFAzsak%T{JCwNJ zAo6h*&>=`U<0r&2@zmo6xZvdKMtNMqP@S*N1ItSb%jI{>$b`wn8`T7fq6YZ7(mFaz zOY#}V>pCrRIabz`%dxQV-j|o_T!<`=c`DD$Hv)3W`lQ@wq80Y~uS+A42f(WfCkraq;)79ZPqI}$lm+X0i5 znrettfA%$?wm5Ex7jBwevdl6ZrB4O!h?<6!FBS&QFDc%1G~+t&0?iaBfJl6G06tbo3CcbZfHW)Ypx%S>hS zB+QUML~#}0lFsF$tgF59kEio;6Ft0=>80~^u3;e$JShXKO)idB2VXD@z_|(A3RmL_ zvEgfU?m(pZc!qkrwb-CnqK=pJ5#5D8U288n4~WWwY;05p16)F1xbT1-Zd0W@@RkQS z)M~X?%IBOlm`Zu5f+Kf|?=}>u>0=;rDfdUP;Ie6SmPl2?rod?o%ENKE7LfbrRN6oH zb5vlg@~7}YwSE$y<=hzG&C6FOU3FeU(stFK{!T7`TkWe!+;Box=s)&)I1w~4bE(Qw zn&gNPz$78b6#K0r+W9vODhC&^(ZwGMBnvT_P}l+G`bSX%VD-#JUv3yM{kZt1e4gbN z1%p?Q5X}9E-|6KD!b zKzrv&`Il`9xmiFOc7~+onW`9F$D|kHsStJ|x1-Lt0!^nCd&REeSW|--w(`PDLDuwxmN5q64eg z3Jh-J_b3e0PHiITOWc~e8<6vg|Ikn81AcrNvSWE4z2;azK?~@O{Y}V>Stq5O zMQC_HM<7RsPs2M$C{Gm#+_`Wdd%g_k>MyIf+W$dmCTq5nw{?L-IieDdLsX^BkRedU`>!J%6l~p`@!C zpe!QpFDgp*vJ@Y6mU7ZNpOcXx)i_iuOcVxqCLC7WfbS>3bFq}!*+ud&7j%o#QGKW0 z3%!X;=D9Y>{#;mKDsy?Ln~t-PQh7f7=_l1vY+nqiwm--GY|*hEsnRUx7Ra+C2aQoL z%xke46`%RTMNK@Wd@LAIxpRKR_$cJ}r_fCH_wJBENI3McVQ5(bkSbQqAK-0juF7Hq zIYhV>@Wv^Ui%ZKN_?O}paTZ`u5v<}Y92QcLwIEJq`y}y{-u5;_BZ0T`Z8a@;qLGZe zzg}sehj<23Qc7NGMj}NBi`C7>;>Oq#1QLF3@ukB9;fHd3=3O;Pqa5}%r$X5Dd-*pd ze>Hwj$orsb)((AQLz}2<@r&2~V#)6NDa_VV8(Gok=bwd}9&AbZAs&Pc=Sg8A40`W6 zvK`ea+dDXZS5~FcOd0oR3+>fTW39t*U;aS;ukCw2Uhb?kRu(&9;BWQ&TYDQ@rUsa^ zZrDC^rj#-2`@_v$;|;EK{J{9oQ{D{eCe;o3ggy93Bmydm*Tch38DQuem|n8EGJ`TC zwqNW}r)J8!Iah95@Gyu5W{e65i?h9{ZQF~VngpiTl#5MN^ZX0((;#qCAFs;6?f8h9 z2j@_!HTLoqDFfvFX|f23 z>)5FNhUrB?niRNm!t#e=+@V(x*wx>6t3sks;umnzzo1_*VJ?+&rx<7^GO0&pgs}cx zP2%UDN5|-hmSBOYxKk00PbEbC$ts2&ZimCW2FkHI7JbAMq<@mnq!u6UdJuVsl`DM8 zQ>hDwO~SkH7dbY|z0ub~AU76L=BFhXkBY&X;RYMluhLq4gE#?V3h&hBK$qw|q%}h2 zuuH8A$A176z9oHMN5Us_bwUMs`RsyYP~8CipEO}J-Qyt@a8SVk>X~d;{=plIB<%H{ z?$Ndmg_YzMD7PWn+f#9>1#IfQr@TUBIOcCUM}+!%>c4vtPbOC^?HANX0h>{%rtai# z)llDuho3Q>ghZ2Z%*${Wh~$Z2hK_6MRp5Ku+>QMzBKO@b(?D@SJj{HfsmL#bmX0D0w5Z8HnUm2?$CFTO0)}|}2qCPn zZFD!)upjOHu-RpbB>~tgVl(e0^7p!f{j%G)9taXNIt%#huPK;pEwtB|cCt)$1;v22 zcf=7Wz)<;kPe zy6YI;)4y#TVYLczT$h!8`=x4CJc`k1tA@MFnvG-p-)qNvPSln~Rj?rvB?CVK7Be)X zoyRti!j**|4G6_QQxi9cJ%HgqpltZ~OTf$e$>Q=-V{v8CAYWXidHZSy$Q-93K=)LD z;_I)!hMDbhk=!bkgdnJ@7?7xq9Jl{h88(2MF=~z6E#4>f9=efwD`Fy^s!T*kQ$|yW z_A_!Uex5ac`Y+~gO!!fW-Ph9=PC=8DFqH8HGA%QH*5KgiZvCe0ZEbCp8_#~#Ex%=N zj~IBZR0VA=5@OI#k+2c*#Mg=76!X*H$sI)a=|0e>mBQusTL+YStl=0YLM`ZyC`YG1 zX$S{)23kqPCuAs)@jk>@AXpJO_Tu%)x{rNi2P8dC6w^qrPpvb-!q~r|o$f7P zRQ?MFVPzSUx(=6f+X}2mq>)P3oN$+s%lH^cV{~b)!x8x@CPO53FrzF=>BJ4Q6ZX&f zD~m|84xUsVhG@X6xkYRuu!lGVa;Hg$3UgQLu7m*~H^_j>>Ar#qfulz_J-phhYxz%F zsNF8x4J~~70e;z8E<4q4E9Fx4bGuwlKXbtc!#g!5!2>{XBncH)4Y#L2dNgS{Lekqh z%8-jvxEvf@@D*i6Q^iBYcE6c_{$@guOJ6!ZZYs~9Ii%p`UDQxS#8&VvCLaA_<|sZ) zN-hJ4u-fnm%dZ-?knG2YE(cYX1k4xLjg$|dE0JwV$mY}!Df!ae7ncwcyÛ#jB5 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

&)cqi{^$$xYb;O3 zX=S!SQ0-uT^VYSbE*QYI`SmvCa@J()!^8ng92uGL*zyO0%%}gOtNurdtJ#-$m4d4{ zE5(yZA4LMSzyZA7LI&cLNNLN)XqO>!2);R@4q;xoGEZ)BsT5cbtF;s!AJQn*Ea5RW zef&5bmy21;bj0opj>bJ03W~K`z(#wtieLCF#H7X8Ust)fNTD`ewB6;6Iw_iT=rJIk zQQLiu;5(JrLGmljSU3!S+ct<){6HEN0LYGF#~_?5gm_5ePSa_NXeGvQzR%Wd#z6`r zbrTQ-geuX*0;QJ%cR};eMhTQA;g3D)@N)ST)+yj4T6au&6yVxu{Z7#-QM)W>*UaMd ze-fD=B0lfVf34M|A;SJq5$FO**_FH(1Z9ElvLn610qtWjN0wG^`fSD$EB%he;U>lv zpmdi#=kV;5@RcVigQEl#n@RQt;iOX54t6YvFXTbbb=OA@mW*k9Hs8r~^_^YJD1PbJ zc~{$ZeTF3rhZRQn{D{Z*DPOR^DZX4tp#q~Ap1D#y50(XUW6jFn@ytH0cvfo#cElys zgTA#iAfi~Rt(WuN3~t_T&RR35hj;?GtS@q|I&EJKNn)~gy5?-U=A_1=LR;uf$_o*Q1z2}?Dr0}`Mx%@Pb}vRXupL!WrW zr&OfSC!tb>&CGT_Wk|Qay=S6SAqhI?7jO~JJYXr;S5a(mF%$masMah%Ym?_@zoraN z_VK^5SzgcAdF$TEqJaZ#hS^~{58MP8zWn?I-_HjtK$coJNCBveK~Vv$bW@}89(=L& z0M{8O5O9fwZ2s6BFXelYsRk8+-=vyLzCN)K#RzNToeI_M?4R0RNV3qPF><^fHUZ)h2pr$P&;kqmaT5xVE zrexK6eV|Y>D#j8?ojua5Ez97nC@r}-h_16BW2+S5Ps8JDdq=tiqfn-H3HaQu> z!E7=6VR9s>KtP543>ca$261qsy0LN9>CVz`t=$Tra#bK4WRGH@Wc5ENi1B66-Pi= z=mrHCo)7;M0p%{?6QG1$^caz^Gq;M}OJ9Hen~OG7hfzMeE+~b zQs*T~4_%~}$H!#((mot~&xAnA;OXECfK)zd%T_jZWl7BPVE&z#0ko9z$BX-BBH$7J zvH4&*zjtrT0+co>MrpG*|7$7Lacu2^_YkgUqQ)p^A|z#49I}s`t94a->km4b(4t{r2A-f9H#ZLwQn~cDe_Yp1*PQG>@zQ^mmA54GBCdq z%Yo(wN^D#ZM7AfeDN>$P!7u{pQZ}An9YMSKn{U2+0HDD=lOZ_a?X?ixv-8Iiqh$mN ziWxsMg^v4S0fUugXJVz(Y9@?gkg3KrG82e$h3a-4%5yVREukgeWjPeIJb$>g_VHI+ zm1z2Eiw+$3@*ScFHmwYfA3r{RWnlL!p>5&cFb;57ycKJjdNPm2Mni|p-UC2f%aL_) z4vg?_fH=hzY6T7$O>G^Fpd{WXEYja+Wuc`A zY-5>;yBMcdE+4+0J*6ZG56`?ShK8IEcN;Bh_eL3xf@<5dWCIR}QdBu7DugJl?NRsC z>!0mECA=`cZkkm}dWKi*3>ISwbQbTP{;$f=@A02LQ*brkFFl|Y_@l8E^i)U{9S2=5 z_8B0;krw20JRANpFq+L5C&w@P&n=Gr6SuaU{%^kFCBD>M3P;MZ9Wq2d8eNs_0WBo2 z&r;pCfqNJDKkyoD5fOa}U@#&wf1S;;Sef9eLIU4}hQnjM$rQEWRG=Ey9tCo?sN#cE zV` z8*{WTZXDky8|m1y5Vb!#lVOt#==_WGqo;sw{s>3&!s<^lrI+zEn7-{I8K1tgq!j*$ zK-t-qdMjYN&r}At0T1*oXlmqC{F&B;lXF)X;$#coBd^}Fpq}~$ixP;fSRfW zfR;pU$?3)HWt~Z-dphs(t>`Pu84-9h7TgFgNtyCbMcW3pt4k)aT%;ms!o~!hbe^H4 z>Y&-Ttn%40JN^Cn>6PVCd6X${=r&7wY!Jf2K{uJX_tcrWGiGJ4pvyF*?hd&I*u}QBGk{A z&L77f-G`ZImxEzD%`_>#NzDvOl2iSVRt3<^oC+x!AwgfMkY$&jwHo{k9) zcyptQ0%DoK1D(DqNzW>5vFL}SJrhzK=mawGW+E6$lueeXtFP0UNC`gN7VPRCXxoRN zxn2RhL@7Q-8|sWBSg@!;P0P;*RUXJRESvb`i;e9sHop9rEPG{dl_|Os?aHWkRjJNE z`uOXOPrv%|%GUhBr=PN}AV`MQgUCemZ0Yr}6{WDH5SEje6rC`F?BlgtY=HliP^WXB zHM~qUIj^eQYZZH;*Xc|JO8EW~?8E#6&=G;Qwf(`ExR#n;ZlkAmJB~zlsgB%|dxzQPHZdwEO>Ba&H05uc} z1T|$ujunQo`v%q(%ulS^72(>qTbv!%t4&7q=Vl2LdjD3AV+A&B(hOmDE4J~-%zUHW zN#;8cgS(jA16zw2GgvD7>8pzg;+e=d6%Y`N#TEIMgS&P=TosA^}(VxuI$n zit^5W5Wt8w0-{Mi@_Wcvgah+SfKm9fF`nLGyeFPH4t|DsBvRpE&VgljkKx7eXLpGx z{X`g&U{E-6nXwpO1_ zL4kRpAYO8!n4`x(8Es44xSm@vIz!=jR3oU(I@1-dtwhDUKV?!q)m8jhp2wq^M*n0k z+m64-BJ(U=)>T>sGV8A>UK+$pUCvN1v5-)2Axjq@v5TgQiBmwn{ueHeJz1w2 zsWj|gz*(&#zLLE~kC~w~=%a?T4Cze<+@@WRD;+A@)u^FJ#VHwFK z!3$*%5|1{)L1^TY8bhZ&&R87+QWW6^Gm)!=*g4v<$#@e4U+m$$)JqH`5;|*vDHRvM z2!tii@vi#if%Ibrdnm;c8_{XT?)BjWd z;opykwmry$e!;-S+ni{!;hlyR#w#n3NXRiqjcQicm@qV`4IJHVhS{#rpGfdrWpG7; zC&5Cg238D0fv7=MnJ%6lq?e!QN+#++yt3VuUO{%Hx!l-xJXEopt9*DyBtEtZ%FRBu zxkZ+FxsNY)xEr!EDr$!0|BbMW7J$P6HES?#6@Y9nahpiPljIQ%GerFxkkA+pvuSxy z2FoKjd6?OI2deyE&fs>0NW#2*E>*tYw&(cA9SkGXtos{)YN;5m8^%qm%sBnOL`~IR zd>6e^N~f~1bwZECRq+TN5L|f;#478a8e)&xJ0xVucOp$XU|x^UK@?omaZdHp{BKhY z{&&i*3O&rfg86eZ+mJ;v<(Rk}V`bIC#GM?31_|^toje08458gWyACRppWK)VbHOR- zzh=b&XZA@RfapI^wOfmP3(+WtKVi#QD=>WxuTIkia*dd0Q%c@R(}EE`VbH+H8p^74c%7Ius!(Q)Tmeh4kQp=hC^t+j!u;ZFCw zSF{mpn3?jb4vljzc9J<^^cT1WFeDgFHdYB9!-`ckQ5L8Fx3u+d!1kMEq$Kx*I4`X5 z>O%?vKGn-3g+^HB`1FMHpC;Bz@&Gp4VQvSNd=&DO8(qHx4e$uwVijel3?qDZJm2_u zBLrE&W#hmgDJ4+}md_YI@slYk2RP?*o=Eszf3hc2atSg2*|LUuE z)l+q`8P>ZOr93!z=`QXs7~urDnpw-&c zuUSwJsElI+`1Vh@tcssN#cs?Vq1)=@G-pA22Huz%^jNW;UKiD;tsu{ya@#B~zj93d zWAl==OX%Kcr#~VYdvpC3yC%M(i}&O?$q~N%lu}y7_7%ip24#zCeViI~L(v0$COA+2lje>QrhEwo2;zV%wa}u5dy~ zz%TG>lg>4DJ3GuswZ3Wti(hHacsu30vti9NOjnCqXk>gHB1 zlwKk0)=riHUwqan|r+24AjCIQMQm!FbxfJ2w~d zi5Wb;t_vSD3pYaM2&VBpN=w0?LqKVTo3g!K?Ae;tr1}M@n%ttS9N`Ggf}!FXLHn9J zWs56?Xz7)**A0}n=O72|FG~whowY>5EQuZgf#J@34A_8vZx=Pki-0pVw?rohN)MzZ zC=IG#A#8B!?x?6rl`9}+NFwuzLqIVZeD>@r>2k^$kRZbTGVxEFr)ow?+kK;s2dhkM z-bFI1ggH*;Kt#UG&bc)j(aa&8&S*72>d;eAMI`J7?%C94u8f3m*0ZZq@Q{NCa<=J?_tQz-v$nktVTZ=lqx z2rIQ|3T0+^A0vOI&NdzczI#;XMCP-}2y%orG8>5w4CEQ!V7&i${^Z&EoY1G7@5C=GfeX!}5zxRjy`#cQP)rO;Uw6cwo(zJk;%e=di1+yj z6{S2mI93AZwnp3;CR89_d^4S8R9vx6gdYFmPwq5v^;+S`v zp#S=KhOXaTriX#rafW17ho>ofw3oeFtv#77zhkZbeaVXGJFt+ZH150gzczb-Z13Sh zb^l=P)faL^!B?d}4S;yYg2BJ1qrpVw%t$$Bn=U`lx2Iy$n9U?uQ`=W}3kpEOO!S!% ze@D5u!3P<__uC69YBA3sFcP{M;b|wl@lT!`_LMQvynAqwG3BG%8q%dLxl|BwdbvV1 zLAZ|^Rw22!7*Ir%xHs%jre8W4%xia|Ge6Lj7*Y@k@yNl#kyn2;8nThD~uN}Jig_y6!8 ztG+eyzFps(tVqXsl?zygv&Dgjz@TRIN@`C5@5fbTHUH%Em6@g+t}GJ-7xQ~YpUcye znFK{-CSUfxK>$DA6r^V!LmMuxJL99-c<0^=9~2Y)sDa4RR!CV|$fRuwC|W%kjRQFQ z_3gZJxNo*nH3%PRio8>tT!y7MjDu~KM1qLXPe`~X*DhL*0scn|B=nG7e=;J_DEZG3 z{{L@}iD95HjQ1@`IkP(($1z;*mMgrNZw?n$-&p^&6`n z@xPllZ+tkr;-o{zUK|cVU#p#dd9rhMw7bT?*RVUGB^t%HB8n_pUlaC+PA!<~MSXHT2m}ew&&@D!qN?t$@X7&i-7lWzqmO%ET6uu zGGnlgND!7BQL@B-t6)n_Y0IfBk1TBokqs+p)n9s)LStnkvbV*K? zkAb%Sr`Z+-qwLu7n#3GdJa&odtcmKy$p$A_z%)JX&z~@&6Dz-Y=+O^!@?+%Wal;n* zNBy?)_~eL7@4Iu^$l?$|)FcPB*$f&$f<7`FYR?7&jX$B*hJ^?o%4WQAD8}FgN!!r= z`{Tut`K$RA`a_RCy7lP?zvPmV=WDR!8jkuJU4!%YhNY?l>Vs;4TKrQ|`+qOBLwqn3 z?dN!^e9K|5?n9(JI$O}V2V+5jC|0WCXn4b&!D2lzCIIUlMTIjjz=`qJiNP9%jnc_q z;XPO4lflU?8?_Y2_y$xt2j6ZZ^jW)r93h{ciF7jU!H5?H`i9D@}thGwMW{Um_YhSF$;o+92EZB8;{jehqE?t}#f zn7QpK;GDzNdzdql$i*WdkU3S9$Y`2(fRlr%ZEG-z`n-nwX`E%F9*k$os2!Zz2!omB zESv>TECAX>wncuC;E49>b9R=GWS(W$$~a+~C`IDhbSKn|hyg4vcD8*;J#0+jnxmh1 z&sXwuZMlRkORaNYnO_6i8)aa7FTP!(9Uj{p7L>idL-C}75RAvwLeyP#bW4y!wImS- z?C-=J-(lumlAiyTk>F&MV>I0*ip_W}Bk`XvW49Qr>_J+ z@n^$IzMm*$JVAe+yr;Y&Fl_r=A(~S%YD7^f?bD`rHovoXOk(aa{ePrT^h>wrD}!QQ z0UX1M*=?*>UWlN@kA|A`2T z@U@G9)6IsxOi>o)2!2}x1W+;KFws{KU9G*y5?vP&`n%i#GF!6mu&%gJHmnDFhjL9EzwNqYIf%P%0_iguI2T0$XsU1|U@lI(SHz zQY2RxpG#yEk!ao2ysU3Nt~HUSc>TFpng{_vQ{zid%uet~mQeZa0`Q9rGf!1GgjjSVQDRQ(Xi+Sy_;sJpKp2CpH z1g2R+WbBhoN@=|4pYug86wDi6>K|0F%S7zmZ^-w0Zf&B50Mw8j^B|i5m9KVG5vB(| z2#0gs*$SzpOzo`&rNPX^YITV zs>fb=o&}F#n@~&b-Xxc0r7RSlFbZ0eU?P)zo&V=Z19u}gmtR&wYKzUG$&RpDtZ$si zvC*&;G^^@hJfvpv#8QS&rNQynjy7X=0&3WG9qExdzNIwGA9xMLklCwqT1xC5P_|lyinJOfNk^j9@dAg>>|Tm5H*-Fyz8n_ zA%X4@<5_d?SqQEyT#N-Mti+e@wGTtYqM_<#d{zE75F7v|(UX*(;Sw(cQs1}Ma9*wA z&E%LO%Lz+Pew<5VY$_-U2i4H)&+R2M4&Y2ZXTU>hh%dILs})kA=Ya^c9~5P%kxC2~ znmz~5>uh^y>=popRo@86D6q#Ni3>J4>cGd77pxS*g85b(PC5;#@y7g7)TT5 z!4#8b?8M(8 z(Z|wP;OXS)lv--20-|#<2W{AQ5{k)oP+(EK%&Ch^B*>6yEDGt+g7z`ED0p$s=P3{v z00-3ZYZOUzI9Bb=D%rywuFl=5LNb(J!%uAc00obvv1(4)R=1*X2A>fKkL=dcMQ##_ zs-Ac<8p*qr0X;&2aW!|!=EPSl`7=ggw3gul5>)o=L$}FEssVY_&Jo0r<=*Jea(FWY z{h5)FtK}wZ*FDeln?;Ka6B$gr6 zcvc?0g7pd$9#%Ifc5T5)r8lC^jFpMAJYpTG6Z1=uC6AlILw*VIgzzXL;pGeB$*qPi zfXs6tm9kPPw@E*}`N?CuMlqAr^)Vscy|G(Frdf>Gpc5dtjP>3K8HWO%=Fk{)RoSiN z_4~RH5zTZvByhzFRkdEpb-j=n+0Wsv_~=tKAX6*O7R9Ric2)=I$>pDr1}NZ_1Y5n9 zLk4p!fNW7ho|r_i2nc^mZDCABH>`q4rXTTckzL-CsO3F_`(JKj76b4f>9jOqooZVwK&FaYmjEAV@1&^H$(zMIuB91XS#LZU6_ zRoP&E{H-l)wJR6ol`@!#8STA#>$%Mn!_=LMLkCb4@8`}20*b){V#LUYQ>nOX0luCu z{v{de@54|J36`Oj?qsZH@_yx$;Y?MUZnppY7uuNE_6JN2ng99S53fJ|@O16|$&bI> z-Z{HidrtG<_Th=4-Cy`{zR>83?~$v9 zx0brgPy-AB8gsgdA|k4@0`g{9Ak^GvY$1RdlI8=O_79oisZ|0RgD@n1>2-`c7|c41 z4TT%y2uL+aeTYK1h#3ep%%0T(A{$n;c+zyTJKPqNx42PjeeE7&NXDa5%#291jD!r3 z0Q?0)2_o|({2480VTj*uHS{>$);O=#!~Q!zZF(c$0f2(q^PYRs855;-kONwNF+;JDDukr&cvcDG|XdL1M=q`@5}wI zNPF8@fhHpjt)*Ndi&~`9MsTiR0BNX8XihR22&3lb04z~svj+Gu(N~MmJRff_Hra4> z>R^#$JDXl>+FqLNZ^gJHOUY%w+!T;Au`K_;yj}yj-)ry=?Au1y7XPvg`d{M`3XuC3 zmVdw{n@o|Q`qBDoLy>0YxZqu+Cu8_bvs*ymbb+EG(LA%leC|z~aCy z`a@jOoEHW<`W#LvU{R}yYobS{9#v&-6C{=L$4wmoK88=|!8h}N+ySJKR$iI$7*ja0 z8U+@Eutg`##j8baGbXiig zkvc^dgL9*5m>#o#j&^@)$)pPuoBG`C@I`NW(NM^Ur}KFp9E*OPHwNmbF(iF7|naHjTRpV zclxC>s1`Y6NxquRKapn#ez>&Y)VvqF4*>DcJ%|#5kTtD)7rO@pi9{kL(=K(Co50k1 z_crbZ%tjSsZn5sTT!H|GSb)Rq+E?VdxD4jc{*1d2a9tL+sU~Mi>94G?q9E`1m!}`E zoxLXM_`}-s=VxooCSB7U-OQgH`-GFScWgDv;$P+D+_CewIs4Pt>IpM%&!632|0;~Y z3m5;I;Q8-(~t0 zO(i-HmH=8?{4IC?-~KF_$|NgM1x@p*=R+e{BQXgQg<)@gkOW7h7H7O1TSJp?hDYQ4 ze|yU>VB-JcQCZB`UTTp_?#++z5tlmz?HCQ5uN2ZKPdZm8IvyqBmaH;3+BrtUXx zpof@z>@iyGJv$6j;^M@^1J%v9D<>wCoY<)*h6G?hTJcZnjiV#9s<<-aFkOo% zOfFBW;2z{97Nq2)MwPc@j$#|zKuE(yGBId1lnCL;sO%jQS=8|Sf1{-OUzc;gy9DR{ zhG;b1&)-t63m8x{G^QcM(8EBdWjZ~n_HvufTUjzl4muR>DfZX`Y+r9WGZNM)LI&O@ z#c?dS-;u&HSl8SFwvZx9d|H)Bl}JFXXEA>W2V>Gq?)!nbc#PAr<9%ejJhlN+s$g87%x`LQ z+$y)8c!^f~^axW4)?LMBGoJx+zKh+fUI3W5xCSbv^@4GW0U9#kBwP`*eQ;1)8PNv~ z#SWa|kr0H5nS}O=GSFOW5W>*eog6>Wh*qZy1vbmxbQ#zqHVMZAuAK$>heVLrApxxC zEMmJrC(cSuf0(!-aQ}!+-ocQg(GDvHo*%&tIhM%>m3YHNS&dRjZX<|&i5}&y8RVB` z5$z(2nKxHwvu#LvTapBd*vhSw-yAF$YKJvwS|1TvwiX|oyDxNg8)W%WG1pfS*BF>B zdI1SmDxLJqkk5mJ?Py6#0yf|R@8RI{D@6@g8+99nZd`66EmlD{02HjvGDtn=3jXBI z-s<-GDll8!;lib}s(Wb$x|pMCq?cHNoj!y#^f(NK^acyh`NaXfi;FnS5&F4d3L*zM zv%5bs!R-V(E=lyGU_hAt@16G);PPtO7mQx4`GLl;!O|;E+oAIgum>;*Y(H; zJuHb)jY|maKqiE{xVwRY_K#QuOD#7hx#bjDU@Nwtgq~17K6u4wm(cIotFV%DVEAU; zM$2^rl0Qn8NA&7)V>?^p>=2^g%im&57N?fZLW$)C`5OuLSaDHoreEt;QpmnB2#{`H z3ryPMxUul7+SX0;F0(7fL2%$IB}vD9HbET)k`*o`lwklL|4qy*P5Qd+tMqJCHXeuP zwFwrunCK;E=Id1d8h{OTt^ljdv%*H001MD=ffMvVCN{+S&rN^>I0JVUGcnVG&y|2E z1W75tFGWvP`(Z$=&{OY}Dj2imw{gFZjdX|p8y_3$C~7>$mF}r(PP(+G$(Dst_Cqoy z=;s$F9b4!YUv5V9(pm+x9ZDdGm6y{KwgV-ya7_t70VIpV$Lbhs%3VP?2MS5s4&`0s z{&ZFb0T}oaZ~&JcK!-mv2w;R^AYHOW%%g%C$P-wi!0mHTJQ(fup^-pbShcDIVr3A4 zp&nV?yanu3e3e9$WeN+jfGn2))Nm(H)@A7k^v(Yi5bvuMTk4%HS7It;oR{>o~tQ4-VSNl`&gLV7Dkj6|+Km4yPrRUQ?~^ zY!jyYQ3SWF+Z#}~&d8JU#M%7kf6mxZ2Ad=EHaysFri-^eexwwE&dH*^7pOdqMQN0 z6zod$#++eAUtP+y1Q@wU|2)Z|zuf-OnmY0@#Jg78%><5asIS>Az+ev$vNqH~8lacc3lm7hfE3aSS!+Zl7QMpI{p9!lp}c z{T?;8JFl#G_UtWLO1z?Hu@#Wjk|-?ojF7R6w|24E84K(}Ltc2^=Zr4{h!tK(ZXS?{ zQ66Kh8Qet^@F68;pjA-I$bp*PTHoMZ-k{nja+6$<+Vvt^wRsaIQv&t#{*Bz~lxpJa zUUi6F1|z>XA;S$4c~?y_M?~3?gE#SBQw%v!8kR|%_XW2&Av1s*#ICf+$WsgryD_{N zmf$18OI3iA3=Nj$!HGpnCV07(_xcia7%&lcVI??GMc0jz7_SiQ z9zFTueqG3YYj+i{ctOd+>J4todii&MAV=~(|CpRSXWs0C#lcl3M?A)T{PY$B$#37d zb^H3q^FO04^7`xn!ROm!)@#lvFKGLCz5%!%pjdvK|M?F2r{f=gd2n#BvqrVUk83+G zf59x4+e1g-*)Q4OS{p_+-UK$=tUGXS&u{6TZoi;WZGM9ry`;|+3W?1DNwf9ob5Ij% z5aFDpBb0?$Q z(+1`soRTLh1K-_K+9^wg8pA(k2JJE^u6RH(*;Crk3Eb=>AM7uesl%oZo_;-y8)o&y zA2Fvb0)Jr*8hw?~d3STnr#04)EW zo7n4PNc_P2a09RHL&`#$w97UUq)+lpiX%Wnq97i*l3Y;;U?O=^PQo0rb_Xhl0L-hy z5L1&z+l*o)HQ_{ zKJW^c_*t_nP{bbUPv@0ojb;Furbo8DDmNy^_Rh;_Ren3h1+Ir!%w6+^_iW3QEvNJ{ z%(&Wku8x9z^&hI7MvD&}#a9n8wlqT;-I=TG@M-Y?So8uMiQ_|tx8{I@iIO9QfUlsM zjxZL#+k3CsH>)#OzE;N0D%ohtlZF=+o*FzgUw};sgM0$B{CeZ-X9~B6&(_~^bLx&{^kdUfDAz2ag4Hj+zchOX(%J$Ow0g)3s z_q${%AR;>fhWDjJc$a6VP)b=|g}JRdR5sEb(FCH&ui7P2Ch6N4h&Je?yMTxYa*WRu zW%}_%F3_QbqmKz@Hab;+3LjDYM62YCwo4 z=mfwb$ye-&{E!|xq)by-2Ote=_cb$XqLP2b?ES4=1o~u1FZK0<%HbSu?eFZw;r9&# z(L`)0m}uFKD42?4bUa!3d47UX)ZcMq?Zyp+lL<#?${QNGn5yPu)vj{wlTU8sNY`&( z*K;qaBdM6UjP*FGxVD0@f@BYV*xOyL7@wKrm*o77Qv)7USCp*Mj5|TrW_P5^{{Fc1 z?_&V{oo+0$%~N=rkRDS-#v|13BY$uKOsWzcfv8~_#Aylm)U&Z00p@YYJ(6fdr~qRn z>8*P;(5m0b@rK@Sq7pWPAGp%T-6I~o>$4Ts;=ft`RARo|zz$-t!oEt}tdboh(A!)i zPVq&*47sMD_)W;$EvoUNXj228;sBJPwu`Di!5~wLP(ClvK+%Ay3fx4tnuE-Gl|CX3 z3|G%DZ)`kWM44O4i=Y1U4{|sLXL# z6W38J{#Y;amp{Xc?1jn51nNkdy>2K1o+C!h0ZIaR)VhcPE4*o45Q4cr!^$Hh64!-b znhz2eveGS=q_Kp~ltueZz5qDjPgRq#J$$Z$07%P46QKx_?}!&h&)CGq$}wkJIXf`0 z;JmhVWI_uUo|-kb`WP|8L4mTRY*eAw!BJl(B3b7ioX0sb9}gNu9#y~E=fL56uIW`i zy_kPV#F48qbj-`pxWjqMjJWih#9yZ~7gCNi3_DNmnxc+Nk^{@Q6@xRFkEq9L$&1Q2 zXVeDC`*0zDXo_?jB9_xw#j|I6tZmCWIEum@mF^gCVz$4kdFVA8Tds-w789<^g^X=b ztT|4L@RV*AN>~j{ouZWxYSkF4nPUuXap3UW_WTvK(4r@fI8BSqG(!TAjK`CJR1m%4 zh(Z1e%LK!K`WJ+ekSG9`4$2tGWVFd1F$aU1ha?>g^|_~VO| zC9%T9WyzouNUL}BDz+8FV6R~Fy0FU~)zt59w@mEJ&!@UYrqwXPGMVG*1!F9w$ zjQ#4K> zjG2#Bw_y^7g@f~vm}<(@T}05Z6`;v+X|*6af(i+#SC*=Wp{x)AHQcgB?Jm6CUj*Od zr8q^RA3*brUvV{v1=~5$tu+m*SQ3!8FRFW_lm#3yf#E&u0;b!rypf0A>DL!V^C`}0 z57#8CV1dSC11|y!${0uy)l0<_xbvLQ6L&0{yEexR?}~vRVKKWstq6DL z`S$aR!&gQ6?X(%F%;-(_)dv`q>XIoCR6vRXl9Zf+-!KiyUt}i$BB7cg2a+K@@J{aB zIXGo^t>OlZB2MJ6x6W=LiLUd~rfQ zlJ)q+qPX3U5GIpF5pZNk+S8fX3}(rpup27!L|iv@)wz}ti{Tp|e{%KuN1tesGaz`E z0IFIoKUSI-{|WjMu_$U-f z^3A-AbK}&*kWzYviBOQy;V+nCxObY2mthOeS)H-0SEgzYHFZ=N$Xb8A{?s~xZg+e^ zh5f}LgKV)rfE+2bDq$#)K*8H64#{elx?GBbt1UPPj*2nro;UMJ-YU;)wL^IH=T6}E z^xpD?n9;%AYS6S}>`G-p*xnw|PT*IOc6`8uLIFM$ZP2`%ehDc=%G8wap$Q;Iao?6Y z^p_C-1x{3bTB=j^g#xqfNU$M z=*v|2paL!!V2Gw*z&#`{bTYdHCL$IHt-^e~<~`#1OiKFp*~XKH+9S`tJ3%=_J^FMoe77 z9FbicU{0wdC|%EoNL8Lvk|V&%_oIvGWN~$NsnPAnA6|#vh}=Q(N#&tZa4UV>VISDd zmoAOYEcD*(C!Y4sN0!D?*HHJ-2cJ&hf9a(2Y#2$>kgYek2dcMUE=JMpPEggs@!Z z%9A@_`$_Nk<(3p4bnOVC{$vi_N|cGq-$BctdILBVHh%OBZ;{`I7DHjtk}_wE!ZyF_ zd6aA0Ja-8pt23L6BHbc_Gc}u9Vom{Xc>kpYQR zK}3XIuFe*78R`)Xb^Gb;_S0W5C;bKY79>P!HFfw|N?g(S7GyQo%`QYrORU&lg^aKp zS9B>7ol&;CR%oBlgI|9h7mckq?+-JPTfx{3lEiGPC+1NIWqfAq3#KQq4vIAOg&OAC z+0BSy)yjLuc2CK0Z)OpszO{z}iB0$h7c)`uyixj)KIR;d+7L0^IXO++nqpeOf{J{` z?@1|<4}JQJcKXctMJPi8ZC~ES)bPo0BM`d&75Az9`4E=xVL^x<2uY=u*G38}Da6d!b)Yy{>gwq)G!etWQ%-QEvzy{^uN3x|Ju!FXz5 znL4XPcE(M$A`X#8DFu4V$jbar>HGj}`b{oLBj@36-HgXD5~QYBO({P=~k<{G81M zDbLT>7Hdb`A$`7f%758Q|4I~0LQmW>u_A2$OJV!fBeJj?59VJ!`s%AkPabY^CpL+S z`wUlpeBZx6yZ_arha?5(vm4lQgd%+xF^H%K5b3{mYF{Klph1^aoz2&XwR5+~NT&>HS08Gjv`a z|M4>f~{<8wV z^@}>8SO^qb$l?rxKH4jqcj+OlfAK5+ZSEA~M;Hq41y7tvF;v*!jowGNr`!>#%*=(% zpKF0Vgg~p0AsmOkva>d&c-x1G6Q2CwXrq&3lIOmw75r_}JFk%hug6~lY!)a~3@p&j zmkCIEOBO-NRF&0=^o6v)r=*O1G7ssUd!J*G%RdI2(IQRfHaOzsB~6LD?*g9OYlg1vNc^P&{=)A_T;MdqSl`)gXug zJD9OYpM0-tH>;R6TEUG;fOIv@T3wP3Q`!T5$Q<+GONi<#B|NMvb33ltG&VQ+q$16z zd_r4(jVZUJSYK9who%jBl{AooSTfiG+Dn$6Ben-+ zPxjNIJ0cjgRn5%yz@C=Po?WE#QZ83omxl)~tPIH0T1GMAhW^^7;MCn zk?#Bp_O_d#xHpT6^fL}EI-5mfKihW7&H=!$-7v9l;9&(JPbaQhU=KF)N!Y#Nbfdsf}2{vPatjA`FhomGv2OeLwAv zkavWb{MH0X99-Y~-*g9wQ>{+|IX4rFVi%t%R8)xVwSKp>h zvpj6sT9PuSgJK#9!cizRtdw3{ZB6zp&AbPVn!JPh{1_iSq6lh9T?K}AtF|vL@T)l~W|eYOHnQTqjap);t1Km? z`XOy2h(+K62qjI(B8?!Xzm4yuMw-p{;Vv+aB+*4lVhUQaiHid^RuV6!R8~*1hfdBC zBQk%3P;K+0p^cmG=|=M>Wo^@@+Hi#v1cJSynxuHTs6%$ZDT`V7_O18&{gDv`ex!_m zu(a32>K;NUm@&`pD^&(IQz@Q8z;p-*0PB{mJo8Mmiu;EO z&CO#Cn++p4M>W0uF}PLAqDIyx+x57Jsw7AlU=|Y#>8dkB+O*kx;MI{ zgTWmw{Z>(g|B0hXG(^qlmZA+3W~H%Yg+s4U(l0xV8HeBbow-A#xYzFy7BcHOg(>%U zvc}txdTXWVJw=d)2IOUWz3;A*tgD9l6`wpR%ZUiUZL^`3N3xSOF~Iu4 zM}kJ#I~#srUwleI4tH0-H`$dQo>^fk>$Pg*7KVr6DjS*vJDccZ`|(_iqE`0pc=s9% z9bJ~aTp`vYLpIM7+5||YlTE&^_nmV!1$Lx!BA|jMN_;fv0m*IpjV_lAq1G-__2Al7=s=xp<0*__Z zH45b@k1BXk#j3bSXcG#G7_C`Lu>?Zo8p81}50y5r$y=5;#o0u!7pi&!ZY4P&V_NY^ z1>|6{_AmH!YL6qR!E(kn2Zzj+w+?P?zG*`$)Y++b+4c=`+7SK{#aCz4C-n&|C-#CiEaxU@iE+yoeIjupXk{9S9OKjA5{MM z2S3Ds1IG%?p9yHv6L^wJ@UOO$+1tDzN|jlX-{N4~fyif1((+XU z-JJafPmRdd`PpBWFZJw#7BD-3T@Jg{^l?IoHO&BSSb8n9GXRYtS*YpeN6`PVPKCEz zkY~Jg{i^I2S4iZzCo3LW92K}mWhOh9c6j3#z#rTs@qko9+||am`1>QKovd!HZ*HPo zK`;)#JWL#hlsT?NzS~?2uyOa~4CG(`e?|XgLBh*V0KCX8pX}+bTBOaiS;R$soeTx#e2jX9Ty|9s!rCuY9gCI zMnV#=dd>V9I!?czKiXP;R1!W6TWohH3;6#W>Rco$c4JPLA={*&Gw$x6Te; zk+WTWOiaI~N03JF7Fw_Goa~+uBT?XC`@Z%(0g#fk*xpfjVp0iO&;ySN^yYE=(2%U9|uFV&JM_K*3BRsu6DgGXI7EF_FAC-~8E9~0T z|5`C$)LW~QKhQvkmY1-4_L}6lVA{%epbsF&!sXxmE2`oHKUEHVmFvqz%0omfa z-mz9Zn6c$i7{u|a9-vq;WxU|psCW=o{glpvEcwJ?k1|uTKu7s?I38j^8{=G64>MYf z+9uim`|ctA_QF!?Tz8N8qv0N7i+`i-&8@FiJ?z1cRmsGuuvRCifxh%)%BjtFIcMzU z=dY1UDOlE-GW$$OG<|$ZwSllSg{#(6dpn(GH9{0ARu_|apCSe~qCOFyZeOe|{!~Kx z4T0y@eAN6xwvKu<=0YG$)R=QikYfn?w5lMXf&C*z1DjSuLMLbJtnAQlunrGlO=Ily z-~AJA24^Q0aSS&&8lL5q9Dyo4F>SEK6dKlgDpN{N3BDq0%&7`Vw)|Mx&QtqA6Mxun z5+2NTA@W=rpKbUWD-9BMW93G_ofk{siSPDGHe~=BrpWwOoB>FhO=s#Leb552w)KR5)ZukDi!M#nw;+-sOJgIdEYsq7 zU$_hE5UIn+&sG4Au*>|4mQe?Aqyf&&Uys|xhdov1qRx9_X z2|_M*SX{3s0+kJzo9FxLqCX8mN0~I6=MZj$*<~m&1v8TWvIDLcGZPR;4!K-P=gase zft5AJ9k$Ecu2?#g@cU^fe^P6I-2C3}4sf_OE3P2zTijfOkv`2g4?R=O)FH4nD+^Ug7hGF7$pU)0c~LE6l?XJZAaKAG^5l4acjIOP&cv#cC~l}u zWkE4tR%(boIPNiPLxx>58cO0c79%u%WmRbj|5(JaNqX6gB{ZX@r0(SKcLjDRSz*FTv*&snaz&a9Ok+?ICvuUT~IW9F2 z3;{XeIr78$*vIu|Nn5^(SGfpE6cSj%^|xS~M%U+CC=R0hN7b0&-C*7T-B zRCV!)F_$u9l;c{eP;(4(AeQQ;Dr-tJeo>M)qY!QQgT2Hz9u$Zx2%yyw~ei|R&i(FOA)$i(na3mZ=SVH#YaWiv-`=-FG{VK_OpW#FiFOEeXw7 z2ZzFus#LP$$-X&uF7!DQ7M83*ODe|iAgh3*edGPo>)Yq=6Sm`Kqb5F5a7-wgMbEgp zG&7u1YiqAQ;dR=jxpg8X=BzIo&@Z`NW9gxu6T;- zcsXM~)?$DY3r*?(z%#Z7gR*9Q2PdqX>~4yXuw<#SNHyEAY1+xL^c3hiq?)ryp1C0_ z6Jnby1LR-YDCWPpL65;#d{U8A-PH_mjdB{cbanoia{Ib>wMs?KUUOlr-9 zJuiE^`{CSHDc9s@YPh*!=g??XiH_dPo@Nn-Rv6jS47oVv&g&w`vdC08e6)YjD&=-L zQHGj370*L(GP@S4&a(vKHlaqV#zo=?4?tW9@+$_AWEV8FX+CrA#ORGGAr&;(&=*IP ztX6;FZ|U?W&kWltl`#7%df@uUd)}6JOvppWtsH26LQ2i9tkP=@d|}F{j>QG4AR^T& zY91# z(_7cBe{k*k4cqH)eR}))&H0~DB|z8s*2etK{kt2Kj;ueKGk20|%=NFgYBqC1r()A= z2-XFAp$3hY@EZhyD*u9Vhu1V6=rol*D0ZRQnz)?{zoYAVI7?$O8gxDcTi}h$6a!yUKuIT1P&NoLQK&``fdqc0l zs~|bKfOGJypVD-2354nmaqe&N8zw#cXttO#6cIUd5 z`Rpw|6Pm&Q z34F7)$Oz23-kj(n0p|U^7?fxwuA^VO^a!%8r6*=B2f^ST-tk!=7Bi9hR-B^JChwy* z-ya?-wjeZ6vaL463wxwAZAYyo17gCJ)cYp}#;r6B&+Zu5G(6m=wL-1(p z&7=afVX5>X<4#+#DG1hcz{(GNN%&$~$CR@~=2Qt%o>T0p(``*?6_rAWDK!aUNtBv_ zIF-4;LrfTa4^wDQu=Cf+iAJ(C2W9kX+5l{k?z#By-fDJ38Y&ogaZ#BeY%y!W&CzM@ zV$l)uHqDO-W7hQ5gsFHUYxK5-N@*3kaL46Mwk9u=gl=%W6Og6K^7JJo(5gfN&lo-k z6S$NHK;k1705N0DnuoPZSMF`3`a&2~6xD(=zW2&bxsxMs3Mtb=$GBYJTv_ARvm>oA zk1ip$&!E{%aZa5|cAli<*+u3PCCF**9X2Qu(bF19g55dMvo9fTw^TNSLA+H^agE==6rcf62qnK*>ywEQ$q*jrcnA;SQz|_ zu~i3WL9k^X4$>d*PdZKRhz1Kxlui%~`DXq=0*^f4f_y2AYh~3wqJy%**f@CEF#xrg zwrw~d2$Q0?Ko-ceI+@ReFl&yMru5PtSi&wgEZDL|&J(l2bpsGZpQENh3Yw}s#wx_= z#@sAj)+QlQss_5QteYAoyqKz@$vU02v~|D`((R;a>p^u1k5BO3tW%%&+@ z{DXk<1lMuVn%xT!3d~L15;w++K_Xfv2g_5z2f%YC_#ZhTVQj(A^`IMwBH|lo@ZR>T z*L0|BS;)BCl=^|s*NF53($k9ip+m*P7Kvt!l!KxKz!I0$&|Zzea-oJ&CwpVuWC}o$ zoMb>wxjhN4v3D^ktgU$+mfNRAoki+uI`*DG2A-ms-rCETZF-8OKTu!xy(D`>>gXU2 zVXJdUFEwjTg|lMIfOczchzq3|J`a3xaSN`ZMzOMk&i zD7wKoW74V=(Cv=|1d@@&TS-?TrW#gd~wXkF5LlFjUhhUob|1xxiQFTeKl?Re*0?Z&`Saju7(WN=FYS z4Fn_7pT@dg?@kzF>kJzJiLzn-;vf2-wwO}6_+fNc6}EwBZXJoyI!9+O!B zIzxM)Kkv+g5HN=FvY$S4vDe#>`bqdeJ(|w?nBu-r)0^1a0oRI&WAEZMrR-Fa2dib} zz~1n{1z1ek4EqH!j@eAKxJ1oJbn5noBL0|@rO{KYKSdZr%4H5FX5g-NY?q)eN*QmN zg3J5&K`^Q25w=)DDg|87$4Hp4QtmKw}^ zhxpR={Kl&Nk`_gjP;|%G>xUPifNT%lqFvnN^*aHNi8~Cr`+Zba6gScu`UMUJBe+h^ z%5e@66L7IpV@`K&*lBBeEoG}%6HXg{Aj*>4C0}dTP09Fz@((^1eLYfzG3n7$j zy^SJTixseZ+70JvA*vy;p@hJgK!FxtXzv2`?BZF;t=}i*!rTGBhn7z9WSNAMP>7keLk2~@~d za^h8fa(rP2U54woIcf#5;myDtaG3iEJb!(qvEg+8R+3Exsu5`kiu~_+tieV0+YB&6v9!d z>0@WioBd*myGech6*aSaZT>ZTT;{5*)Wj&3;P6gi9o7I$IBXak1m1H@9bN0ILWEV` zltm^NAEZ7lD?k+3*mySjsJkdnkvO3~i4ilQhV+*pv{eWIzR(wHg#@b+qPilyv;`5% z>Ktw5N-Q_z4fMlej_InKIrV4g`ifYEM)U59lIN^B1%4ohvr8FsmJO#%i(R8N zRQb3{*D3nav|Dd1$8VFj+w37t z4TB8nztBR`WvVE_1$S&Y;UzQA0+%c?YTF{vDjS^wh-756-jqATI4$IityH1v9E?7W zKC?p~#k>}wm+=IJHW7n0MaaYd_HSfEOWzXr!RNZ@3t@nC9xb`)ys46)v6d-Qmg9FpJR z_Y}X}p}>7-{+Aix-qT;tCasX!!_<#?*Uz;SqvjB3C$6i3?TH6wro{Cs}%`ZYT3rJEKPqTQgnSZERN54FDpb?lw* z+@zj6(vR>yfVniklM1k&4j7id@xk?LpI$d;Wru#1J2cMf?r($ZEfT?4ofKd7FyM!u ztPv-~ocQ=77y=IJ@}|tH|DWUj0XS|-?qQWq^04^tCHF2Q7({!W2r;9m$~av;s0pd! zD0TISE%GZC{iUyCZT=u$eqKlv%pyy4N1QnV{s}D(GGQcxpJ1=M#a?f4S4&a9i@64d zg1CpUO<(075pVqzYyG3-tPkGetdAo;{L_0-yZ^yE7%Tvqn7TPLly6OR zNi7*kKGD4qK+&!#&6x!4R$DGu8^EF+`rxU<86#X6^|t4!&e36ACaY3MooP4c0VP`( zl@o=3@bV`%L9fXJ+O11ey@SfGax+J4GzIP;g>Ga7%1z_N$H+uRwm|KkriJgYNf4Vy zx4m-J>~V7JKiuTF`liiMR!^na1_jj>aNea0lmh>5W}s6h?+(Zzk{n}<{pf#NKQYEq zTX}=EC>DwP&uX)HDtTgkT1IuuuiPKasrlCM_p9^u?|^|gn*4Eg>2b>?PySf9qQC1k zPtRU+&z*Df=3I+zQ+SB;E{1rlwefRq?9*WDcHHdJ^doS5KjN{4Gsn-Gj1vG=tKo@T zF6xaVKS4P2VMPtz`0VT?g)SYU^DFei5%$Hr01Wgt+QC!P{;VzAru;jj|8g7ryUyJ~ zHv!_~RHr0Q!g0E}Q%G+Dej-Mc6j+ED24%jz%c_UV^6rc&BJN(lZ6QJ?W;te9UBhG; z!Swxer*R@*C{F7$AI?v-hQi+OO#WONMcL+%8{e>mZEtpIeQWEJ-_hTQ*Z z{_)4xKm25Qf75LZIRIH2vS33Hnnl#hISPu~?4KEeOS?!E^rH4hw;8nkI~7exZXz)hrOp(Ws*vWw|E`a(vhclPiM z$XN_^RnALog?iw@=@Y>N>j#Sy-tF@H*ui6UOxSREgCf2iL#|I9BZ9$k_O0ZqIR+=m z7+F0ZgZ$z&J3xHsYEO3?D}^#N5IQ%kvV&wzK6&{mdXeX zT#+`D5E5x~y}j-z%qw>ow{hUA@K`rS#kEBjAoy|fk(NH$^^?KatBo8}@tbP5a^0!PZF1C^>dvI>;ZB-w~q!c7h~fYu_2;x4t7+tCI= zlQjnMSEqX#h~m43G^_7FG)&!Xs(^aI)0oT~S*F=FEiDAn5^o-?VAmN=JEF2Gu&hwz zwM%qZ3T4BRqWW~;*s5iP43S{U2*|-m-57?EEz$wj7o^l$yuQWVouMzzF`XiVq@h6e ztlNkK#AwOY@uyq{%Zi$-Gdudn_96U%_Qg(CnJ3;}6gD;0YV8&Ul=1V5}vGJ{F{wpCpRV((LkRpvPHlKrBeQ90cOcU4pnJ83HF zhsYviD(J>9l^*N4<#*}7tCV3^W7N|zf0j1@=~w2j}hA9ElWA(EHjd($uc3= zZojU=;%dgWK&BJJc!Z(1pcNWSZ15otr8Gzqs)a#3b?$prhO}w8i7gTTAZth^OAGK( ziJ1GPnm{K|wl(acl652=51c%XHbWx_&A1PUv0h>?4G&56w$SK}>eu#>1}%-4RmPCD zJb31X2PGIg$410Lr&J#G2=Vxu3$i<-vdp8@jK;}ctMZe8ec0r*z9AsCGD@8sH-rNc zu8T_$yQur^4M`K)9(bamv5V%B%g5SDE)K^~O|pJuF(UVR9UXY%zR;M>`cu#n1GSj+ zC%;ETA+qTwAIP3_(z-KCtA;f6!C4;!z3i2V*NPR6Fa|I0rrkCx)8dZ-9!Olo+vxQ{ zV(ksdAQuSVU3n4q6;yQ?MF2qR5E?|evM|fQK;*Q{Ha}q0ph3-{_H8N&5@YGZN2?SL z?jqS36hl~9EXiy6QEQ<4kV(iU2K>`UZC+Rw`H77;J)T+hiTG6>zQ_AKnHBC+d)MpD zv`s?a>oxnNF@(~z5~7^GdT~`G;XFUEih|y|aHDl%%rG5_Oa>J<#n&KQ+qn3q(~Ftv zT;iQ0q{l3n}nD zC}uGV=S-MtSq_gc(Zq!8N*^P%u%F1*U!8p8-HStK@H)pKbMLvLZ~B>@ntf#>cTiU^ zs3gcH2XmzTuq2%0SWbZ zQ>(4WF0w0E8bg+i05%XBM#~FSydm>nD5+_ETYiZ^(<=ir-)Ro%22tJYvZ+Li!JPHY zbCi}b0>NJEk^nn%TMba%$F5Y&0aD1;_VIYh7T%1{3Tg+MM_yo&YY2Dc+HCZzxmUD zZ*O|%^I4(R$wJ@MGSffv_wlcNyFBm>16IG|T8Jb{z^J2fyt@F3`2Hfl;K&5cL|w?w zaZx!JK9zS-Gbg!slu^#-BnrKYOic>5S63HnLg{}8O5B25v&Wqr@TgtX!v#tdbx8AF z{1}de7#yWV z;u>)YgCm%&g?C_Xd*krJ9A08e1j258M3%)|^@=u5L@mVbBgxw)6tPqsrj?u9Y13mu zYj#p^vH9fkoz$KnI?w_q*HVgYc;$k?D`LB*czY#@gbK+~Tvn4;QWD+sWibrPAjQsa z7Y(`PbpoV^^BcEjcye5g#3rBKrD}P9o7>l;-mxdmYWOUb>o)c?TR+i^l)_Yl0R>m? z{u)}#jm}cBQUxa^JJb(#=(WW)@%+EidwS2wrW8o)d1SXW8l`4$aKp>|@zeVc!+-ZS zHdCXTp{HKHoxk$cnRh)$0#+)PlI#1qv?R`vezzGpc^%c9WH%q+-6f&N%?q15bQ1nU zbmqUQK=^%e-SholjyTCZVbuM}5!E9H*Ldq*!IM!}HY%D>L~fRfH7$$qKW(#+A2Dk{ zN7(r=UP^KbjVW6*7sf%(A#_wxI>a7?@A-6M>ivp^&WFo%RkxAe_{d-t#toHN*C+JAgi{ zy&vY!?jD>mRH)(~u&F6sUQFaoj^IpZQO&ytuf&z{01P+hIkmlFWss|%(Y@PuQ(Vt&e4usJQbA;s{S zTH4Dv^6-7I==_27Ij}iS{YG4lsC33_(KJp=I|{TI4x288UrrcsflWsEgG7na@tE$W zpD`W&aL`rS^)1&V=t(WpIVUX)fEzUwVmA$Hy(h;R3GK3p+AD)l0~9H(1xIsn1UTf3 z>*-)BSTxEQrWpf9Afz7mEr^4GR3fbd-Oq(mS{TU4FoJ-&FYs}u9C22qZZ`>Y*`x@m z<5E35k}93?(34c4-ZiMV%F9=CMMTATZHS#j2-&J1qJAOv*%>oi+J~M}84@%}sdrzd zAj*RHKKzm|6FcTq0#ciBy?X?F0)=8x(%UsG%ASaT4CJKX1}$)h*?WSsC4c#bSY+E- zga1~FL@YmZz}x&Tg(`Me*~QOz{Xil}k9CqH2~S~v9qO=7V9hQOc68x%(tyTi%jA!s zhje($=X5PVNbHHW#ISk3{KfQd4C&o*@Q@P;V4#5N%JzGFi6}zk1SD<$4Y3&YkmtYh zJiVUP#Rvte`*Q0c5rz~%M+$RlB&rQXhB`i9+)(`ehp2JJ)X)woca_bXcUC#*0~^^L zqVU2;CoH|-a+t;Z@{g43Gk2Yqg^Rt*i^Zk2z1c%fhS|qHh|d_H5%ksb-G=c% z831Gl3A?|qO#qp=BkC(bHY(p+0Rdbe-dzh)io#7=H^sz%f};K6z*#pqi0-G_?gTON z=(&AW7`Q`-8YJ384*--KK9W*yj1S}`L(w4~!?o!@Gz#F(l@v86gAlrj_(O&Xbc39j zANs>2Y(`B2hvOd>x7^wP?8Onx%K+Z2&E|T3LYYuuWzri6ZF}pkeElT`Xz&Z6FNHtu(&^Q03=>z`&{tO%TKtd&Y{`~ryogL|Sp*vrqfh}#Ed zr5ppoYWsLn841z`)(Nwk00U!pK&q#=26dI45AkLMgn2!-vAuA>aX)-8ucW{RJ!2w*ThS3rVOWhk ztv>1SwhvHl2#j&^ykq#0;W=!>1I$=Z#dJ{0#aaz_lVnOo{Qe^MuuMB?DxD!P{71RC zu9{?@%DXeM_wWQiHK*scpxSJJM*G(RHg1Arz{j#-AgHZ{ta+zqCq&n5r(9wAc!D z!hEIXdgqo)Hn5Am_MB>pW?2jqScj>Qo(*}<)ljyWalI*E(U1V$+lQA!d9w+Ig7RI4 z1;z(^tZv!ic_qWu6nba@IbquBZ5qNUanjKQlP1^`J|ye(lD9$V6*UBHWm0*I{4tQ0USE-WP*g*dh8aPg6xLYO z2nc6(@CjE!Gj8_oJro7KY!HkdZ{I{PgeLK&qbW2B5!ITa8B=2($jSy5mp$#<^LwAQ9@dtgQ3>B0W~ z>x}bnrRQnrfWy>)%)i0te1Y?Vl59oy0zxCBNjhFwbjU^;*hxQeg#5A#*=-vgn%!D! zwee>`*Hm^&q6P#ILF~7Z(ns`5d98VWEu{DWC^y==J;SJ@?XE~1OJaBL$M1YPgluE$ z_5v?Y`(@#bl=wLwVx7X6!xL?Rb;RW?Q972sYYQ}8ecS@3T}W?L8>3oc#u9Si)h|7` zpI$b#c}y*K>fIHvJeK6JDGtTkQEI735J(L1gACXJ|4y$Si5}EL%wpZJ6gtY z&G@7Vkqs8#u>8h3iW^i~Fa5!VbMjIwf zA<4Z~-L)-OgwoZ~H?Pn4kFFivB>$jHZxI7x+|1pxhA4AsWE9*Bf>OXJ%?5D_M$#l| zp!uj$K$Pg!T589){@yL_v7^{=ezzz{n|;p)xn*FX5+t#;AzuG^xqOZAe6&KORA|z7Z|Vpx#ScTBQjP#Hy!q(I8W)t&6v~l??ShHK7h8 z@tNTkO-X_?9NN=T%!Nh1e$2HT2_nuHAL!ZqH~;>dv+D#8@vm#RIHUc&et5pxK3Hv$ z^ET>k>9Ma6){{ARANH87%YH5#*m0!+c{agc*U*9u_coL zf>q&p<6`lyOWA98l+Tn3paC+zx&a2S_*(=3%JvZvEpbjNF3CNmh+>(kiCSUASG$eK z1=L7$SzKC&f1@rF;D#u{;;d!z+pR+8t=fIe$gPkJO*Mq;5QIZ`7FzK-FD-lZOG1=7 z{p=zIpH*JbXhOwI9k8_tWNVTWp^KV2 zCOWdQ@#Vt0F6;VT(0*zcS<170XD5_S+yUgiS{OeBnHKP##Hwg(OOL}lXBBWL!8OJ! zmq;tj6N|n=Zyxl)`d<>j(r#!5#suCI7$Var9$3y>;thqxickQ}@Sr&(r^jgN%t8-H zMx(+u38;Mva7b=59tVP=f*%;A)?e;}Z^;X1*O-VW#koHsYc8}C819b^2G4AGEmf^o z=fC1sRucqL)gu5%Cv%;rP5CI}7k5Id8>0zLSr-fC{-ZtoHr@)x9~((%w!P7Guk+v( ziAGs|7HM9^8pD<iZ(_3=l0^M--j(E6L~h9T=<^jL$C2d%a_qmwH&5&zfMKjk zmn@awGb>ieE+NzY5fS<|plN(9%OMu2GJA2sU<^kC2!_pB%<^&r5QZ}9;v1C37}Um+GriN>rQ*V#$f?VNOI z5mYtWsb@PbO*$9{STbLrg{W35BDfp;dJ00Kf8+0%eQP-LO>HR zfftyeynViEY%v!G9_neXm;`A%oD8N@$JE<3|cz_ z=RPLxV5Zp14HAGVC3t1n7Q85q`1hGQo z%`yUtEk2I&_UKO7RW zk@NstU7lMKZT6UEgP~P+lU|oL%i_i-A9H6kkz$Z-b{ox%AZl9?k;2ZyBj7Ve{BWCG z4H=$B%Pa3SYAylXkRnAy&vAbrsSiv%q*~<>vmc=`O9i?vy|SznRhv#3@lrqQoC2k- zm%whiGv&azvxe~QJ~7^{wHhd=nnzU0SuJ_pq#pf}dP9~{Idvd}Sme~R!vm}c({>Vc ztKvsFqo-?pBB1&KT?y#!RBg$d+@A~MjO!!`Avd-Cl8l(#)`$TbgHY+Ab=V1Ph_0Bp zOro1o6TxIS4~8}D6o5b~m{H}942WY}51@w@*fz zJ}Yl?hF$LE&by9QU;ER@1-S{zRK~p#_fT1 z8j`UcP9031fkDzs6Bw!*{!M)50 zQH*X!a|xHUFcyQ=O)V`ok9BsD%wwu=Qw=rJX!U-IFfq1AWb8?7X5!KKctkdUv$#yM$n5)-W?Aw;b0H%q_ z5LwgrM0P}sV;!+6vNKCx=A{NTW4g*EyL-<83q(obgTY#aUpM6ZSdu&f-dYJ=t>ygP zBrkGdRc#7krZeYlC5^HYCv41z<_9vQnoX7)l-A)5tM*s=x;ODXD?vn62f8hrYiJqh z;0@HscS?&EsOURE)EL6}z8}OVd~dR!K9AEx!ZIF-B1y?kgn<9B+c)S6c(EUN-whY4 zK|G<0-?_s8uC&WRB~qGYc04$w?qdqc30Gjsviskmh5a+SIQyPa-Au-#JnCr7$~bW0D{-xT43*h!gsuJaI_$d zA$JUUjda4-xAOh~pmqT{VFDc$e}uuf-ZdSUl_J6UB_05A#=PV0vSgA$9%C30htVL0t zOkgFQ)nYsjXs{a3hKzbGH`$z3)TmJjLwXo2o)?3J9(w`CRsDtg>O7|!%`VPIQY6Ai zoHli4_9$nen1$E@FkVs>vl`H8O;a-xuoby0=6U%;MQA92*wloQOkxhkf-Gt%Dv{w9 zv4OWoCiFFhg(+PPhZzYaBDTs>4a!xO!SLlA{tD(M4pKK{mbQuR9IdFfy^FJ1>Z+D8 z#g-p2!5>3048U%G;&s5=k!PgoS@K6h@ZIY~dT0X-inc`2*+p){LBk@AdT6M*JzeWyTO_a!Z4*s3FCP}@ zh_l}#BU_12h(3=HK1(q_q@W6oQ6STzcs2fv>tP3$j~PoW)v+ihALdX~vr?T*_JJ|-)@w{FH+4wR! zvq&x<%dO*!J={TL-%q=rQ^z#{_8FY0o<~*`$ZZ-+?f}6aWWJCaH;7U}9BwV9h2=g7 z35L*VU8F>8`K?Hb9_0rl-oZ;eBi=_v9`}i8u0Y9Kthn>KO1KiE$y@k}4=5#|pi(-{ zlzUnZ@j5#rAEqYOmJsbV+e8$rk*2N~UJM(pFW#wu5Za5I%8FGmaboDmmqafihyD)A z1Z~rU2B;pfpr;#NiG0Eh@ndf^W-vI4Jk%0w_T}$*HYf!>#Tp3p zvJ(~GGI3G{b`RDYhs81Ob0c-?hIlNs_n?JW3`b0{pSJ?JE+O1<2vE2b8ZbMe2Fo#4}XnD!NeZ(&@D{AVEZ*g#TUI9mJqY%&()iet3mZ=+J z`qVN#j4J|e$NU#iyhG?tpyO8jA-7;Y(==*vb?`$JHfVJxO zxW1U;QA@uQpdn~ygm_{_az`-dEGKo_GE06To4#;18?gEf<`P1NKk!k2CifYF1=-G| z9At17Ua}_daB~yHgOtNhLTXdM(2sk(vRpvfoWzm3*5=$}xenOMU@Il76#+mAPs--9bneAb1CiZ%L%EF{y| zI1jb^i;DAF0B~@`g8wl#LjuL-nVwnK#EwGZY}|3gU1jwGvA$H0y}iqgyiiWRgUHAk zbXkO?Jes(tqK>c!Uh5LOgfc?>O*i@nLZT_GHC8ie;l^mQIJF3ZMt95Cpog{#lpOhq zr44}4?ut}BZ5$L#3UdsJqokw4opnhhQnCHUw*tV$$@dZOUZKbP(hehNs!bz_fwy2V z`sHei2Y_P8c9c&sNFwS}3}j4lQit2T4{(%K1qZNIrDal>iN!&rt#p(^+gJc~qJ;W8 z=LQs$eGGt8;TsFWKM0-Uuuyq#RJ-0~e98LNKHe zgQJPEi3l5rdu_HpEh~RZDx%sOFS@D5ivjr?^07&moB-f$jA3E}ku{HC1aaqUipDsY z<|^O-zPl&;M0No;BefbUV{DBv0lWpW6~-r|#Hh{TDDvM*+f^BUis1@IQiPr!ozl-p zPecNSvS>=+3KEixA~8Dy;hGR?=yieYhV~gMXJm(1OXWhf7doM>$214`u{q2Wd?l6k z7N(kN(d0_1v2F_TghOl&fZ-RPyugvE%87}v8Zn_irmfAOi`vepL_j1~>zm)DwoU+b znFQjh&SJni@Jm#HsJbnWC4c*Cnja3vcD&I2Y}N!wGvP;MhJ?KMabh4P`6!*1Ffl-{ zwMWCi9I+o(J+v+r4m&u1Pd_o?Jlf0$)a!%|E@*(Qx`A&y%{J^0ltk35e6FYiYZhq* zY`#cB0_e?Hrd%_Q{Xuy;sqa#l>R0K;9Ww-hgjaan9aCD|FN4I;yMBL0GXl=SOtae<&UCdV3O)PSz0SL zih;o%SJc$0{dkuC)vD`UQg`l%xm08+0T%33o=a8JG8o(BJ37+)I{@|9#}xCq7b2#Zc-C*T5i(t}h(^)~J77}LGN(Rfw-m{> zVXU}h)GE8@VpB?@B{sF*#tXZZNv63n$F5kXr!jH~PAiq)R_tWBQj=7%kIG#%fPrg3 zd`qi0l;%tvDKrK}eH|ID_$CS!(3LHW zmvYOjAW6gbZLvbgnZUuh9Z(>`h*Nh?0TX^CyR5QL40&K1g0#{OTi+G&e@@g4Zv0o53FK=P1MX5FW>qN8xS@4&nHrZeRn3dpy&SVuwAZ&%>86mlrG z8e&)A6#TC$t`N$!qmv_qA8i5FXUBb$qu)ActdL%HO;nl(RdPgAa;})bGXe-@Z7A;s zlLJiJ!ewVdzHxeT+Qvq#z4vC(+(10bD(6VUjXd%M4n^%_JVlnX9c78m&5;1`SUB z0PCRB+~i%^g(|i%j=&zoA3H=g;?~#oS7?iDw0C&e2?OI4F65qaKEX(a9XO zDl%@fry%Rch^R9H6i7-&Il6|tfR=_TENf7xsN$-I0EXh@x;G8;L3TSC&H=uJB#HCeg>5DBXDR`+?p?DoSV?!gF>MC;-O+2rzkn9<33Te{K z6VY*0Fou*7F>scwn0oILlBCmKBew*Aby0_BpX&!o!IO*yKcNdz^K^iM<_j+WLUw)!{2_B(^-K;^4L4^AjddbiRB& z%T=i|({BlEvKsH*La^ZLagLVF8pt)?qe-AFB3E+}%n$1=^hy?D+# zZAmQ9%e#GQ%sUi-ETv|WDP-w|-Xl+j?@_b!T2*3OR$QQLaAJss_{izug&8(IlUA8Z z3$r%#NEpo)1cIC}tt~oKMIUPVgTq$u)~VHXwVPI)B9tvQC97yBbdZe4wvFn#?wGeu zC`p_T|5+odeG+?}IV5d)_n0U^*4|RNcIWAcIT8n?E%=k}v<$}DnUe+QtY@={EiYgN zBncy=d8IWBhn>^opO2W61eX0N)~#+1#btN@a7qc45VptGt-!+!9cixi;xye0h#atM zA%g_J*aH%d@sl^7HWxC|H_VX`bbC+uwJER&M2?RzD(Ta}D)CT*2)tzka{5xth&Y4z z4N(N~6GlyD3UElJ2;00Qj40vB2gzWG!1Q4wzIGf%pQrSSa=CL$EOzLWAQ`c z3*%aOWyj)9?Q+NP{E5m(MK=dQP?0<13}#9U^8_BR(CBWB|;r+yxvkEJ>aj*P5~ z=O#%y99tRIc3@YQb6QiY2e-7~sj2JC#c7uBG$yuxLea2AWf4d8_cE-3CQbp^@~H92 z|8Lgbr8}!E&GQR)d)bS3xxGB|$ZMU@s!9}9=mo?jfUJr@NCFfAl2WgLpsL%^5)z<5 z7g9n&kX`MmJ@n8M4}0#9;JH2W@(1wHV-Gy>#J}JF+2_2kh{)>lCA&HkN$2dd_p_h- z)qk5yfH9SLCAgHfY;*XYB+~|P1EjWlsS@wcudj&|IkW_Fk*v9c?J|NI+NhkxLqcS? zcdUWHx+GF*t0_z{edlLF{nXhcz$H-P1!~e6V-fIh7SjRHA$c*fZkMN+N4XJj}E44~iD391XH{V|`&0u29? zVcAzfg?nB`J!%n9&KKwDp9@>U{%D=`nF!6&s4qx0lO5iF>YJrh22N|g(d=fEfyC6t zZxAZI$Nx*aQ=YKcX|!YbMYgX72v+j&>pl-)MoXTbi=4Iy3?_`TJCl5($Ij1v zG((g>O~L7{0N>_Q1DubUrHjq(*2`<_&cN>PCQ4N8}QEA42Yq} zEY!?Z$b|K4@M73p=vX_2FO*W&I^&hPEzxQd#t5!}!xWmybSj^8?X0}-2c#5nIdjuP z!OC8hi_Y(h45}BIFHJXy##y-& zKmU+xYHpa!vYmVEX@hHoWzMK$MvntZJ1JfXgm8h{jfimMIr>N=7HIok_Z=x0XU#OT zX9iZ8NWmp=IN863v&twD0oWNmSk7$B82(d;$JN0D)tYuFDY2#=H?vDwtAIO`oIp0? zdOQgcG7P{4WZ;`J{2qKb?@pSQ{Pu7@oM{UXL20;5P5^S z+`a)43lUO2mDk$8ojt5u7EmWmo?QDgPCcm&{=>hHnTljPv|v>^_~eFeiA~U0opbs= zUKzcR`H=pl;{!i{hMY{B`w^t>dtemk3}2ZzIPO+ww> zAG$KvU0?jmdP|YU=|K6~52pj7_HAP3D zyMI{=vdXr-3QV>oroXe-I+}q#jB6~nD(KIWlzMx+zZ9~%CWPF25dYrqXM_DzLiYS; z{`2>94{e6j+Iq)sBsx5y4MH`c0X459j>f=XOePvEKHnX%3dFJwlbZkLiiW4dj5NKQ zI!?ZBWXb}Ak@d}qh@0ubO^wxBmL~j55n>{K9<=Zmk zU4@>?4r&RFkn5+6pC?paO^?Mi>6weTC{uHomTeOQrvC^Mt`Ft_3%jy#Z-zIjmc`S_ z#^?;6+``X|20(D(P%A>O_S_u8D7|<+kP#3AUbXKm$R;KfnFy^ZP?G3W>PBj@ zNC_-`QRVr{$UF^M&`^odq>8j#dqv+&CUg(kfDxBYVMJ@A!+9!KP<3uLM<_B4BPe+h zrj@1mx0iF5)3%y&8Wi=J4}%qek-wN>+UrHt z;{^=fP7cUt3VU4NxdM)*3{z!+8AWg-WmMQ;|XDUXSh)VJ1De5+- zR|SP%yT8hlfym81R!LN@foZG z@l^i`xBzC`1c~8UEc_XB7T=;CE#OTuR*Hx6fpnF^unSGv?{CO*!y{F69W#*4KIDLd zme0*iv#{#9Qa=icn%p~ptR*2=Y9BwByp2Vtiea<})@Q&I>g3E&hE`^KkRWs>97G+d zkEqnBX(2+`LQ))|C|!wV8q`N6A^eSk>!MdBRFr-3NK#w;;WYn*l*4?PSK$u0$*{&W z93N7F`&LoS2_qJ&2Jf#AY<_^86b(eW`nH=Oxexb7UO^9<@JsVD z!6^gDl~Lmp0x{w?&V3Nb%8# z){jU-_+9%Qg>E9(a|LvgJeD8#IgWh}>X25boDga9KFNiJ5#V6?CwkRDRFh+%*79{R zt$#6Dclix3!EFT_3&yYwQ4Pqe6L0YYA!`3Mv zYNdgb!4?vSMbpLzsr#e}-QxTXiXD}SBCMK}^p;Jx1m|B|7c zb-}{)Wfh)bdw#DG~{MLSl9}df5Pk%6HqPERkKjJgA0&o%V1^#Df`_r2V~^XEl?zR}|v3iJdyT_d+;DtUYybk7Q1 zxZmV~+H-x^I5%Yuubrb5hh^%1awyadt*+NGyFuW}?FQ;8k*UB3y3Y`@kYQg`tSce0 z_i!mJn+3luC>mp#>JT!wcY!R;o~n(Hm*qPpasnCrWzLT()!V^Y0DgUVUaSTxVae0JO@BNWFq%jsBqdvT=z7&b z#ohMwi{SI9m9m#QvrM6bgMOYqqt_yUXZTXVod|(DQB|PDAz83`M@-W(fn+VTJxKZA zN*Xrb&STCsXqHd1IULQgL{(-g#8I-S?KD62krn3v8n9sB*0Wq8+~60vrmxM?4B5hA zt65^ClX|xXqU!eWVfMR??Td6{;g&3g$bt`hD{)=qWh9>#mqf47PhM-EvFg__mEy5u z7Ky5enkXP^6hN~ej&M=-UZ4sd@X?{wA~!l9TEp{iD@Kd>;dUWcHH}}r6o|MIFQEt$ zb)w4Yl?)KGt;fa-U(TJk%=ZTWD4~VrVbo!IiPzh`Nws4(IF)`+&>+_tcbuxKpJx;! zEp#eGAS0IMW4Qs`IOk7x<$-Rtz5V-gV^wMi(br1fMg5Em368jL%JT-!CvdnT1mt3% zTLXB0q-lmPVaB{RZGpG&w?MZ1BehrCr7Y?@w5N6p$3YJUYyl|0`}zFP=_THs;bBPJ zKKbn^MTTc2phgF3N)Wi(mvktC2WMgK-ro#e!op(vvvOE#ze)CSrFo z5dv^*apVIS+IQH%;k8yYiKE>Ms zu_b3qxj?pnAl@(6J;qbq|IOZ+}+4gZ_8O&DlP zKWly!xOa{qE76~?rqxQ3S)AbrbuoU`Z{T!Cx~WH?L|_Nah-yUDd)*JErnXEXL*mt+ z4jvH;$7Qmmfz$hoAs74G$^gs9;)ojVh@>zZ?Rx)W!weT_ppr9)%>Bab-BU?lM5Ao= z1w?EZJ7WO{a8rYMjv#B=;(!Awh)Ff9B^T!GsNkVx#wn^8V!4auO#1AQ(Rhi|Oe(C) zbmVQ1oXnh^io-OgVtoZAx;;7LLYdNG(ofPG1EAD(1%3^j{b>W&0gPB|%~~vnuD=i zOEB-#w$6UfMMrQU!=X@7IYQN)5UY{fl>4ZEqphG**~HDr79Yl5w>$q@`k5PBYTeS> zA}|=;!`^5b$YoK06;-*%{27sUbbvz`(MW!X`g-9CNIT_e)L0&ur^`Bwq&Vo?P#tYC z%ogZyiG8xpP~-6YT1A5z{0cX=G{OC)aL9v8!LKY*pr6#x8p#I~Exb*WdbG|KWiK~c z^t<9fBE6ZB{b90GvJmzLl;bbas};P=aD)tZQSl7m!qEAJAyV&X%IaE*HE>!hJr}-Q zva=!lFz}Els6{Veh(j{_qBR7Fd2!0)l$(Ih+?7d;=)0yO&u0GdN654#vj#T61YU<6 zC3^{O3SLbMN_<%rOZ++ATL5dh--r<*98AtvO%3e<&3behvQaCgMD{~oMxt=W zMk0M6IcPk+Z)522T2z(9^BP%Gd2&eJjygQxRS~H!ia|fw=kNe;Li^s3Pli((o?LVJ8`b?HelCwE!c`KkCss${v_d~f=UO0=J$Vx-v# zm4#`LH4LNF3R_IT2zoA4t}F0fh7E~Dsoh|w+j=v4p2Drk8`L=zQQEj{>4}C9oM=cc z$1$9`sh1%S9;p5vf7Op)RR zBjYJ9Fp_&Q$K)|Lq*R!ih=Yc~5eBRHB)X>Ho;I*AHc1#Dsk)W~@U48%{Z*UOVQ&M! zDnp7VM#~_8LqZ$PWI5j~5)uj8oD?Mim)$nA0~39NpNvP3DkJhU#rUEZt<@vKBwJ~< z4w_O6W}S(UkeG)lO<73V6d$;{h&Y^~-hyNF$quHkm1vCVVez*3reHXD4UfT>(NZpO z>6dl^>*ZFh##76iS)99jy7P%Yi=7_6d;cA^grhyNCrSw5g%U8rlt{=t>?4Mby*W1} zV%S0j$Z|ccHCOzt)J47}`Md6ThM0nVBG%^%uq_Zic2!*}Tg=w*ye*tDu6UxRS~|R@ zP~(iPrC`_rU~Bxz{k3Emb%6e_E#m^GJ+y)@((7E6Hd9ab{l!wi5cEYBvqO0BVNP0rW&m^hv13 zDehG5a}e)ph$zQ~h=-#0<@30+(wb#ZuOytdo4yrOA>MW)C4wInXoVZ5V}tyb>!%DR zF{R450jq}Zn*To4>Di`buyH-Il1&SESl)#O1jz(Fz$GjZ%GBw3Ws61hb=}cX(W7F( z2ei(65r4rvLZ_`ac5IzPBi?@g$W7 zSGh!h?!oF$zlC{Pda6Wbl~=Y`(c`V7LUpe za<{=#)@`gpM*_s;itKx>`4vbm1CG#h+F3MPRi5W+m0|K$j&ar)_S!Qa5j4;+y_esysC1+u;Esp5jP`4A|-ts(y9iu)YSjE};F$pA`yJ5cL!O<&P;qG*JY7fmQrKNb} zlESwUaw_00<)&OFeP2^f7GLGCK)@1pH)%0UBh_6xw=>Ia+^ zhlN8=m+T{d(~fCe=2etTd~en89Az z{{RAx+pF5WeC5s`IFr8R$R%ELs6yI?DbGmSs9Vj8%!Lfh6kS`oPcA2c-V*Tg(%)o@ zHM&hLr+AuGw{~Pj{5dH#WL{?<*kEHU$sGGNFfRfi3K>W;ii)IpS|0a7enX9^9Ghsh*A z(F=-hTjO7^@$%|hj{;$~H|JywBR2ah!k2v!3!zGyzRsoBAQ3Ph;(&7C08OLKuTp%( zJaRVI3}H2ykEVo_L^a<*JdjPOh#GE&En3aiy9%aKUYr~}Eyxd8Mf>u!DpjCQt62Cw zDs~b@-L0yTH`-srrwctA3fr+0I1RiD4g&{ifu&(HId!-5vlE)RPrMsd;%h(nzSc!F zYODp8mDpczRrn{JgMhU^rPDBrx0s;_FFLMSv$7>`h96^tb zsYVMLi+l}5DsPov6dQ$9rmwn*&fs3uDE)ZE@ep6EJ-hDUjs>^>?7Ah5c1YoZ zy(Lz&nr!+Z4n{T zXh<_1o{<2XF(BvI9<;RxmtoPqOCsk9p9kLdYvBvL0Yg-q6{LQuq6gGKeROf&a1vmv z=d`8)4|(s1A@^*S`h7b=7ZI9s_l& zH&_E|vdRMjDoq|p{zC^nHa!?-<&~(f;!BZ7#}bG`qh*+sW)T6^dtO^2NDF0?xBy}L zE+UvBf@s#cbbgrB+!HmucyTyYU35qeQ;mBr&#eofT~%N?!RH*~Y0JZ@96L5Y>%|b@x^{U(e@64Ks;BVaWppS}v7N92Kt&@853dyWP0ofBq{@S;1(d7~YXWA#GQZF1 z%BPZFdQA7Bqp{Zh4l4s{DvBEvWcOAkWIPfv%t_X$T}!GLK%Wm_=sN#oSi)0Y{7t>x zyV=^T3^r6z^2QPY1*bbJZ0+~OmYbyq)_Q5EA>IbNP^UDGrhK0FhbY1WfgFDND&=Mw zn_Gf<);*NmKi2CRIty+CD6((j)GQss%L&)!K~+Sz2z}c*AxUF)b6_^}Z;pjt+J3gx zCPF_)*Mbk;>lPg$eej3n=Sy#%J^234(ob7I{OO1FzkYtYv3vM%=?@PlyB|0I`sw5S z&6hXdeEnws&eM}yAK#N&_`_end;Id{FHcubA1-Z-zCQf${KM1d+vm4$um9=x*@NB9 zk9Ys@Zuh69)7_U>CyQr)cX$2at+yZc4i2tu-JYDSe%d_bA6M`0KEHeNZuROPN5=@zU1r z#_HphSEt+ii#s2VHb;NF_IEemP9~f0m!AFY=x_hH`25x=v#(dzSBA0J)AOI+a$@)S z7hilaTC>~$T9#uw#1t<`>WJRhW-%N%$qUIJz_mL(%{}M^dqe-51n?4EppO95mszyE zd{F0L<)d%e&lXDSvWG9H+&Tx#_l@#;S+C&>R919vVU=2&9w)%T} zO~NvY&6L0G3aQ>BbPK*}xHT#t-|N=5o^RJEtbd}sV4x7b?5?^`C+s6YiS zPnjPMnIOU*Y`@SY9B(j?U72i7R=fEX6{!gg2luV|N zouBvw>Py?~)#b@@^o0R7>}9DKqBYRDbg?{eQU8hS=v(9c(S??k-ErQ^`m%E@N%Aj3Lulo z2?d*pqpq2*wheYV*b}|yowTmv73HA+$-(=F4d~oOzb!3|zfsFm6&Brd$Yu#Hbqs;N z|Mn|<2Zz*Ny2=gql$e5B@`-3-cJ}ubkqCnPnNRDw!P{QSI zHgF|+6CaQ|f`NEIPCg>b0AZ2~s@LO_jrB+ByOjo!JI}8YkZmZW1yXy-{&HJQ$hJZC zu&FmEu$W_YX)`+DEcGV^e|WLc8uMOshRC>ccc4;#-yUAS5B6m7Ly(5Ng3;+68OHwx z!+3k(6Ia;OdN+Bzv9*0~NN$%+#=Y~}S|&Z_M=C`|_9BO2wEI_I9h{mMvUj?pMmxIH zsR2!%KU%_1j*}T{mQOBkJl%Y_4*Aj%8Qy6ZSbk~^ zVxY}((J?;aK36O2HkUQ+Na>FiJ5QbR;R0}4uw)Vc+NbyX^w``g#J|_CU}`W#wRV{h z43!sfU2XweJQ#mw*U4xYY7))i$@U@P5B&P*UU%cp?W;HM+~%u*1HoaW6?KPG-??_} zm)qB_EnL6tuC8BOy!p%5i+B8S78avRm%voZ`}n}14PEK3-(GlyKOUzC|G)af>8uV! zFZDa|oxYAmrw{0*cfS9$@3Ou^iuDTvXfrB3EYj=e{e_4suwk$84;HID zh3|lZJh#a&5c#4o+-gAQHV?V(@ulvI=c`*UyN64YZQ5~xKHM)HF1iOx3%hJBQiWnG zINR}?tA9Gl%!sS${85SkfNoTwpA(CTYD-dA*vU!}OEK>Z*ik^>H|dkIa$=IALR;cl z)r*wQKo%uye89k<(GDqY_^HvOvhchb`Ow?~txOBN5z|1AbjqV!Etu#s{Q{nN6Z|~k=SST- z|GnNlI=$!PZ=#QmMnQ*kb830Y6LdY0eE*$#P=z>GO?M-o6IHYtWV7q%=ZC@t6^zsa z5DZ~xRT6yjDTVguC<-dfZ$G^k$Y+Tp0R})qM}J;3_CqX%G8mB8B)aw%=HJQbE;?61 zKG>oJ!|ZDBf}r@iyoyTCs*mg1AXGEzx5_#^(wvUHQjHccU1a(}J22XbqtK$Xn~Phj zC*WF){YKl)+Avia>yPa2M_#2mCs2Ur6&UP5oTH3Se=orA2H>;|uTL+L# zze8g`d9TpO>GOCqST{75?GcP0duH<3eH?cYi~Ng&RxnPp{t@U%PSh`nBuh#p`!(+`Nwm zcZ|mI4KOr|MHlW;bSpC6k+?hEKV|jN-(3HCX>-d@T)%yD@y6}NJNJL0#(8}HR%-kv zR8ott?4uXs$*$G)$K#uA-x&So39=o?>+wDbF%lT0Ajf-i{s|P{*0UpVKuK^+3PQMS zHJ@=mm1i6q!{1Xt_+k9|kSg*#ywD zr#6kX!lyw?PKEMVUt?clGg_-I3Wk`VNuiOo$O$n_ql)Nwx~-s-qZ7ncti02|^;Z8^ zZZ%DCbRSj4Osi#Ym_xAd_){W!uRkQMo$QJk3ESORfilkb4w$O5PyC0qHIV}AD6@Fi zrKzT@f!dU$zh;(@u!D^>#jEH)mOn*Knxn6=$hf>_)5AJAL-MO`tSrKAP!MjcOuC;J z$Jee8zN(g`B{cFWx&LVUNmiYZ~D zEIceGc&Tq(Kfm|@*G`TNk0SpVa#-;ORoqZWu+A%=CO-g*W?&F^pb4-EZhc}zvDf`k zzWRtizeiR?T@0Mo;AJT3)>%P)54Shb-Q(8A+3RM7p>&CDhqX@BQ9$TGyqPm zS_|3)NFl{GFC;V-cYvK4HLfcE>ToMtHcwOCPsHQr!54l67DzpG8Eprw?!JTTu-7Dy zU?DAl08{XGDt@Pv9DF>=mZCpHnB<;$9ChI~TB5ZeTH+Klua68165i=)8v?KB$`Sxc=sRw!H1`EDK6hUt&$SncXeHXJy6ByLK@=4}v zr{`pnfV;3Pb7{+2p)~v02Y+&8Mk(Vq&9>m(s(x+^Bnl?o!y|QiUxNAXAs7^gm7OD` zempm>1u?P*n7Bn^A<@AnDQZO%*TJy`l))Amuyi~VMQhv z(2V$|Xw~(xSJn!fe1G-{23WD@-pWCt(|+vzEL};Hcz4*#aL~B%qcbU;EMCJL1Qw`> znJ24u>lpxlV!KiFw2w2Tk9!O_+)>=X)0D(Y6&(g(*@i7#4jlq>NA6FzCKoLjv~dB! z1)$};4FbMX%?&Kk9?e(TT;5D`c)*nGN9>mR?abS{bB;+MyZ`E%>9~B0{ zQFVrA6;QF8Gnb1ux|eI2BP&y%pq`b1sXz3@ldT2HG6rm4_i|q5pG*112q>G}z~g@JJMy zH^+X)RUR=R8dfaI`RBRix6s6hnh$PjpE+U`UOqWiaZ&!GT2;^-6$5{ZB1(Qh>pJWS zyx8WF!hum^RW4z3$u29w4tq~Yn%r-)x>gkZjVR(5qwc4qU1-fRdNHdRQuVP;r}S!Jjt<<`l{d-ZW&<(GuXAbly(k~ zSKm8^Rn_eI8?POo*o)Of^42vc$`0fGvY1fn7mI^UgsFH{tsT7ps>)T7)Ya8p6(Iq&J|5;yp{<51aukn|)hil8- z^R>ydr6+5Dm&dv#BBjsQwzm0IXQ|WLHV>~pU0Yw;g8nXD+GbiAIkJS4=(^l3F5I+@s)ef{{#xMk1Oz-(@!Y>d$f4kXo%E0HQ86lFl%#y?onc!kM zPVI8SlS4y^O6wtb;9vb9Xrz3Q`bBfsfVxd;4VerJ& ztx%qh6Yl=s?-m+dVyzK=K|QSKf3^!uX8*!LJf<0uU0dd4M(F#pTb%q$%z(FqI{Xs+oMQ5bnJIEYsi+=By~TNzKwtQ!W^Hr8odQiT=$=>#R4^^{Z0 z5-HlLbM7ZKaOuHhduwTVdvdQ^3P6VZ84_!$r+}7)8>yiY;T#Ix0C--_xqD!KIH_&kENxq53^5xaQp=3@Q$Yc2(fT)TGX=EALO*RCbF+I7!2 z)|Sa3xN(he(Bk6P3pZ|Gzw>)gcIk(iU*7uq)(tfMY;ASn>Czew{KIVb{s}dLXXCvO z<6~IH7;TbUy9gA@%Q6r`9FYjrJ7(`QdL2o}B#_YmtjL0!+u6$y0)r)#knE#Q15=rn zTdR52{K;PoPeN)>DTO##Xm~n$57wglw&J%6-)jowdUSHT7oC9IkTP_2Y30cp{5xj7 z>X&~&)!w2s3b1uRE!Yg;K}NhZu{}l`u7uF;y)Mg zH#qY7fBi$Z7At@M10n7|hc_4G?o&|tuzO%CTmUj@f~K1$jYac$`yaaJ_N62)bZ-X1#d^_uLJ$E}5y^#Wj0+B0>uJij|Dk&b zLY#f}vedz(wa-<8Sz@b~H&Msl=4Be8yfPdA?7ktcG09$Mrz@vmA`mx z@%G})#cTKJxU;^W0-~X+@VXjOpU)8WhA$`aHio~D~K^S-x z=&8`xM-#1b+s+HbA@~{70J#ZB^)0KB%yds@G7%47TVI+i(K^eWmD&RCUYIY{ulen_#Auqa zrRR4v<8yalN*Ob3TV1N$iMWSjwjk&A9E<@*?_p$X_6XNqDx9zdqG=D_bC24fB%;KVJ5j)aWkDuVG4BMs+t+4AB=6>hBNu9edf7@ z>bV+Tsi|R@-YI-)7ofo!gEL8{QTu6)Nl^UyMfLF+FQbdUZlBqwhV9thU`idq@;l5CtPHO!>vvheQ$mYQEbOr%dp5X(J zA?b-M(?{?)J`_RzovsZ1jri^->C&!|`*P#iV7R6Sn?N8}NxH<5xwY|Nb!)qO`fByb zi>38dK`TCQE^U3kw*F}JWMf-w@K@g>;OrLDC`Yb%I~t<{ImCaWu>(di?%``;vz77*n?IUQ+kC-3p3;x{;W z^<}q-KYPM>O+2%(o7Mw~(tl8@g;uzGq8iyC-87^r)VIVu2w+MJy`k(sndN26D^PT%qOAMPbmE8 zQ@T}HC-{py6j^7LpI@yq4+(+iS~WNy_sM8(r}_#`;l!GjxSq%h{1&9Z0;wj4^Y{^s z5d;gd0?db{5fi$QzcfW9-v?kP$9Sr@;2vp;a{AaCxy6mJ>%y$Mn7ETkKBP5n>I~aJ zd3YsXW>rN)RJDEvsV|i0M9xq{81;(G*plOzS07Grjl^#T`;b{T|4#4HjQ37H(-#i) zUOz6^&K*nSUtI$aZd=YNI6jvhlCmp0Hx%wI`( z`zo@1^n{$M1%d`>g8O^-y1!UqyZ5@gH?Cg0d6j_d^_%x@+`V`GR`(b5C|lirv9a|% zp4O8&^n&hN?9?lK}5(T3B4>Q;Xs|wv8UxxP;SzYY? zvOEM(T*m#yrNC#}{*1(D90pWN;xLYn{j+<6YIvo42KU{^R}LF|u(l0!#@(v109*Ky zwLyHXhlXl&wuECX)pmRmvg7R-?`0QMKoDVr`JJg>Lxc{n4O`;9tkl2T+zovTA9eUf za!~Xhd3y!JdDGy*xXI?yGA7Fbb!5@BvYX!CFwWceDXRzB zT_G3Y8x9Lkm9Nqj@rWMr*Y7HRjGB(YhTK!8J2w2(~$<`SR*-p1eC%?Q!L>h3Z) zgU=RZ(4~zk1t3xCqINWQ_byYN>_C-|@1Cg3wv2i%gMBB=T_o3F%Oa$#!Q|YxSI0-j z-Fkhg&aiK=L1z&=8!m{?8#8!|{)tXjI{Y+JI}qnIyL2auT@HHE4B==$$KZ0bl7t7| zKQ@_CqqO>ldqnG~yQ1%-xx_#^>$ID@O#HE>>I5=Zy6JB&&;Bqbr0{`qoc@;~oy!^C z6jHkU8@WboaJfG*$?n}{Xb6@xHRcKC)jsNIEk_Gs0mEu{g&cJlW`d_*c>{nLPsQO0 zFG3|rK^|&uZS$0+kaEDbXA~$M$gg@9%VRPf9MpfY2rAs=812!&!ma!rL0;_kfKDYNL3h|wM;q* z@<2F!6r~1pm2eUR$wMqW0Sd(eT%`Xxnrc?6Ei}q`1j;34w!w)l>|re=rq+L7KXhSB zTRtc}5W4E2a4X^lJX0RVNdTB3M{}Leb~1~gT~MRWp6|j65Pw-{hV!G}Tv!iYRkcrM z+|=TRCBA!t;|484I9y0OYQ!TUsX5Y5_fWRlt^1 zB;b&$!}}0B)5nuOU%^0{0b(8FUz#oe5e0TDeYK4qj zzl>a@FC1P!7$jMh*-%I$kii;|P4?mhXM>6q8Qw@8;X_^vkvbHk!Mh%vKaEP7TsE6K ztDF$r+ei;c6BoVH3zt#(Cc?|kTe(8dasBR{>jQ@zA_88;G|`Z}FCzoyOA%=3J_#llc>;P z3XOe(hU60CrpBdyKzoT&sD`)5pN`T!-Fwz~^ZsnuIvVT#r~UES!Efw6x3xgeY52Et zF$Wkfc*b}Okb2)zJ@2(O^(6E)ga}npQAMrfFM@t9YNLKGbC_=a=bcygLDE-8=Mwak z5F4iwe-=KVGkvxhnJ6Oo)mzkmAa@a@*#P&VV)6SxVCL_ZU^dg6DCe2gu2>L8@EH9f zJhQ5Dojrpv0Q8iO7g+}Xk{)2hClv>UoSG!K4%`E?9Dx{yCP@I~Ih*P_;80#Kz_|W! z9n+%^c+@qz40o_C+g|k7NUB-}>`M-;vxQIJLzCj|pJxkkQ0C1yXLqh4C*=wa;NAT7 z#XDn)tgqb~-@QiU`MA4!es)U5%*pZ91khexoo>6-DtN?T+dv)DKli8V%YVy<5D%GI zsU_GNKfwnyS$I;n+T`+pX)}pQW=V(b$YLaw+2j^DMvk=t$7?acdl1%*&CBSl0I`8-4!t`nYW-8Y<)qy%?-(-E8J2&mK&ciGNU_QU|~Y&Xme%z6^9| zLaUnJ%&o1jtp3m*O*8PE(R1vSk07eI2b=-R`s$0xZv!R@6y$#dVj3qC+rq6h-iyhK znjg+fk0Mq?$X6r=7JgJ?qS+XG=M`l~2n||AX=GA83=^h~3DDE@Brq+x!MA#KYv!N5 zB3@tfiKyZYBL5hue;c-eg3v9<4&;%Q{v4Ej>7NAWEeQQVA|xF(ihnLrLV=l8_MpLx z%20dR~=&$;4oqsTA*;`w$7LR_SW(DE;4o!{+MN+Q!P7 zi9;{DXPYZary<7{8eW-*fjjYwk@Ws)k*9SCxlv~Ghf!meIi4E-uFmEgt6Kl)(!d|ViQ#s`Q>R?6ZTGA$CF|Y|E(~#5MJn_uaPxmSB z9HU*a#go!_L^$lD^CK!UWhQR8WNO<1EIt0v9^dRa!RdZnV&HN#z!&@?`w5pGUD{SJ zif7`-2Ga-6UTOnwuRd9wEN^V$PQC;OL@VpQhY`-R8~%NtX_T){)C;GeBt@CT5e~k4 zUi0JBd|%;ug6W;G&wqd~>!j)>8f3D-(&*AkxUQk+d64iv#^5Q@ zYD~JQegy~_MSp>-Qy1@dNCJu%Mwc3UU1~QLGM>;<%Z3U4-#!q3v6`=4SP7!q;ln3u zj~;Imu-aZ_d&aA1nto}5qlDHD-|c@&` z{P-{iOtY(-q5NZ$z_0Pt+pIjQEET1fti*jbY1l_H0ra2L%&^A`m)&ml$<1cZ}+!O z`d#XX&$?B31xWpX;L#hsX?@Rh7*Au1FVY2(+Jlo!W zLM8C(CJhfb!Da$x-&RBw`#vZ*b5G9S)EuC&A^fSfbag-kbM{96`;uNQJCmnMIia!izCyP;%)%-_sYQ zy~hGk$zUi^$Hp1|*7N}|K(;&$yTIZ5-5Y7a=_kv#uDW?tr!1(~xEeNO*Cis0y#GlG zP7xikH2fIRctZ9f#Gi@ImvY`{_$h9UZr2pN{z>y3p<4 z=MrISGc4)XtAZq+{qgxOH3zVdXvb43`3&VReFuy0zT3g!H2>51C;s>T&hG9R1@UAQ zjPZ3fc}XT4+qPLl1v4O-*q#I!FTs^*_?Wb_cECTL7g$dz90 zo-93EUw$0cPwd4A0(U}|KFk<)`Q|>ulgF=i`n^O;e6h5(PR>Y$9-23Mbg6L(HmQFT zq@l#0rc&fE_J;5)LWLLf6oo2y72n0#=+aa@1pl4&DAfUU7Bfo@t)XXry0r3*J^%vI z5h=Lz@3D5f)zj!=*WM@WNWTHUmZ_2fB098ka|Y+ zbZLF<;i@VK;a$cZvU^wtDZP6;hp+FW8!v!n_OpC7CiCkeJJsu=7kx21Sx4w5`9{_#WzX<8Y%(^D~l! zejj8LwJWUvg$_=tYjol_F0zVY{#Nf#=@fPRL`7>&?O}4%%y~k*B&-z)3nUx{Q!cyS zH{IxQmGLaFF)?&fdNGqh!o03@4@_v{aLcGk6x^IBlXV#rcLl-w7`oZad=dCz3d8eE zeU|Xy744|8(}&o>=)hzlpiyI!t~`2c=JkIq%t?yIX%?$|=36L1V4 z!AHuFuI7vVxjZQ_SA}n$3gbKI?Tz*I&&@ZZP?M;>=ySQQ<8JjF0}`{fflV$pB<=y! zh>y5Bl4o=4_V*7ki86?c3uUTvrtK6O|Oh_giQE5Sw4|IIvlK5crzAuHD60UF4=ng+`y+Fvy zbhnC*U=~%y1MFh|%>kKARnJr$nfnOY4*HZ}h1VgqlGc#3_Oz~}t(5M9=jwCB`lLfm zrRgC>JDMQ>4|EiA3K&ra^Hsw%Z=6j?ZWVBf?G*8tmN;Z)TxoKt=a$G%x~rHYN%3oV z;ONr+D{_vby?BsPOLB(6eVy3n#dCO5=tjnm&~L~~C)9`X@NRE$cklkYoy9-C-5Wo9 zw!GQj)!al3P~n^-u56SmJ70Q=Y-X418%s+;&-y$miO>c69OUJ!^7WRaR&-h}7%dSU zAP(~>F_Yu-VgLLTmFNs9%8}G$a-a)0Q7X1)APHLM%hOjYK!uE)`J-2R`PcnduXkoU z_6&#V-ywZ9=i(Zp*Uo_lb+iWex`7fhSD;Kdul8-6=XfZ44yuCPA9V(ETC0e7Ft#^P zL{=2XhVLGnJ5_RyBCM-XS;wod~j^f6)e!r!8 zu!seMR&AP3W|ZneK9twrYfV`!X(NPTl4H^qfyKkQ%_X5t64X&He^X;{6q>7K(E_#e zps5zTd$MjqHhvfcLk)sqMBDB&QqW9Q(g5n4N&3r%>8Wr%s&TS&FUG?Zk*P8?sV}>S7{ICsnG8I>aLA6%Kc-#G35` z5@NdRcSxHv<~d;_U|rU_e(lD!q$u!O3X}OrOB?V12VLqkD9VJblCk!kZOfzYY##8RPe8 zP{E9-WTu6tA*m>ej<-j@(R~)!Dqm-I=)4II&wbO5>>QWv3qOKQy9`sb%bcE}bfw|n!cBg2_xhb1<_~3Z+u(U5 zM~Gx=yChxi`b)QXb#PsCxj;5;xj6?VGzO+s1|E>T0 z!hdpizxBt?zy88s{GZ=`sy)#8l>hndC;O-JM4qev`t{SplZ(?Q@~`XDpD*sD|FVDY z-|qjn-swKud;i8~PYrLo(67Jo`P1D=t=@kB`5XMYeZBq9jqd6{{LA52zIE{%{;91s zJazTIsyBZ7>EC+e&p$c)^gsSo|75jTo|%47JS5CmKGaZI>m!&bj!KBZQ@J^zc{|Cq z$R-cLF^I2YBO3aTQi!+Rnj`a}XmH%d{;~K0&KYw}t9pFg{rzA4E9$7wL|gk1t4J%i zRkP`kl(mWr+7>41q)k5zo*095gZpG9ypd}+JZ>M+STQ>g^8L~{!VGBVcI|oLn%J2BMOyO zt4fsHowW6IID-#RSGtY9Gr&a!q&4TvQO~;T_=OkI+}sFpDSQmo+lyWZWUHANM~D;c z`rZEC!Z&s^)Hpy{bKfjm4T+EXeuZR#AYa){<*;>gKkd9R%VRtTm@gmE3iG4dM(@g& zOCoYD8b!$uxQDGy`^Bng02v!_Qj=!70PVV|`@mn3s&PVUDs|IlA_0-VG8e&|DZ8oq zb8dI14OTjPxBrnCBb*pjxw7xj^tchsl-C^|0Q5u;8X*>Z_rIu|>0QZ0Ju@Dgayt5l zz7TV6BxwLW90cv}x)L6D4o$iL@b(CxhV5Ir?RrVd<7j{m$@hWnkcdd@9-D}YoPB>T z=f1r%RD`%mX)QXf`EUon;IySMjvu+i!V#Kak(@mqJ&s>T5iWwNwMJw z7r1E7cI$H4QAUL%42xlpo=NGCU1vGxa#^lymwgc*jHrQ4!?~$ZzS(uRy6$$@eNA8B zuDfgT`*o@=7Q5>=sJ-YYytsaQ)Ls7?&54XVq-wW#ox*2iakqH0TfEgR-tHE^?iTNK zi+3sR?QUF$nnvA?8{LhY-Hlt_joaOguW3fy-MHJ`yw=^k-rZd6ZrTcfd zZhqa}yff-<-tBH(>uz1|ZY_4VZgjV9cDHVIw{Ca0zV2?_>2BTaZeQzeU+-=&cDHYI zw{Ohy5BlAVvVrWjm#NYlLwLs^o@Pd8NqH(jaURGga14ELM(+dnr?%7RG#@75oXEfiG z!J|`$^FU5ZVgD(EV7Da$l0X#^1?Vi#dzbpSNR6W2&xP@~6q8wkC;=zd4u^mRO4V-< z_DJr^U$hpJHz#i{iS?(2T}nUWEa6_rt53`$mZfk3Zb;|(U#@(*@+aC=;}F3BK`1A> z29PoJV3cYATGw!CSY{2m0~qgft;w(p*IlgcUHSL*uSS0bTlp)!%y3QY+;Am**3^A{ zK+6>+ypru!tYJwQR}HxOh#e|4iN;7L)38yP?QX=WIQsknLY>>0KFR&Hg1X>KGfZKA z;EAHhj-2?u&Uay-Rg^01Sc*-_BNN`_etHA)B1%;Wt zs8t0Cx2-}w!=g#wsXUPqSIphUPh=t-)}TdwoR``K)TvfW%Uy`=S^;h+t=vl_DEtux zQ587#>B%n$uDC(KP>{|PUyTnnDdaP93d9FnUbPS&??Q!%Lsv6&r;T9=@^}s6!9+CI z!zz$g6)9%88$Jg_FrTt(;mD1Yag95?O_85f92-c$q{k>zM5e%U7s|{I3Mc3K6a&(S z%ml6L1TvZWesW>1B#L1##ue>3b-Kw6stpQ7dd{?tdxSf) z^`>W`=W))fNc3SFGE(sSy%yh>{|P-gH@|s`YnJt$kO^1;CYXZ?iM}N7^2`0$9*;1` z{E9grY+4oVDmVGRZ(u<5am|0)Z`N#qn+j5Hq1rZE(IZ1aWJeD>AdCQUw1E`tk(+TV z{lsqpgAVNad7i%kRql*6FmGp`PqLI$lF7yX9oqO%eiv|V8XP!Y7iKrAkV^Ns(wsT`w{%eVkV0RDs3V3>DkF_8Gotsfx=q=dSC?3q)-V#1m%tb z{SPiyH3+Q?e@3B%itz#c36|%b3%uoeI%J5a zgpT((J$m&Skh}}JHQ!tp3Y&8+*|!+Ymi08nwz+iWc38Z>2d4PpO3W&lDsn4W2eWx zagUFXfPE5VuueAWD>y(5n?pB*?;lKyXQg#MRz_f7%$>Gxa-<6 z>fN-}7v_-3RH$+ra4#qPp+8fj z0m5L4$`iCYUcJSF1fSI{TH|5eY%Y~y^K5qp#C$5JKi!XKa)|~Wj1Fys(9&aB(*sPx zmj@)sXT+%+j5C6S0ai?Cc8%}({##~4_p4y!QkZ~5fUBlVkO~ag5o8;r$;QA%V!f@$ zCw;EO3_hDDF7DS=V!!GB6%R-fAxocPBMvy6J+Fhb08K|M4F+<~s5eZgRT@m#BE(3`XLN+>YTRu)yCdA6-Pytwt4lfAjy1}LG$E$0Tr`_6Q{qia>4yKY~e&`^OyuLtzZTV6GzuKq?ATbdU<+E|&m$~V8M8_)i7q5jjpxKacC z!XO8OaH_@isP&CYfAatphJQRXZ*$t+H07z>_|WC_f)FYfvv(YM~mxo>M|0 zKFZ}RB=Iw1j0F`aY)EU_M)8Au2wH&kM$H0;`BT4LeuaCT!d^opE@R>c9&is)rg*ui zl7<2La^e|6oT0*eABLEZn|%Md6b%>U3*`XuQ^8Lbl&BS&Xa+J1sC`!xqyJ(dbb%HQ+DxQhaS+W+%}mcx>c(;V}obdK!7NK7luk|1?ey$vRL&8U0C!k zM3JDaOfV?ufKt|9L)#S)g2v}VAPp{Y)NyP3Kn*mWp2&24*3wKRy{Ma8JI=vgFw4va z6l$IH=&f3@CU_b16K}_>Pv53rMO=Ndn|AwyDm52fYEGTKc5F@s{HMi#O4DlWnY*w5 z6Hmhylxa3fsi}D=cG<;&*3U~&5K`JD#o`l>7q=Yve3~jX?T)Y(R$`i}g};Kl5OJ_8 z+G_QUZ+TP-mGc;W>x(qnzpqa|ffixycFch=(qi182bI!TH{v$m%ZGfH&F3 zLxx9cBk~7*qep2suB?aGoj%c2_;>$2tzF8&Cxe4o?c&J`VZ(9YYFK{gO$&&hKP+!8 z{2f3tv}i6TF12VP3n6&6?R+l&2QMs!S{fuQ1BB?u-RckK@PcF`(#=;$>YN{+z1k}? zoe>@#JzA0K^u!_d)LpKpFLNz9xvuw-&2%IwT8wnz-|DN4foC$A)iMKZUtR>ds-5$RSu(mmOAxC)5V8&prs&msxb8kV%R@HM)e_XId6D$bG z>thDl{M&iL1CCjPC(O2OZ%>NNPMm9N!X29dFS4MvH+~efcgP6VbjzCd0jwSZ=g@f_ z1$5O0%WS;)hS0=rxv}jHQjed!?A9KwZ_slmZ_ZBPVVe!DTHn2e)#xn8W};x=%-E+qDS26Q_1!Jv=h^4m$W=LtFHCT zuYn&xlPGqx=D^)_63^5vEGE)IFa%VLg{j9mc7l*@eWe?BiZMoP*nZYw7rDj~=B#C> zSPl+PAQuAz!4b=dE8m0F9(>>`0WVjC&VfARgB3ON3tD-4+B{h=ABMRbY~+&^2qh<% z2IC6Ym=y$lqnl|<_&vyQkoOTp&4Qy0B@35jo6uMvP-?M~9*fg1zW+WT7-TKx1}KkdO1Dz>Y8)Ny(|eMrb3|Q@0od} z-^$%RY1Cq~qDHEkS0XaMH_C(_Y&{bxR5q0p64gn{h$6)=r|aJT&$Mz|!z5>qJB+`h z2O_Q8Sj=m2dFssVSA}8jY(ZRNr^G3K;4d(z^g0rdIOq@@21!(=paic4sgk3;8Fg=lNmrN=D^axz& zOROvTD4e~bbl?nJ{1uafn=M+!r#VW5d0#3>-ro^8Kbj{&e~ebHYecW#{;PLqSMg3D z7+X7mN_Ixm@`1A&sQQ*93PvS%^K)b&c?cS71KYQs_LyV|8SEkt=Xk}^ZTW36tFn*K z@Gy{ZW=zjr8W_ZI;ryHves$Ds(c5c!=Am|z6ew}71Q7gn2LrHo^=0S|j=fF6{|@l~ zs&)IpYmY-Gj|Boo`xbWc4T}@s0Vdt-Nti(lr-uPf{Dp1m@4Br|JIADnF2VMzuN37r zZW`Ya89CjWWLtUw7}6)ZLBd03vl{)y*pn(uzuFof1h1(4Ab%z4D|haYeY9eC4Z2rw ztM$NmbQ@YCi<>JD1wV1=x^>21-RquxPe5*b?HXJQ$q7SvHu(!eaIKj?{`tK)#L_l}d}4*6Xx zMg3}g`UipjU;nc&zSuswhsX8q-JAE#Gc>J`I$u(4DFb`8Ga7yO;+u}h^@}*%qYlR6 z1bJxe3Ax0bUPP!kV!kk1Ef=oX_1*AZM6rZeV^iP1`sK>r?&~Z5<_%0$-RF$E^J!wY zk6{>aU5GCY$AZxK=}z%qgJxi`+I3?|a50;9C)F?SBPGfW$_lidmT={OAkkYCM75?j z)uaOD1cXg`07Fw3Z{5!8ZGdWi&Mz3@3(vRRN~TV=_*lp&3TvRi5i>Ig?-H?lzlOZ; z{m&fiaUiDdTH0>>LLsxjO|2GYCDmIZD9h&WCRxQWQc26#)2~$>XJmt6Sqt47`2q z?#-Lm7Vo1R>>rNzUZ1`mD&)RFu;krG`$C6{=*O#(3$j4KTaK};hN|-tYBn4R<6Ak{ z(RBgE2H)zG36*UsPt*uvy zfkwy#Yb;rcB*gR^kfXvP&`OSB+J{ zk%`;Ai*Sb27Ovl{&D2tCsmWZ`Jk_0SaOCnINTpBA+<;y7$AOpdZ$q!>2L^y){N*RO zu+O%)3IV#0=}XWHO`MVH;GwZagyTfAxB;K8R=au$C_vx@CKs2Fj&LSu66{WhFd0Al zI1Hh-?=e!(aDxF^^lvh+%n~pN0JL;7@%e`j)~+sXKfJoUwsiITM-OO*lAda)r~dWv z&M6F~dk!GDn9c1aKs7OXIr2K?UFIHnCVoh!nQsjfzVs|4vI#*(t@h!#gCPr+TE?(* zAyfy0s|fG3m9Au85`K-^%9y-vzV#3&pmH!3cew8ypF~TFB?zxWH;~|3s3t2n z1+`Yf!K9jJU%t9e+!S2Z;75!q{P{L~A{NC!A*!G)*((>&aOfRdK_8_Bp1|Sj+@&Dx zLBcrf-`JA05-mo-eTaPs@U_wD zw#f5Gk%vTnBRc_9fsgM9KHz{^zFN2bnSHXaBfKU$~9)>FE+y)p$4EHKT@N$>GY zuoTbWQ!qZjnPF(OZ-8_33s14(?!tA}rND_BN8@KY;Hllk6YFRbQMk5>k>w`ZQdCFb zI6;j+*lDY3nIt$4t?S0s_rW&x%(MYZpU3YgoBGSh0^>?L7B$>ixKbANSF+_wV9<>W zO^|)gSwIoiCS8huRQsh!6La{`f`$&^3e!E)_gSU2w(dJ{_u{8Fm*j_7LZw3ix*ENn zd_Zt3sz5-{;AwObrrD>^6jagoNt($m4xWfZ)xQ3*TC^3^g5t(pqLZ-N*}*Ryg=P`W zH;QYDEo~FZqVezkmx(_q1j`OF(FYV)T84XMBAXFVd&mkKYPmCg4rD)djv8gZl=Pw} zlTkA|eJ1Mt5B!&>W=X-Hg?qN4l#GJLX(AS6AuKzG=Mt594xNfQx7}t#yRwVYxC7Kt zsDc>S`tB{}vDSoxsY)tIf$S-3b)YD7WR?^ww11)fI=|Mb#MR>Mg<%yDK&?)^j=XY)Z zHe8~USQua*fdwj4V{Bw`j0aFe=-STqPB5AuST;|?2pS}qu}nTp{ot-*mXEu;^@f=* z03d>7~D!`w83zF8a zo4FBUe$CO;UkbXidj!0}dJOrQFk?0X)u~S>GmHFO#Sy7b(n@)3NNmfQ88?Lr3a7Qg z{I^~@*%h5b*>XDiGokoFoYqWm%4i?_G!jJ`ITBFWRY14hlP=*AKU=6`bzp*u2ba_^ zSbXES(t=)W+%%1Sa#8(29H_QG<515OrHRvyb}yc`^hCrvoP;YhO~ZBD4pkk&Pax^p z=vqW5i4vRsTaD4OyJ`LX8S$u#dqh<($YTB>8rguvaXe~DJQu2Ks*lALIK?V%P5&Yn zk?O9}wuSv#Ydk2WmL8+?N6Bx$Ew&x;H)5aIZne;Lh{e^z3ueU9fCBO*HlYj`bQ zlE6CBO0?m^vMvuaslpY_QiqxVM*Em49QsjPwu6h!-~nuzohGEhfif1h9i$219=DNE z#fj?#sag+%AW`olg^RoJKlu$S`)d_3W{ zT#AyWRG*ov1$48!oF1+wN$npp1_sQJ-y67&tP&Vk^lC&8a$Aut@%~!?Zc&_AL!W+A-S{Fpd7VzF;TIKaP zKUR0nJL}&dcJl8$(lTO-Pck4KeET>)ec@7n!%~}PTFTN?K(D|{?r0zJki+ZU9Kyo3C zJ?8Z*i&t)d53&!?&7?2L*QE9S`>xX0&R*C>eu(neGXnHp3GXs?Bc?=61`7YNj-jYn zhlP1zI5tX4V->Ulg#d1d)0f`RfAJrE@x|XWtcvggq(iw7cnZ&nbg~AL03jR`cP971 z?lR3reI$MXDtiw|oMPDoE0J{YHY4RD6<^tJo^Nb1HIuDpZ1BS(_bLZ`*6>Y%k5gu zBuaIdO3AAwsoWGpCK5JKsgxzLt=AY>%0gCwWFVB{Y;sqf;%hJ~L%rZjU(s8ssKYje zrBGx(r?+rK1|>k!IE3_2Y?^NZ{7*2f#-rFwoV%(E=Q$FtnGB~A$0Vcj=+uTL-72Tgd2-t3lEqsF1bllKFtMqW~E1j6O16yx4FIJ+ucqPY_jB{R(+IlBvdYS`9vV0X|1 zD~0t+t_6_+7!(`Rm*tLJ?n?I~O~iCje)@4V75Q1YMReH!?sH98ZW>3J_j+*FFD_WH z2^cYl0PvzC`{(R10Se-SB!(0SKn#Hai8vKK9&QI}a2)fdGy=F2A@*7h(_hSUII3!{OIW| zY)rp8E@2i~+5dR@cZ!Ms2|@mVIMd$2yANd2;l@ObNMwjZXYZAF->UIHd_uU7=FrBl z_w8tgP>&Lt6i%E{NJGw!xAo0Av{bx<7!Xbgvuz@PaPL%u36g6b)69aN<*N@FZ@JPv zc-bv)tTV)vrmNct(Wgy20KyZwCLvap2tWbrv zBIIDto9eP3{(vycqlsq3oSb=tD@#$Wd~`;;1e2uJN`b=9$zfz*R1L=`egqL>)a~K1BQt#PC6-Qq~$4GcwZbE^Com_Cme-^iemk+=5 zXxaQ2E}>cSUITi9dGIq{lkBV%EKl7^gHePUN|K+fD-X~1$T?tw%^QKjmP{y|fs9w| zz9+=#DSrjk+kw5|ripK}F=53f;Yj&4Kj8GKv63z0exMq~gA2{OuEc0HVYHM+Dc_y% z?Vvmp&@0&1ry}-dJ~d5^5EC!xD#C}*1@DRBGsh{_B`fv2E3n3#g*~!=G4&YlBKzv* z7rxoX>^rBzPhE{D5*-EQ5Fmxm7H%}G0U86l$X%6<><+R$ygw>k@iUB`YEZ$7gB%XI z=YmB|{;}MryBg_d`arLH_r;_K5DwQ3TcVc|JEtTNP3A~rN56H>kNVx@7)lwoBWr-=H++~&?lUP*VDn>X$~yVE z*lPO06c`qcYkp2Adoh$RjlwIBLkKPdM$&Jk>|b_nNb-~uZYwV`A(HwVXIjG}@YEdnLb z!;pTSMCqJ82diY@y$(|jO*1H}b&1zF{zAGhm|%mV=yX}%7^16XQ7E4)v!e<sK z8}<}F%sQOm$ci7W7`h{qBHkmugfqoc05k>{AMXb9L` z<~b!Q!9%6=#@(l-fsc$?>)`xo`Y5C)ZTEkfS%jp^`bJP4*&Qjwq8Gl0!`km5AlS-) z&|oXyM%uYVO7#et82cr93zB=gq(JOo28j)F{QPy~<5)Pvb4pMnBAnoV8=_ z1p^RZ!`b_dM44&#SB?!`y9SVd{SwjwUTiSJz0<6Pa+ewBPJ7*yl8?w1%ZHP_F}=1h zFVBLG#tIxZGNz9ieZtynV!j=3-dk_G8&Ksii*p#gHc8t_!bM+%L(|Kg&;*OMp^n=6 zF2Ra+i~phS8#WV%ctN*1Nw)^4#_)k$kv8Mjb%8Wt73UjN!07lc_ zw^7kZ@+ebBX+N1fWE~@;ZwRXEqTJv6x6u8|6WVPbWBoFtm84RVhv2Xa(?ol+k_e0A zCoPkVL#~o)Bd}&J>l9Ht8`1S&hBSa`>dfN;K~V>3!9n0d3BNO zL(JsJfp+ujC@n8(cGhj%44E^f$2t@M&)v9;k?iE`RJ8gTCQ*@UpFc(x4IsctjFkg! z#H``T!eh@O^#mvMJX$6r|=+`NzI+AwBqvHmoA$ z?m0}#zwUH%sM#gj;uD5SSU8s5XYUsGmUAa#s#uzdVdqd;qKsRZH%;(u2TAm|1y=Uw!vtxy(fbRXK zFb)st@`NC=|62=QA;%#sNuWYtZBK=4mf5kNW>wUj0goboLBT<}eshit0XRqt8 zYkBAW&aMUC4-b}m~$y?Y@q ze(&c>Z2i2CYYELJtB~!=>7jOLb`I?q1lNd6r)4kX$Zjbff$Y;H65IKdrWZCQPexzA zo2s3t>5PXvyF8zv&me=1%2BuzPsvhl;1E+zDN`G(y|g?efktyGDYRdtf$g!1BQ%k) z6Qk@J$RK2}NC$cy-t8)bh0s|T5$~MVq$**-B247_Y!PUL?I0FGtWd10V6)Hi>e}Wr zIzU&xW)LzeB=7pVu&Z9SsBY<&)0lkE4yRZ5L>P(C#0qHFu6G1jFzl@8k5u0B`p_bUh6k~KW6MX?T^hmx`PmXx5%E0#3V=fcm91Dz6x!M+5t&0{2%CS3`04AJ>JRJNH~ZguNgeG_gI=fjlR>Qg)24UFlK zNc&7nfOiki#*=Y7P-I-~qttP>%uuQ4c%oWoyJb(ml?1ffq=@Y^_QFsm{KtP!7I{`OK103 zJw}E~N{!Obq|^E1et8SDvb4KoC^5Pf`-kQX-NQ>fEAh$@kpPnX^|2DD2IWG%BJ?rq zax#BT#PlmtDr*oO!t|;HeAFdGP<%H{Fd%}#;H6Z$dVa zs6$@Xi#!6VhbI)~7J6PM7^t2!OIy8gI{S=h+y4IvRNLQ3?T9Xj4YauHYld?4e)*wJ zmYz?c&gAk1s<@~4>FF0#OXx)vykG#>(SwGhV4I7!g=D8~rG?y%ETE3dOZ9de7VYPw zt4l^HEs&)?VKOV8IA+HG4#Zhdjl&Joj*n`v&9@%z7}DQ%a*1xLnX9ZwSudy>2yPA_ zsPFe0*aZo;(=CGFvsdA+i+_4tEZce;&Dv6$KG(z`U6q(fAUH%YL#CyWjW74xx9O7? zJ6s7XUld>^;ecUkyiC4zL1|)!>pqSI`LhgHT?h6L?sAzXfD&sMfIn~&)EfF;_H@T2 z@$}iLWUoH&ua!W;cS=Z3)u^4b1;~>%)aRP%d8MOJq}h(G*9xySAx}{r8o;0%4k@a| zRVBQmou5cNNt!hM_fCH_^s-Hy?eYGnFTW+V0M=f4Wpyw?SM)L{~H zU2eBKwlcS*Y~@Al%q&$Fjj_2I3^p9@hnoq4ufR88;t|0RGb0!I<7jRQ?R*C6^BRh!TqkwWQYLNM~B_T zcS+1aK9WoSInlD`p6!nU)Z}RtRO1ZQi;UVA;;4KvF(v)t@zxW<)Gz5&NKlsf#U#A# zoy{gp>B?Ah`s2}jx02tnM68NUpTP-v>65>NNu64BI}c9YoJ{@_r`*waI(f5Cvn?De z|D%g8{_hc~1`o+O7;o>a?_evmQ6-B9-ucrysXPa?=)FSA-p_8* zQ`)PA_=eBM`%-0uGUojw)5F0bovt_nQSs&6y7!o;4jTtw?KcraEi8#=k;yUQv77Pu zVZk|Yu&i3S*VnWuX{-*9_x|1*9>#qKS4&N9rb+QQpQyO0V1ZnSFmY;=+z_LF3`LOZ zfe;m8mv(Nb!tKW5Z+@xqjkTNo`SAu=OeKc33m5@7?AG`fnlD(`*y|kvD0ci<=Q9L; zWADTq2T5_9K0d29g0xEV&;wRGV_A5O-Zx% z+z@kEtxB-*HG7)_Jp3T}I^2h219K@mYOSu(uTYhoiJa zMc-!Q#V`OUUUb90Z`?$$d`Vf1FEzsqP~8Mn1BNJC)O+Iu9e;Y`(@*ihCu3l^TdxBt zW|$EUibY4@y7#ye&^)+tZe{LA(SqF-AFDJd|FQs*1I#;+Mx&3G_tA3U?O}j4=UgnX zPw@-zX7iDx#EbAT9Ibt=LA!VI`h4_A$HK`uL9>(nGh+D!fqlZBjWMEuH*Z3FI%-gb zD0e2kZ@ASUD9UHbH3=-1laJ#>GxgXczR|wus3EyGVfuhqBizz6u+f#fRGc8g&r{lu zjGoCP{#G&kih_nS;=)dYg53Tep3z1aUkRZ>B`^}Ubd2gupog8iLXMmsqo!D61zjbx z*jn?n0xkgqA``c)%qu70CUJ(}lU&|9^F`1gb>}bK*8eE8-$83Yx*HU<<_mb(XXmB) zjpm!FxVB)E#7uQ@;k1_uApnQb8!CuT05&&It9Yz1h`}zb^ze!WeKD?>mYc0b#RKQG z%&Ce@?S#wkuxx3R5{@4!MN5z**H1OZrm&^Qh$RU3_?tJwA>f7e)krZ z(OVWECO>09VD6O0SPkg3!nD}QXf{#6Rx?|_L+KA*f>*}c*tJ3W!poK*SQ$UD40Umq zH`(Ygo~n~`8nq_k!z-mMctCiqQ?A_~?ZQ;o(HE$VO(JjiDJ5 z0S<&a^a^5I8p&T%jzB@mH>Rq>QnVF{c<3&Sw|YLlGoQWwJZSmYlDzHn%A|qbR#0}& z$j&-CrYef|g|OH!=D+sizXBm1?2jL(&pQ&5%7nw^0Mf?#9WZeBHJVngrL_#Yc}L=U zgHy^-8Zuw9)kt#tRcpcJ!f$DP5UK6&NrJ^m*dt!8Lp$yt;}mJo&M#>s23l(UwocyF zF^Aw&g9|ulS_`TURMrA*S|fg0xY0z;g-Tq*LLedmqbx)1 zES5gY$_KNIIUOgA1L@!Nfmj{0_8FhHt`|NOiOFq}n)m{lc(e!Mz2Z8(mp#A>cOuSw zG=2&mxDH&`C=$!@(rp0u2%TUy{_Li|c?#w7E3zmziE<^lN0TaI(Exg*e1ep}cWm0= zvJe_LU2vDB!iUkyzF1Or(obC{E{K%K z8GZQmU2>5(A3dQt+xFc%ADRdw)XE(b5`%%G34-y5s0YbTwZnouT6Cy~&3$d=sO|Dl zpBEXxO2BucYMrmux={Z;;6E6IcA??WGDO8cAEMkEV5&?`5Zn{8#9uOmxPgt=pE74K zx-2j93SV3|us6Nv;sHm9zd)E$Yw}}FwT6Ak_E_JEIA+jZK%G#2UU;%Gezd(t7@kRv z&~gX$CY+{HZdDGyGY=~<7P%vdWLVgMBVoa4@KE#qlvXysw>_Iv$3bquXnr7(d>y$f zha=GgWw5bUqP6i4fIKbDc`!Y)c$MgI=jpS|$zj=~0um~x4pt`}?tw$s{~Hh?K(aYq zWVUe4QZK>s7lAc)I30%e4@c9<>&bLdC3M^17Cl^1Ojbs}7*G5UC0E^PwY|&i24z#F zq+xq}h+6UCcpuNPJzz?25KG>xK&;H-rXfUAJj32YXMxfbXNW#_3VK6q*dDt~nWVSH zF$ELjsTsTq|D@y$E0a&Lzl**Xmz62Y#`si0mos0n0?=)~q_%(zNw#-#T$K-@`vxGf z8Biqkk*yCC7unZvFe*-Toivb)f4TIhw7}4hP#&gN=WpbW5n=?92)L_x*-NBcZ(6=w z9Qr->+ujN-e1I)f=#(55GL)MYa&T}<}qz(iRIuKfDU!C0jjz99zP9Gud-LdfLHVx^>9 zLTCynI>KS^7GJS~6O`1rKvWH2O6g~>*n*3C0IkpDyomp&*25HB%%bW zcnOAA0aMu0r5m5pR82z)Y~b#&UW0k$jEmoXGK{j@Q*O{gEW9v$(ze(f9~q=}paw-r zAg+G8HVxiQ7)}E2Y!>r6-5}U1`KG6__w9^wO5HABWnK<0aquK*Fe!FVOLluD@J*uf zb^U`|0$2k#5Dn>Hzg%Plb9;alR=PPJktJ)DTLZtRg~rt+RjeM(iE^A0zT?7oXK;9~ z6ZyD2rPAEgV|!7NV{}Bx4Anq765a z*>6kc;ip3~M=TE?U?1WIFzWCR_A$YiI`6o4=xkIDIr|ESf+(O&hm`t6{5sV3$FXxr z7GCJQlJ1s~AT-Zz*Bdo}_o-1y{OHHypJT#MLrCj_LICFH5W-hm1s1W-@@-wJASH-a zCgV~nBKBsJ7N+rWfnp5A4WVCnN+Z!jle29iFs^vgcI>w!Je;92nIB7De?;-fQ}~0d zwAqR4hsV3e2H@EvoRqi)4jdhFfL2!-C26xNjM$%#?mm6EcKx$!pMZ1Nr{xOSVgA_e zbpD*Py`XT&L?RVy%J4!cdT!)1%#l@ZBlF1CV|4JsvUp}3*}A><$=#+j^}ISjNg3iC7ow&K3Ct?#ZkGN!DDnY{V*Va zwX6bRm$&g&HLx6>m8xNLPMg=2xsMZMewA?7doP0K<|=(g9on0X@{uQjmgL36FTdF%7tle zztFS>4|YI;GCUN|THk{ksN9V#YtmPV@d5Q4_Bw~t<=c@ z*7j)C8lq6Ql(zmbBg>Y`f%+l2GD1SQyaI>18kk?_IEFIt{aCi;q%0)ekFR$jSO$#k z0|bdzjcTdiPyy+m1#m^|f#bzPLf*E&qie6yA`;_(+6Bp_gN0y@H5TClsB@KR0GnK3 zfZsS_L)U~;Bbx#mPrt-_NmI`f3lef~E@r$Yd)u+7m~Ay45&XN_Neg3;DnLzicXjjQ z$)}$i9b8uj35xrGUVI+lFu~7GQ}7Nd3?jP_>QQyBGb~g@FYSqK@n1qd6rOX{=>_HG zE$MprSBcI$HdymyoxXMu6w%u0nKEoCU1>4ktqmXLtT#6 zTv7c?D3;8y(@9M$;Wa!T_`b-wDEC3j7C<}XN{~3VdcEHsO5%nG$n71eWijZhZ5bO^ z)&PF^1X^_wMyq%bZJmCFN(L11b{IP?qq)$xb<9B8SjMb?=6UMZy6k=TOu>UQWUpn+ zgd7pN?gs<2B9d;#XXx3@BXnO7Lp}DD24jSW(KqmJ5vFTY)iCAy$G<;-kjuwrLOA3U z90J(6Bs3J^p#FWH_F}B7gFQK_R|*^uc~n4nfFe_giX+%PH7V7UZOAUy&?HT1xSbBT z&(2cqBM~U4ThoXhy}>y#xbRU_YS=by#j!RViY5oWq-sG^5hO>}&{M<8+G>gwoq*j& zw#Oe%10IYOmGk2{$0cK6e|(qikLGVwP5)P1J@LYupQ6IiIzI=9w~wDc*P)^{DlF=* zC4s5)FrXP&G4emz2`kO5I!Y$w(!fl19EBUblw-p}-}0grtB{vn7HrxJVkPKD7|?1Rz#U-pP6zlU*) ztuS!=le3p}e3Jpf3j!qjv=y0Y8nPYKo)7h0Ga|GC;~3^9s!XiMM?b8(t=rZvj-So| zh6=P`g6LPiVu;t>9e$pi7E5BQfWphcojS)M%RK6J?nu=3ErE#AV&2g3_TBY6cb{%Q z*nBeH{_4@Ab$p|hC^5db^>oDFS!JbZi2}yEINq!1o2+4%_$D2+#VR)lj5y@CGinOQ zt2;U;M(xAsk+|OZvIte~J{fTv6hpd+IZE*za;IPLcRe?J5taz=HePO98`~oI9fhq^ zmP&m^OF%NWMtE+;ovy^AdlhSiK7Lp}R1eX|qkv`nr8#z;=>x*zEiZc<)R@1fogqyx z2v(qU);7Q{xYNCTO*DwbN-&Y%yrsp35dLT}mkdre3y4vRxWM=y7sbc@j+n(BcpF-oiG_0<3?2lYhA)4r0Tj zi-j66BoS03JVhoY_Mq)M3oMqwfTaC<{MDbA22-91m6ztMU`vR!>`C1PjQhdWYR$2G zdy1C>#*BJla>sZTk3jWHj5vkezgmRz>b2$nAO8s}LDk34&)wWV)KW_;Zjcs%6S>HT zMck>;hl>#Yq5ZT)@-I)hA%lyW@cH=1Uu|Da$Jnd$y_ST`g3GHczukXR547L7M;)G}xPVV84NT^tRm`VB5n>Fb<$`TxiDmka;uKLS3tn2!DlHpsOxW6=o@ z@sn%6&!0cT=4Yh&t(%k2T=M#7{P5a@{9)#fPy7oBER!mBD>A8ugQdrTuGKQ2Dd&r4 zE1}`mEoAr<(Avi9o41%GKfd)5 zC+BCt=K8HqKAtda9(Y_2Y_2hLo<6oWmSIyo-lrH1KfXn-scU`86m|aQlhx1!US<8v`I7D3QW2VdZJG;j4d9rvvx;610S-aM9UpFVW zF06%cZEJDHw$_bnH*){JHonD}dv~fk#WmlnMezY%b)y8bP*}1-dl;62)u0)d z_dY|b++Bj0D9o2f+mxQx(b&$%4dkDEwm8~Hq)DUIe{{Wp>607{CEcU>mjO&;96{gK zVxNk_pSJt^RLI?O=httz*o{wa-fW9~n#Hbp&>I)w#OxWnCnj{piNs!yQ)r5$M@SM8 z^bD(CT)x~Sy5C`~e`Kn90#76B20tP?$X95^2r`r=!cV1^#J>*Y1ODh$ieLBUO_b@1 zvXb0fG{%VP6ZEE-S_PzdGJw`ZHSAIK z{+y*(cU8_Lt%Xn>kl*tYzw%S_X-t_=kxQB-nKZ_)A@lC`Rs*NN)8@x&LJ7`d&euS4 zCZwTOUcn$du;ZTd7QhggT-x*u#qsfg0zK6$-vXO@OLOZ{@S{D~fztxA;V3qJtN9h$%doU;#O< zzgLCjh@q-m2!7(D7$QZ zDC-`rK1MqO%Ty!!M=RO=9SwZrPm-)$#ItYY!y*iXF)Y5|HEJV#ME zRhZuu#B7yh5_t)*;66s91?-dd#{TO#8Z_0y$ZtHRh;9c+lS9KjP@9-ZmLRr9dbRrV ztfUrPt*$RfL}jP5Anc9Q{b-3&?0qr1`m8xv@I7JQnY;lzq@g{1L} zuoA~tAlBm-G^XIvavrRVvJr{6!%+;D)36g@vgy(DBok^U`4+2gF#IL;%Ipr)jpr)M zC@|*Wfnn4E3e3pN!|;Z*6z&AvY=Ld#2ZC>g%gY;1S|c~u;!Hm8&VHU5*s`vwE4ebV z!9YCzvB2oVg=hZ2H-&9&lc$Z`@dGXIW0+(94eq2zzdw8Z;VkPgu|re;jR z@~YTlW2sY&J4VGR2dNE!Wp~SApb`HL&V7Tt=&TLHt?ot0wLV#H24IoMnU4J&A=_pk zMEb?Z8TlP^_rT4`0;^bRU>ylkRaOnF!9Xg44{A{ZodrEGJ8vDA^3dpNeYjg#l7)oC zY~VFp%!*?DchDB>iiol(7+&q9%QbRQoLoY!%++?7qL9G%T@J+8xb}xSdW(L{d}vXo z@IDSF3TP-N&*3GtIqf98YvZLEvs-prU=Sf=EL)Q+M^1i+X%QslUe#|wQ|FQ`aL%;0 zl&*_I@$2|t!@G$o#%Z&IX}MuTwy(kG0G3|e#tgMhLJMR z5Ok8&O1lA`(C6l9A#o+mW*PA1HZe$&EQnp`D6?~r&~G3&Xr~j*ABnzXp9v$p+xUj3 z3iIA3nxIbFub8Dk&S95^51OX*98?16<$s9ZsokGY99m4tH=iDx zCDU+U`rJSku{em1a3vghdIlix+s_Xu@%B22_;EX~Pwp_lzm#M`)j)dBfX3#CBWorofLYPrI4 z)`uc;g}EU_OTS4GiA1QrN`EXX%LqAH1ME-K8505a0u~=WuQ^&Bhf0LAP6+h{fE4S5 z!4II;kY?0bl-p7#UEo(O!v@*p{7eFh&rk-EO(T7Di%HOU&GjAXlP(lc_b|(=M(3QI zrG=a@52$}K>OH0FH~r_KJCqip50TKEXcOajnx8iuP9qgR%cTro%lxEzk(=eU4HN`J zkYp0^thTKC@qF$61~moQPhQ144E>oT2cqQgwMXG7Gg{(11qSY>cv3NS9LK;wl?a4H zktjZm4P8x~_`FF`?cU*RCg!U11^>{ez^1xL6yDZ)Lf5$y8h2sBwVZJmIfT_^*%gnN zXj(h+#?Y1Wkz9Ycu>R~<$JDr~m#Eevh3>+L_nq2Ia?BNaZY!%kbbIDzAvhcu3GHGuP?|FeWeR&)BxH9Pe~SaXOv|efbddv zv!l_~7UeAM>?fGiq?x1@oe-_Otnh0TgCHcZX%O2*BP8A)&6^tl%!tGOS#V>A4OY5X z(D7JTL!eR9ze9?`Z_9VbkO9DKvbmBoj2;KjMt?^z>$Me(J@HhMSprL(8gqS z(?>etB1Hq+t+8MOdOXwE+C7%;SRROu?(*jXCV|W2GrR`5i6U7{tmBs?N(P-d_=~ge zzbCr*0G0mN3I=8t^%w&|8k0E;UF>wuQ4T*=wo%*xFB z=JXuSd=Kx^gSPdZ36>y`u=$*ZT-$*s$qs8jzJ3#RJQ;1GinBcJ(u2qFDouL~N0y&U z`2YBmwI6?meO&o(9n)BhIvg?!w7wf>OhpX403NUwITp-ZIjp(R>;#A@%d%;oT|E!Hj8ByXXDN3y}{yuM?wn=Cyxm*I1;4%VR$!@BL;j1EqD)#y?aRMq& zXz&=-=D7MF)D&wy!srUn17Ig=-@d!5bYn*;JrcapD4u8fj*=Y2Lv}1n4ue7hGY%kJE(88K2wG0 zpiAZ&Rw+lpQu0rx+BCPt9eJVb7aUzie~@&kY`&E5BqL(uO8wQszXJVX$hoO@g8-LP zZ$fy2gMoPvhXajC9n8N(Nh}&c4{4YfE<^dh}ElLkgaZ&6~bPf{fLD;d7*nAW(Tx z3$G4x6@}eYqIRffN&c8BUE%=@uTkQ%rNk#e6fWLMpjD`BvpbDvZ*kl;LmFPdGss?T z5_ol7mvLw`-ac|c__~Pc2h?cZCE-EgZU}4j!qut>;BIB_-czA4O_)0h7q8-8%B^{{ zcNN427!<>ChYvuP01sg$|LJ8Cg0j+)9J;fpk2ds5aivQ8ATRSRXu2vyd6NS)rWzt@ zGP3q`@wxQWy6|i(eg|(zST#fE0@kYOj+#6^-nSa-!pr>%$NKhO5w!;hC)KyFq=h!I zY8@xPhwH0qVWrUEsT{dRx4;X0xrziVQSWJ6v*=I!-ji%Qou6bJn%-=+vTdq@o@BBxmTnxWU+4+Zl)7lIzeS1hZb!e zI2j{HM`=t3X`-p_MK5Aso~0b{8cNg!D9SSoSYmT^#O$qMlCUaZ_38OXfG7Eg<4k;EMsD5G~w;mZ%B zQN)E4(Ff-Q@xGY9)tbAS?gNTc{J56dad*_za%4d=NIV^B{9xr5>!e|y{8IiU^Nb@} zp=dAS9n0fm@Xd}8#PRyj3C$L_Eq=qz;u+Ts1z+E#YZ|1Mh9>q(LZ}mNPtTeym zv~d{YB`AaL4}OJuI4s3NLi!LLiutYc?*!c2avYFMn6kYz`2j-D{Ho0`qGhI|c4E8= zb+D+Al5MzNRp4>tY9CZPmM1LtFIkDVVrAtg_3N0_!)U0)?vkW#sYZJZwy5}QUH-*j z)9wlcuo^bGQ6+~#j$Fr-LD58EVFDmhainTYj}J;Fp=WFxc5tg4o#C+y!fJxg1CNGXN*htwdVdByW%WXZnNa+F@?kD zUci6Q}+C*PNRt$~GVvx2%v4j+;;;CqhMRdl^Q9uc#10*XSUzWlhJB*0pY0EMO zN?=n@;^xA1Z_v_UuJf(;0r{4`Gj<225gc|YH%Ima%>i)KuBQ z7Hi>>AORJrwrYS&K`XW$hRmDiZM=PFa|`ax*GDx%qnl&=$ksA#mz3$5q^(41Oi?2Z ze$oqE?JVD%e0;OzdF$uForSz3vZ%VEogrePsnDQ4A3$Npm5XOUqQ#NG=3u1Fs*=b} z9z_rzol~Pn@o-H<=2HwPz>)Y)+)zzrPWfST4Z?DOWm>&#hm{k`Hr2Pek5AvG($}yH zMy~`!xxKV+=R2r^y&9MWYl13@y4GnY22%*h@5OB|Xt07Px;>{cN%xDr6DKMTP!yx* z#QQ;U9&AVyJ$~9!hNa=E*Y|=XIyIVvs1fFdL5!%*zZX~k>3^jG**se(J`RWZ6Z6itAh_-z?3MA%!h%#b^`cdUv$WJ@?|Q1bP9G8P04 zGvI-!V;&_LzI)Ob#Dl$FYjRMykpsPAr^dO|zTVWq^xjpfX1@pwRV_F{eKI2rC#BR!WbqPGGDo&Z!A_J}HD zs4FlMn|nEKC(uQACVEm(Z;Qet{WsZ;!X;<(185&On{_=f>bNpdl2kERk|em$P%DKL zwGaA`ks3l0n5uT-#I>_F2VHtwf}U7d=D1$ARyvZjp6CJ=IEGPOf;pegE~$)QMI6v3 zRQC?ZXsZnG;6>H__Y(EyW-MKj(;g6XiGK{;y>6BAzK=_X4wb0o*R?^9PVODoC-*KP z$0tb;LR`%CQZS zZp^3qFGur#MXvbw(^>>2QyBzOydjYR_Z-j$uhGFP*MQR6nSu^{heuSBS(;2&59nS| zK0^9o4G56EDIM|L5%%_CE$|?TW38Kq1cNh+C7Btb!yC>;h5}ti#T8)Al}vRU@M+Vp z;&{)gA$ha#kvAil01P!1#T+(6CxK(n06;9b9R(3frZo`qhYu)CznK3<7<^Ah&0bTm z{(xaC08?2E#e9cWqs0WCtn}GUNWSTFYN=4aPpbv@vj^Y!1b{g?{(@=G5GlK~Llp=o zcXBp1m_qs{D)*H!r8y-^mxD8NWr_(CT7OlF}ql)p#2J3TpUO`*n!1>E#08(gMhr#MeuU9bX!?Evtp2 zANe?=1oTevT4g+4!t;R1FV;s(0S99lz&FvlO9yVln(9YE`&dw{*~?XdPRmU5OSmvf zL*vi&K|u2hWFD<<3PO)VDJ{=|yiz9vz*pGcJ3xUS*%bn|*v2fGuSU%Whe*Vr;vGpY zONe=P(kzaEsr?8lV7y$K-5~7w4&X$KAPQsF@Ur&2BSY^V=yor@nB1nt$?5Na-vvsx z_(zXnOCBp+v9aPR*RD!UA=la5Jk<-w|Kb70AH=L9HpuiErw7zw z`bQ|FQN@+!%bt?wN0jC#DR8PW&L*h}SNW-a2@Isyuop0s!UYH#wJBgva!lI^@5pEB zsQWOHE84*;Y9a@yr}KYR9`yf&4@b(%iQ%Ir6PaOqTK%%dGnzxN31cU$^BoD~ zbWS*`FdNdM853tzJZIM2Ao`Vu&+A(s>6UT$t?sd zW%j~akWFa*i6T~%F3J?j9p9(}ulDU-#;E<(Gg;7vNoO<_TtA`YZk>S)R-Z8s9n7~S zD@{@}xOg_c)0_T+_P^4)zJoRUI6X}W`|h83G8IUOQ*$!szeNqp4=ur=7j~&Ur3Kac(cXDy)Z_7=qEEZ8G)8Y7 zAnO5;@x$2^-SIb|xPSQR?(VC}F7PwgWis8JoW16ETTJG;_jK$2_&3A*fAvrI&-||o zmj5g4{J~wyg8e`Hq*9N2cm3hRZ@w7sbGwQZk)vTq(?;OR%9M|8R?UEP+yTrNyw0<=V+rVRKFSxZwxJAJb`;US^voXOUTpN|@v&rJ5Sz~;k(7bk-J@m*<`$}Xx zu$5002$6llcg)q&mD*NYYMDtBs+V~3yy@#}A0xmc)abR6?BtDCQ>tBd!y7+tKijGi zak&Lz*>|`H)Ni&Y+R1(8xnaH<`246jY2;xENZ~3r+M$JE?-sQWnuPIb+We_KBn2id z!$Kqb!NTjXek2mhTUF`9h58J*xwb|MkH2La0FGSj*!UH4=OoMEmnJ40+wv_P1z;Dw zdF8$JpSvK+T1)rA-mEf1JY6ty+)=l!H>4{mBTi07?cYEBnqCN#&D)PAIL7DyrdRp~ zxsF)pBY<*>WET5G({*XwY%SZ^1&s~h;pLXC@6BFlIFQr=HGfySQRcA5OA};T6v-E) zj!hIy0@wnl<4KNI=4Y%*(vMX|6D$veaWaMxs`|Jk+Z3nYJ4 z?WzMwmR|kAKR!H0jfNypx2XSEZwkl5t&R1E#D;b@w;uC{^k*M$Z*6Se-T7v`@nHSQ z4$VLK@z&#Q_PewG@Mq)O-;5tl)~)(qzw9~}ox6|5 z>)YeIkMBOc{|yU%^>pLz*dy;exI2Ef_4MJLY+&oCo#4jxfV!Pkbov@3!7Z+f{s{hv znroZM4%6}D@CztnRPmebW@g9RpKK8>$lh=VuQdlACYka{A`IJ!D2!JhKH1hSyaxAB zE%JH3t7=HPb*hU%(sPFJqGz5}?*u>V<$ma%7Rxk5w?Hgk1ViMMLyfciS*skP! zEk{-gP*7Z1n4sZ_T^${{B8^2>h@%Z~ExvMx1d-$_aN@p20-P)$TTHK4*1cmi4=%C+ zC=l-yLBZ7@AUl;4EwTH1h$lw=Xb~(%C|pcPuzU#D0`57&+F3$0d#7VzgB6*S(lS~jp7>b>Wh4xkWWJQllK1hQ)nKpGYI&J! zv_pltnGele^fu2maG27MM^C1qW>&1O=brl|ZBkT?z{h(4(jUDsk+mj1R~F47gCUn_ zbT}#H;iN|41TY(@8f7gINJ|L?Vm|xz8Dz-46`bLjJ>>1#+p$UHH4fQ3dt)XqjV){! zVfvKHZua;{J2Si9VaJkjf1N|pKtTD3Ktd5z>B(XZDs6$FEzNk7hMjAm?#>L30zohU zK;1RY<@1cpENGgb`nCfzp~S4p{(g%qo7j zyA(((ST&KeHGfH;uJ1!G!Cr5DeUBdIt-UK-Do(S>6sID+_IO58`uKf5FMC^(Kb@I3 z<~ka9`2|)!XeI#$!gGlenH|Uph^DIwFZLKskzX8w!=@DtP3GIDT8aY7DHu+|Lkf|8 zSkgo%2qwYyw!VYtaUXP!tb~2`;O^7Ai095M$BmySBbWoPGm`+J!mK1FhF$yUGk7Lw zb37Q@uE9Tdkjqc^kD>PWx&Qp%R$KUM7}a@nJ7FfxEaC~AuT-tWs8S*u^(tI*MM;Ka zmM_42Y?0n^b4r+Iy7xz}is zAFyACVPMt8#gdtNFpY-4#v-(@{k1s>R*vERK>LK6hdzPoekeKleyro>vHX@A#cJ>Y zKGt`zQ$cyu`}x1)R{nlDV4#N4==Z8Vg->GfU!ksG{NStm=u!#jx)BmK3^EU62O@R6 z;Ct)qBO?VC2y~$!(*F9Gj5~fGSo?!F=2j!rUXM|mcL5pHJ#zxDDFGHQ`w*Wo$sES& zIim=WkCPK1ZJ#ouu~@oq{(KEtR(0~a+2D=SL(=K@p?3~If$iE!@=`!%`;f2|Z_(~z z=3GJ9^cSl!;9UX;#OHbdW0o=Dk#rZ!q7zDVe?w&=5f!e`OiI_v(Z*=9K_A!=7wfk; zejFbvuX?N?1Ita|Mf+p0Edf3Z51lNQI5ixqUcFTuxWvN43KiCh2YItjy;jQ;UHMA# z-rTS$(Kta}kL%$Um+vQc%CxV4R~-01!~wFQ6V|t4JPEa5p(|hD7MI7{M{s(WEdQ63 zftXp#9RSG3tb9JWByF#iAQ7m|f2YsJ+)3@x7+BJX@d~-9{u=^-k)HgVDO)v6CJfWS zFMDQZl#)<+;~p%!cs4Uk`a;L72i058*@4RzcQbynzH#@;Xe%X;m^nv;IpGh?Nnm4) z**JH9g-Z8n(n6(njbm^nHqcTNUyc?>iE9HfXZF+TGrg-w+&ICnr=9BX`v^F0nuFN| z9903$it_e^6B?SE$^jk@8HHRXXW>bDAE7smnW@MwC5WfnS3kkHsK2yjc~%;Lmmr@(O+ErL)T4Ly~_VTTu)HHyD^tP)}bp)^?ILd?{3gy zzLf_tKZz5s;bBz2s!K;V>_xBu=azQCjgPEMGJa<;FobvzB?Onh7?L$=ptut2h_*|J zL8NN^noNx3EoXgils;T$qw>kG@2|HVs9o_gG9GRj$_wV4e9i{IL^RO))s^u*=4|h+ zaT7>e^lf@y&6&qRf;lc|&SFS~A!_0Fq!_4*!jAk6&Q*dTDbEDauZ%zW=-SV2kDsnT zvfa{nF?k2_&-V86R%Aoakt&AO%H5PW##gJyR5)C@7yHKh~zSab(wc)dU=j3lWn+s>|C<44TR(mUrU%7xjw#D$j;a)Fxs zDY4f63B(eXrm7Fck%$!qFrQ6K%uXPY?WM7{Ee8k9A{hVT`Y%i6+q|=}vrzD0U7|Bx zsE*d2(btoPb4bU7(|sE7mRbNeFuM$__@3);i+G36J z{e=Zvou1WSox+MOLvjoa<1t1m?nQ#4_}Jho5}`V=KyBxI4Nh~$U(}^;+*$J+BU<2r zB(P&OZ5))X@x=b=7kJM~r-R^iY3bI7HR7GX->Fg_qk1~N%08>c%<15nZkGgWw48)Xg%V(h%V4O$gSoK`%*_V6=kVWH!_}cnQ1hH z-#JGt_Tm;?QsSg=NQ}MdK1fvqhSV%fKr#*G=@0L|JgPB)Jj7Qa!LPkMil>5L%IV!? z{c+CY(OtCiD~>J^G`6hS}|USq;EV3VldlCa`hbthbAPwoNm<^Y=; zRT0McQp}v@H3_l2yp`Z$nU9V>K!XNrab>$*-pOGTJ5XF80}6c6hDX>hI!+nI@T_57YEl>L zVqhtENnIq6vAAY^DE0FNLN~-cx90(>|5<$Z``_}J7Gvy*AT3Xk1DLTa8@9BN)`Q6` zDO0G%1mU?NO<@QoK@E$~=>)(XEj<$#;8*Uj|7=z0)L4e3u(=5CL5MdX_P0-PS66q7 zn$E-ukgZ+~jhe?h+Z*uV9Ug2y)gLD`Yu2%8B%Dl_C)lEGgKC1OI1`P*GBA%aFWcZu z#RBEl{NGax{pU%V#G)+~pWQ4g#;;*-$+AqUQYaz9I9|rp8@E16sxw?n{neYigEwdV zv*`=KxPSV+yRf3z-x9`#hM1h5emfqcTHG2YPt^hzP8jQms3HgO9dW$!+iOys3704D zeuFi|VzGT6FUa{C;K6RC)OBTO;zl1Z!cXQ9LE&Ue#3+S@43&Z)UN7~pPmM+^>&Q=R z-*b|5(zgUwit`?aAJHD$B+xC&1XO;?Z_?Lv#$Y$PBASk4S%s&^TR&NZ+KlP|>%*K* z6fn6_mqD1B5E$i+?(3LfpAz=eZUqJSH&wCUp$KZua*5%~i`>x4;EZwzs|hr9p+rb_ z4L9RUGLu~1e~k6SRXCUh_!P`R5Mk-$MRboQ^2N`n>WoF=XWUEMwf0me)H4ukaj{@# zz#Yq(576%)p!f(N94aJig|Ic;tlZMV1q`~2 zs)x-C$vomAB^J3D7KX@4q2WXH0?x;s6wl-jj&@#rwk*mx!Q|@oiyuM;og5~U@|g>@ zGvI`uE^**ALM*?e9*Bl4iPAxONk6ZzTOib0@9Ikm!Yrd}Xks>*|NC+YdzfN0FqGB^ zPsrXT3V5_NV1_Y&=IZy4u6bbBi9dDH>q9cRLGyDRUsfX3@!2a|k?Qmkg^P#~v zQ7s0ZBh&y}SOrNJq-sPtkcS|wDig=1LOQ~kvV`l(s8ct6vjrYC;0Z3qG!Fu1sS?1b zGFA}lA3-`}wbR#-pFuvRU3=Sl_jqFH-M2X9YLR!9E#!tccV8t;Zlt?AfiYJyTlg*N zBT=J7;najG>74vV9WtqsfUBBk%B~dhFtwhv`;CSs%)nbmT?D0ivZ;&Xeb9>}lgSs@ zz5IyZEItTM-zICHGEcOY0$`qyLqg>&jH-^7MsiNrSvJa@^sIMRbB}%m=MkC9K$eg4 zi6s4bo?js4U!gqWXG0{RFvA8&xZZkga$GgP$n4i>H+&Jfdsco1x=>e;-aWy$1tvZ= zDnGTm`6gL}XP&XNE(OgC9MYL`SSm~OP2Miesriu?D5o=Ugu#X7jl$odgZ`&_VJHar zWcpIfMl~XXLDAPZxY(5MosUE)H}}p1Zo9CmJlOR#`$=osY^$!%K1dmiLU3ak%0Z~t zjbB`|wT1VXrnx@0w6}n`fK`JeOx^i_5UX*>p~wUIjD;%3k$rtO9LP?uEVyM)y2@sa z3%ZKc%`^3mLow}b5X7)evM6e&0_2_DW}l;%y7pU6l~Rdsg(krXSwR>p>AnJ&hhy;bo;PPpx!ryE35i zz*&S({hASONtJ;}bCD^9AE>;>ixit^IMQHO(Yh$XW>}kr0%L89O8jMuEHQMErLyjN zf=P9yipzGp>>a8{$+c-k(#63pNC#_%;TI2qi#*yPf5&<3tp^<-Pq zRjzce@FI993`#?5fJk91=K?cVF+67Um2S>E)-Td&>hx-+r>lLu-iTxglg0h5bcrMQW336<+v2i!ZJnh7EX(z zp)d-H5sw}-%i;CxgjNPsvhA%v)EGge`b_5|E@fGb0$Oaw0Gg%*#zNLg<>Z-OBAXAt zcQ<}!2|4<7w0`f;XT-#C%T*~*z@kwqDO#Es6*hjl2GKbQ7WzE^AN_64ETdT;yrBM! zdzXXeA`9lV^jo4u?9T+8u<(~;c_3YMBN|_gyFV&h`jq|wu-R9F?pqcn=Ltgl<{I*wWivn>663JVRs zPhiL)wQ{u#a&)b_0~{bqtU?jG%HI3t zKY2r!JV4Rxh>lPIfcvW|QuQ)yHcH0J_3s_w7dMg&1=Q(Qi|I?a0_6pPVm1`S(i5!p z^Nsf$UtjG4tQGV5U*ij$96O>|f+)>|NJfJ5zbuqn)cM@_@PZH2Z{V18W(vjY#)fT! zM2cc}aYon0(kISwCMvJ+v_J&i*l9JqVQr0A^{T6L7DNo&FZFh+x^ua5J7(lrJICPX zgbk$&s)x}%IGO*4$Of`0{!c{ydKz2N;4ad~NPBPU2Av$@7z9cH9)hwQ%Fh6H!^GX! z@x^bAKwSt&{kFf1*4B208%XG@{zmA8##>M;R`QD(iTy#D^ebRH((5z{CzJ6ilMcss z&f(>kS!`vq70P+5mEIufgIU}QR{&TUTyOJ4{#2MOuZ5!NHexX@8U6vc@YnL==Pz~0 z-~)S$jK^YIVdBGuNVagI6n*6Zp(J*HGFfpa50RlV)zyc0e}<2iVpyV+=o%t`&iNK( z;!==TzW=yCk6!ZBhMuSTo2!?-c8Qf31UEpbe=(@e|~@$a5_e1h|PP%s>e&V7Jh5>&w}z z<8PT^q`G+b;Mie~Nz!Uf`a9-OG|?wQNrx+tTO(P+?C_jf1r|JaZGF&`O^Mi0(t)`V9nU5w4N%~nYhKYDpuZJdr+ zgq}n2dX>XI=vdjtC{YRufXA|Z$XYz_{y1luYb84<1h$pM>O$vIC}K{28};I172JQ~ z7XKIFFpL)A^w9qH44<^uB8!L6TTT>aMS2fI`Dnr6kwJId=n5dL^P14>4>Je$n3ODxML566SHUTHE1!kSp5X6-gp4?q%QREh&^OG8@Cv|n-o{o+7OG|8ITxS6 zVNSsc@*WHW#2f}zV)G9@wmLeLMSwuG!_c6Usen{&`FRC~&`E&7&B#&8W5lUCTPAOJ zVW@lZekbYk;yN_FeZ}h>^s6w{d_>zJ9R2W|eUPHQuXHJGWr6Kkz0!mmR%NSZ*N4!k*ArV`a;oy_`e=dstU3=cGUMI11`*fz!Qy=rDVePNE zV+X=vx@#-9;Ouv&qtzR{@eL1gg;60`v@cLC1@&a$t1f96^`~hJllkNjEYe@m2LG}h#W+5k3w z4ucb3)g2^oN1ML@c*$;kv`W@dppT)>3w;|9Vcc7hs^OxgWrgu5=-ot{^s@D{D+K`w z+>oT?hBjyovR44j8~m&|A4XD(`^u0;tDkrUTxVA&Pzu4^>L-x4$9+dg6}ZW;Vn1Si z`5$=B$!PUczJ#KmW%j}vqBqvIS`~0~nED3i)72DTO#P(7KlQSq3&d$oE`O!Ygx1q4LV#J*4+bfI@x#_}MCWv{$LcN4v7==If+Cu6_5}+f z{{**tYMjzr;wMs=Zh%mbKWH$mqjX6Ae?gYdye+Wk?M$IMjAJyRZ1~bZG4VX`bEL+q zRkTZ+c8`HRcA>q^)KwIHgWL2UwCNs6htdV;F_BtVP|g*X`9W;2>&=Jj>^MLbY;dy> zr${)hX*4+wx*f9B2&Hub$pAtPS)yr$+opOkKyAv?m-~k({n$phZJJf2HbqUlE_!gj z`4>z(@(Iqkv{kL@NBvZu7O;;xwzXHx#pS@TeG=u>me7!xWvvcry@GxXsOFuYeil zZa#|{mLqUdkiZRO6lo4E;tECq)!SD#?XB03z|;13oa+Y#69n!(FiJ zbS=sCA-MZt8)boldYECMqy-(N{41XB8ch(!0b8r$9FDMbF1k6jbJe%WyVfMB1Zx%V zdN^9@0uGLFTy_Jf)_UM05zRHVVow_D9w1%@)vNc!3FzMxFjcn-+B+hMZm4@N{s@D;!lk| zS#-t`Tc2Sx5K4qzj8{&ezVm7pxuSD{d=-D--Nvo)h`La&=>!38AcK@PAc%bS}N zzCP0a{5CCLXL!o(;O`q3U&u%3$Cb_p_+|MF3nA~#0<00&2u@iaGQ2Xm8j zQh>>WX#AYdnU>$AC4g%#6P-13_6KHU_iRR$mWy(b7?6 zv>;isBOdTTzlH1+b!4>riZXsDF3XCGlhzb@A<`^n7!KWopeHSTp5{AFS}5bo=b9QY z(zVyO0)ZheWlxO2K+n`Q5h0^sjMVRYPvpspyT;~EZHjIVm0|=SzUByofVjm2j1(@Y zJZ@ghUi?0dzTi+ePv2m|B3$+{_5pr9G=B}M6Exz%FVFCBK@|J~+pxv8TE%zA5}R?Y z@9j-#4gOz+q5pHg^E;1r?>ImUbiG4H-~kYxQx9J{3)5kKzQ_%D@YUm;&Byn5wjPgf z-(BB$(3(I@Y{;|~ySa+&Xs%U3_ieO%IQbF%j(W2QLl;-ZKm1LuUb8?ay&vxV@2N_C z13$rqn^gQoLbOpQX~1L!B{*1M?0^}|U^^N=?gD0uAclI6Xgh^#I^mP&-nwESBr8kd z1Y40?w~|PDUtVnO^mwfV@#^;W&erAD#vW%5L%|jx+F>nd7TFDI>7%Alx4QHPbrHZc z0W6|qTtQ>1&+@`H_;oURgkMRw$5VYSqAgjc<41(nb|Wr~_|9H~QTM9A7QYhE%1Jo0 zLEk)A(gn<{^WY2&AR%t47$3YS28MdH$8fo!k8|k8Z|0tP3@s%*Sf|I(G9Ft5 zc9_Zxf}!!%7qJ^&0!X-@(neakta`Z|jhjAuUboAI zxutb#Y@L1pM)iOcxlF)m*YP>vP-UV!(GQASOeq?Hc1P55m7@t6$3I!9^I5qT`vC(k z!V{`Pz5sksf*F;$4~y61sv-#p4Unx7mZp+$NUw=Di9m|Ni~ocklwnc?gx;hj=mUx~ zaE+RJZC2#?ul%8Y}FowAXQ z5=E4EtC8T*YWq4Q1qH?yJO*B7QIr{5?Q5I?WvVr08#3ucEPSD4Au=2zqmyliX^oUu zsA8t_%_WsITySVc`IJ;xhi?+GqkfvCIgGD8s)16?zjPaLGI-Z;C)^|}a_1lrHE^%^ z7XTIgc7hX0-@^?79`B)Q?D`oOt8C6{)asRRp zQ9Ui5(%b_A7UQQe-x50!aTgfd1ioX~C4SCxd~*DTWU82G)tt4OLbeEXOvlqP%I)+G zX4FeQC~(*pj`LQPmWHAO)-3a~WkykG)YY%X8(~B$8OJ21NyCWY(%?u9bx_hsR?(9ug#`76-I^xD7E4R;i=3=pDnayan>B*%; z6P)x^T$OQ9-dYu0sWE~yGDgsQ369WFLq<@&dS;Z|gb`A%C@y--mGub-o*BpC?o9lW zj}TT!&kqi9IQ_M`VFb%h=y+41>*eh%i&$LjOhrJWBetUZqb2fcS2fls>sj6?3^jIo zKSnMH&e-$I7OZOxn@5bG3J~&hu#W0c(`81?E0AR5A3A;5EHJT?6A3Uacx?vkU_qc) z(K2NTe$*t?loItAb%mlFeLz|unHd+k~8aOz>{qbLSS%uP?rMLvyd5yaY zn(7BYH#i16V%pT_qbp4h@$7`;oNQKr1c9-Vj46-jV4{%16U^kmu?A{&TCC987Uc!r34)qzs58!G zpw?FJfZ(L3yqaSIaxGVC(*T=ar!@rFgN$HBs%gwmm0Afq^6X^v<#FY`X?3iCR2W9Y z34t1|?G01W_5#Cb%t#srQUN$Mqo(FKORw1ek~CR-Rzui8B@Izji*b0{5wK$4_-irYY#M*^zSKgP z=)tSnE+UwFnS!;pPP*_td($G0or;qLI}#{$YLIJ!*rxWstO(MiV@3ciI0blT z(2S#AG{zUxt|{*eivx@yqndltPAK`l-97&0-3TXkVMrsE&2Ca|sP!r{>mM$92)7_a@(Y!VdySJc1V z8pGbRPt`G{pp62>a;Q8!wHkNRD6KN#k&R(%OGi9Ld1>TbzVDT-)vQgtx>$=@sf%80nHEKPqIeG6+hD zR=&aOm-HH#iH603)#D1Y)GGS^GD|2e%PU$u8-NX>LB-IJx@14zpq0O|=$AUOpg9EwjFNCn+IUsX!5ed(vZO|n_GvrN z%>@oY`=;;i*-B_o#d4u+_8lhy;xxhMl=f8_<0A33x!_sm4ueUlX|AzJ<5d87-89^; zl3Xy#qgvR=*nMLpER6h;)+@+SC7TNg_axy74)DTlR2nGVGDlkotfc`z%j5Rc zHCe06HB{MJRU_o`+S%HSp zEl9EO0`dAdQ_W67iPyXOOX)*+yS;3FSJUqd% zqGqHC%?jKhGgG68d&utB(I>0V8t=Ky+~_60wx^R6@Gz;QwF(L0BYElMU4HsC`h33R z-a1eh2jc4R3TiBsV!sR*v+rykLem1?MOt@8R5t5qp5oh6{ahZ`M}^M*88;v6`S>6(Fc@V*-c1@dZF(8>~0H0O4c6r4`~y`l}+ zMm3Lr(C(+UX9v#RK^P?JxynReVT|0P%)9m+~8dgw@$}@ zKD4h<{`BGXYwK$tx7S-Yi*^~(3d^T{mgowC0!>(dG>)ph(W`U%3u6`s81=L9@ptF` zgj2r3B@pj1XXHn2w)fGx{?V0BKcW4wfd#c}_@sMW;M?uEkJ={Mxl#{;7<0r}1l` z2~D3TfC@M^xqcNmV18juBCaH}=(dF=u>sf!sazVbgyBjfTf&DWix45GoWJ1PZC<5r zl2T8EmyJT_eLIXc*!C-5!j&cip)f!tP&lm2zV+*+&7BotJN%-oZ+1G|e1r|AH|cmz zsk4eGSIp#WI!3TbpvC!QgpL0y;Lt^o2j$9WNU%T*l3U;!e80;9nk4?$I{B~t?(h80 z=N583SsK>~Y;|3^sL?{aX1JPA!(Z##`POWjDOMh0u@p3uM0mQU1ep5qc@lN%H3W;f z*f3cl8XULft0nMLL4RGfz=`)W5i88J1}0*ZvKFyPvy%xsTjvTk8;~sf)1YVuXMqJN zCNsE2u5NT2Jck@O(<;*`fIHtbDG+&J%{yBXi0U_*_51KCcPW4BgK` znmvpkwG-C9kND7Sgx|`*p&lAI55_1efU!@YPz4;?93ql485pXkZ-i|zq#GxzS-uQe zVoI>$0smljCe)#g)QCWtQ@cK7((eQE^X9fW6)uF*G!IzIKt%{z0^{8pK-P6R19m(Q z_`Gfs_>$M@yUBhBYI~>Z;D-s5)vCEoy3) zp>tL;s2Ssc`qN%`vLji+k{jVK^4}+V(3+pgxP%@&LzZ-z`H{zolRBs|JJxwyEJIJ5 zYCMS2noioo4$Au?^j2CGe!$KWx!{RMGf=Usw!+&?{ONtl`WCUM&Y1}*iU1)F0vfK13i zw($+53%P_AX~+b^+42bXQYT`tL!HMq1XXv4C@)``8w^k~#@O_C*4su?4KW)mNXVQ; zg$QG>L%PP$lw3WWj`o$QT(A-WVcy~EoE-(yoQkC;{eBS0b1fF3+-`~HE1Z<$BIGheKX@$%j=E7em~Db0%b1RGy*=fH<|zuEcQrti|4G2U$zXF1mGoo8xvY)Q7ld0Lu^jwvjEP|^*s zDW}|V5YHynqI8APfltp?STK;;j4r4v=PEVTSZTIO_0%N);imaUoDKPBG6+?sgXJ5~>O z%1K~k$)UvJ_)(ZaD<43gY30DMKd%`z9Gn73Ehir!uHan&flIM?l)5SwDemFk!jvnr zohK!_xrp2orJKfJFe_yq0=HH3%EXrxsNQXkj6uB-CO>h(%A$mfeKDm+OGw4iV|6}G=VvzR1C6ALWuIzW?C6iQCosf3pod;nNSdSlo^|}OX?x!{y#P5Wi%ByzeKPhjgo7+q-c&si z&-2o|GFE&p%k>@mkxflcPmc8{05`OS2)I^**nJB?pcjgIISoC5?GCs6{QRX@9bdpUM)#Sess zYcSTD=s=)@C@0*4FCFwsTS!-oR_wyCm=R3`$lSm}cHXLj98H>q8YZBNp5KLr>|J&+ zOqyfQv^1EI#E2y0x6lA@^F%ZiKAohBlk>ypcDrjVPla_yo@;y*T(C;L-;jvd?jv{2 zjVOETBJ1{3RU4tpgPzVcq9U*)c7s#!yni-Ed+v=&YKNg?bCfQ$_*w(0wB=4sMjdc0 zUtJ&_PA;cmay@=J3DluhH}G4)(zS&OW9DhrSC7Km8GaBgp;a8PU0-;>AzmCGpPCh- zP$lULcZ!!P#Ohi7eWEXk+$?26Rc1rrdts5fT5l;gKU~%7UmRY(N>;)QzxE!DfdeOk zTur6(c+mw6$PQaZ8Exws{q8iW3oak@U8+S;c+tLx4j7#E5I&~!DH5v;K=q#fY&(vN z7CQMtlts_7@Za7V) zjB!t>})mn%?+!7<4s*LP8Z`v&kqcPTfl#Jx;sG`_gRnd z?qS=eRp#nkeLp{hHNz@&tbE>BPeiJ0iKewAsG;(thrn88b2-i~bhfzHhG0o>z09$z zSVA92p9#VFqe63ed7FI`B?6xTzTAjO5thaTUn1f{^6cjudXKac&1zLlb0T_B@vKL0 z&3Z-1lehTbl(u<&B_fn6Ama$;;X^V9I#`!PUt@h}c!6-H+b;>m)`W1psx{r)7EIjf zc`2z-k@D`PCa`9#Ch#9<2?pv0Mx`TcpY>c6N9Vt3ThWv)HPGUDR*35Qwrr~}#Q6%D zla_(1%t)b5<;C&KXpP_7X$*i7(Cdgm$6e{mtbTd?iuqwoW1}tbLz`ywN>K?3&lI2J zWtD%Gs`eQyYg0%iojO*RP63sVBQ!h3|K54Rzss`cLVYjt4QLtD$AH5A!N91p_BOnXmT4!A?FBgcv$w00^sP8i`@+)UlLrEQ5btPE=f3zrsKQG+&Y87>Djyx} zBAo2|fg{8h2Sl)51q-LWolhzO3?#7<90bKOe<_Qe1&}g=V8)3W@eG()d@mYR>qnFf zfe}d7vivz9;Ku zP2~Z1aFIzx&xqT<6II%9u_URBue7@tG{(W%pTrWP)wV5PJHBZ!vjt<&q-|yt;BePO z@;OYqd+*(TJy<&u~juaJbVKL)}t=XG3-4chN~jdQh2#sKkHku!r_zdS4*F{d_73!A9U#zr*C0 zq&0VBK!cajDmMfx{uVxp9b6?{vVvyjvYZ*mHsI(6EwFZ_atKiA6X!H~1nmC!ImKPf z_J9ZMaI{7Bb1KnVpXXL4B8j-p!W#>=RyeWoiLNyg05d`9q6%Nya+1Qgp%-p+<=F)t zzdx{osk=4DU>@Fop62vj;a{cO8Aa?&cSNWWv89%j1pEvO% z_Kk#y2Li9?Z%5DuKq42$2nIh%b*@4(4i4$@YH3$)Zr}<r2op&@X&N%qzjF?O;3;AmqdkxPudP6|(b1Vhb(ecGZ_a zB9Dt1Gl{ckEDf4(V@qmZTwWfm}G=eAW7csctZ% z$BF=K8-&M-GwBwrBlT`b_~x-MBd+Z$=sG<(Go{sv)apMJ!Bsr5OH*hn6wuhis=s}%H*uvQ-ksL6%*Y<-U_{ztSC%6V8bj#VG3+Z# zcM;~2{?6!4SeWBo@={P5G5e!R`J=AT*ZHSl@SLe8d{-gSDRH$uH9fej#Im+L;tPw% z=N@4Ej33LZ&mlf{ee%I*Rh+VJO_fWlzh1l8lv5mk_$}L`lBE={?n~-IFKHO=oQ7%mvyH?SoJonM^ykkA9~?l z9!?WKNck`ly#oqSZjKdn0{cnWolloXCz7>aDTKd#rLw${g2~xcU<>fRjoSo5k!ll6 z5Gw~qe!oT{vq}c|vl!vDm62gMjvn=)FKFn4ZBZ(4c?k|NOHYl4eLEyUM|RoAp44Y< z#;-5TZJ(S`ZUqa2HpB^Ax3O?UGNC0jKpFf(Ix;AtvKtmvqv-Lpn6YS;M5?muqZYFN zrrU!zqd&RVSb9mBoN zJMJ!P(7I=6WbbBzjutJ{TfyrcgSEjp;OHJ{DU)OoCf@p)=8$^|_ zseI$*Z9nOLzcV-|5xdF!?+A+j`*#7w=i@)X2T_?eq=WF?I6=x=<2}H7LQWdoRAH6$ z62ZtWFl~)yMo*3$x&O2 zf~7!^^JEl>L^Y-%VnHc)@tT6RO^t&qyj8H6Y$d~LX4@uwh0~(%>+0h3GAEocxS5E< zBc4dmTH`X-;Fcf}0@aqXGQh>Ul|C$H<(eaj!9I+}Sh58T>rPPIo6k8QW=mx{LA|t* zC3wg|*?F5d&3@VeR3%d*#2Hdnj(-I9mOxmDyuqWI8h8S5DpXdAph;wa7ud-;_-ulO zOJppsPa_;P2@cxUs}u~HZs?#3MKS&T+v9yEv7$yK<;MOORq;3IAV_5BgGrm{-=G$|=4DqtCxKd-Fib{g5KjE9UcY*Tcy+~ZjA1L+A zGzhRh4qFwmx)Q`Y+%DNzo!w!a^J!dd)Y%g!j}%;!cHu2D$u&@atw5jj<}W?~ztE<6 zB3vZ=@}w@(W_>yDYm`ef^~pFmI2etdOtvTU|4y?1GyjaO897BI^_qKBumkV z!eSLLF#9*h)GO~zVf0Ul2N-C_OboxVT{Nh2pTscbVI!7j&o(!Gz?Hu2oecM6g$~rH z+$x)K@O!c=#8lHXo^vHy+X=uP5v;~AMSrMv#jLd02(*YB8;`X`_z^UrRUSUIMhv8m z@QtC6d-hbc?@LH6QLJw`Ix&D)yX9@+{HhQ&2sD)7C;-9T5;6j1N!T*3MZ%NXR23Zv9$0LR>FA}MppG2I->J%HN;Q|& zfaT(9IDO@cd(uJ4YI-V_;E6(#ArDCaX39`YAyWNqarhQ$Kuzi!;$nBaiV_2D&7Kk6 z*Gol2GC0;9(-Ed>Cps=w#oDZ!T7-q0OCUax{t>VP4akX~kP&Sx@cisTxP~Vh8;QGb z;TJe3nJ?!B_U7BbKJ>Aue9}i#sBeQLBC%>&zh~6G>Q=#Hws`FMgSu}(sCGu*8lIfW zb)Y{o@eaLo-!z`C+~ddPfwYxOh9k8>+BAW{9~1R1c;++)_84V|JF0~E7AOY`jAq)c zM)!@L+oJ5SRv-!AVAcp@?@>(Z`gnjV)3F46L1||qw8kJk5Q=PeL_8sju>TKpdmjQa z5|QaD6*ZVOT3(lu;Hn^gRetXgf$D2O@kx~T$wSQb1%U;GGWgfx>IRwOTSZ5TUr?Tib+T?f_&;X8Wr8A z5#St|_w@*-T^ncuo__lSH&x(N+AoMpr=lgG2cwH?PI1Ukr%GuQ8i`YU!no^{vd#8) zw$_lc&Wcpv*bQqg%mfl~Io{U73lL{7V$poF1}$<4(0*kLqt)cFgjeR5&HIb`>abd6 z6xOtWXPRz!=in!3_Gj&Df8JcYOXq}kn-{jJFm;&t=s}X+_*-Kd*lYDFy%S!llxB1R zz3F^fy&81-6&hQ-ws25X@u$R5=s@zT9yOkguYdOOwMz!WH)L%!BE#7(BQ*w*ND|)C za}vR;@7k2|oSa@s;#m+`3XCY~3?e+dIW2i=n4)4-rI?UFlBED}UPxJf1*aMqv)S8G7{Ca2TaVtwjLUlrxkK5N^?i6 zC5CDbm^0+0MK1+7J1QysH&-9>uha+6vJ=D#v?Zi$x-o?4NDxf&|Ixf!ZivS+V7l~F z45F{Lx1Z)?V5(aUhYA4(WsDrO9+yo>b4P_C!Nyi+w5QqF7{1Bl+*=d9JX=Z>ANc`N zZ(5hTtIv#9N%)TnTmXzV8dA(S9UeTqj7^UU2piXEZhkVhpDkprWI1-LEh|l-k9CZT z=EW3J2Y&$=>}}oBGy2(M#0}304**ZDWc!?;UlwJ{Smf827*lIpwbXXe2j1aMwiIZR zxik-{E%*I{hAymJ{7t7&7@J6dRgwfCT3~?$J>}&d_`7x&8xcwYyZSpNSNkn=z=%9j ziiRsA({TWD%Ef8|7S%YJVIu6pV2NSXdd(>`vAjBiBT=AvTYXO*ac!o7f-LX4;2J<5oSi*u_2E1#0sxhq~P|G(s(aZG? zF4Bl_aTPr;v+sEU3uR!n7#yrN?(MBJ(7`XXCJv+zvCrNM-`TO!CFdS4n@6Y}7Jr)! zkKAfq$cj<-^i>`VC(S`=+W|Im@te^@0zBI|m?R!XmI~j5XEPr*ri1#J8Y73Q#9Lq6 zbG#~S6)^S|ZCOnqvOZGx!aF6$LhnsY)fa}fs&W)}bkPmil`stZ#eQ^Nq2XfP7OAO*Tk5V`H$_nrOQa-=tWwpzWeCYb zie!mXXOf~QGz`Bq+I}$LR|EEg=c(Q8c^=zSduosHvp++B0{?z1B2J#5G7mHM-dUxG z71HK8dCu8;$6o(f^NI*Siuvu_LjhOw?`6FYyYwZ!jmPn~A#|WZY~J?ZHiGz1fsY*| zKV|UK)oX>Om`GHCM-LBU^LhMb#cuc_=!mj{Wn9%C$tkyYFEM~0<0_U#bFhBVKJY#o zGj@KabC}DI?>v*@5k?GOs-0D0e5@|&Z4Ovsf%HsNEUACUjl|6$k0Uz@OEC1BUBw&w zX23V>ykGI8F=<*czp;8KKPuBX>ZtI9!o)$FkR5drde~p^f5D0qVQIJEF_r3rR524h zY*SYx{^z*=_@>TPA_^KMq7JqXqXfB06#DCvw2QPTDJg%8(@O*=B3b)HeKAV7(nVdO zou4r|&&4(vBT*K`;&9dTyjVvzE>=W#qz5=3O-{5=B)s@2)`l*ymnW|dLJxj`UA z{jhN~uMzk4eg`H-kQZyb(L`7c=(8tOz-!4=5sgP1Rhz86$AgFG5VYWHB1;eP&#G~6 zDI0o3Wueu(mZL@yS*8SrIy!~?HKC73cfbC6AI~XFmcqjZt-|ATCKcV3XYF?pgS^A~ zA%~@YhjoS70QOH0{&^z;f89M|;Qsyl`(I<9K;|{06#t70?LWC0VGS?7HYUporr|F_ z$moKK%^UOZEDuo)S6wI!NTS7cYC9ktO*W4mZcFwVoxtK7rTT+lJiF>>NprmjZF}9= zWX8DUQ7`xy@)sRgZ@^QWV_hLAjP%xuyhqKI3afRb?pz8-X)u0D`Q2?j>r&!L?^Q8A zDm94ODq+3^dxzfJX_q;=o&Ahod6%-t3bt#h72`=DKF(jGeXXJ*T4BavofeOcDZ@JS zYI=%@=1MuzP{cKAKAIu7HY=+7(R(sVrBrD=b;QFIG`Js4-E6hckt@PPgKO_5vAchG_Y&kecm30kc0a!K(Z^RV;n_vT0i#NMj^++hgapsTte`T`R_n=9 zW$ntSCau*)09qCmWc>oesKgryWN7U^tVyuSMJj@(l-3=r%hbgXVbj2SA(PI5Nip9| z^2E(HgCH@WjRu#%l4Dhu>EoIXh(`(SAd%L$dH0+C9qH&$cVXt zJ2Nj2hNxzE3qgmx2+zdeR75Hm{NniZh!`jLa&qoevE|9Q+H)tCqWuROd>mnbs2 zhG2qDyKla+dk(d3nJMWNcJXYcG=Jg^ONEU~;^L9Fh7N>0DW9>Y^*r(gVU|E$s85m# z1d0OSld_QD(RE752nkZ|8PJP2!4JY(oYzVo&7Z~Wi~JO1PsB}x}xoqzp} zA9?VF_QgFU9_KOj1}uNkbQX3H<}8I?1RM@`f3>so&PNPF05Vb-oGGi&$D+BB(6=8R z+js^}IaDZIkgz%7DTdl7~X<`EMw!&<|kyKUTr z%UymqfDY3zGT}}^fiImWrPN_yk;ig5!CEvXncgM_>9p%I9TGDIt#Fg6KTMw0$BNyB z{L4Al40G=E;q_}58{sR_&;8=Pz3)XJ*|LhVw>ASWCKplj9(X+}>*MO=l+ndjcK@>2 z|K6X$OnL8s?ZsIaq`W90oO8}D%OK1IZ+M>``UGVyWTX|Wf*UvYA@~0#yUI(VGi3>g}7RA1%Ls(|zZx;{55a23EJx^oFEf@+RUv22}vr;$U zWpo!9O)me%N+aagpm-6}xYO%6e7C>=OcKV;Q73}1N1gia%3*!`-oqQ%*WYC*@07VS z5AI^_Vj#1ejl}>vFYk$7CD|*xA3a5C8t=TMu~cYMpMsSo%2Qm8%+7nFMnavbY_8UR z_%d5Al#CCaFyFYYKumcxM}Sw-jIzl3id6&)8Ev124Na&a6l1+y*w!jHXZ~}x%NF}P zs2NfDCe8WErEoOTKKDzF&ZAr~$)zaIH}AoB7A0{)EbIfUnZKSh($ z(GnMgJh-oVd||yXT4M?s!^*j#bzR14uHZ^?z4ux5ia)`jgKiVN+IWpoHzj=MYg1jQ4_x{8F0-WOsxes%ZIW!#XWp^aqdBR!CM#kT{nHCVxYthVLoC12?taqZIF`zylc^%`Y1v)(#{*zp#n z+hJH9I70_O(JNI8AYj`x3Ntfu1uTg|hR$rg9r>7@b8;cKD=DP9rZ*(hnT_=}afgg& zK#HJFTxX+ul7_X4Sa@Ui+*J%!W4G*G#}gYt3KKkXsE4WqZ%s14X0IvNsB^(@vSU^( zM^wlzO6{4sN_}AOzxx@Bc+fSZ%V%x0d$XfjfZDYyS1+0kWG%1~$>m(alZN7oV+FWn zn=56jSAKvr{NB!Y_QEJ8b`;DJL9k-oxXw3vLtUnz4PYRePrh?R&Q|6n>EWfySL8h# z<>7-bHpmYL?ie0IS))VnF=JIvMre>5G-GWj_XLJAQ63Yw-?%bynX>N+KX{}UVfXBn zS1jomD-T%S)rZvb!%K4!$MW6%2AKr}d>KyGhu5kvKrbwPB>apec?hpb&9X#qaaeIw ziyDt{OBjbp57N^RSevnIfA&}@o-5qk$LDFo{=&|8uJe^lQq93w^_>Ee&tJJ5zNDNn3;pEP71xW$~D_@j=PW?Q^$y>aY+98`=e2O4^KzI)N-el_3>T!v3)uopmH^?Yto&~hl^CSPX*mxv^E(gYPxa5(9 zAvHkkBjy4HwF!FB`-AQ`^8Jxey`a4m@;U~Q<0J^!?z7eh4`)HE6oWiGKwzs&`xZ_N9UFGN_1+B3vUyDO(atGQIb27RZ!Dd1 zwACu+C@bIn(<+XR$o=6pPqj{E?Fp=-Pwp61!~W{nR>DyWtad)Ub{@`jr19?U_vs`U z#%}9}bdTjh2wY;{`LO8Ld(SZLP*wzgos;pXSWqk;DpEn_sJdgri-=DgvbUruI`chI z;pn-nGQwxEi11sCT0fG>9OziUR4byXoegrRDX_k7YKSv&*-F@)D%Wgm%roo0;Krsu~qM}A?do9Yit~rKSW`sLIFZe(5AmlKL?nk{C z8DdDvY@M{A&n|b-a#R|yBw>i~gi&zqF~vw28TU~a2miWu^?7&1q_y(P=w2;gK+};62Mqro|lRX;DBiHJ1FD(ayRyV7UgjJ$S|< z)*+0!GuupjLEt%HtUHPz)>Vs<8v7yrVpSpni!A5&=O2EBAp6>dKggW3Wm(8+$1M^Y zd&HH<%{ShRBw-Y=F@)cUJ8%g$JPk+w2CJr`%9!g>oCY73@$FELczTe_zmP4=HN}}H zlv~qKA*mkiKfCuZBBBxJuo5ZGE)^Q^xKq7^Kk7IoT@6Yft;^^mc?*&%k8hD&E_8-t z5%969bt&Oi#H@p@mOqgYs4KhgzN_g}Z+8CtcRyh@v~ZhM?^lAnA0stbRD@@{UdxsD zEC|8`c^lecA|Z*tdx3iQq6q6F#;Q=Qe;2VYSg{AfeoRHN4vo~pv{^kt3bLpsqVcWW zKleI?<6MzDsgQiI61W!|NsFzZd$#*}7@F%yDodum;>mSSndeSsMv4or6p79J3;3dO z%dKaIiEq7n@!~sL8K_J~Ze>gCD!q|E_j)XKdqQ`xEqM<3%7tc&fwRVPL*R#ovSRed zKmKveA@LWQ1{24rqjkJEiHbj+QWP=)K1UnWh&pftZja5-;Mfqt4@wiuS9Uln1^M*R zQB~Hy%j#o51Je_RI6F%h5ZC5xSuhYTICqJ$rD$=mwx4aDTkb@{^xm`c)}IsZjS6*a z)Zi9O9RmSO-hJ>F6vf?z%4$B^_g;Wuqs_N*_4O4UEJTchAvdmg;d=-FhGNs*;0!%z z55!0d8r2+II}h)Dmy--yC}7YE5sb0e-MJlJJ>2?c zLYM3g&LX)A`ymS>8lOBWq4ao~I%!VNmnv0$Q>2^uJwiwhMPVeHMG!V7!|m1Bq4e^p ziT7)y(jn6!Z4w^Wi*nEPR0Z*SKnRqJfyp|hgA3WF2t=hR5yGe|<7sMm#|1;dxkR76 z3Zl;i0u`C)cUagT;Qla3YSl!Uk{yTzQIx2}600Y24OHj?PY8{%C(GhGPG(`nXz%6p zxS$PNI^(~^ihSJonVCjJzfP&tgxWzd@#A+97cly^6Qo`nR!C{9bTC--<^f|5@y|YC zM2zaxUSnSSNIIX$2W%lnB7MvzeQ=W-MXb+gma}A^q4sy8mO#6zn1yf=sxiD&EkW!j z&%R&hL_UX5W>I~tAWt5!T>%3H#;irrsBIL{BY-3(L18F$dJbf zQ)VhfNlmLCuOJ$|yMMUf;7AC>u**LG@;YRnNcZ7=~tmTi0D^)e<_Y z5>E4*N?HfzitQ5)i4{l8AeI;|`K_>x?4wgCLQuUSMe1bsFoRHuMR^~h5vA1IKfk{F zsciY_M?b&v&hFcncCUW)$)(-PS3myflk0mQUf*SbN_KvGfA1HUDEWJL?;p7U7xP*9 z`6rj&`T505d~#{$`X_tuzI*v1Kf3bKb>*2{ftx^F2)Qfl2Y<~`_WzOERH8=w%B2fJ z7}gRaIOTeHEDR2ERd-d_C7+BT$QDoRey7J9`mfASyS8`r((cDs_CCB6+yP{5vXn%N z{4T)>l-D`v6&r3SD#*wbGn6@RJFM-ue=p|0erQ^#?8*Td1+Eq=(OXWthv2CKlf;MYw5x=0M#$VmPO^J$T zTFhi1{V(5zU+pgp*Pxd_m%xC{|KIEgzr!KmNtDEDNJMB!fl<2x=T%MAXcnQonkpRzTI*;XPkQZfQYrn3>$qR>MV24ZKKcNOdGOc8^`8<~nYd2`VMxcA4h8G- z%}-q77Ir-d%o&+iSSn9b6I%Odb!{-hf-nE#E-5}b{0Y4#tNL=-u?#I1)HTvT9X>_X zo)q;X5UUyL7v3Y~84DROKBG3V8K_SgSPq1W4X=tWLULH`7`r;xF|`Oj`|#G&$G5&< z`^2cjkk92Pk_2_WanpTv zF|hq5=P;Z(sWO^#cd4~9IA>h9gzZVtp+>MQf}Et11AO=ETHk{*9P8W{c_h^aoa*@uNbL|j7K4x zp`f!nQFrn}e%5_Ah^+s}Ab zpYy?!G85?YecZzcWg%X63<_4epC@791X!HHSYlEydkSN;u}Lvy0spomdiU>t>7{Gz z??PP-=@R#)YRENm1Sf?sm2@CG3j(~xk(4gS{%HTl7a#&Y_*p;Oo_25!Tc zD7yG<1Xe788^C?zC*|vSj_C1vZdP=r?Z~TG!K-&^tEgv+h`F?kB*;d0AY4rxKr(zA z@Qvpv%q?B9q#_VTe`}G1zj4mEt4?9G9YlziJ1S&~Okj%aLv|zM@gR1jv*F%45E1Uk zm^y_wJUfUOk3#(>0|N)leVn-mdlDiN7@E%Z-7#}&QA2DLj=aMoQ1;gxx~qw>ND#ef znF#vJPa;SEz=cPdN5La9q+43+mECuUE?vT>#sGgz@_ls&97#ff8d{jK(Y7WdMkUgF zx7?b|uq(BPk1o(Tw{GT^W#|;Q>dJ*Z%u#A(R42$&{N|mPEpd$xG}IxAe80Mj2^2jh zv-QA<&CW890HmTnMl|-o704H{R(0kWzE#sgg?fN?9ksSQmJ#0^WJ60-8D~T zA)G;OKbJ2den5nKt+QL>oB_y9!UX#Vh5%yB!WQV|%Bi{S`vnxRA zqnFC5vKWI+URPWg;$jCVO`sT%AG(DuSGM==zrf-l zVgEVY8GLJ%d9;Nc=2wh6*0qX_v$3>TM$IeVQ1%E^P10!S2T+jP6la7=!Zf{A*DZ9l zfil408@zrl{HNhwBGcSzG(t{-g+|sq1N7?{oqJcVz53ymYeD;%|3~na6rBYn-L0E2 zXqg$&+|e}#ACmIdnCOnaxO3M9B0_X9ccj=DEL_WH2u$tY_MnlTfS!1;W%?i82{Y!G z=ZlSjDT@_ahCjQ3)s%(QqCf!N;z@Rb+oJ#y)fHh=1)Ss)+chhJCO?mx|f6u=?2UNXQTDtyy` zdvGoVZF&}rrC=beeIg*YTo*@;%&KDU4@{^Xx61OX;@AbXx#OWL0um)@1AEW432_;4 z=E(Mypm0&HF(fs{?#2q_u~il~3^UCwQcG&FN>P~!LNV%4g?clsaw*E5E32Ik$q|3> zbUYiHq2=qTUb-ha>hv-R9Ug%{DGQAA#tmP&3*JzvTJ=(`l%_1l7zmZAOGgTy%eI^f ziU-F=jw5!C{*14V*y|)tj^9BFCdWL~zhZfILRikU4e7w2^LBC)iAL%}AM#n3J=4t1c$7KdAwL`&B!k7SXGrB z4P~&>WOZh1g2gDY^&#nErSEdntEZc5GJOxWrz-v3~i>J zuTh`Ks3Ua|biqx-UghicS_wfzZd@01;Er|tKOhCi^gXrpK2q>@R0{+mWttn_6TfJj z#_+^3lvJ0g#=_9Uyu_#S37AfCPnXd8C3H%`swinL&2OSwCz63pepiL;14(bgw!2>JnB`sv1Au?T>lvAY``{S_s2CH2eC+*W`^-$EiQ|RV#OBGR5a8G3ppF_E(BJ>!XTp`i#->IfV_e=poP%W_2Ni4L!+I z?caOmQcpe~cHYWz?3nCVFLrq0A3gYYjFkMd|IkY>{mDn4e6)A%`X`t7KD>PG>drM5 zCI8t+*Dm3D?!B`6^J{xMSE!XbEz`oV|eX=6(E?w>q7FeFQ8$jz9_S`6R)jGT>|E;+3VD>GKC+U)x-!3F60 zsdL0wTaG)vfBC)lcR%`&%*^|juUxry`JGF(%BDR#d(xVeCgO{aZdLvp-$!;*qzzk2 zvG8=6tj*UbBN7G5$z8LSp${Ls2g@y-pJlfQWmFGZx^M_ zh((x}{fn7N@5F?#oMhvoY+S1qrjMY(=OV0b;zALq$Cd6<;PGN0=v~I<775K6iCFNv%vrZS!&|o2h0y-cph6x>}CG zb?1w}R`TUej%8Wi2RoP8GJ{)1LdSIlZy)Yne8y}?1<&p~MEcw6V4M7HGBB*Fuop_X zM=aOMVrXCx!|(^|9vQ`9xX=~56myB;2~5x8kpYnLB!$4Ooei8A*@RV;j6TIxwhiF9 zaF2-!!Jo?UaP8fyxFpoV@L1QLkhqFv>U@rx91N*X#ETJ9r__7p@aN;fAyB=){pGvo zx`XO&h8TNe;LOTF8)a{={~&hiZWmE{MV#NeI7FdyFnU~@$LDXNEC?10vl!RBD@$}R z5)1)E($jT$9N8sV#HHN7^-I;_wP0J=5vuODRpA)dab^?>AY(a!0jwom#mHsqpd3;9 z7-h1-2F;07geX^8+Uxy$A(5UuAh#NltgN_aX>}b%s z2sgxk+cRc|q40p)!WXZ{X6fr+vxEvv*+wvf@{mb_Oh=8=iv<@Y#}D5ET8pI0)1q|^ zx7B6xFn`K2{^X~W;icn8ImiyK!u1_Rcph)kN^#;Az*?9q&@U?sG(Iaf2|s(r)ZRLm zkokc{A#kOZELl%GW)6r#2iRg^K$5-GE|n)~8~acQgs@QZg=GceRgJD!T!bH#YsIAn z@pdLcyDq~3!n9%bD#NKT%T0xFAJo6x|YAoY!%-6l%a zMoo+X4?w}}qiXb{k_d1jp+mw$4aF9z`WWh=!DA1iQXa|Q5W3?RWlJ5tTzhwqJvjCe z-(TOv`3oWD3e*o+GgOm^`(7bR=2-dk?jiefh2DumSSaw>dzQ|A36`X=?_vL;k=GKM z=Xn}%hWwL*u&Z$&*JeVi>WDf{)qoc%Qd>b$9>91{Wm5RiQNr_F#VPQFr|_J-sjK)K zD#e>w$C5|{>>|+Y#Y4Ag2Nl-m(nQ3aaoi}_rmx}9QK}y6&>gZHGTdOVslsux3IXN1 zgTo=4$s>E|0Ohg=y7D0p5UrS6;e*k~_Z=%0sj^8B0)Ti7RtL)^GB$3;YP&#P;13TY zhHY3a5@2I(S{K{3hK<+}9-C!B8dSuVB)}0V2%0!$92bo2BJizyfC#UnG~|6~<|YuU z;?Wd40?!fGET<870{P0t(6%0o=W+ViSf(RFjA?46j|wi70ene5f&o@^e05@~7X z01M%ZVs}DSpbA={2VTK@R|;8zffCqvE9lh)7sXY7Bh@s3!+%7XMZ6ii1AjX9W;L&h56n+x-7LK zxK7Zyo?AfP3*$J75$pIm&Qs$-o8CE2F-C;wV@i;fc&=y{JB0C&gmzdb1Ok)#r*D@1 z#bQW|ms$uPcmCW7jauD1KJ>&6`dF{YnxRtiy>g#>3RS3LWz z3Q(=IF&Dx-zc7m`^IwT+tsP)x>P^_tj1BLD6;eD4P1a2=df9=7^UUBX+k{|`xLpBh zH@CBc=)Jkj0MKT>!)k63=pr(@Hbfj8b-I|>>sdJJtjO z#i?nPO_(~E0aw|Gh&d_ycPLuik6Y9QbypA1BPZz|)z#Mep|8!|^MQB2@eol<5S?0c z=P^7s`JuN;Ees_NWw!?iAw85i)jNVd5p96`_cj^#yKHAtq6+Jf9k$;srY|@dR5mHA zHz{zvJ4pbTDcI);+o7TB?l=pY4?AxMPIG1oCQBWrM285((Zi1kW1=ju6+r(ZiV(QX z!T#D_sof-F%II9zf_arThcTpvV7?U{YD>?BNBAH{q+uV@jM(}`Fl#Fi&7g!}_Y(@m zuoB*5Q)<357mYs@WTLBwluj2a9lCbbht$B_p*}h+Lg@B(r2GpRUVrVpqR`oehATeb zy-3^>!W^>EBf}RMLjLU>$v@F?5 znBi4C@O5+!>(bZ>5*dPixsQcQ|8|(-YT;>#Xgs8f=yO69GocVZSosAL#F zR>g+UO#^$$!jeG^lL*BQ-D~UHZj1+>gE3MT7>OWIsi4_?IdnS8*vPk94!4ZUfoXF> z!7NIqi}nxggj-g2Xttl$8i&V)0d|jkHU2iIl;?E;v^XOsP96nW_>p6S4n=8x2&|@4 z+gI;Dgv4)CV?mFKb4UTR=JJuupx)hu03hzYTf|s5C2|c0xLS1tQ%azqEXzZ8b*jLy zi49;ak$O#yO{x_^5}av-Q0QpjV*jj1chFA}#f_Zf59Xy;a1WAr{nXWNcKb+OfY>+a04dIV za8Hc2iZIdEwZ^g$W4Vmp2)#tmrZCe^AE0Rj=KSU!6)>sf3h;imPc6agfsCXLi6aC& zNISO$Fd$sz)QzV^sI0?(B?3d9E+Q8?7mm%i4K~Itx0S)6i!H%ICup?8r^wY%>yC4c zM+EK-nCaF7#?Pfgc5fgwaDdoFF5O|@oGsY<}u(dICySOMwfTucOrAv4O2m3b|*UXaRdQ_#ZpPAC^{Rnlv{BeoVmEwb26c%!6 zP+sQ|LQ1qK5PN|Yt0)9F6?R$$3>L}ggd6nTGkp)r;}P9jZ%(wU`!1E>!F7I0_z*pB zzx4g9s_RbCD0b`|K7JOJva+;VBNl53CBupyn5czJH})f@7<#;Uoa^wL436sByN{6v zUA~qH=mMc`))IbppWR3?q8PG8o_(+KMwN{3N8kk!Ycz%jjgWbLo_dC}<(&%q{{C-n zea=owiFUqknFkc}H$^O(7R$kj@ zWpN6UOUcr^4=F>X1T2`At}2WXBv|G!<`bUCQ6AE|1sYo65|#xhseGYX+r^8s&}mpJ zqRS(7Pp-GUgWU!9LpFnFKA^exQvF-a9n+bnz+7I=kwteR?pkCHTPCP1p>Sbum2iu7 zgI>5=P0olV!;nG5EnR=gp7BB1JtB6KFC?s6tnpQy@=)+OGRI0LUOB1H!V-9NKKLKR zYEl64+(=YtZzv|N;GE3jpc^8W{z3h4IShEoC2I~_t7e8lcp%g-mhf)1^5`)oA(&D| za0rW5`TnUnc2)_C-IS3h#F>h;3)W~ogY7v>u-Px&b<`u)fphyz!^Fi#$_R|%6vfHz zX#$h-L#$gi&Wx~#Wc_C7C-{m$zG|lSs*0XqmYASb!rDh^t^%-ED}iHT$P6giD`tX% z2=#XBDSAP20fZkRK#jTm^yPzp*DU@2%hW&8QHPpTn9aDCm_$bfd<>#u<7wKu+}G|?6cIB616JoKaDCQLwLN4ke?keBW+~4;+sytJLvYt{?O$5{%dxF@dPY;X;nN+8ao= zbA$Vcq?;hu3+yq3-?ikGEjW)B<|y<<;uKzkTwIdfkyYY_WOYX`sO5QP@0f~4>`1S_ zf<(kLiu{_ZSeL{7oDMPupGG*n(eMb63xuG^pir{CA4MG66jXLSq>zYJ?OYj@?nf!7 zSw)LBWthmTTBPRKxv=wIof+^>8OTU1N>&s@oExb>2?I1g#6*2|OcZADg_VI% zy|T$Aa!iNL4r`a*WktZdP?nq16RxuN<-tSZY^I!q&X1T)@PjglZxA2b;TGrHJ=TM! zu9tLBBAqIm@|3LCS9$o-ZD+8!hyjbx#57fhZVVWTGbv8Ivyb7z9G51@kG8;{^dFv1NzpN|RV${Z{VaS9Kc|?V$gDQMBiX?yti?2{Jr0)6iM{av~>Ftci zyO*3t1Iw*PF*RJ2G|+Qqk0X6|b`Ji1b?raHY~MevE5uTQcO8(lG%iH&LJE8PLd11*K2^HrD)6Gtk$gEg+BSSUdz~dL)Sn;hp0F zqs9t)hHYXtTkE@MuLv3V2u)cYF9izQJp-I(;w-R|6a6)WHgJKx4`Ep^MG)`8Gqp^HJL?1@Pq zw39nPWBK)J^szGYBjwwN@Z{wZf-81Y-N;okXl6l~C}grYoay1}WrqA)aNy5)YCdJx z&{~K5-CN(?**WL(@N{K=HQmiwRGrgTxGT zU9Igx8JPQfn=q-NYQUq6?tiFhOm_lg@8DouiNLPe%wZ)2APd#DX#2)bp zX{lzyOGDtWnV$Xw3q{Z;E0Gzi7-4Kf?x2r_he&dl%0SCs86Qt?-K22J8Dk;7U5z%D zYja&5hJ4E{TcH*`s-qt-ru=;ybH)_R`nrWrAkVt*IFS#ixX^4bbBdzR7W)84SdxaH z3^=>EhE;bw%5_NRGSha5;C&cPPOQ9#yW!C0Qiu^DbgjUH|41_aHOa_{7%75G+J$8c zTssV6v}IwinxcNW2AcOUj~-s&4`%pE@BlL2`S76&GzzLtjxrAv!p)m#Tql4;_ZT!g z-?@7Aa?G`?DY%{QeEiYw+Yi5TYV&J9+W8Kvol)h;mDo%1o!#9xUVr2D*ZGaL4!h^x zeC_q`?Y{ZLAF^Qo8*gALQcUg=&r7x)@-@4cP~o@80iLSiUH$R>{jXdR!-8Zs#d;iaCLLLns^;@`gjqEkS24*nDA^HUeZ*n{Wqv3md!Sgd(8 zBGJM!-@#Q03pZdW-*!)OIt+ag1#A{q)^2FAVd8X#{^Jyu5#iD3x*To295ypDP%{RC z;5bkbQipw9ZyoU5dxSp35-b@;V&G7gZo89k@gJiksOpx|=UQWLo}l^wvAm))e%R&W znfJL&M-F%Y0FNf>hyS2Z6d3|D8#@PgL&CKyQ>J)$tjAc(21&@GCdLv!CZzF%?5w9lDyw;2pV<*|2~~?zKyQfi z@B{?nc|`f<1R)$)u*|ajopu z7u3SCyxKXY*c`GK90?GNGB+CesY}1$&Kf^y%%Sx_lC3Tz+H8sFz@xh?mJ6A$t0*l+ za1>!MxGDtMqRpO^m0ioaVZosYE~n2h^xGws#%2|xKT(t!R(*6Vo{}m7eo;E&szPmP ziPGIz`CS)I&lDZRcF~5PSTA4k;tE2QwEpccFdkgv;_fYUcKzM+^z&z$qgZu3S#dF#Os&oVZZ;jz8ueiYm82nR z8FPrDx=`inlz$$E$ifO?2-6T1l}DRkgNuvpQVc7`&CzI)YO+8ucI}F5@)d9Ah(^eG zml;CAd{rkeOK_LUaQbvn)bSsZkcnLw|c^T8782ZnHB{7Ex43*tCvLr0);_|wH6+4&6P2bYkc{n^n&=?kJqBK~<| zAGzh8fMBU0M;VmCV}{wW>%y8U#wPbH>8Ma6PE9LyO@3~P648bO9HF{QL0NW~Gix?I zx=Hu_b?d1D5RQk@co@8$^_nEHaW2G<5w~&Ex`r{13wJLI{TUHgdWK%vkRxFh8m5p#9-rBD9>_XwN-;|&4c&;0=M!pMiCY?dX~0Ik22!|G z(3gH-nD}7vnae#8uv2hBSw%n$tH}7&_w;~5&TkGODE6{r(#u7}@#P&OVennu9yNA} zQxud5N0xa+e4UQQ^5vnNk5;I{p0x}{eS>t^m=|=k>`^>?EAlMsHkInS=Z1zeee9k$ z-|QfSD<4KBb?I~+2hTkU46<|g0y0%D3B(n$M=M+~DoAHxM1{hInt>B(RinD`rbsu)6ctp`|` zHBnfLYAV?VMQgpEXW@oCF9XgYff=ks-8g zGGsp?T+H8s@G)Zos(gT-5~d)kF+xHV5a<#+r_dT21QdmOYuWBTc5)pLWA%4fqdvgf zWrN0p|H2#J(~A9cKc>Xer!Be}E9qAv>+}v&7qb|x5%Jg%Ga){$19t>T z|GIj^O*~yfIPCNhQ#%7zmte#_1#3bT?xJl^CL)i(8IIN`SjsOu{)-H$ z`-p}1BP{S$lw9FBx4rDS^ByLrq(H?Xdbp_;3e)7`Cdm4mB*22>6y9MCm}YqF!ydV= zM{_9L&bnMUNddfkVdtF^J1Is{#OnaR^DeHWx!8=96Os5PQ8H4)no)>8Se+|LnZ)XbWaD z691%l20W!nD0K)Ij&&|9;tQ!zeug>EEs(DdZWAl6f(vgYvKc`2D}+$Bcwn3oV=Foi z4bmx)IdFCl7+LHQ9J?ja^KC#E4>?e8PHW$f{2mXXJTM?I*VD6qm6N)&rJ4 z|32lP-~Yi6&cE^fAN=9YJGWG(Veio8tNT2HD@D5B1$VsGYP;Qf0W0S2y|=8XYA$@7 zaquh(Le~)sw-$a7{(bS<-=fT?cJGf_=Xq6~c~%hI3~>|De-fDBjI6_@`&9Kdjf5zoN4xG`b(Au7t0-g( zu*Je1y48vrf64&3OmfBG;5QQEh5o8pZ7gX3TkXCV=3} zxZv%_geOZ$3?zuoe}CO|I#gw>va)0x-kQ9x&Ls z67tPG1mG<_>z&u6?VC(1Sd+=0){_-u{yd`cY^mxFfTbL3eZfc=lyV~{`rwMQ7-Olf zR093PZeF3AjcvIrAzDfE6SiJpE?2wlh?kt zdnNELOA5dK>KhUZGc-EL=t1QK)%fiZYTu(vP+OH2tRIF^$bKi!@um)Shh*~2|Gj3{DPnS(Z=U2 zLAL(f-|skxojzB>CgOAJE0-TPhV5#q3<@Qx^UfI$S~MjHS>kNEbY!M*WQDY-m&P`2 z7$ORy@G7j7=l)pN`>owisJ}UI)z;#h zL~SI&h&xgI>ckCKZ_?xsGspOzRSE=uU3o4n6v7_QxDbg%b7HY#iGjDMl!C4wwXAr! z1Ny;rW$!Z4soD3tpIq9z!ez>p!&V^)!|oZeq&3`$+;VYiR?l`0i00(y;0QS!X_!6E zaB$%9z+6Tfoong7Yac)&31Pw|R_qIT5-}4xU%I~bLlJe{7z_D;>v$IBW4ut}vcm_L z%kDr=o%N}m;1p;tWYod>N6Ez9)_spB@hWA4OqnwNR>SZjs~!-<n*Ou9pUSG6~+KjSHJ;r)Nu_N7tguc&(Nij-~#<<4Fhq7J4pI) zGh8OUgCvB*4+xJ08h2YNLoL7--iRMA73K<1zZdD5?D}ffQ6pzt2>uDIj0( z-tb35t9fgM9ThgD0bE}0!7If22xt<-AoCx)z*-#RHU`&W5eyOr#!&|?#F3!;PuXyX z07=PF2My~esI*t|6UgB%k$aJCNFY9euyvE1B5Bs*4P@4L@u&RFfHM=hQ?IBm)Pi`G z*A3T|ibe4zR#$Le4^iz$GYSL=_E+~Xn}dM#|CxSE>_=VVwa|*k3|~$*FXQUM!GEm? z{RbnF`Oe#DAuNh_P%PS+D4e!_5l{cN74c~J2fKf;`%vff+J!xafT5IIhi~nEWlf3O zAq7!!P*@@-W@tbpxwh0Va~(<%+_k_wY?(TaG0G30$6q40hXJm0p$}I*L0+pyP zS&=7BxT+=!E~VKF$th;R`$lTo{#tP+Wf|Txim@*jArcvDl6}lY=TSgH8k<{w{E)n$ zj~5lU=$QWo0I|)heO- z1D2x*b|zY;ARu>e7by_w`jXe;Y1Xs33^w^|lqc7tuZ9bZ`IQX>kM2~qS3_QadSnMS z2u@177V?oWDzPsV_Tj@)h~`*<6V1Vy`z{uAaib-vU3R3uY%-kGkNaEQLgFbUlswd@l%%S zkL4fSqt>xmX=)yylp@vzOhPcW$rQoLTv8^cs0V6RpT{z=sHFn?DDyoU zP3zIQIq1NR4Wypqouh%nVnva1lVHVoDXCN}CzsvB<0BygPnMzO7%bgK7=hp8TNY$t zZm$g#OMua)g?gO$`C}HTj7gA@S}{&stuDYT7j=}IGWR0LhQF!s{F~P6>{_)QB8WM* zt_@WpL{S&28&Dl8AUpp#UAf6b;DP{VqDLInj z8d7EQYm^2<3(JveNzgN+-a!`@7UkEW2FR0HxXU=@wDy=krPJ{+*n_(}2mh_l@{jo} zJ0IO4?vE&TE1i((Ts)S2jyf3%__fJPIaRS&*yEbrtCVIj88muX7BVeiGp2hUwzAfk zWzU7)Mb)WZjOt@JAvC-B!X;R9#HS@=xiL|VCQ!Nxb&m8A$ZNYOUX@dDL^iG}>iDXNze zF<17PO>!>Dg$peY+%D|d<*skv+h_ZV_D|tE>#)m!Lj>ytMkt8)Jec4D)u`v*kPn;7Qd-+Gibe;7%eMNS#Vy*qDq7(+St(!N?4KZgJCf9*CCv0 z@__J&u>kDb;)?mu1T3QLm(sgRfzKG&(euwj^H-ZJ%-AFAes|9tbWO7HTwDfU3L6Pl zst}*Q`}jQU=SvL8TZiZE7Hc&+D~Qh+IbYt|_?1$MZ|FCHGV2$LvTk-UNdPq9J`peV zNSUREAdg`e6`DXrkzI-ZKx@hvO6EctP`5>Mo&La7TkA)B%CwABwP>i40Hc{h5dDHp!#0g?6r0AK#|1&Z^j<~7|RI#7&M_ErF zCpGHSO@wh{jk32zoR~`;4v%qOn~mq^*lssNT`(QscH|Tk`cXONx(tVosdsB^LdM_U z{Y+`+uW!ZA8?S%XI$GA5iET`4u#**>-P6z9Dj5naxnL!Qk}TSWQb>#VrOyUBK4q-4 z$=0_J3wiD-VTP=`pvtK|@G)JWNcYVUNM%heIb5Hxz}=`Z)a2dAKRx&#kg04v{>$&6 z@|c6nU||lV+y}pR_3!*$f92qB^S<0<=O!i8w{{Nx zcRu;$pP?r||M4Fl{2%=B!Al?f-d{cVKY91b!T-g-=RWu|zeFd#^cN5QZ~pr5!w;|i z6TkPtpZ(zPethu%@b`^>^6h{65B{E)F7ku7IDYMgI1V{(aU9h5etw7JF2}0A-{JmUQYj@umVw|=%s5BuhMZ*u%$ zJznSaha4jl0U-|~QbBd;_*bi7MfdH2U0^6{LOIP^G3Z^ylSArAiSdu5Rrv@!4acg+8Q zLp&V!Vlpa^I3-%*(Bm+|4~-Xm6^A)3ap-ZF$`A5{yrCYL(h`Rrhf#h|7b}azU`|UM zdK^{|bB^7rd{S?FjI_j|$6*RTG(9~+_ve3`IP^Hodz$(Jr1LCNtqD$PKRkw}OZwCD zMT>iE^Yv0c^!lM;ARec!t8BiTJTaON<&c{)7CW zt~NI}(h`SdacHtBahPW>&D9UvWY0GKNPg(~VbpGQ+D!Ti z5EK1r;~gU{)P7AImc^mzh>UCeZsHp1 zYJKWa`ZpPt{Lu5mRQ=H8k$6mLi9?UWV~E(WSgO8N-_B#3O_eyDEe_IN+g81?Ef$zK zoGlK@D=|=BZL?_;haQI&^qOP0N^^O@*O8Vu^f-+A(=DdqxS!J!haQKs(9_Bzb;Gt; zY~s-4Fv1V&-NhkVN*sC|RuE>6esJt7qqf(zV249uCr99i8@4u~WV+>+^|+N5)&{#WhCc(x$CC8czbM zuBBY+<(tk9*$0^a0A9{Y6f`jr&`g=^3Pl-d1 z!-#&6=3*cp$PaT`;?U!;gnrPL9p#I}p~peJ&}7pRaSdga{315nba&!#wm4`%=}(Bq zHrbUp^f)wLkS|VaFG=Gji+r8Z5{Dj#rR9?Rpgb}LrF=T6B@R6fBlc4Br`5?BUs^W4 zG!+NO{hXHk(DTC-{U8SNhQ~IWXd6z6LyyALys z_nJ8LI4o^1iHm%b_R>o)-GmN~b7|~ePOgRT`vVR?zsq4B>DL@9j=A}1Wz?wsl>E@+ zurxoY!{r5W*``AhhaQJ1`eD;n^8J*SIP^G-*h|vfm`00hOrd`}CvoU;n8FXr9(A$4 zgP2Tdi9?UW()!{1fFefXBVH%9#G%Jw3O{V>2X*q4mN@h{EX@z{fOe9v+b~KTdK?a+ z*NQ`*!u*4OKjM&2{9OM-KSP=-ZyJrK#+A54w8UW^4$7oC^)eNPmlB5_hbj6&nIj&) zZp-yFnjiO?I4p;QvTBEqs`{2(u=6QuK;mi*B3!zd1ItQ)_W(-MashZV$}lLu-x(>57& z9A1e-kHb{|q1i*D^lz9X4m}Q|a!I`)54_n3I`K7e=y6!uUQ%zIhF21Yv&BI^5ewrT z;&D<-9C{o^Ki^29co(`dczHThv4 zKQwih*Ptx zPQoa0=y6y!GX_e%Gv@`zKTB@Xj&P~M1z@r^kxap-ZF zVlOHGo38eCN=qDi97g0)i?^DCo0^Afm?aK94ollh@`tiZ9kNY!B@R6fbLG-hzDOK; z97g1lW8AUsI3KlBIi+ifLyyA>>df&UltcQ}qkNG#^f;WBAEa}$S>=WFAC}EOoE8Vi ze6yG2fzk2LDP2o`==tF+>?L_c-VwW#TH?^-Fjqgw7t(!HZzm4R;^3Iqj`A33i9?UW z(sD`OP>;wb>XDOL;?UzT#gA+H+IXLIpVAVC9*0qTsl_YAVopmOrsL53X=To+K6oCp z#G%LGEcAnVq19hLPyhCJ;?U!;f-rO98q!<-7?o3rLyyB0J?(f`KTCi8wJ9xe=y4d) z)9M6mBysR{PD>o7;n2pu<6k`ddrnIndK{+6rRG1($wMR#%i^Gnn$i-79)}e~oNF%` z;~SMzi9?UWsGe39d5qeroYJ+#p~qp0eoz*Pg*MYvJQ9axaFG7`5aKbVB@R6fD~LEp zKd2X`#9b4IWpOYMBu|X`)rrHhI5b_6IDEV2i>fo4?${RlNPg(~Vd=QH{2^~NKH=@L zEpa$|9Gc!1i<4U7aP~N;yTu~q(&^VpTv{$Q{m^(K`QhyMX)>;)E@-qriRQARmN4m}Ra zq&e}WR^PhKM(qHoe!-#%RE@>~x1M25FEpg~^n3|tfKPZpHWlBpNdK}J5 zF3B(3eD1{IY;jO0823@?QWiK+8#b6VoiPl0KWc4OB{L}=J12Mc~mbnKoW-@hq?S97ENC?8lUDh zap-Y)4AB}-e8Kw*90wfk<$I6Ac|y1AtA4lj3I67O{jB*PzvgfCMUzo4(&33ikHZ{( zFs`Z}E$!2P`0d-R(p~?}*R)%g*$2GIB;}Lx#=m`kheO$%IikrzH+O4riqw8eS)1l{oY` ztRU2!I)P@VZqv!fVUakT4G!Wl(h`T|anME`)z^tbkHZvuNg3p!4)B=L5{Dj#5qqi8 zU*BMAe6L}aIP^G7ey`+pX#*y~Y@1~AS zKTbO-`C%D;7}3)$p49v}V3^!eKlJ)x6bEIHN5+>*oYT5%>mHwSNXzpaH#nYg+~m*> z(l_uoe&_oG4nMbM%=4|29KoT*y{G5{Zq>EqhaQJ1cB^tpOw`f7PHBllkHcJhNgqNi zM&(rE(Bq)IYCN&TJe0;G$}ailq?S1JIE?6rW-m28aT1MB^LgUX4}pf4vLzK*oyhh_Mo>E`sOfA{>*{0MnL{XEi=ALjEz)6?pSQTjKm z5{Dj#DfZHo@!#m*UK58N2koS0GcDmiY}!)Wba&#=<1oq(%|Dx3x0L)aKh7uZ#X%d% zaX+UeKlJ>tf|zsiaVGPe`5{Dj#6@;4O$0>)@)uZ}4ap-Y4D}GQv zc%0M{haQJR2qjOPc0Dr3zxL{=|I8^}OB|--(DFY`M|XrB{3CJbaadX|X-hS~LflSj ziNo3ApuU#=Ek2$&oUYFJEcihz#3A+c>Fd4K(R1xqeYtJE0$+clrCjRe(ulpJylHV% zb@iNBfoQGJm(^f)Z7AN1qI#$y}LBn~|eQ}u&1ZhkXwhg;&%<1nHhq`fwfW8HB-rzH+O z4l9T`M?c6D>W0)0-@dvTv5{|5Km7LM8q&P^*}Oe0A`9WToY9}?U5{KzHs1rQIA?4DtdC?U#o#V%8 zx5^vp@R64M(DTDw9K=9bH7chPhaQKs$Un#%+P2$dSK`p)a0tERiPOaST0Tx1YrD>A zi9?UWRJ*msmbUrK+i*%8dK^aiq50FJb(GIzk~s7@OyLLRev?t7c2dJ5ap-YaL6|vq ztGdFN-Zq`wXutWIIP^FyZ7(Ue#6`K~>q#wf=y8~$AM~lW(fB0VZ+@OQ^f)Zd56UNH zRg+hnwBLN6IP^HIAkG~9pd6C+qw^sWhaQKe`9VHVZW-tB^`w?K^f-*_ho&30(fB0V zZ+@OQOvgdm>o52^)sJpiBn~|eD+n`3KWLw-A4YLW9C{q4`qT1+x_PSonmEkIp~kDSyJhaQJH`axRD55A7tO^HK~!&&fym^6Qnx5u``p~qoVPdoNsMB`%#|J;X( zLyyB0J+0jLP$rGmEj2h2hxs_Di{*(I>EcH7<6aYo9)~G%NnS|*VOjrS1x@F~`IJk| zPCahipY&PsL(dOqVJ|gYw$=P44rhylx?8y=2I`NKTH?^-FsdI~d}*qk)Nn~0dK~81 zt=di7WKW~{aj%I(kHZQg&C%290^_flkDC|wp2`o>U0zThOlipvJwKdhvjh4UQ$M>vq$q0iNo38ARZ$vap-Y4gm}uP)5JBJZg%W%i{YIHkHn$JVQD=r zUx<-9dYi0D9C{q&g*pC%v{qM-`qhcUvN$;Q)zhPLDskv>7}XCgp0Uk00G1cF#G%Jw zu3Tz0W8yQ?5{Kn+P$rGW`x1v9hbeJy$G&z^dmZ6}_S?jv$KfpOR{iW2V`_AN{xxy< z?ck99!%HvSWbi3(9P76@&e!(`y!yGmvw78DbBx+cj&*6QT$te_}Dx5{Dj#5&fW@D&3n*8ln61zfByb zDIIq~o0hqK{_)YJ3$VXj;<<|lt>r;fDb zhn^p%$|d!*7-Sx3nR!`LaS#KKQ9j_5Xvq&fKg^X&@`HG!ewe2prtm|PN!qNV^bcm> zpX7(-_`!IFeuMll>dz$(Jq}a(q1i~u56kH3L&mZ?Vq`v0^W!*ea!Y>b`C$ZyrWbtm zn9~x69tU}0PW_U4L7Pb)8EJ__kHZK*w0x+vpQ;xcR*6H8!&E)3jWi|ikT|^b(g8$} z?wfVSOUR`cnv0#%`U0L$jOI6I1P`Si-- z%AFUzPaJw2M(riz7}`qe=s7KM=y90K59$hW@pYsn4$I>(#h*wVdK?}zh?}ndg7+6V zv~QhPcaK9G_jY~N@3zj|-`uaCHM!h(Du!5Fz;!EmQ>GQ@6yS$DzrU)5N{y0S|pQd0|dV9H!wQ z-J9GOhqPPEcvN31zn^kArk$&PgX0;;$UOGBa!GtVM&ldF4?RDeg}o%NsK2*ilQ{G^ zOtqKP&+LsQN7R@CHY}KKS+OZ5QD_w zcgGLPBXQ7w@O4T{e(3pOL{F;=nhz}ob6Vms9S6t0SSX9qUMjR$s*db2G;O+isd{hi zTKQ!gR>=?Z_@U{AZ8Qdg7q-M<9u7@MOwGeJfD(s!ILHs$OUVz*>W8Kq)DxrgP{d>^ z9?1{W`Ju@q`61=fvivaOKREtd?mt>p7EuW0? zN8-@qFqI$F5#lgaPb3aK4kP-Z>1pXN56o$aLyyB;xuo5yj>x>|yu9cXxg;-myeNjm zPfl#f56kg`IJDTSvTCFy4$I*n?OV;jsJ=)Xmc>E+AReh7=IICHN=-*Bk$=#R6&G!* zZ9YZv!?OIKT$1kk6C*8gSRRKan-YiV>uW46mztmbBAt=^(DTF6ILI671@*Qv>!g-A zoGlLWgBYZq9$WWkG`^%gqu(si%u9SgO8t zs$5bY$rm~QVVU_4BXUXF>nBV5sr2X6XepO^xwL{RQ|+Y|yU=eN#U*j*aacO8q5js- z6PIl{iNvADVF`X{egvdHbxRz29H#1NZKjs!?21fFRx` z4%2baUXuRepbnVR5{Dj#6~vrlFR7Q+$D@8-;?U!;w7n#sG(Te-Hi<)z!&E)3Y?2Rr zozfDA9)}S3P(RBn zV&waiTH?^-u!2x?{D&6X*j7_~92SYgvN$N0)E9}vw`*ROvPfLo!P{e7@Yv^U__KXI$gkANN*&$Rpcg9x0c4xpWqBjh4UO#xsdSkHZpr zTAOv-*yrnSw8UX~9Ml)7r{~2rruYwy?&<;c_LP?V(DTC-9GV}eJW4W97f}<%Akxd9qGrV z)(suSL3{K?Ht9(`u=#oNL(dN@h%?7-RVK+Fqjpo`(Bm-557JwH7|lm>O4kyH9*4R7 zpbw|*n)cGXJkZkdCHX|25ua@_+2n_wA4cVpGD&?fI{rDOYl*{r9Q4~p<4GL|{E;~H zILy@#@`bW!G(VR(^f-*lrABvk^PHAA%)>$btB%;FgHMA`;?U!;gj|wG#Al=>4m}QM zWw$D~w((5j(Bm*Q57hDw+i1OwKN5#!aL`7YVkb3h5{Dj#rR9=wzZQSmrZWBKHM|1x3w)MTI@PoQRf6doXJBd@GB|r51a2EcwezY=cn@yECoGlK< zoSJRBjaL$f9)}flo8!kxcgOy=SQ1}4Uaj%I(kHZQg&9z&bzi=GAPx>rz=y4d;4~~EJv-~ipB@R6fQ}l!Ok~%`&kosYn zbwlUMr51A?_3M%!dVUy{OHC$8|2Zvj=y8}Lm(&dnk5N8o*d-1<4s+#F(-ot5Bo52s zpnMX8(fCH>`#qnaB8%~p~qnb zRp!Js^yB1@QNBnVdK{+8CG~=b7))u2!+ac?|Db#lizzK}n2$r#(=8{IILxmjdkhhq zZ2E%t?!|GyVg1=X4)^D{U0>BB*8BUL`}MP?=iRGAT*Sy2U^{qwY)gLV`C$c>=ICkZ z-eTd$68wY@6Nes$v*3r*#9$MLv&BKZt$fms-KN76haQKf8{`Y+zJL4v4u?8I{h$s| zAE*Ny>&;$LCS@LInLN-G92))GxCf5mmi*B3gJXTgaoT;$)X7ugdd~xuILyOAnWXHO zC+4)op~qpWToMnln2JZ@(Bq&?n(IHvANp-0Epg~^7}XEzW^JU5dl&g^d_lYNDTlP2 zIzR3#{5Y{PPr6NJB|r51Fh?#mzL4JPi;Re$#(W9KKz0N!_9D_Bg2}KlJ=C z)oyL|GTU^(Nf`Kf;?U!uj#o#V#-COPc&LL%^#P}JEpg~^5Q91XgZe?=VU#ZthaQJ1 za!Fp0{_@2(9l+Now#1>wVMH!Tb1`W4>WM@?#TSV~kHcB{aSgANAW0m097g$}#WhCj zil4_LahQjLdf`RB!Sggf?(f85Iu1=gYajW3PD>nm999r>j@{a9R$oV2;?UzTsvqP7 z;}*)NIW2MMahS^w`fn}XH-byz(Bm-556yp;_H$a|Fb{`jwVA9{Y6gM)n0;u2N^mHg1-u!3H5>X)Rsx_X<>#@F9yi9?UWS@45) zlzfr=aI|jBi}tmg%Ma4K(fu2Pe#-~R4?RDO>S^WAl)8ZDAxRwO;h?>wK9CRQw8Wvu zVQKv!M)HgL+vB8`IP^HIAk-XtNnI?x^{+=-;;<|ZV$iTi9Hy@)FeT2X>~Z`{f8S4O z$q&o&gZWTxDE0S9OB{L}me$ivPKnJnA3JgAaX5rtD~{8w>!80ToqZkE%be1+#9uZBOF!bImN@h{jL0SVpv97=+DQ$U#G%Jws@-Z_qs2HH zZAV@chaQJ1{Gi_;4s%-K(BrUzm{a2#;?eZ>C@zUZkHb{Cr2VQ7Cl*s$;?UzThac1r z+C)?QiNvADVN^e8GkM4lb6Voi#P#Y*G(w)5(1Ojg~m{I84m?=?UYhaQJf z{h;sQ*w45|u~C*<7jCXx5)*ays6Utd(DTDt_z%jeraO3hY)c$^97g4mc^~OKRWCG9 z5{Dj#v*3qjKdDPjYKcRS!xVc-UXaGho^7-~2?IY*9OmO7?X{QG(TT&iH{RNGw7TS^ zmi*B3!wN#p^{3?vX+P2uhh=e4J~bJYI82|1GM68W<#~+8Uy~ntei-o|)X5&oplvxG zzJ6g#9C{q)@`LdV?O1tYq$LhL4x{{_{AoI2gznG(HgV{2nCizhEJovd4Ufd3$6%ap-YaL9aRfwDL)MkH(o2 zhvji-acE4IZO*Z1Tf${Ge{ouWPk4yghYG9C{ocL%F7_zu^4^jsp(YxxB~W`X{&RtM;vR zQ~u_D{jBL1*W_(JUh^Hc$*RPm$6>BqYB}okAAYy`q1jHO_G|J(&ks!|DW8-#{_Xoa z9Lgr;lCnoRr0h{AH~Y24{P<|NB@Xj(FqR<};^6x!Epg~^SVBLjkGIA2j>9Q&=y6!u zUXni=F57fQ;?U!u?3X7_vp%1)sKr*d(U_mTuq6)jacJZHg~ZC-64?ITw=jX9X9H!$S?alq9o-V$T^jJziOyLLph2)22_4H$C+H}Mcbu;R4 zacZx;J+`G>>g7_yKs-k31e%^!PEBcvLyyB0xukwb|6y6VG=hUVLHf%B=6U9{~U!Ej%~JW;?UzTS1vV~q>nw)5{Dj# zQ9Z35@Yp7EPJ>6{(BrVQeh?q^gZ7m6?MW?h=y90h$4Ou1P^0%rwBGi4;xHcvZ6ObF z@R-sPhaQI&M4aP4sHZ))$)MwKN*sC|rpP6ELAj*99<`GiCW*s*9Hf2I58Hf%M)Tud z6Nes$5xZ5|OLzG|Sv0354m}QMWw*Y_$4DG{9H#JtIywEgW#ir}Xgb$kQg4syiR6c# zAC{I&@`{+~S8TJT5{I+JLEbRlsvh6QBZ{Rt zf;w~Tr6z|`PtVK8P1V!VT|K?6Hl|~M=l)23SdJgm!^$UhfqXI25{Dj#v$B_3UB^k- zBn~|eqk397q&(VYlb%HT&Ce5u9)}ggnWLv$?qSq^N*sC|&O$D!!{wK4Jd-%|ILze- zX)Z5}+D(Z=kHcB;gM1(^>gtnP;?UzTqNk;88~gIXoR&EBI8629)X(}18E;)?J>#>K zOJa3WOMdA2VFjV)*saQ^DSVMQ^f;UaKgb6yE}Q&N_6dE_I_o2PTH1QZ1Nzi+TJl5B z4^#DY%kzlIl$JQm$3dQGG1jSkkvQ}?tf1)}J*|%R*ygkG^*37L(Bm*wF6lF?kCPvk z@gL^kAO?xU?+%BiAJoy?d^Ns4v87z<<`9YrW*rq!YhqJ|DlOML}jKrbGVa2$eeY4Yz!9NJKRZoKx_9QteOU61BV^LBDe9C{q2 z^&GjROcJB4Uz%5EJcS?B#oKIBzJ6g#e(3q(F%(hpLc4m}Q2^t5tEnPY5ws{NWc^f-+2gY<7Ynzxf%;?UzT zl^^5-Wt940N=qDi97gy-+BcarRUS3W5{Dj#6@-}+UuyR0C|@KFJq{!Mpk8RYIqjvQ zCm%o)W71DKq~&>z8ywF#ZgMF1_0e8bXFOFu%+=S)4?RE3l}qYsG4XYzB@R6fQ}{t$ zpo~&BWqfHFxwLeANsNp!`MOPqBtP{0pl(q%oi?r^ZC_L)#!p_@5{Dj#DRODkhfqFE zX^BIR!_so8>1=sM*>qA%9C{q4@Q@){`D1%PgyTHg&*Vt{pc3c z;O%fre&}%+A%faJ`E^|LyyA>qRr9M>IpH)IN$Fs?ybI1MonqS4?RDO$fXuz zmG<(%oR&EBILwtx$|Lz=G|rSb^f*klm!!SE+f;p>IP^Ho<%c#0Wi%g@IP^G7ip_~@G~KXm&dG70Bn~|eXC;@ENy?~`TH?^-&~$@% zjLa8x{CkZ0(G8cxVHq5n|FBILH<};!nm8^7Z9YMJZDV`NYvR!3Fqa?nC*%p^8zU`oSQZEMg!buZU0>qRJ zjKrbGVXFTi4@l>2wC3v*TjDSu2gkdIGRb2~OB{L}M(ibJje0;H7_F0e9;?J*9uAEU z5{IG#mzuY`VxZ3PD=s6-cD|bLyyDK z{Lp+lvD)U_B@R6fBm5w3TMT1VA3V=Ei9?UW3Ifg1)8Zl~zK*oSp~vAYIV5^o6mL}7KuZT!>Iq@c$e;@dii-Q5{KzHXsfCZd`-J` zS-W+Po|Z4B#$A&i=JSJkSot)kB@R6fXJs#mmHcv2OB{L}M)kC`RW~F*EUOgnm999r>s(z3+)AB&`>89e5I4pyM`avGimzdHLhaQKs$OFkQO@^I> zQR2|!u!2xi^|W@A{LpygB$^-hdE(IHFhxH!`?cwbR!%HuHTh?_@MvdZ; z{Lu5mV`$i9(-*vV59$LBF}}xfm*aMQ)z5HWB7bwge%AEMulZYlLY>|Gify)S;?U#J zFc1&v>)*b=!yy*pAg!glwALP#)-BfL`zbAP=y6y<#5w-7V_uy-8gEJ*mdD{mv83bp zC2{C+Q0B-J${*#De?Q_-KKZ$_NqN-9z4EB}5xkw;5{KzHh=H*skEwd00hc(;!$H46 zJVx!*M*sGjIP^Fud*oUUea+j+E%~9xVXjwBLM99G1mF{h$q{A2HGr zhaQKia!L9(UKpW&`)%T|3=ZmrR?F9DJMx-1^f-+8anio|aNBAzPJ>6{(Bq(;)MV2V zaX#%><<*O1R^rg(&@dRWTjdLnDf*eyq9qRVaoCKps;{TC#G%Jw1rg`uMfIh{Vib?W zVObp11L}nI<9<8&Y3bc^3etQuuE!}|OMdA2VTzt^`azjA6_3QB$6>^OXnZioPHIe% zILyOguDzN#9G@3mL6|xAl6I2(q5c?Y$q&={q4{s>gi*Rbk5S^#<1j@}i-&yB?5F2x ze44)#haQI!JuUs!)!IuL=PR_Z?!}zvQx0iqZOoLs=m-vC&}`MjVObpJ>S^_a_~=uQ zw3JJ|Tr$qubi@*IZ)H}qpSH!E5{I+Lq3Q2!zINi!<1nfpq^)wuF+Zmz4m}P_%O&-M zc9nRk(@$!N!`b4{^h5Kr6Nl5)doRro(qBGMZY4jQeO;wG;{Rvw&7R{(@-#8dj-*wk zq!&HvDXKKKh1vy@1j#yQXRA@X3SGrx2-Y#v-Reywl0-HEBqlRaEVRvwOt!YBH~m?X z=|M7+>0I5rx{sAs*GeWc>H9q51M=rY2GZRlyZYhh#-OKrxO+tWKL4HW5ugvzMr)j2 znp`efxikc&O5%LS9LjN!-{$e9`uiBa>wN;`10M3DgMi8W&-uaf!yI&!Z0cftnsSQ#BKvk3Opb%a zA=Q7NZYGVHmn6rb3zTTA(Yd_Y;`{7@Fx=vqHeCy+mgO`A>Sa>>f2u5lp!>E{uPHXd;tEDl}B zCCMg`e&ysiSRCX_lP^|XpXOYbzuYE!+CXs}EDl}pgM7O-y2s}n2aCfx^aJIT_$8*l z%8rA@VFtpGCstXXrVNq}rfe!nj)TP^S3eL3#x8unMmO&%=HNivlsG7kgrCXD`Jp?0 zpp0^U`04mTb}Qu)^>I#eez5$IqNhoJ9+XSD`&xyW<6vlaxl;c2qDOWEz4(s_Y9OV@;aeJw3U9?nBOI}e{r6iY2`ErT+nRXF##xzQj<6v

!k&8Bi3EDo#s57Gmi|Ma8VXpGa>Cda|zunvBZ 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 z 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

@sBj_2x4xOICURNPxJX?6RSl6U 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 z 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

D@h@CPZBYE;U7FmPt+%0Fz^lX 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

+{!DR+{kAnvV$7RX--lPuwj!nNLdfAoM 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%0AxANB^E^io1%KK6SRjz_7696XC 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

0=xcOrtZ$?5HW5;2orU46)zoz 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≻Or(+C0xn`kqMW5q{5~u z$a(*_uU%Z^>I&|@5F;wfi1EBXJ?^Qvx?p&44-6`STWmQ42*dVH`J^*Z$=k|DDQ7CW z5oar6o@6Z?M`L-lC^pI3h^mR6xZY^Q7(%Vw}wq$IdgQ8*S4O^63c_8J*(+eO(yB13hzo{3wW@u->2%QgPJT46jF!j%M?5P z%^EF$k1D}E13;lfl4@`g6U>EZ{sNv>a-+d)ZrhXGwZ#7xA#QqtYw0NywhF=1PKX9` zQa`L%2V&%m$>`a#BkCMb8ncct1tG!gIbblz!-9kUxKs zh=p}eno8OMY~Ok@6^6Xc3Ro?f9dKeu83f~Ut8nwQi<7OS`8CPLkqU*<^og#Ez0C-x zg*sT?MT&c>QCJDV<;Zxv_VLvsF)=F5C1NWaZPXf7Pwt3<)+x4Nz8RRZy`iuW8azJx z;oHRY!X96Q^04O^u{xbV8s!N2y_1pgDns=Jx4hV!RZ$QOWz9cXZ zp;;OpI0HoGb&E~m$Me&VNDe*bCLr6FpchvA@Cq>{gH)o=4WUjI?`DMp%@~JCfm?W0 zaeApc)qygN*yj0!-)Zox**o(gU0n>oT7TF$nkdt&a(xs}QrHYf7yq`7Nc=W%C5Ev{ zykxKri^@Fnd_i1oyn!w;C0nQ}>%?R0nAo|^uQ|t-T?1>R7ADXX2y5J> zyIHr>H_X4eEB!Rm0Wk3qGZ4qQ39?tOU)dw_28+CQ{VG4vt0O?M)(SfhE=cs$6iAL} z)?;->l;?kx<;_qqGl(nf9K=WYMwfuyl39yzbzYI->htwK zu#eEtDfa49Qgjlppu#zVQm`D)*loG6p4h-)2AV>JU&na#QQhvY>5eu7EjQw7^hoHI z79mvEK~W!Ymk~F}-78@$qtcoOs4|}jJWe4%YAKT-$J|gkcfTH8JzpY@$K8X9#5}X? zj`9e|({_6fn%5qJWWfIZ^0Q^G*1NCh#_RBEaeN1Jr`@(bK6^WCPR{2d(KTbH9)>hn8@enuAL|Rx^(p-r~QrAtI?>4q2`v^ zx2ve9MB@9R;wCSSM?2J|vXXaMEy)w| zaE+(;b6H(G|E3*sg5ejg>&n6vc1XzoJslZwQw|6UTfjGjUePWLV8MNlCX5muIL}#H znpf4}i}4Qp7*`*$gXemy$pU55j!UzCAmtb}jS~`| z#qV9Z_Ra5I`9qq0Qzjj?%)_F-q z&t4hbok37%cOiodbO&r?5ii zq+{TV_&<`O(G(W}Ih+T5mtLJfxk+sHBrtQiA`8Ovf_lD(TCISBwz!BBMa*bu487Jd zqufMNof7hho5m|89aEjvwY7*?Qu`f_@khms8ooCbhBGg$r~Pc4&$nL_R2zQ<@4_|l z_j-5m{QIMId=AxCawS&+!dlnYSHGXNj(@&wD)}~df+|qfQ9y&2Ps&NaJ!2p8c zizFZJc?AWC+Q#)%>#nWE@#FVwdK0Jg1l};3J<3JHKf~aDcG zLX#V~0CFMSGZ=1ERpZmu`w!N!CdtPqfvprlNgB%VHu1#4a9zN@`h|Xus9ptW@CF>b zx3|Fo2@}1Ern;II(oCDIas1KShiK8>LJi|1`2ze$(^tyl0m`*g1ujUCm}@yWoSleZ z3+u`RR2mZ?Mpbr9L^oF!5Oy~o$>2&g8;Jyt6RGwlXj$keA(Wg7;XSOp{k@xbQ}v7x zsw#OPOFcBw!k&8FszEtUQs5*?3`q2kSK~>ZQ#Gv{SoNR@>;4<=2dtY`4&2gYxS&^e zjLe%=SJItsigLIzef25sGaci=QfB9I#GwkaZh=D*v}(6FGOJMqCohob$WbqA6_09v z6+BY<+keR?c(6Fa2?6_dIXGnEZ2{Mt!3TyoOm-|aFx)jI8QilaYAW-bNWBX&~Cs=L%H!&jz)hvJ>ovzgWd7( z8zI|TMq+YDJs;2|gRtqB^(jA&MzEdf|L7QxXBX=QZc%$Ht23&J3e#|%?Xpf+V*;@t zk@dX|(=y^1l-NGHzzQvWf_RdSEO#p|83P^=t5WTCXD19CO28mQV`ZNo&sf(7g7<7C zF~%9n)uA`jy=5$d3H|1GhZJD6;@cl>(C(_QT|6Rf7G>3d6r&c#(DXDcv!}E&(f98? zX$N~F`-29PQF@`eOc(WbH2t3h?7P39oO{6NP9?4l4hr~T-IEivB{Iyu%T~m*T%Kx- zD!@dl63oZC#FH%VW0u}0seWGJ? z&Qg#PrckQ`S>-xJ9brZ?RimWvLdbG057CBdozw33dbhQ?lO90}-yvxddjRCUgXrDG zjAe**hzgRixLi(ddph%0(cZZX)h=^5@f@5rFdSNe(EtggqWj5Fh_)(97}m3MePES@ z4Nkhp@T8c#KVM<8kdLASj~OWN&<)=08)PrvNOyV$_77nRpd;LHC|GouzEL0!^NLUd zc7PS-SH?bcD)ig;TO0KBK{^#9fBbNb9j(H#iHocMRex?FyJ^~(PG3+0HhcuHXD93w z^i`wHZIM`A?Y?Vq((94>&e_UnWu6<6D?x0MK2C&}3URi^k01UVMi?5YW=t@}pfSq> zdNhSb7$=Z$Om#$h5qKS#J*3*PHilL3H#xs`KY6=_q=Taq<9M*PE}o25ez9_o&92Em z$Nmx$!x-V$a=&S~V_0jph*-X;07`%>s6GIDQM;K%cC}z0<>4eTT0l zxCm#vootZG#o>lCldHw*9jFRc4>pjJLiq(cD`;mj3u;2aiS?}AHyAI7AS!uUX&vVA zapu|8XIJM(SgJ82%R^R*o+0mzDe__QJPCL7uLgDNR-8BDzq zj-jinBCJdwax zr-NiLYE+o#x;Q>V&O#$JfJ8t>I{=ZDGAf5>AUZ?Q)i_ z047Oe>VeKk%2jTjuSL<20`>N&P}k(%WV4duO2eQq85+tQC%dL>F6;>O2@;H52zXK4 zvXZpNU*qgSuO;jqUIidoLxtBXpY4r((-6P4E>T5346HJ$R!JE;o=Xdppi$|`SskOC z%XUebU{Fhmwh5WRl~~87f-}(0wG&n{zTMtIgtSb}913n%ahzNYJBb=lOll80RB$%( zGop>}bp^KIWod{U1c(7QI!WROmvIBOEZoq>2Wyr4uukohhr?X#GvRyKLR$R^#?ZC| z_v#q1H*!@RP*eFf3q|FF9g0XOWf_R~rHWP4Zdp zM;Q>uRkA2vAF7vwC-XQ0Dxr8O2!^o(2XdrvQ0Yhp`fAv$DD41HKA;}Xk@e<~UyhgR z=$R+e5gbRMl&yO`BT?gtq>`+wm~EnI_^~^T3ljK3x^FN?3R65gc^MLjf)=zDbMlP6 z+bI`&GO0D_Vk}yD7;~9XK?lwl1g9ECa&GtqyCnt;RP+!Wh95w1^do|SX>PH>=Z%b> zdtNLy?P|Kxrhc4daw#?;^K!&5jyO?nM={Srji58eEIOSp&fnBVbw1VEX3;X=JV|Fc z&8i0m8opmPYzEp(ZmG8igH%q=3kru=ftK2Evq0a#5{n_TdUio_wv#G^4pOevIBZ>GejYU70^5 zUDV!fl+AUBc#Zf*)sfYGgImlqVFil7u#>EZ+{wl?=l1~q<#JB*vE0MZFo&I$aLT5V zjKeU2*^Gg?X|xier$X-=U+>NySINo*P{Q$Ncy@q#_s(OIov=~Y%!8^^{6B`Ew2H65 zKz+Ney)g$C9KaQ~Y>2TLtjUXW5+_`DPUyVG(n51?_W{dKHo5Axj!I=xgHI0z0pQ}7 zZ?{27P!s4%%rLuPaLVy2iz4Syv*|q{q?b?y<1L#LURv8CEwSI}M-$`Moa9@BP- z9hMTXI(|Ocea`qCSkf>dQ^o}_ue94y88biW`ji2iRXqyRRCdwfhn^|Wgfc)io!^_& zX`XqptK5FJj&ynq z62YL7NMtNTZOkQ(AiCp6qdcz#Jr7}(5N~HNayj9oCc6Vc{!^TIS{kMV+!6qlxo4A{ zOa%P#UU|3nxh6Tr&7tkq$wJ^zr%kza!EzbO7RwdRaOGMc7vFp)-Ev6Wk@XACNHiF( zvx)i%u9~T;CJ%j9Jq+FgmccQ zcyeQ(fRN_#VKeE%p%elFudJ6vHlV{EN6~T=x%RQyV+M1 z&4{(4-ZdI=VsUSRToh6Zsq#ZN%V-!45uVZ95O&53T(Ty}K`D{=rX&kif)Q5#!PP1) z+zQ^&xfQlL>+C1yI*|a#SqW7>IA5%W98?8pxVoe=ip@{Gb6AfGTy%OSgCQ;_TIeMA zKra+^D?Gr-&I#Qw!M2Vqf18HjDQg-Ps0^G#W+pBBveOv>Z(5e|W(Mg|CW{9$p(_^S;XkjRB0y@F` zNmeJAd^$3MQ&bIba4|w{2^Tpl8_s}cisx<+=bt;&Fb_E%^&@^rvh6B5#czw_8JUcM;F<3a^{ZXd)jZ%MP5- zSAj|`{rlL)bc>?i!AZ-ydtN*`4V&LU1`HWB+k3B3$!))rd}Xy(&afN3NK?Flo>X!Zh1XYV3F(^2L+79&Dk9kgYE`tAcyFggTM6{17r`cQ`zNol?o$s{a^o_RG3}j zbC`#r3WJz6q{Q8n>9+s`_uBYQaKiV_Q1!QbrgDWE`WiE+q|_KxQsC^UdFSLTLs!I0 zBam=DF#tT0U1lw#VxgpWW)CKyOZr}P&+`0(j)qg+F&iC_Q=2Q`K&(}3(RMsT?xtKy zRht+41P&}Bv(QQ-D$_u9`2VHt&7R{tvpl_u=vkuk#xeJ{BL(%eKo*c7NNS;KS}G6( zMMxxpCP1lF)zuwI03=bu!b$)VDc4N+#=i5d=fd}n@ZaDIFXMe*$Ln}sXU4ld-aUSv z-+8~x46hg%1de$#M{+ zE2myPfMe%2;@?`N&>HK*Ni%Z>w% zlP1M+WZGd0aPwqq>5Pg5 z9lImptOM-n84Byg#ZM6F?@j&*vFPq^DSbyY$y^Db;kKqSy&l$>eMKL2hgdowd9oL^ zpE5V12&2G}8q4tu5jaLy$95Jc6DMq{@p93VFjQREGZHaSCVk3iVD zp%KXwpFuP7QE%r_`8vi@PwU+ea72Udyh@#?Wj1>MjvfMZ`sQ48G%W>E+oZw?>_@;^ z38G$Lu@VKt;E~Pr{2N}9rM24=1)!Ka5HC$a(-&jYwue%L@R@K8$Xi+G_zlA(oI$1w z&=aY_jAe4mJ)36LX-A8m!PU#=Q9ALxdx2(|6d#adg zuguHcb& z@UD^sf%OM2-2i+`)vXs>ELj;X?!^-f39OzhQ9;KoVn_HY;4I2Sm{)8<051l^rqPe! zvj#BbV5id~$h*G7b%AZ5g*j)tz;3@=BO|R0Z*Om+e@OVtsO7%~GC*bwfRIlv5VJON z+Ij0Ra9o9wKnc^9M5CZRw#Qp4g6&!azxq5ICabAd3yUOb`_9TX+8adCNVFXWCgdCe z;k^Gl$L|WXm4V2=jdAB>9}(>@iQj(+eiIdfIowjhtf=NEF(m>{iMg@i7Iy+H3Fn11 zG#N|iTHQ$UR>t{5t{coSY*s=dv_qd_7J+PGWrwus|B{SJ_25cPxFjwm20uXb;c%W3 zE03)SfwZ(o#aKT2#U2Yl+#8blcFfAftK+AOq+fyjqWCwY>&2Ots#?ZcKgCpjGB4zy zE(DmK9WYKZ-mP#%y)o2rV?9<5cA;vUWZptZUL52iWPI+eyDTm?B z?7I;Ez(wi|d6{lhQ$c&P+k5v&OCfpPNC2}l4TWc=z)M4R@W*Whji|$&GnCdLW8_*% z4pD-Qa2fR0;%3nEms=r1^igHD2T|cNW@rXdF-Y7VFR*?;LJHS!5_-krR^i6 zKhbcP=p!VQ;pCqZ&+h*z>kKB4!t3M>&V>diwMPZHG8XoivT>;7DTV3qR21h<@&Hb? znAM{N2#=(>#ViK9_$2DG$>}>NwdPf(Ih8uZ1iYpJbdf-hPz8UWE6}z9qzwYx2y)m zMKn%q#vA_n!#`|^+HZJf`jzy>Ob#^2V^^wz>P3xP3oBuiRq8xM2x-}4Tv^_aTgfA< zS{A$&`q|2}Kq~0!1{3s1QM7e8N+>91IXg8pWiYhcUVz<*ggC>|_L)UV z^n^0hiqr_$_83h?su|WnFpb8B%l8pRksXWUxz8{y0;;-6IBWSW^8ZVxx|Hka)*G<%adb*$f!%&(xLI*;*cpg4b ztKOel{&Z-*`N{cp_nzfPA76UY13dBO?}ymC$nbn48X}{|mO4e<;Nfe?JZODSF$A`8 zUO-tO$w`iJAEOU^UX5k2w`klS?ETj0)6w*cA7gWTIzFttoyk8fU-=UR@+k+x;eUKM zCfs3UnsqbjdVIH>m}Su%xLbF~+GUxN`99sRjw;4dim%PY00KL5pFAteMsv6C!j55<-p` z3?e29t*Zxni;s|t;2sF4$UJ+;qsc!bG)BLL4PYB0t<O-QWjF>F*$2?^~F7;MoF$YfV9##L4XmC>)Q+0q1X7 zXJ?P*nx@&{Bl7+o2CaOLMsQ*wM%_@k$L&zGna#{t5W z%rZb|$!dXxS)7f{&N7riB7>*U1a-SDt^#_?g;magIunb)y0E99EMM$wGa^F5X3xV* z<~;=r=Ec$V4=%-xC1XXPTC_44h@(|d->oHdv$Ulo^03rw4sSI1XT3Ln(RI6b$Dq|};dA;7WTm@1)^%mRt?RA)t0s5Kxw96=>=2bv)49%Hu}bgoWt z)1b4H!$SBjlLT4aO;U;zlE%2H5IwwIbkQyyex(T#IJ2dgs%{X`2#axy? z)ac6jNBH}9J1vbXs;7pFqATkJ8BpyncWnIx?@5_C0ZnPE9veQ!65!kR@Md8lIX%W} zve2R_nBLkNfWXy%_7tHEFEGA^=GDq8v6oVv>f|Z8U5k&$R5F_qB0c003QLbKui&(K zL>D@X4$0cNko{o?_s(!8Qpu(ET-OEDarohxJ& zgGnq#h=GZb;1Zio0+nk{8Ni>{L|kR!BX$ z?g{LW&opM-7)}0p_WyMFlb@kLqd!pR6Yyfo(P#)TLNub`1SQAA=jJ3ry9vBAA|>Tb zTrfs2yz~u5JYqmEupg(Y95damCcx-TL}`P?(UV#jsAr?Xjo_g{HDpk|ShFQy{Zh;6 zSUmB)M4K{l*i!6-!;R$KJe|-lRaW5m8{~i2*lHjWDHB7Z_|0@b|Bp#(h)!o9j0W&`!SUfkZ#IS(!o6;Gh$zJ`&roP*}lyX zh~P3lW}!iwf`4Eki-zq)!r-?leO9p5t8CO^U69nRG!u~}L9b-eTp6JMqGE*+cBa-^ zBvb;K&{tSL2eZ&3H3TNkt9AlbS2PT~P>C}P`nMr#sBgFs+ym0^xQg-;m=_2E_9ITf zoLX1Nh*7{HZbujy$B!R>|ByV?l5|bDtF{4g!?O;iv!rTJfiSN9Giw>$4?q|l;8MO& zpN4i#Y~r)&jZ%gV3oEW1fSba7=lI(wG=sUR%L}SWLCGG*Ri3H7R>%|+O<$hJCBSb| zrzz2zN;_>p1aXnj;5e!&N0WJYv_=s(Zl&#zpd@>I^YWh`zWl*={rv(B`B%fiHcMOu zFnbgz0yp^cEAJp&0Fg@Lvazb<>2glr2*XGYd_N;+e5ng*3)G?_CxSrthtYQqp`1Ua zUhU|J${i<+U!xmU52{+L2AIP!xQvq5i`V$-4u5kX2<*wfAe;SXU^2h`GaL!M8fXu< zurX8eS>rh+cOg&u(ZQEf%*Xt9ib)+aHz83s$4{Q_65=}={Tu^(rv~P(=M}^~&4t8j z$NZdY%vP(`E=IY@_?P=UL8}EYpWX{x9TNwN#>#^Ly+$~b8n{x3lexQejN1dsCJaz2 zROJZL0DrR^fW&|y6nvD&;5k#XUnO`5YX>5z?cgj@2l_S~AZJ=(INT+MIKM8~VI}ji zj$N&!`VTD4dW1Xb$qSSE>3D#E$3=3-p)oO{dXqt%=e)GhQaP{w7q4S!9oNQu6dr3x=(3 zLjpAz-!USXos!pPk6*%MA+zv)Nkh|%xU3vfBVPHwe7f>X16dizcpgE(5l7`mshH%v z8%2u=HW49XT~R6Z9hS?P0?FHu=Y5^67dAt%Oy~q6~1UN`!v>jxI;1{KBtG&joMP0hX5&Hj?RJw}#(r_-ioVO!!1I6`LU6E}jtgyS zX{X$aVT=Tc=n(JZ>Kl4z4eFd4Rkoduuh;@^T74Y0iu)Iy=804i~!woRGWw zdfE+4M+#(u^s=2lo|q9T?4zDg6iTAa*`U6)XsQ-&$jLHZu3o`&MiVLs)?=8Asd`S$ zvrE!dwdyRAwkx(B;RA%l!j{qGUzDF+#yX73)Dr!I3OP-)PYVS&FQ!G47yV1mskCfF z7ac)9PEv#(B{By|w~GX(MO1}|f2MUx3H2#A@^l8p996TN7~-5Y28N#@4xBt4a2jsh zu^D<>!rf{W9BJBO+*v46M^duXdf$tkd8mrXSuhII-?SpVxqcuK-^YCiG6Lx|$)ATO<}{VW6SLI;$zTu6Wboba_2HFf&Q!|M~B0SZKy!sU4S*4%lT%A0Vr< zE&_!9<$&u?|KJC2|LUV5je!08Hf9O!Zge0zJw8-LL_02K!?xT(*Nrt9eV0MG%Yw(4 zJIqvcUUd}ZcIaLgL>>ot#ZGyK$WftU3_gtoX`xkqT|>l6DG^cPM@W!50&?)8HyZ}4 znke1{F3K|yk#(x&W+9wIiGnl@WnuZN!r9t@oN^&53y6r7(X*B5;Pg8JIx_Jly?F{v zm5~brmWEW#Pz`nCzm`falX{GWVemE-t@_(?*Goe5Y_OqxrIWOhE46n@3kd=4|!z9v!Hdrhs0@Q zeCIiOT3?A*%mX*;E#HM@U_LVa79XDa_fA|UluV}4yirs6+LtBct& zq$gu}GA%#C7gc^uBt+g~@``$8cd!xePetKOFEypUzTrT<=)CHpxQkBWvOR(OU0TUH z+ZQR`h7$lA_FCqj3>CrH;0aWsbb{S^iWdxndPRCFF%#4Z^@dPLACTC@-8#5(7C8ib z1Nb%l2We5cvFz`VGCr5;4&IKO3{hIm9Nu|FW>>5g!}E0?Wxn-@VswsBTNRfP?zVZL z+dyp9wSlR;05D3Sn#B;#w&F%&Pwuu+0{GX)2tv z2kU4(+TO|4Y#a%rQ4>x)i0W!B16rUCwlc27x@@fBHXe{bNQs-WhL>;zh@?;<{)uXC zM_6_oYIS;R%;17u{wuP}OTYDlAACx^4Qr#`wS+w$i<7-?e?(Ej@wYStxxfF&8(1H$ zv{L72UL~DZhUW0e0qmhd$nU~wQLyoXb74X<4JYpDJOYQtX-K6{-~>Q}R!xZJSa`4* z(nSNZ)#U@{c1|CyRCA`WexRySbPuk)c6T-fqJaOi4hCr81i~G}7SA+F8QfZ)L^;wk z2fexH%fM?PNwQw4#l)yw7blr7C@Kwv$clu<&n8SNJUnnQhQ)&3_^81U|-hFrR z>hk*^48NgDED_|j!;>>(0*2SF zy|;Md-5bk8V&DECm_Z_QS0GRDR$oOBWf7hG=Gj-*CjY8e=I8GqVRi<@bN|w&{55}8 zhFin!;e+7@G~zZtZSve*;L4}3e<@=6?*Lj@H? z>@M11=*?nJEns5NfC=M5v3#n+E1vL~2yznL%e!5%-$pJoo?0u5Oe*430Em$snk&2Q zBx1;U1a{-^i7kQGBAQ^wWW%XM4F^D!4Epp#(qHOk(UuZDrH(JElNJUKqses84oy#- z692v?_9aI-#=+_^Fa058eMGMu+8;jN|8R-0n57)+QiD+a1}cnBpQBH_^z!R|_D1x6d_fcrmD@L0iHMc{GT;e%`13_1 zkdaa(B#~G!Zsa^sO_$(v29k8*=M=wk+<}mXY8N5!Ei~zEkD}J25N5=GiLX9LBAuZ6 z&f9HZ_e-bOIcZjLnf z=0A*gYjz9Y{Oou6_5x?icX{o#&kQUy15)lxL#Hl$G+BO@{4P2n)?(;5S*VD(g|yj| zg1}p#%ga};jtDQicHvO@u(AfDq!QwCvhex(>dFIEP5F=O~o9Di}HneSYhS%t6?%Vl6 zSA6RHM;HG#SiZhIy1KkPT7K{P=!1)&`Qv;#SjqyIps>>>AVsT+A^ma2^4aenX&U6l z2!W&Vzi9hnH9&^L?F_jF)!Pi>Ub&?43=5)wQHm0<#)mM*CKk5PW4`Y0Hk=~ z_WJf#OMNlw^Q3k>-Y4;EuroT@IT@YppY6PEbuRJ2#@5RA!WO7$D&T2xkyl~Qq30&P z?+tj)KomZMeGp9w_(jVCj$& z|0loha?M}96m1Ua56|e-c&D;%5x!jx&%DghlO{=DI5Quv*)tNcGQ8(gY=+k2gIBL? ztt?PurTd)~E{|@!HxjpAHx!@et*w>SkmA7-LFrV~MU|brnV#PR@n~>`;o)T1K|RI8(h6k zu<`O$1}g*6((^r^V^mz@DH7_H;Ae>#2( z6-T-iZ?3*y;Hz(zR<^buYydk)+c_R#D>e+_H6*SR&a|yQ8Gmaw6Pg8Ow$bxQR{M^B za(}Kunu+qJjM#U4>-CS-enghnKl8`==5NnYos3S;7O7K)8-?(g3)Zu_y0Aik?05mK zVgVWYc_+R#btr^!`TC8~^82H9hC#MEyiSk0VBq!<<2&-|=F+`|$WCoKvE78}lbSTd zZcb$7eeWbRt6OE+GMWRzWWdzV)O;rP5ZeQp?k$sK?ucVa4nnt8JwLm6Cy z1ux6B-h1WM-{^zh8U9A^zx+~fJi5WL>lf6*T4vLL@CBR-OV|Z})>a?B#GGN9%O7A% zD;$ZfX)qvOwOGxQlgF>u4%csy7K^jXY>y^#esFE{?)#$;;Pl@+hU}w(j*gCBFTZEI zcyDf#b|mdmPQWp+gc){ZScprW55XAXQvH5ekW*4mJ0#*~PRtpN|S7gtkU-DY0OC#>3_zsRv zu8|lvqM+A^=%foq&qv#eg+&V&hNy!UPYui99>33^WX%;Yl^+|;3~)6t*0aoXvP&xJ z8!tFr5Vp1#)*r4dUHhY( zTdU+7pV7+d@$s+0;ZHa3mWeOHv;_54C!49ZHAP^KTip}w_h@1Q=GSH3zW9KU5A))C zS757Gx$bUob&3hNm@bagb4zygprY<0SzvGK94|L)0 z-#dPBkb4J^(UZ~f_$!^M7w%rkE+$79H~%d+Y5gTz2CzIkIsAHg#6KfNQaJl5UB^)2 z&*=w|)i2!MOCJKu8>9C^v#!4M)o=9cU`ZzM{TVyI_tPl1P2X#C(LT|8)OjxY>ilQ1 z8h(I%oI?vP#`dJ(fBw1O>^Cecw4D3?{(S$?JXR&Lvgzpf+lvV&tA9zi*}-#p@t>kV zCAVJu#2@d|Vwan%OFK_r?C$-oYf67R;714xoM(g@+N7L z3AN(YC4*0Tuo!OAUCc>#GV)4?9Fa28Qf(z&>GRXCpzWfb-&7yyU z_g?qP_kS*@+U4}uzUdEQ)V=Yuc^KEFg_Kf-2fyk0-ghM;zlRP#`kv_SchQb|3-~oZ ze*X~F9sX;Scay2UBi&SyzpnZDd(-0;pr`}W2xedPtbou&k1N@GzjLs(ChU*jg zMD-60gHO)0eTc+@HqCJLt5;%;!+_h=yjNrit+q`D93hgv#v~9=@ZFR)BLp$o8D`|Q z7mGAd_yQ9FZUu=^Z`dV=9SlzGAo=T*k|+}E8^+8`%@1z^bz>ISMpQj{|4k2m$M3TE z@BQ4)jvgI;eX@*#zRS@)dW{7qN*7T+6d*Zy(M+P|?@$-q3LYw#8V+^BL-GMK;~X{R z^6SH0M#pyeMmOUZBrp)-(ld=U4YKnozB{_X`F(@Ui4fC+U9Kv_zQT%Tu-shz5emOW zVQ`_|fRCYP^aStvw^{-b|;FnGQ{qBAn>yIy0#s&Ti@*@DMs6zvDorhp)bh7`zH zFs|ZT2Ia2am@Vj)pI~d9dAVtC&le|zC*n~%U7(<}3G21cvO&Kx!0ZDHb|iwycQHm1 zQX)^Lg|O*OmH*R)EA0%ayGO*(aK7So@H5iWBEavwJBacBnqhYT03{}fQ0d~ZC<8=B zl#Q%f0v^1%>V*M?Y2%}XgsfB9m5Ne&Q)XWfm}xNM2)np(eC;z(3`X%W&clIluZDD#N%m^V^o#>;@jjtCU07!x~38q`Wd5`^) zBzl@ac4mDFY`TciiY`rM2O^nKUs`JcqMR&E%+n@QI25=v{Cwpn8H)ybR1cW8yKA9! zMvP5k$y$bc9|sd&x4H3oPC5JM4Tm&Q$8?;wC^nKnSknPb223reOgO#Tf)|CgwZ z3OeAEuJi@LO}a^5W-lIGOrX;dNlorC>n1KQ3%A$j9l zGBH_CRcmd9UGlKIAY%?QypHJ#QuK%y%S~nY`=fn|i#$F^vF2G#7~G>&RWWZuppXI1 zIk7aX9f?3U0h$IQ(;W@E9f1{rLS-V=dCg9(=E5z|V(3y$)mU?~oji zRs=_Zb-lw#2^zs+j68Ad*29@*ymZfT=YbD7?UE?EK&6KHk9d#}cEm8ko_lFBSubcl zjf=iXq<3|aX)7Tqpiqd>X0WdD#nV<8$YdQ}v>@(i@^6aFe;s7rHr|u}L`~B-5??B* zS;$9H#Jx1QyS;xz{6cPR75-`2D1)0|-U=`-5E6jE1^^G4;6!ME0o#xp?#m|WJ$8rtp*&bwEJYlBVZ6$`jk1S%vVIy_qtS6Q|6=qZlG40o=@wIwAb$QZEx|9 z4oIva*>E;@mQwNm$%}*{Rs9$42f0?ql+wwnU1q|CCE8$fU{-Z_+db_b&#h;FZBQGL z&U)u{TQ%=s%R)2_D^rt1x@6{EsB1fhg&~m!KkOQoC1cwi!|_{R4hA~UJ^wAS{!fDS zX;QW~`Dpmz@S`*=?I?Hx%8e~<5<$zsHt40XBB!{1m3%NRuQ>}4XBwV4)|Y$F7A*21 zmUE|{?s=PXVa`=(dc=I{<>zoDzFRmq#8jM^30K46Uzq(F4jv*3 zFh96k`RTx>9Tn`FGb7p38B?|8EsHIrbKGEs6Kt!%paF#4j1mTKbu;nM9PnPH9f3IqiNF2)+j?&V$C9Us1hz}A3gV#tsRqX*Re zGB>IcMHUCBv3xX|{M(|#PRfXZaU>W_lOGB6u9_q=dIBzKirdn=s9)Ej!{Te{MRM>emI@m# z+N8z~6*pe~;-@54SyA<+=abHQZZXK(?Sx+XnD|vBQq-#+Ebmwiri8=Z_GJ;)Oh5PN zY9y&>FLkBEoWZ)fT$6uClzRGSe(-|_dp{aJsP5}Ul!%qT=_@yn({hd*y0x{vF{BI+ zOK~;r3%N=-isH0q2`%qr>22TmdJiF%idH#$pQbZ~9DX1tBS?reJ2?#jhPE_S7{cQL zc`GS+_iH;h+qHrE92CfYL7WYFR9@9&O-Ru}#FeV9?&jXfDNJ!CXxf2)HGKjjY+TJF_-XS94`g-mm&%6nU?X9* z6V#J$M3}vJYpa-AkeL$Cl<8{Kl>yRLaI@Q+IoBy(Qxy?MH*OFuk$c0wvf1Ia_pU5b zpNoUDcuX|`LJmZ@eP(M%fB;6R{jdW*MA-ku9;OLt==CBK~K~090WKs_!!J5?sXe!(HWup+Q#0S?lRAOtv6k}jmc zDtwF|fNcwa+;dN+@D=Maf_Z@6~%^KMY94@xe%eYBwzo{Y{N-tp`~;k-%jUxca- zE}hnrRGmy619?9NplgqRTnN9>c8rxJkR`q3Epi9v6 z?%osSf#GL+2PmVQepfK0o0gk}rcErp+TZ~d3t$o5t%JGQ$E~|?%kM5eda*dT`fhHo z?6dXT>u?Mbu}G2wh$pL(G)l67l2Xwqd(SE@+SaY|u_ab}j4C`T)ysk$U!h_FnXu3z z*0ldbbu%RdKF8^eT?Agd|n zNKN-9?S#UF*zF@QG<-ejCYW197Q8I8|U z?+>+($v_Io&IAqlF(#2*fJj8%Q!bz@XoYJdVK7Eg~C6_Baq=j4yh4w&~P zZtYcJzXv;K1dPm~vh&L?pr2wxae31aQukv}H3&SjV&UP}4bQVY0S^qkZ5SK**LSTp zk5H|kckp;|fPl*qcgD{ezf(vMNx=20iQ_Ss{{jYzEBTSNlxJrs?gnU-O(M}VU1;eRQ# zsv#Bz09Ljl%iRj+xfqrV&z-rmedq2VXwGKR7a7QKr4)+=_SP-DZ27)8BW)p0sttUZ z{U&>hEod$zQ^21xJi?kwT zOPh64FX&I=4Mabc2Y@g!EgT;$reY>iM2Y&85D`$2l(C$JkvdV8z5vwKFzXNv?D3h_ z>=M}qQ*o!%8{a+Mdtxb)d$+2!R#Q>t*B&%oS1fHCDynA!;J0y)o~ zq0B+9AR6rx9Ix8{QuKo^^q`g|iY6F)EOXZvuP$DjV*}^_IAethy*zryvk>`VHnc12 zmP^Cn=s1I^YBo=t;TDDlMAL;j!-XME;Y|!XTibjgDn%dbG`sYwT^P`9c0@kB{^O-v z8@KpBA{M}D$LR%!>37AVIscvGj&iiq8VI0vtPi));=a}r0l#pNCeF6=E!7WVBws0f zp*;F8Fd+d%OT{jNmWQ3JSd~)dBLh0et>asH)3u^iJh342>A?1rXNUD-dt-V)ESC0^ z6RVR-LQ`)(OF6M^3XA9l@kFZcWlqemWC&iEXR+jKF$%B(ErOg^|c1_7F`ql_r+8@40xGZ18!2My#|@S0fJJ z!+gYiD6m9;X&bdU@!C!w#z^xm{JFW~=$*EhS~2A*f&4sDdW(~o6-;+8LrVlI;49El zKuS=hs;@^?D~IV<`NJ}t4tEo7U9ks%m2|(|#ZM^*frzaTH723Y1kCmTXXFl=EP)Qu zNllLllHjoy;056OPQ_Z@_|RbZ1tz}}I#VJXXhV4YpIpP?ws91x+e;lx+8iJr!aOGb zt`?WS_$M*qeK@32rx#med#YO^T8CfA1ZTXC9vrq(rdlenINEzFhDcDDy#mccD@xm& zuGh_jHOT9N_I7e~2=-_o0>4Y6TE)|-_C61%*2Nbre_yf{W9KI`{Z zK3Ri7F@ffn7+{A62l|#M#+k09{El|)skMS(ti99Ll;)aPX2+!leG2Dj))!Z}Xza;`N@A5x3drU2bx(c=ks#Bb}RCzJLx;xa3Z z!-#}SG!?`!{;Hx>uby**%y7_I(W*A^GmA=gbGU&g+?h)$PX%%wRzd&ajrXQUQRkO% zblhK*rRFc)?MN<>V!_u?6%6@0)j8)!9KJ+m82u80ibR!a(0e3(P3&5&$0N0OPVspO zwOT%)-^WZBvRgzK#HGwvLN&PFS$l9CYJ(|_=cC#^o<6~|X9uZ7#eG|$yGI;*$RV;` zR)#J?9YQ3^u{Iq|bSeP^8$56LWYviYny7)(Q)Th^@gh$m{~i%XV7pR!u&2goQOHul zI5O%Y%`ExD;iooH7!Pl)tq$q(eq{-@nd^W!WdqmW-jbbSvFW;q)zUzBN@c}}k|S`1 zpMUa`*v-qd0<%J4slEN-)mpPpZ5+LLJ~hXN=kuYQ?Gas69vzbg#I^FlM>@xc^Eed} zHbLJA7D-p(MuA|>O*JST`I|JX<-IB8Lh$8kbF#1)>ZM8RxNBg4=_yqiI;;2Mwg8ak zAPmGfT6HF39vEsLL(a|+WmH=eobu!e4TI)fEQVx^+mnA!0{sWZ$Dr{@)L@x!(T4Xi zd!zRd7asL{9nS7PC?*-Eu6u9zV@kH| zOpXnsA3oUIB~4^^_yx5D9&W9Sh!k>r+>bIWL^R;65rtGvBZ%^AT9#B?LAHoVkHeQ7 z*}ME;vGoO}Spd}wk=u8UPc;uP%!^0IO0^<*#hSeG60V#v)>Fxr#mNy3Qd!ed!kM9s z4FdoSDo$-}4&>wzsmiEZxIU9T*_&TVXTGZ zvz0*=eW(~`3tGBIbYDO%B_+&O0W{c)rf7*c**!juw>W;0-LrM?OBHmLY*$fo85aQ( zg?w%Sywsr-0Y4p7lBUC^+}y>%F1t4F-z{XQC6uj{$`6 zeni1m^}Cs%D#QVCT`MGT#7&k!JkJprAwJe}R>zYALf>d$KhuWTX7GW}<}flMB86Mv zkD1mU>@bJ(gUeC?E`6FpmH|$_)vy5`Xx&@IL_}9@@RAVwgpw%UQ11~_9YtmAy;TK7 z>tlzcF&WEH5|}OENBLbX0S62x%=ej|0Tc#o%k=D+D+$9p-5X8*124oDp5!}SHQOUX zF1UH6I^v;bdfH#;PAtH5(qdUw=^o(5ci?DHg#EhfqLZHE|Ioqzgr4I_57W@NoU!g+ zMH_2>K(WrO>Iqx?hNvup{}j2QPX~K!!|I82zZnzcQC13W$$}s<4YG45%#|%SDY3-9rD8I-vZAO@bO3JkfDn=7Q1`NF9Ac zpNdvYA(zmRx#>N<0pZi9ur?A45$ZzVtff1g{1vgm7?#WJ&;5<wMIfvN+BMmv@^9tvQoGWLT?)8F7l6k#EEBLN-{R`+Ax&`mMvBu#ID?_N zyxZXB*#wZ+!rF3#*(=MD)jKMcvY#Tq7y4G?0XJI>w|&4+kG9*<t=Zm9-D2%On) zBSXvkfDZP^6YFpaZpz3hJ90+3KxMJ7BhB4Pzod0NVWp;(-|9(i;feNjc$B^}av>3Fj+In$*nhP&X{$nrB20{yBRouss z&H{1mDpO<67+RV}y5JpwFN98b36#I4O7m#&8C8V<>t}eFRN=KzeMU?lGy&)WK%hti zRD#7By0#B=>{1))P^k~QQM8z;yb#&ClWPb;Ffw9GH9cW((v0+zDVfr7V*%AU+wo#d zovj6tlfC1nIAj~bH?_Fd1U7{w?oS5CbT`0t!)Z?!$y;re?WX3YA;7=rc1x|0DrJ2@ zyLCnfRpl-~{wpK;_?PJq@h;dN5|ql$Hqco8bsG$jfL7r>{8rm7LLO5isab-sBuKLXgY1kE@6o$ty z5}k*un`-AWipV*Am}2n(E7Xf4j$*-t!*KWpxv)@IMPvuL3)S6;jr0bkZ6r3R2D^qi z%+%}zoKdaT5d2)yn2~wBE6o4R-a8CmsteX~ITd&`(JObj|9ljpvUhB;E3pG0j0VyF zJB%rw1?l0{;lt4u`}X3*xRGbFuL{Ga&?n7=WAd2U$3YF6%~-TQD3l9*GMfA+UaUV0 zM=G6*gG*9Eb=43oF_IL^!;Z$$T)Rc!IEqIT9}G~QE)t^vOt~y9+Kv+4oCa5t6qk-o z@f*2sLre@X8LVTo{g<1}Z3K-^6K2fQj&Y*33gFLE_-vJW>H2KxF?UfcXbGr*O_OOE zR0f@JBvvb#*G?Sxkt>VF8v!JQk-NKp^f43)XT(%`Lvm1t1;(vv3deowiya>Yvnrh< zucOR$4!PFo%7ntQvtZHt0!%vpJZskTe#>@U9hqc&U3# z9ltf37^cD{R0NY!cA=08lXOW&B8l_bZ20Km*4q8GZL}CF{LuSg8(L!{aipp8 zTf8;-PeqsCzMRP=$|CU(E~Xala?SIW%$9@iXlF zM|f0FW8fv9x9ZpxflI*j|( zT*a-%V!bW%_CLiUyESR~XN49*hky|EX0%@52I1wb&odADQ8&)kLc!qn_^RUUXuV8^ zh-`K;#H?R!GnI)2l@!4Wz~o8{)=&+UQq*L@BSs;PT|)@2gePYZq_>9ik`{1@gD)*I zT?xc~&V)3X-lpgiSJ5ync=PU_-a^ieSg5AibEn0Na}f57PmROpiwaT7ZY4ONN!ko~ zA$5whNSP1}K7)<{!x^7PqUcm6x~UZ+T$Y@U>1x?O(^y|b%A0HJ_dgk49$y|(9CUs4 z!Nb+{mHWARk+EbwN@lbhScpu&H!6DAEgWxGIuPyLpA;8BpYwO zBIoIiUe|HBa&P0oYNKcKK7!p1<0+z7D^7Wd%Q4u3E`N%-gXEBv1eF`+Di&wZRqlP$ zsr)^%KnMT%149wLHp6x7a>w*=fh}x229M4r4mj6;d@fdp5cSKn7lH;7qk2FyzB*J1 ztnG>e@Rgahb_T!x4hdPBbs&6^&{E~9d9XkdEfa~Je5quaoOE{}bDtcegCo{108X z4R2O(!8{qt)a*}>F*(GgvLTEQFt(&KXg%D>gSQza1$7%!hqAs}nubsYM6d%3z^YPi zn1OJw*z&xHUTGv7#8gpG+7`6l?7#kcU^2uHO_$GW;||N3lPi#d|v=jcoaHw z$Q_HngLml@zTh%)^ICMx^p!DDt%~B@zS&C!O=Y8+Oryln9(uEn!75O?@7>u@ku4OH z)G`syajk9u?!kvZSlyw#v=HmL>D@h#dto!s)U;nmd$RS5v^1Jy_Ia(jKe&JIAmMU% z-$8yVnT%UV1HN!F-eDTrmmCpi3W&K8i!MNVxY*nEw zdEtu%-Rh{o_BnWBi@_N>wK2#$l~jZU;+-NPTx8+__J~G=Xu_JQ?-h+_kQ6M73eSF@b}kZ)1ojQ8g`_YQf8npV#;I-(%t1i>YTS!aNCsCX#05%jXU(+rDt&SGe$wT|tmJWQT*qCPvB zC%v=;{cU_xJF4Lg3%jN?7oZR zXojg~R1HNaH5yHKa+Z)OE#ezL9Zmjom$joc>St*t$)z?BN144|QHz?U#A}HH!mO_K z7V_R~Y$KFQ>#J?_V6gTau$&C9Eq_SJ0fiAMkf$o9jQ*@CypG~YR>TtTLjhuyQG)go zYT;$sp(h9wgC0W0JoRkzVYGm z4c`7jan0VXg;AIs*p|~PpW}P&|oAstaqtv z5b$V;cGZQa_~ z!u5ovjvXewWXA-dyhl9x;nQzR9ohQ)6I>?9FlZrUG6HR|(V^4|!uKd%d@<+SJ8#KE~@chcWQ zqBOC)IM6D#)q`6!#tnXze4h7cGkiRj5br~x6eo3y029LA(2iS@9b;0eC#k)E{P7N{L_89=!BzTbb5@ZahwbXo#lfS|ziXx^@ zWlUDi8WRHa$A~dV&>pP|zXrP%w(&jvx1!<1ON?!?U;TqKV=aOeRGNmo-N9SPL9VnE zH?W0}e-=}b`yFLohtUi+rwM&sK#8|;S|=J>_g9_!@8k+hvjx>7hD6vZsfGOt4Te`$ zD1)H^^855lcdY9lR0z}(1tXsC9i+{A8HpvlKDm2LT0N$KBz<}c=_1ca;EKP}xPZVP zTP!Nchs=xEgR8^Kgv2BkE^+wa)t3qtK~s)Suu73QZhtfiL_OE8eQH*Gb~LTw|rc1^2x0ned-@g2`*yXIC6+&Y9fn_r#Kq;F|?*q;_ z6)lhhuMpxodu?ltm`}Womy)^TQy|0>1H56`?V;6`TNV|S;Fw9mNFWQnO@)vd8Dm3M zj@vdI3{Y5el@S@%W*&YGg17NFEfR195SYHDQZ_Q#@Z{v=^wE#^jnR2N;-8d%TN>^o z(s#dJn*24fWaaPr!4Kvw6#*-f%3tbd1(&82b*cB`-1eQd;lumupRYaGS{rWM9^Tv7 zUf;NnuFEaF1*3Q|yh$<+T8pld8`%9pRd`yOh1R9}d~-gCWhy_FbJm(UQjx;8HVG#PgG!Rr>>iP9&O>$<;kceu52 z_n|x462`p&BciU{y^94AiDX(L`p`IS>(88@eKv1?im(yF#l8ESY71IR*0E=*satW$ zGZnY@=;%xKBMsMPBcP-uoSuiX37S7AYk_xHt&3iO^vm8=fNo~(()X&Ggw?vVfZ_OgG$ou(7%JV0(RSE62aG zy}kAT3kpa50qER&r}tw9x@X{yz$oVX3y@wt1RhbD(-5g#+nF_^H$o5kyw06}qz0S_ z%&-*=y%6pLFiEbXF422?dV~3#Cxm!KFx+0bzxw6y9uaG6{I$NiB|~!^Y~Q5@t$PEh zf1ymF0z&KHPR63d(99Pn6zw@vT;V3DjgGM^qVFxB1}FQbH%w@D+4gV%z&YR{l}i=g zfR~p+;b>&{ce*nI+Ve2?*`d@ela0VADBN>0T-~_8y0*E!l^qg^1X4*4B_Ff(o(E0Z z(ni$_9H;d-!r?&|svr=s0(9jNQ9!!{_TGN5CG3N(SjKuE_I}KoU!o4Nk$MXx;obn# z4kO$_EXE{bV;Q4mP=7>j0u`B)`F<;@hf+dp?0HdY+E6c@B z5Az28lv|U$9=z zbG&=}ybTG-DB{x_BwJmqDf9j6-Ieuwjnj6LC>K`Bkf;SS9T^!aLDG6}Aj2{Y;^rtz z5jeLM7kcgvqOK~Iv*q3xEzXi>wXA>G|El*?uG9STCBgP8uq54zcFC3FOx7Q)i9C;o z8~4}x1Lm0{M5u+v3Zzt;6-%tyzVl#h4cQ0Upp8TGD4B2TTdNP&K;zzO0Dsq8zN~hD z<-ywOI*dZ*G)}TLucu*RDAV@(y|p)D>HO8#?F}5~ERfH+W5O2&4g%T`vbU&>2e)AB z54d?7_wGI1hPHpc)`P#h0Tqzi?MK2FW}M@(=jb?--Z(2aBN%|a9-!}_lH#Q*>-*Zn z)w}Dr)^ut0-s%0Ale!^Ns)1DhG1EHpu>NTD*d@*U`fP|zRHdvsT*GYB$Yv<|Vp z-HlMY$6w}u-JxAXHBM^3xUk_xxV4$yl!aeZ}SW8#^=-hWhS z^!_p->E5ICXMsKYok~R0KfPD5E#&CAnJa9>3I_;f&pPqA(RF!S(sXnI^#+P=2Pn9d zyeM=+)TH$nf%%oKXws_)K7my4H^CfH-lPq?#__}Kpk_&Ty>+a8zIJ~YscdT~zx|S^ z0I%5wBKF!X_I4X4Xc{Yqn%qHGsF>H^Ovx%7R7+)rqf!&Gv9#Rka81r^?I)XeH@F+0 z3_szdeu5Zxjxcwrk7kse;J&@RfxHA7g@mgQuw&gw ziV;#?#0dHfCPWze+#98oE5$DO0rybf!yE7H3Y36B&8q3v8?3;_Uy3v{tNSx$SZZ&s z9_`!u60Ud;vAl_D+Z)>v2Og|_y0!|71o_azfd^yvmwPg%xB=dmV_GsI+ypUS$I5!F zTK0ABG-n8x(vU>v5LiXs)mT?6^qXHPMrj zaEi8SJOA7*V)IfV@F^MFZmy;x-8QCqu4Hczv6p8gFM>Q-JcMHK$-#l=FgsgV3IX?? zf;9Qu>2$uDSrm9*+9R~{{x+J@n!3cDs=EfEK6g71EsNx~qhGl-yt6?zw`DCWvD)PR z7Vw7C1U^N1Beu!f`@3oN`(k03K7;F>Nbk~bkVbL6M-eDC36Cc>=iDfrVL?l567hfx zSGqS(@5j*L*9wu`YMoJ~wE(wk%X%YqL!&46M?{i(w1?b|Z!_txtWkM8d(VBtD$=o| zQuiWsh12y`;~63Yf<29MU{;33R1t_SROQLRF%=|mGkEy;2yq**o^v3mW0z(rTyW-@ zNS%^EBm#fL$0s5@cw+`4qY&TMG^^fv2=6*Oj0`x7902;L1m&?R7DFJMyqS7+A%acb z>J5|G-5Z#+z6f%mVh``E+`ZkAidT3G(4GH8_I(b`+)My7Tg|;MVKs_na~9ll)-u$W7^_6car=6k>IHAL>!=oNhE3ukl5DDEp@Ln` zrFa;6BTTi}p6GDG+3GvNu5lJQ5f2pOb{wH-);Y$4P3->g-unGl1U63UMbCCS%Tqx9 zx_577_yBnIR&(>=18PyAw~~W`hS;6AMf}3Kic&?QYuXE8RGq}z8z=T|!#2-hiAbWY zIp~44W@wFMamkcc%BUYA^FXY6&y8&1{ox(*NAn^ z+0+|G1L`dl(bY1sVz5N8yoXvEih3NucP3CbrhsVF8v?N)b=jK@eqlJ@>}pDN#C96> znlK0USg|nCCHh0`Q1Qg-iF>t&^s}+))-MUdWjXy!##Qf>90PXP$3$}tv>6}Wgttse#vuF6$A>AJH^7z zDVRNx6=MO)^2UA1xv0Vj*tyTCF{R~m;&tnLD*^N=Gle7*w7R+R@cu2u|Be@fC#`t8 zzO6Db^xmIY8^qKE7m6UUerdg!ejkDf5k(^s^?E~eSctFc*|ECd>-GV2{ql=D=vX+4 z2*D##_Z+%mJkq#y{ANk09goHSyobL$gEv5mC+dULwXe7vD0?M`kz=nZpubwp;R}@F zId2Ou2^EPs#Jp#l5*oeN`yBaY!}Yaymjgt7sFM9~#uBo)wY@=doLwZlx5KCkxq|#f zy4ldU^ShGV01_o=`aI|j!t~gr1?&raybUC#s_VGGGm}MpsK1c8jupK4FqSO>ZIqKf z6*zk@(4sJ`e?f%UK0ybc5n>HBLVvn#_>Qi!e zXCx@FkaZ!1pBv@w#wU^2W;WJPn3emvrEm%)2a8us9a2TUJn`OczSwxMedkL#`qtWm z^$mD)#=C_PHkTd9N}^|&b`GdLG%L)^2eXHfqF(X4dGt|`tf0}vP+vB|AL7t*1-m*8 zoY^aS39_JpDe_&l@I#_<*VUP~HXc5}tT3FP((jua8=q|{WxTSAhxe&i0s#Z#AFN@J zyoCo%;^sZV$g;Ht%Pt56aUuRapsnBA1Z+_6;Y~5Me55i6tQf3;8ZmJD!Q`*&O8tj$ z_TN$vMxoc6oY*fg%FFOr5n^|^1e0Crk_J7u&71dr2&)4h(Jze_JW2U^V$Mi&hNl@< z(xOWDhD$9`Z#Du8S-ygHabtNj_!NKgaC4N4uJgLZ9)biP4~cdAc=F%5$bZmKq?T!J zlI%L_4wnP7CbE%{H53`BLg`)Lc_IhUCaDcVq1%N)oe9c)SJMZ=skX;%?u3Y;Sc#IvCr|!+*Y{@(hua2X?|pFP{VPH`b$>w4 zE?B9wS{U@v@E-MCCX~G$&Qtw^vYP23Qq|)wEhLg#gWo)7K*+k$(vepfQk24U=ViVG z8)Pnu>1vEZRni9Aa+WA;@oWJ7nP6yExA1pBwiW|zV$5;KO{}Gc8kZ0lCXi8@tPMUB zMUt%C33*}QMN(q6D4asw0$?E(@}SI<`c@y#W8RKGV8sX z1xrq6G_SCwN{QF|))NDr*sQ$D)*mfyq(1ciad`>CVC8D83_hd@Ma1(1EMPc&kdOuW zE=ya__DuFMK$Ixj6bx`_jTc2l!}vo0FNfhFVHtRAuBWiA^|JMdpm~|&bjk#3D(rA~ zx*$2wD@qCW4D;E5q{?c6se8!EEfRy6QN8EfiQ`99PB5&l8;S^jWAQ~CWc@={#d@B> ziL$6nJ(~QFqTydLwC;!Nd{JKe;h$T+apT&(@r(CqsYq)t`g&cte&yPaNfadRWRF9ob3FVg4oz=o;@9rSTgwGuRfZZ^@j<1vUJz*lPdbom7!cR4jMMczVsq_ zyGWeDBFdqkobA0dLT|9ykE{)A`HgFNHh+me-KQ7Nk-W&_b2CLV7^b_C8T4F1C7(`R;_BO1Rfb%YAN_@f)w{-{4) z;z>HPIEzqgI3f+pY6D{FA)g%To&zCa@T>P~zOD67@X&7FX;-PU#IiDIV=gFD6b$$Q z1rRHAGEq9x0KE`fvv~KjU2$^43%X$lbKB^OIm9k{-Q(i638CD~X{JeJgo0%fjuU#( zgF|N0?*?LL?9t$dgCBP13kN%WW)mP-e38-OXw5{+4)1V870zL$58G9vv=U-`pBt$Y zFd1~x3N|v?`*89ILLaQoPAmrMk^WJ?EPXu)j{f$p0CNBb?C zJs~NXGBU`^B-9@1uQ0+hdn#o*rXI&9bdxKWWQj3Mlu&*XT)Q_vHgz8vDKBd!RzA;i z6gCXZOLj7*PPqbRtNKz_gcjT_jz~fp5NN6trC;Aj_F zy%Ti{dWX}2GfVkhsGOR8wUd-OeFB`tpbRyTd$y(bM{LZ^m}1Inki{&G6#E6sRPYN0kH7m>_>dcMIg$!8;Fo^;@Z&f(*#@bq>+h9i)-|cD&=7KNZ z1K9p3O|%*GL>mVN+F!E6bQyw)8vHNz)%H3BoasK3xJ(XiEEW~S4~Mo zwz9XlcHW(HYCwJM!{vA9Ki%BAq^#!!F=b%yh@vdAwtMh2zc(3j-5xWqSGGXJ=5RzsGm4nnVJqzA^$=u7Y+m#{2SUmv6ogN? zY}h9%N)X`XmmkTx3w)0zR5B7bP)w(wQ>@PSr-Syr{?-PzyP6zIV9l10VUJGqyKw_F z%7jwE)ikK3a7BWXrZ%51z-}>Q!y7hdrHUd&d)|I?oh#EM#+4b*xm9_+`4pu7R@J%2vm;<3qJeX~HN*t}Y5He#xvQA^fMwAr-VPsoHhO*=fHa6Q9 z#2X>oYuDe&$CLkAruSEW3#JESy|Z^@Pbn0qrYf>(xNlRLl9-8JCK2G+LJQ{*dr3}* zJ^*m@HOd@=V-t7=)3+ujDz>>MhDLjj~O^t=aF5dbb z6uM;ba*T(_gcUiJ+sE<31PpACXoaESAiWmAT+^;+lx<8n3v_;Onm*>mJ} z%dr;xu{)rs!I2S&s!>KM)KIB&TZ%8xrPDbBG0Cze9*iDPK*TATVQSJJOj+X0jvHG6 zSuybfm~=s5(^w+%sofzlpdswSHupZThU`&aNiaw+YFw#}DL5c#K* z5r&6pCqHH**7$veR|IIUOVdRXc)QJ^;$uVI=E9B$I@=pRDtKg_zSY#2x53P0%Bx_euGetAScO4Jd#Cg5We`fB(K9hpk!2gECL z;se}tO$ACBF)xSh2tp^iysg3@!)KU+MIuw}>>Q30i{o>EsS@^s02Vu#$NnJ6r16qbK3-B4;~4s@FL;|RIfz|X?9~x zJT-W%KZje?%1;3#d!bTVmzrGk9x&?)f%<}%Z8J>WMA7I7Ud31ev9Vg53MX8;leKYA z+)vRq#i!vkSr}f7hlJ5_Lgnn;RW=2ZJsuNqGXt2Kgy*uGaoxD7wOm+8FHpME#n;8J z$Oo40>nhnpFbP5R#tRtiqg7B86so(2XcAQ!)Dnn|;O%6jZN62Xg?O+``X+x% z&3Uk{Orgf)8kgxd+oc&z{#QxXpVdgrpLGcX-+~#?5#X+p0cY%Is?PV6DyS0OmX0o^ zB41bfJyn1Utr#jSyCNUQ)>4B^oHr1#6sUNpaD<~OhN7gCrF>246hKRIntac8w+_w3 z@Kw{jK<0GBVJacrD4H5`C7ZR|0}#0BY_AHX4H{BK+f@*zsXeYE8x-6#czNq7qY|@c z&j+jq5VTv97ogANe-m6kF!l z9fElm{rMF_m2gJz+B$u4K<>hLLKym66y*5o^v7psS4YoI_D2BS6jlLDH1X03!QNO# zZ8eq(Ha}f+=wA&VK3v_LP4c0Zq_@uKj&aK040H9Z-q@4BA)5cqzvBl#c>8CNJkUS_ zgzWm&k8fRBzPk0^yC00s&UT&+=dHi-)o|mTTi?)U;?mCtZx07=fAo=bh%;B2%B}P+ zRE$X?QI({`)hSo^dxZK^bTyCpm=G+7sXDZw89rgx2)GTxNJZ@M8KRY30IJ99tuHln zkn6=gLLb9Fl7U3K_<(+KhTlQsR48P~bQPM&%wbS0PJ$WkRw2+V)=~0p74Bg5OggVX zmz)!FwdAI70@Sh{d|<3CTq_Hd8Spp|!A|N(O)Rv!A?s*1+BQ@(7suuWRVs*XOO@MJ zNkW(ZhE;dfnaqJuQljQRDJ(Zp_>7)tto@VYV`tT6uNn`3!yU(+Ml$uXODm_fpMX=q z%9V80ag`QSlBa_~=IxJK4Zu_!mN!sTv0c#9W8LPVPHBFjT}xpz&~kqLg`wYwhl~{5 zsx5M4p0R5cJ*JBt&bJ@Evmal|(I~@A?EVKK0bk&Ftt2MLJa{|n&%)^%-{J#2e@2Y} zRob>h$ZTjA*NQ!fn}?8q`*;*1WA8m7V64QW&Z!P^dFZgu<8OHM?T<{W0p0;^_i#2r zSf!x}@-bA!pqKT5&QMd7=lra8ehY6OvIq2v!B+^1m_6m4s1nH36F_=bB=OrlOw$dI zWrgf`@V40!LPIFR8}%|%andEFhjg=+=-!Iep|;pbGG`f zqJX3KZ?ZzSC7zx6oiuer6fxe#LRjQYzZ3l3#5iThH9e8Ik?g;z8_=l7IL8n6fMrn* zZ=QJ0G>lTZXzzHmCbUXVxzcu#s|mqp4meT+!1(ARo#-7nC~R&mGR#$(WTR95ek3h% znmV}9h-9NL)fPji^aT_7XseS$ib^`dW<^oxcT~wQ7bdf7xl<1ADg}ut;40EnGs1x} zFMpTkAx^2U3m!zLtus}xHIFgBvAEzl%uYWi+Bh;Nf-C|;m)xsOz8wyW*cPJz7uVQV zhINz77fbw z48{QP?J9wErKN`}Orw~fDy%$X#B}reO$`ROQIgo1L&u)hcHf;?q~ZAQr#s^@N+!_A zWKB9z!1#6WE4K`9Hj!m^5p_*Yk*;C6L=Z5Ss+~SDQvZm#F$@+~0^L_pl502(aR#nl zuUW=M-BFYBAtb3qTL%azS9YU-MxOE|SqX20CH__?P8X zp0FWFGPT)4tJ*9Qw)r+YYGtlqIp(OJ@v~y~jrpN`S)@u)_tiHD9=E;ArEnlwlD3yt z9x#SJlF1KFU;I4O9hci6mD*_?VN-h0|MK|o@=NsKm9s9nL94+_r<&Rl9i<6t_z0c` zS{Qc9xd4uXJtX-?qWe_L=-voDGqPUOh{)L3R}_KO7&2^)>Ya{~K{2q6*S{S?z|{O_ z8oIaNV}e5RiQ;+_b7mU1%IiLQr@XK(v;lOgPNBFhSDd#gkNoyW#CwDxaaCX|T?^p0 z#~D(pSaiBsg2fTa393zOl+|h&sYxR?Nwao05Sw0v!=))|S~RYipWIUC+;~Jm9-W&- zpSP8kEVnH6nE_ z?;8kdy8U)%>kwf&Vtl#ctS_VXCHFqH4-)Fc22IBLx}_m?H;V;rrrek;1owBDIkJ8f zA(n4eWOr`LC6U4Vs{|kj&T3PS@%7bdipDusbayyeK# zJvI#n)HtSA$9j=zZHd>pL8|?lwn8)EMsvmdS2RE;!L%@0N0>NV7(>1H1g5$Hs-Awn}J>(UF__Q-7^nGH-CDZY)kN3 zV!{ahUDScRya{5`62MU6ergs~S7XKb-g@9*8)V&ZX{Oey+$9!7Bp)mTN=^w5+FGDJ z)?E{xW`5R+IYy$lrZrYxzA0d{RrfSM!5|}1qR2q0k=iS8Vtl~N)a-%n#LlF6gn*1z zk+E>Bep4>-dakaAau&9MXcHOfp1$qX<42E>f2=MEWuQ7Pj+aKW({*-txP{jMuPFuN zraf%$se6hpUNcY&amo2KEHcr^ZZ4FUhK5o*{DTDdvJTp?-hXsmI-{`zzJ zvY~Z!8~{t>#J&JSOFdUHGpaDfs}3?@m~p(g$@w{vH_y?_7KY!#Egd^FN5h!)9B7Od zk9dqw)#)ib;FB(@?GvQUEYJyyCdBS&1h`HcF+N&KC;3Wpq#*r9c$wDSgTu=84oC$R zLvQIK>oSS#JPUJ2W+3}^vHHAf%hVQ-q0eB?fdO*ks*yvsXR?!)b13SFIk6j;- zl;E(npDv7SQ{}WuKqwZJBa0<&Yq|pCwSz|O@Ss@0&iLx^_jv4tL^I0T43~!Jtal(l z-x?c#04n%BHi6#vgPlj+OSt;mJD;nKz-R_1`O-J?<@*dc_~~N?xt(m#{W`87>fonG ze10Eio&K!;7j}#RM?M_<>}RZS$yHqOe?K4mjM(8ve8McH;sOPe9jsOPZ5Qd%*&QAm~wQ(#6WnOKVg zV@~?Xa-@Lpl`wSRUMT{QMI)3ES7$MO3^T@(@r>)bL@eDR1aXh})+*GrRJDT>Gg~bg z`m5?$P^Zlqn#;nVf3^LfXd*bH8pbsZaa34ua#v&fn0#?rkh)(bCz@v~{jS;;TX!46 zCWADrjK(qGmOQe#lu}?aw=o>8Rom^UQW|5*+7cUwv``%uhzB2|lWRxa*?Wu6mX_|S z)#_}}ra$>VJ+Hs_PeWgHBvsc>y`^Mdg3)*4q(VqJfcheU`Pmkv)_XRK+LEiW^E;}M z<(-Sk$;dZS)40wNRUio5PXmg#;Zm{MR6!=T73&`gfiY z0*ZYby;kzQkLA@62#pqFTtQ9yjsVqFf7sYgEFyHF3}Uf8DR!O_0-tgDnc?|`ZKLi) z1i*;I@nhPTvjSIA4{IS@KG(*k(JOcDrIDy8pIbkfjPdoFHT9KAi1MYk@-<;!ICilA zDUKJiQ1?Be5Ih36{qZAAsvdvzXzX=FsnWlU!M~98Fgj<~d@P@lnVDzrZhS7J__8(L zL5vViPs(wL4H(s4RT6&jRW_%yav=R}(B()M{6hW(>$Cg>G6)N^;Zl1Bjsj+}lC8Z| z)8`N{ybRDcvsQd?v2Cyqf*vTv4eE>!S_=YhO~U4M6fzAO!D%43#TVH)-bL;J=I6!6 zONFD!)6B~AEFtalBnC7s$MwUsX}HrCC$&cw!v^1qQNKJ3t4%xyx^oDQ)7Va~8BWD- znoSP|clKa{M9DzL;pl9t-AqL0gv2TVu!KJBtvhlq3=x+SWfy@ahB%(xj?@62!05+^ z_}!y}rk|Q8ZETui89PzrC`o`Y5mPe;n@Aa*tz3st>L0Om*5+l(@w0Z1-{X8K#51Dp zVCuwFg~zU}HY`GjFlZzsYk)8JH?~1hrpw|gS|^msqcXOVyS{kLuz^xw-Kj{n!XH~ep-SJW5NKIU`#sGSky+eJ7bh^y+^8Kj1rB2X3zY)msxzR8O-F{w zRjIfFNf9GseD)s4mQ!GaQm%(*0#Z&T>d*Ap67DYEJMcLaalG@Z8Dur)Y)lW5V}f!+ z{6h$FV~O97yB&}XCNTmW0s+Yu2Ai6n%W;Jz+0 zq1>lkTuRYjFqXr)i5-bEXV%~V7nd_v?Qpg3B)qqxe;cJ?N36XcZUC)jD1a?If?S9puBaNCP)Wz4;zF?uRiUZ01SJJi&aYj33&&zQANmdL@D0x0S3r0 zYzn#GqfN%~!6CJqNv!zr(qQs`$%)@eAiymMH;?@G7qMGG5)xJvkz0baGZ|yYN@)`@ zRop$E{1UVs2D8f{&-P(gT1M@mi?BN^I*lF;igw*MbKEepay=s;9h{P<2hk5rrznom zM`4iQvX0y$RCWc2`;tMX^r7CzJIE|FDop7Ujt-(X{GDr87FbhP0vPIy6Wcjha@9Wf z2*d;tze-=+jNPlOpM9!eW zCI+TqSylX%`>(0Jh&h6R-Z)0b7%zo)5$z?AV(Ab5*8c~?vY`LXy)iSPG6~&BkM@3S z3GUJQ>c(h$?XwY;)_87PVxP$Skj&pd!vdfMQnL}zhwHI4WCX2qF7zg3^m(FeEAfyT z*k2j32}%1+TC0Y8&us6RH3D98}!WY`z$KYYgc3{)8R4r0Q-IaTlU zhMCQNGQ3*3pziQ7C*E{u*9>TV; zA6TsbMuBtB&9cc(y7=>?22M z6pav`+X3A!Q@Ju@78M#=Qn)SjBBe-%h${uZXT6P=sMe4wO?yX%E%-i&L&OGxH`0y0 zEVCjE7Z92JG9;8zs1!A5n*5yB7PNm${S?ApxpfzQ_kc)qykwNOColKHCno=& zn|K6q9u55;yo@kOrCrKQ>V#@u+mgad2Lc1}Dhc*hO+q|I8RCur(uKi0Cadngqk=R& zAn28%Y?D~P1+GhT$s(adiglESt)e8TspL8Re1j}93?cvvaA@J3(tO^64DJorc)HqS z;qyY?kg+*pCC*Y5EAWN}b|0FB=FeOb0vR+uki#&`b`N2Ysff9)=A6zHFqOA3b1T5} z6E^==y8qRunoYKIrcC~(u>Si+n41um;q!z2;O%pQ0x2t^QWPNwxWS0G`rh0uoVaa&!()YLP5&(j&KBebhc7>v3G6Z}4|CxK2=Q`6o&#RcGoAF_WnPC`i zbKy<(CFL4RzGkNF>aNUVNw!sKS!$o-bS5=Ll`P4&%DT9Zta3Uj7O*2`Nd!AK3^6+b z_Cyc_TP6q=1b+Z4f-Mm&h=Abp`Tm~wJx9*!o{5-RjH){=o%6oW<@fyVx98jaHw5hQ zg>V4MZ${Ar;GHBt_$#dEe`h`T+@^6Tqmd#dK*|!RWkmXliUS0lv}O?4A_7(v45>ev zebcC&{yXC&8X-J}bd7io)MEj?C-H`dx%!g)Mv|V`6BoI@=A#F!(SVDbk|jD)rae3> zkErTZFpXDeuR}1F{+zgyJHA(O-PPJu34;dpsaR4Vkuk{Uvwz9G{*95u`fwM|3fFMz zCO7w&b-y@DjRU_yYWwgeeuL#WPI~Qvb#c%*v`kXADV(8sLo~3IB*!%J{P?qLAIr{1 zh{ymXcr=7oOO;>Icp88I!{$g*>Bd}PcSGjFlXGq-gSjl7ks$lx^jo~qb_EFhSxK%y z5YDLHk!6&?u&c|u(gbOqE9dgo)+QU7q#DNF2+KTj?^HhlA5SOKZ7l7Q*l2_LA@c6X zZ-QON3O^G+5lkF5%^MB5|2#!jKLf-_CQr za+$++ddU40oU)0qUL803GPe~wCi+a;*B5QGDQF$`^*r)ZHDBSO zuf*ah@li^s&OKEj3l;W)9&?{<$vqMfXYlL<+Q zd=<5_!)W=Ahk@649#LxWq3$3?K-=D-1-gJruJkl7w2r1OrH+WqfsEf^o}CKwTwfEf zQ=2+pbHhsuSos z{c1;j!j#%!J13J;fy;nDJ#>bziSs|3q@a%_L~wLHPM> z6zcue0U8>|tYE1tputeUKL)$>$l60$m4d$(y38v+<2sHDR_Ofb!uQ39M(O|0wm7Hx zSkUbJFp|7fZFJD*oW@uC47~n}_)~kB>3?t4n`{X`qA{lvld_>Jf$N4vpwYw0kE0l& zBkK%9gy(e1mW*ZvNx5+vlAPf9Y4s)P=EzvXrw-KKj4vXpwEZmH7;d{@j_Ng6cOe4C zb>8Iy)KF3)IL7+g%GV%{Z|<)+Z$lt1x^}(O1;ps-P)Cmf$~%9o42Pk2^h4M?_<7u} z)l{P?1*0B9?d4VdATq;2s}RNNmF9%aMZJ}=(gJagiWemISJcW>vj!xMDo!79kR9aiFnO*%hxd(Dq&AQ4yxsz{`p zZj}f$9(5EId>Aw&tvIw=Mt{SC-_wVIcN{RBr+p8?KVZLuJj%INBHjLJ@a&i91e|Mn z{NWy;6${!ZOu1@kx!@IeusvLM;uwOww<2=kyLiK*TACpdAV8&4TAOi3DQ-5^{vIVW)K4QK(pCJa>;R zfq|qLF7@LL#rPtK)Di}Xr5An6f*)C589m@tEnL>tRIx0f>fwNxWy~ZY6}xH~Iki<< zGv|WYrk|JRFiH$|o;qisQQ|3rX~ePgdmb)x%{Sm)dhW(c(80tfh#1m9G;s=9RWv8Blp83J&qJUy>2{XeRz~(jA#<@*e;$Q0%&<3 z^$Tqqp{Rn7wm@^A3Xq~6j!rSp-dOb(XwsNlHqy%TZCVAsZK~fis|2DsCa1=#A$d-3 z^=IKEmYct}I{O_D^}qE{qsR2_KV+LU*;4q~7MpGEouF_&fQ*qvX|^>6^4b3a2sv#% ziG5~uZMp>0!f+as<=v3ly=}0)2IxmibhCnfD?^CvCR#Pwj1LCEdBi1B36GIEY1Z3U!|oP5@X@(`6lIU zb39iLwtZnABbzQ>;sdS?YhZa7p}KHn*^GJr{rbqE`IkMp|MYjX)W)1u_@bf*v~B@2 zhOWpEl-ehpfe8Y{AYO5qkMjr_^~}$@2QB;jO#bD_jTCyZk&@TI8Lo(-o8IjW4XX$u zXAJJVi|NRqCK*#iqz6+c+c%{YA{sG43R*}qsENs{MiA6>nqmrsslPW7qiiCn7#rW5 z5gTy4x4xCRv4mrNHmbZbsxwq8@G#y7V)e@9!83*MVgv$7Mw!d(#=Z9~q^I5= z>-~lJ7K>v3-su^}@<%k(Ai)U1G5b9i{(qQ{$Iqs|0$ZoY z=HM7532wIT#cR)clkf}rmj?;4#FEX$<8GxlhxLK?rw0@YkBgLW4!=qNBNqNBw;H^!xQCc^UDO=%Td{J25K8W03#y0tNP z;UeHSP>LEsCo8$QP81rE!hKG0hBSRcZ7JtcuIKpXa=d7KN-4t|+jTF((s-#D zGGpUVPR>uGe#t8PO7xSYtw zifdH|=74pHJvQ=TDZ8sb1G)Z1A=Q6HjDG{hKO{A#_2j^xw3sxvMnhVPRd7!rJj>Nm z5vwbZLXc*+yScuylM1%-=%N(sal+*ipJBbEwbyDSRUU75-}+k8l(DCw(r592w0Hiz zC*`y02G$Qgf6y^L)$Q*cl{dMnhW-lR;`{;TY||yBTj;b9}{N=8v{|9ujbeH^ORtg4<_IBJW3yh}B6gPaQ@vwZj`4!xxEy zrLi$d33}?AfS-3sKI`z1Gyl{S*@X<*)WLgkEWVtx9?aXZ&quSrEav^A@LFDt*p%U> zekJS#fQ)UkLwDZQXREZx9>Zbh_nH2wxBSFnqczX??JJzD2UKc9aI~vXx1+zn!z7866dee07X}O_r_MYQ}#YvqSNppW-O_Vexnw?@~-Ho{h zcA@;BUuCm1)m<0>GMK+i^I_q>*q;Zyy9r_fAkOtmM0Y^&=oB*n<)SG+5prtpGxIb! z%HYSsFfN{ft0k;CQaQpH&@5|XUr*QD^yV;M0tjxV;2oQEO>u=|Ji$HQ9M{{@r($BcyxGX1aK!Rmf63yw}~+eGlN$#%|uyLkAzM&JIk3y14PrSOr9H z_W^P@a7Sw*^Dk~kwPQHz7{@*u_#@m07;bt;qOU8M1gjAL}T@&Gg)}4xp$>6pX-za-xO_xSEMg;g5Ye zH9WxkEE>AQf-fG{eN%QP2j9X+#te*2rkl5Ugu-9zN_g@1D0i)Fk~qh4pn4M~C=TAv zKKJ*HUY#cz;bB1#j5M^gi}7KLxcBc&iP*zxr?p?2QnKj@S|=Ben?-P?qf=ZI^PlX# z2j90y#7#X4SVaO)_D8-a7X!6>SA$t)jb<3M04a+8-bTr};Y!bZlb}#xZ-Vy(VnvR8 z4*zXjc#vsPVkyroj$_XhPt>#G8tutz)zZO?tXsj z?HSU1pcz0CJq<7=OZeHrbFga$dtGPyd`9>ZD3Q#xEuW>dhbre>SEcRJN2{IGwuck{PW?$%H$DqsvY z&Ah&qsHy>I0*>GutuW73^dDL>;dmf;UIbe%iT>pvNgF|@38JuDh2zLah48*|qZ3=#2sxo-hX#S63px#}qQEL%<4gQpw;oo#9+q zNqRyHsC^#K+^qGfXp8Sc}*{tW@&n#C__&}@MP0i?k|8wQNIN8_>* zumyvH*sfPT%Fr)7E9>kx8TV_5qe=O=HQA6Y89|Q(>4cVIZX}~BmoKH=XC>CrHi8& zuoNmE-ObqLO6?X}QbJ0QXzc?R0&|u(x3(|yE&s>Qrw+^>j9o0u@5S@+3 zhOs2;g@^pJtTyP&RwKBxOvhPuC!=xi2;wm|(2fCZgih{<$vjaV!NJi3Qi69z@Wivj zE6bZSUL^gT*4S`UPFT$xgs(;x;Mf~gAQ~8mh`5Fh&9n?JPOb!+q5wqgWazW2EH_C2 zF`c=)PNFsSl6o}bfIBSALxz*5xIJUbc|(b{i%`HIlNwrx>24y6w?D+}uXyHv56|W= z&rY~ELOl5;KtOuYne(mk6|PSk#J}ou%RHx}J0MaHz?+<{_28hXd-wGI_SxtBjAs9u zZ~T8)7$a@7=#il@&>QMy?htwT*Rk@97dZ?~~LG!+tw;P29<0CC{HU?@B z5=>)qf#|mfJ$dpMZg;k#vg^{-; zGs8hHaH#Xz!pT0ca4dd9i z_E{{g(`rMJGz%MmC{sO*`oN0*f|aBp$M8l>ao^bLS23s~QM(}P-!N9+{Ypf29$r{6;So?2`vI7#2U$`g$108|55Cwuz82r(&0 zcHyBPFXR;eJ&(>35-btx#T*N%wm09}Ao znwY0aZjH+eTR@+1?&38W0l9y|J%A@B7g%5 zY+{YFAQTw@fer@AhappPb3nr^*3)-UA+5Z65ZjhNSDlSciFe49#9m1TZ%=g9>?gfQ zJj~s<$EQ_70L?{uN){tCYaj!@%fb0%ya7VpfTEsJ3@Ezp!=&jK8f6jd#28C$HW>oB z{MMXw4LCg_HqOC2SUC{E5b>hG;RQa$aiNNr<;bf^2Zh-xlEv=*j4TWG%p^&dS#$7P zcp}AQK#eKF?j0R%0WW0=p9+{^13et!Mp6Dyh4UDxa9m^OVM*@c9H@qE{lLN*57J!B z7zmtFi11I33&}GF-zwO5MdxG%>Bu(FO^g~+gRNek{SC?J@1n$`Gq4I4?dWn5*&;SP zmQmt;Err!@pH6bVPo7RDo8tx=Hqh@8KXss!J;oW|((od{xkdOMGNEqQ(%^WFNTuNO z}CsVG2 zSm9zRYH4xE=)2r4^}8Fte1Y-D;m9`PLE$KDXp{q1OKBdvt+Xroy!dk84&1hu;UT5F zuv|(=wJsopLi$IR@NvhD>gG#S+A&SxNJav|HiUXv!EAqK=Lo~qd5ub2tcJ?l6X z0tJ?@5mGqR$!3QmdXu%!Zhmr1cM8DAjgY|sv4NxuZ88E0E7S!eyKx=klA8TZ&;P%| zb=DHJ)4d7bGj3LFy7VW_HCkszszk8)qG3CgdfJUHEh}Oyz~lhAiaVLP4<`55y4MtJ z#A{@wP~lFL(a1y#Y;-AEW$x>%)AtBI7%=r$KEJlU!qxHmumJPc z?jEVLXJ~jr5#4#eTi)87ULIY_$uk}@Szb*1yv^acB7DFtuB&A0eRUR6Yqz^U-B|@_ zJ0l0qNpnQ~3uW~RrJ$@*GQ!V(8Ps|F`eTVWwnnPIv72Y0%^FPc;* zB%Fl?2k{X>q~hBdYR$AX3f5ZL(tC!A1*PvnOq6h{4rtR9-)-cL@&s;W!&*rh1x3WW zMUolc-ja__Rk1@5U7vL91fq|XcEeS}3x5=1GUk8}{c-eti>^Ss zu(s2e%*A@*773OHQddToJyx9)s$WA<;zt^R}GNui?hi@+6X7IH_zZ{?SD^$CCp&zLt$M-3ce5D(GD zc2ihtYtxi2G%X}|ws$5X&w&4Q5QzqmQ&$EhmCSNvZ_X@_EM5Z32(h$YV);-~{lbXm z4qV^>NM66@QC`0;MMyv{SNm>ALb9MSZ3@I`f9zH zos@T>(cp}Ip2zSD5yrx<=K4bK{_hJ;j$ zjBZd#f)A1hfi8elE_56KQNx9UvktW-XU~6nk7X=Hx@A#(jNf^v;v+ZxES-oHuoVRb zx8bX$-&W^2waETRS!4+g#ATe4@l(5){!O4O(7HUTm9q-c-Ycz>7H{aY?y;h>Zn;TeI(@8CwNmvS7g^40eA-h~q4IS`c z+APH~P4$qxiFitVpgW#{;#*RmFCE!ys8B1olE@xl*b0b<9Hx{|@T4jt2T}B%Ieu%#93H|1ub@7|A-Qh>uZn2z@_C($U7FTZ!(dVcy$63piJn-E z#R?Ej%OR;`7#k*n*PmZ<6H9z3T>VoUor zNd@K&haW4ZTP774f~C;{%T$Aa5vFs3Vu<_w6rpz=T+X|3-Jyzg>s&%-+stU3du64~ z`6%gBZmOSIE)-jDn7X%)ib2K=z)97co5h;S3dT>XhEi14^2d@L(Z^X9xU!Y(gzm)v z)`>UXpE0oNXKNcq@K6TG?yJ3y)w>eN>v=i;G< zl6gS)Dj3_Dzf!HN6zsJKB!Go7bn!_NXDUP7a*K6_pu*5{JiXb}mxt)Zt#MdoWCe8C zTeg4h{#f+skK9*3Q4P`G#lU(RsBz>tZa<*VAWJ)yF|pN8OeVo>*TAyNYATLfruf0h zFHhgsz@hG93emY8lj3?DPfQeG+JmEb5Zsg*K&ye%7`=y*){uk{LeEJa7QvSiLiw1o zeGZ9;57Oc&y*tKfVW<^#$9V_Wc227K{2&mF5rB@;#oRp!6b|y@D}%D!r;0TLP^S;a zQ()4Qr2Mm5u@JMs$`mDp6e%(xKeeyHKJ57c>>zbCu+aj+Pr>NDQ@H~p2+z8kk?22G z1S7;dcYs8~pNCda{u(mH@6i?SgbY}DxYnP0#3csMtQU)iEYhF^OJOrx(buGYzr1@n zXcOW^O*-+j=UnuH+E%@k5OEW(1j)Axoy z3#~-*bTh&9PoJS<3w}a4J@4x;qAz?wAfkFBNyKC{tFo$w4gJQ6#ivdz4^E8ENgjK7 zp3WkP|7WPIF(pn&tv;SQ)NmM$3 z9SesXo0SHZ;W)v6jkC+2BmgWFnX?`v*aVMR-Z_enS|!Rg?{r&RPiaKMf{EcgtfXjI zj4~Hwxb&x9cG68%r_p&e9-xvw1NE2h@m9Y84`InPB_tLI^&mJRL?M!U=iIf};G3tK z17P};)JZp?(+cfSV9bbS(1o9An)wvqMs3gC+OR`PqtPQs9hb=$mun{44x1VS0 z=3E*`Wppp9xr$c0G4?EKi;B#1AdhGu^&Jl@7c04@1>dfyq3$Z8l42y2;b?v1PJxSL zrV@_D_E?Ix7EpV@ZJx0%@UFbZbI9X3O#sB;Nz75yDBK_nI{b{eS=>? zvq#%sUw!m2u%x+Hje^R2jJ?Q*5AaUg(B{Qqy1F}HJ)#>eX}{j&$t6K2yZB$ch%4`s zMbNLSo9u`b^y8q^Zl5WSPY$~*Wp(!NNDCjw|39$^0t$~-DyE8s8YWSHD^P@B05*se zz9(%MeXV=4`wrEb{3Y3Ii;9I12|yrL=e`GCRLN_;c=`KrFX%Wmgr`aG{p2)gLzMQG zeDi&%KDrYIhTkS+2w+UJ<8Ar~C$9!x)v(K;3Qa9cNaJ+jmi_lp&oR;0H=k^*O&@*J zhk8tNlZ$5&Y!#_Os-Sr+IwAHYmf626!2UA;Hc{^=qZAk7a%uV33(azo9Sf~oXnQiS zq`6U6>V^Cx2KX)+32>qrjhDNxHn=%6@xtn0{NwJnufqoHMx{0BnAK&U0je|z>xO1` zxIuSs-dO#P2E?U>(~KPV45~$PLd#kNI?cT@*FYJi@(GxT16sBwjQjXj2M)jR+wM7T zd9f&>8F$OuVKZzo%amRUgRmi%_W?t$a?jG^y6Ed{q0!G}9w7 zfS3mrn|ym2oB2L7F?ltjkV7#XRXM1%Nhk2stVLS!{-c_sNmDp>*a+CzGD6dMgOD;* z2iBBrpH<~ooL}hz9ngh3#4W&>wx$)x3|7LjQJ(11+~-0DLs(WNETi{C9V4X}i3dM( z5Mrul`hEl@?bp#?_DxNO)O5%cF`(O!6ig&sEE>a4?T=N3B_y@FKlNITI`E!0CPDqB zAy1t06=nlkrQEiByyL@f!w}MafHbF-;dv%NLx)L#PA%2xbu{S zPQ`(4`Ry^y(Z*s^I-tw5p&>Kf9IOyl1RgiTwZt9M&XH#h zJfnhDbJyee7HSPz=3zH^Pnc@-hz03(E8So7N`avfBEdWN7IFefRb1Lz0*8~~2@4ot zgq&s~#adv!irp%Fi)A_xYC2x2y;mNNC#9O@O*_MQoJOmEslaazr*Du#m;BSZoy+P4 zf^;?Td%9!T>msItTd`k{Yy#{D?kHhx9WhiJmSfx5@|9j5aev0mg)QgJ7VveJ(c?lI zp<|&Lq1mZYW|^J484&f^?)%Zs>Ne8#^xN*vr#gY3RgV>t0;qsoBX&aYWaYC@_-53< zc4o^=eVC3n@w)BWGjM6eEq~Na%;q26zJB9ccb_$YLwaZr-g0Tf5wJsXli(7dxpD2z z^=m74?tFH8_IKo|`v|CO@6pG}OE9Z#^M;FFaUKn-GLKK1oY1@F955C`w^^$-| zA}6choP%^y)AL!y3={EvGJ+H>RaBhsow!|~(?`jm;mt5~=w-f051auJ_(Ffzh5&(w zd?yZUXUjJBhIpG6LI480PpXD~^3P{~S7`r__@|#fnm*b5`s&x$uRpovy51a_GIKt& z&9@w+@;Wr;{YC@?`*55<^qkCp`0bVVSHAm?Rw1KOT#ZIR8>o`-#)wQ=Akvq|%lFj> zoU6k^MokE$K{6?tr6#bNrctE2d-_3faJxQdH2Zt*<)3g#$z=Qf^x62yMtAAS#&o>- zh^ura<3}6B#|+2*)zM$&eiMHlJQ?pi++3T~U;MWtPsOj-wx4V~>eio(pV0~WT6gIt zAq&2|@kzcNKU#k}>2@A&)0J{E{pQie6M9l#?=Ic0r>^slgKTb%A8d4+kGr+)N83-j zwx4`CdAPj;lrEmkSDTaRIICoYc4oEwQ~F4l z#<%jWy~_i)oZ@Cp@!U#pLM%y>H8e6%^;+?aIzCs(gFT=}}2KH1pl9&A5a zXLV1yXPo$@I}59yvf^dcI#Mw(%UE<<8toZ{?EL8|!3|U230Q%AswIpG>>y#@FCVJ5EBwezWy-vbol+J=)xv^pNPW`|0}THhThp zCLO1}Fy&-t^YO{}OYmmr5frdYdI!6y18s2p@R6PGJu#kq*==noR3I#5iiFi(&Nlec zeQYsL_s#ZG=Gqq5+e#X)Z;jVCC)KcNyZI8B|tag*_ zr;pdWjr;d8#@Kym=mJ>oeKX~xFMKg274FHn1M8mkJMIZ%y8Yyvd)wnD>jjldw=U34 ze?(WI9rz6$aJdKOQh!Qy7TrXwS>Jv(>2AVE);GRdO?5G z)Z>i@+tbbQG`o=vfxFqvbmP$mj1S~$+^L6rxYFhpd}-Q_=HlwcJM3h<_OM$YPsjJh zlZ~zb`N=iVbv#+y;LQ33H+*Re?jDS{Jg*+}vyRc@`!GRZ^JruI;OPdWxjnr%hB1P# zb0XSU+g_QBpTe2=T)x&;+mCGRR1$f5*l=``kI4te^u*?HOrVVjEMS1;XRZJeKh%d_sQ2jgz~RoB%iuurtBL)5`3F>W$V&@9AkCG8s=-yHBoOzk*Pi zJblcsH?W*<-{m``+pW87unRm7R?O(O8tV-TCHbsh>`?>p>dh*RbKkD+Da8->PR$FW zU*h%}n6dpBt@GB+PrJuYA3p{wzUiK)IKaqGhMr-5l&L?+1y`#B~dTL@$cjx-2 z-R;kAtbBIo+9!TaMEc)Ts{a+*d*rG(TFXRxMv*}O!N(P!doG8GM$*ET`UA>5jb>Ge z$ml7=FY#xOuqRUnrh-cg%Dxlf;>WF{?);-<35=eVzmGZm*oFkiSV`H{sL%k{jFH*ND$W!%v&`71!6%pfBWs))lT;(l@8uEk?xPIgqM93L z2n7xUtA(%dzsK9thcI3SVFc0_?Zu!S`<|XsNzb+ugnsFYpP!lA#B7f7 zw8p8!+CR0#?@6xtrN;Fm&+ET14`vG8YY1#X0GCu$4bP6&5aWOjK!&Jau0SevqssC~}R9Z|Jo+Sj$ZYMgC_v3G2p!7}di? z1s{!OOD^;Og4x{dD1NaiYfNxb+H_DemV3vsK-4j9DeHiX4i}TBPfn?Dy-Q*?Tg1yc zgz;KB4j?ijIJBD8KoZnTI>uV3v)zo~m9KGZS?LUE_%g6f_jV@O)0RO8F|i8(Tf-r|f;ehTX`x!)AK7DoLAjW2A;_i^mZpaMhv!v0(M zW*VYWCB|i*Sn;iBYH2Qu92cYXK&k{MZcu^%nnp&_%?%L6BU8d}8c1|#t1NEyu zBy;dBERhdE`@WG$C3%q+htsc)5*i$?A!rSQ^tA1?s540bRc990%m5e~4!4ehWwWzM z40y>DdJ$X|E+W3&4Cr`g^&`u$y)YA27W=sOPl4!|;rlqW;LHX(egW}=8gE}+`Iuo$ zL`%e5mbW`f)l(0!0n7`4q7v-)MgI5X=A&@PL)yzK602U#- z$Q_R4J((6wSip@C55J->OTMiRRt!gklqH;WkCA?)Q*-%GzZkBKO+VDu+>KBug2(bU zW6yiUZBaD(xc0!whX!^PSeF|NZqH=7CYtTgZ8>62EwgcsWWMAKDU2s~TW4ZcSPs9; z!^LT`F}w6v+lEt3Wc1t`!IIznx_^oJp%qj(^LIAcrrlB)wf1h4d@E+;dNo zW1u`1MH(PiFjj-|@10fYAi$_RiwjpiL1Vnno?Abua?*`xDP%Q6n9WV4*)9Eja5HI* zfCwCke!)qg6A(bg7S@?wk7`_LrrkI(unNu_3+-31h_N4_GbcsvVjxP`*$$vbybF*Y@FYywWYK{pqSIt(w&C>}KsMTEpE2DM4B2e!u82PyaWA50+6c!W z5W5awUMMXk2=e`Yg8t#(#Q9q~oZ*^pOt74$8w@x%F+TDhum1b)4zUOX zw1@ld;NZ2tQ@BkBUV7k^5acU>6&BA|xd{SRi^4@w*&DDCSxQH%c3+sc6(cNgDAm8wiIz?!;xB;3J%iHkp$@3-he%wZy53< zazbcT{UcGmi1P-pf~R9wn=sxUO{ov_CJXFPpcVlI7L(^}!Rq1|e5MhW)Uh0#mGDz*Obf>^0F0JyxI1iYw}J$g*r?~2N>=y3RIJ>TO)(CoL7A% z2gROMw8~y?fUkBQP z2AkmS&*-rF+xdwaa~D*7{``x#XN2QcU%fud#dXV7=S8ck=a)yIe7jcgF1hu?+$ zq2qlyAxZB96K)+z-QQ-%;)EIEzvmy7D%dA0nkn}IvGhbR;P|}U8FSbgP8}4qdV{-4 zZ^E@Tev1j=pP(}5{f&A+v4q6!eK(v-DagT{!Ie)DRXqCP8k%UumLp#XF=e=G{Pyk1 z-ENE46135KhreR9Q$340^Ckn<$>&=geK6Pvx9}&B|1sB39du9jSFa?yiP9s&Ur*3T zwZ35sW8F5NeL7mcb?w&Wm0P!NtlatZ_6_^-5@|E_#?!<@!%t4Uoi+EwK1cYGBKajI z0B)ia9WRvQ6JOO7 zW}KIFDM4xP{m|3mnohXC14;VyApY%82XOlk^ARw!(<=iFWtv>pZfcE|#*cBadP8smL@_M7wi zIxYpHA0PQK*mrpY{ifc)4r$D|F2MMJ=+-ghSZcRHcs8ycYTCHev?8aCey6X_uUsVJ zYj zzXUAqtbFp>joZUBPgf_aW5i`v$A6}XlQ&gh$m4o337bQ=!vn3#FwgtIjZZ&Wf!*Ai z53y6;6U@V=PPQmGc{)vqCjCHT`0P}lPbppQeQmO~u$BcB@47#a5-5DkTELB!jvUXA zppbX7qmRB%GaqG$Y-I7BeENs=IPZQ@?_Z#{Ve>td<})t7y-1*6oS#ds=jW?>qmUGfi@*OnBlUUM21=A$L{@o=?!u$r=vp;a^)&p)ANlupKKM0maAEV<$g+@DlO zw4ORj^E=%8?eR6;7k9hYzdWF)^%r>jUhN*++hg^Y`0`J7&vsW|p8o24%8tis|{<899`Vx=%*mr z&+rdT!C$;AX%%9c0M2@8z9olOS`q)nJ-LhY-?u=6J2?7FxCS|g5Od+*KwCR#D)e# zLHynRRr|-AVd~xEEd#0j0mFnL4nvpgXdhjT4lBN|*lL2+yQ`X;upS774@0B&pb902 z%(BSSGvBYzGKuXmO&dW$su6`n3MG!_yx{_{Y-Lx6eL-BwxE~ST+`#Abirdb#(Xn_q zW-N|0OaKDM)sN2;pv8?I{TNg_YpT`sLe6wG9f2k6zSl#xY$c8_II`vroKh6 zj!$g>LF&H6xxnP*t_#ASKwZEo8IKsO#aj05B^>*XbFMS7R0~hY8X?oi26iR0THON3 zgSEWst&lHs)6A5|c6QBelB~NY2PCKE!i4gUL)A)j-N9C`6*;w|ESndP2-JGod$6Dk zmJ}q|KUgU&BJOy$`yw58xZ+6aW+Qy42OqrM9f^H_cLNttI!`zCBH$QcSFkO25yb%z zA-LTxGBkQu7sz8q>Vu}#oxI66xL6ZY$-@OoSduAcWt%7M4r$U~mkEj5G6&8$YR!4t zwW2z7(59`gfC2zexlvgMpxeK!rLAq@zXfy{wr*VNq9k{@LU>K7QZm0>5v&uvyjDpu z1W{kH}?Iw_?~Lc2JGwO#O;*9eF+!^bdcye7QY{D!{Mj|Lq!hsr!$0^cL2 z(;jPJ*bqcXe}$e8B&H_9t=YMlq_q-fmWh>9(8eI`qCZ#>4e1=u3h)HdG?GLPFlxPy zKWK=ykn8Crl!YaVC>#+j5$IEySQ+E^M1vOX^*OCVyO<2}BQfDuWXah}Cdsw!8`v30 zph-6DGOkHl_%JFaIBNp&zeE-Oi5dj~T-#y%vx)K2!Tw@Z1Wx_g^_!QwTeokn5Wc@X z`$L^_|H#-K(wi6weaMMHk$(B@uD;`dyz+2iw2%c=5VROe0y$8IKF|qxlZ0twj|8oMv6dFx& z@*cj7aj@I1o*lmQYOYIA=g-sq@2H=k!$+aRJRHNTFEC0 zO+xxOOX9%l z>|@X8pAcmF>Ep6-XbN~A1N!vc`J0vL=@L{?&3%@!x>*jrhp^dC&fXjnSbATkJ_fhZ zxHCEtp+ZyJx{Ny$z50Fk6U;+UlP<`+xh;ax!uWDRJF8!fC*<)ZF=ez&0~mcyeHjFv zFLWivRb_MCRIm6%&beYnU-Uoc4(@w@g1Kn z$)wwTR3ICQl&xO4p2gz?qkYrPx^=rKo5BNREr>3DR`=nsI1*}H>X4^#Gc!Eu^jRf; z_usBOM-ag-TC=Pfk$>n>`&u56K!0uJk*{vJ8wSZ5k z(BAJ;oz(jBE(`*AOHv7}t&p~?!(f+I4)o{14QjO`43;!RW#b3C>5R5S?NGiHn<&#O z|0u;nbrT&218-9W#VQjIh7AwT_XTeCP@sf#)zslxA?uOqaLvlx)hCye5CFUI3|hAO zQtKja<9OWbe)Gztm&U{yrGFwwxZ4itL)@sd<>>*3lJkN|w}6P*WhS_av)f)sk8jr216)<;MEfXH@YMt*DR65G};KlE^KTu1w3?-p}Ywp8tp%E2Tq2*>{g}IqY9)>0G)r4 zr+qtC*#Z$Ww|ashO3W*r0t3_r)96fL>a)w9)xXABWpf|wE4c^#4UNf6YJsnX25P5t z{|2qXwv#iq`GE9OXFs@hZFxM~yQ;VNvM4~MR?M%8#>xwMuHFCG2jxf!bQB-$mVrya zO-S)FUX_jUWJ3pR^2w+@L1g9#OGnZjQ-_y;<`rt>`}C{4(+fYfBmAhx1Vg@fGuvC` zY`?`UOs?kCY6=D6?1#eT|0VYcz2zCXcu~VhDeAAH$V|*WMy79;fHkrjn(s3MKzs>L z9Xh5V+YvvXpW>Bm`708J3`6hCfnN1okmcd)9G2xjDgIYItvPq_8w^1+M_-3*>T+i- zL}u4{PIl#BYJ}wjM^8hhih!j?E3I1_Bf0#ezR8AUVcTe}&0=g;v>93~PQYGmB}8Tp z7Q(xwUeYLmezp6O#2Y86q)P0Y-J>4`7U;lsMt}g@gsdZd;S*Ne9euFNW~Z*9;`H~Z zCHu1a2Z@fHm3s(a9riul%&g#H(_xp+ga;9CzF5hkAJGpPBTnTMSnDk4|0X-n>ky&{ z_zMqn{(9p2CBHbZs~Y`mh5>U>Ii}J*L?#00==VnUj2AIkt|f2$(Oj?pQ8qANc#9F7Ji zA;EygF)v4Z#lpgrlK*ow#$;DaElB*X-4DVYI zff|`g$R&(^8igD_ucF7H2k3{_#kB%+2Z=)<`<3GQ9>he3HY>4C^`yxLxc@pl3G(Zn zPR944X0)J#8P1J)27*-M0!vU*X zIJV%3Fc)s|@MA9!Z$T9IrBC-vy zEl7p1IKN&{hs)Qx`hlzIa~toC{w9uJ5fA4(1nb9N0kMPEpfg=)W~BDcu87r_NAz_w zX?}*S%<=IMumK7#>)vU45u|si%A9u2G1Zzt9H61pc=(mM6>l&co@JUCt$&J~Ke7Fh z=%_2srs$}z4va)cfAQ_QUs9JU$ir9WWRo`Kpf4}>Oa=#h^|Q}DD=aCKsX1|)hm{mO zCMsVcgAa*yqvvpF8h_vsXa8~@C=L@^-vi6&Pu|M^g`UU(xpS83j~FW9p+_qvjU$T; zYBh-2O5NspI24~7TNhu-fmQgeWlU?Ox|tzaf(2;B@D_wn33jYuylnL5UkHR0Of!;FP*U2ae@@?qMe*9+YC~QY+?2jtoM_*-<9m{k*{Wt zeb~C_wCvnb-$w_H6I3g2KghzebshG2(<&|+GAcG+=u+T*8188hk7K3T(-A>x_)Rwc z&bvW$Kf<8v784=p@nEu2B!_d9?M!mZ7iiS4BrtBP3|F%4bpPIvoyHoYqr!~(7h9u^ zA|=kL#t6!e_sPryL`YcMnFjA($&1dwz_&ow!o9di2SQh_LX* zun3_TTxn>pM~^{!KP2L+wk-1Z{zERWldG&oJMMQAFoD`Ronvpk?;kw%x#rBe+Z0GLj&7_4FSw*hSEx5yaS9hKks)x(IL7{?;?bq zJyELLS|$OjR0NqdiaR@vW+5r|ADRWn8gO8{HnJUMlh6!^BlxkDRpe|R6+)_b7a1CR zuUV4yA-?S_0aC6Jf~1B+y;6a!bT0^h;}GNTLk_f4%xzzwlh!+4ZuGIrPK;b(c70V6 zFANg=V;aq{zX)dRMbQQYo621+&y%;>BFBqss!j!|FB|lOMx}VWw>VvDHfHFU4%hP>UJ*3&lQL&)0PzaYtK)})5F@c9h(gd0kRk)a>2*)^~j|7(W zMZW^!MFyFDu6)R0!o&0yp}xXB*X^#KkIQ!j18gr0Xtln!@_G09Y(X;T^fS5ad?DjfkjqAUlg zVidHp;Evze>W+s;X}tw!DKAQUJIqblVLc@=B530(vm~Wh%8dtvXg09G&3&y-<`caoPUj4`}}OSDm=b53^uYP!1SZpH3#`Se>vMg_bB%c z=(Jfw!7~c0e>nF^|4_OBhK7)H1Cr#}{Bp9N5s}|eE!j!AJ#xyL=C8BYxLy+|ijc`Y zT3BN}+(LM}9RYJ1-=a50_fnQz7?+6MI4}b=p78F=6Jlz_fuaG%g|Eqs3SD)Zx!EVk zq*{seEm5I&fr2W5kLr-u_ybQRLxoTf2@Mx@o~+OUv-;jCB9mXp=VS1|3Lqf$ zG51i>y%Q8o|G3MmMr zOcXJky|tu@#RSeJCHq#6u^{O#1UzK{^L3RaNs)%BU2xN0ghvOe#$_?i`%H!Yy3gLr z2lTx262xxpDv>5>oHS{v4JjAxRU&#bzFmP(5>+GKlvY|C{Rh{&-5qg}3pGMUSlQT9 zU6XHVn}tM&WkJ8tfY5kBA1C-sifVHp5gKYf+yv;Adz9M2)4cV(8v9uZC5MLNhZ`mG zMx$;Uv4&nbX!ukgogi()li~ku=FN8p)J`NJnN>Y&njSK^zY9}w&QpPZ_`0wAsHc1>St{FC9foI-);vk^o16%LCX!mtOdiNyrUgM zuc8YsTQ2mMmGt;1=hESt>bIg*db2d@!z*u@25b>NODPDVOLS*9Z9{+oUZqe=TAZr? zOLSV%GDi+B6EFebq*l=BEr1Cod0ivq$>c=M*&2leSwTL|s|PRJ9ox?j@fS#P69n&Q z@$Ce-0f4$-pX~7gyv^_te5^y;(xV)a$3@47uxl`-olu`!=pmD#$U&0AMGq;sYwtxb z4#GEk=*>w0DPLJMznH+1a%qusjR9R2!TF|?g%1!V5epX37Qr5$^!ET^o8ZDofD$uH zoid$JIRRl_=fZ1j07OEQ$9bf-j#b=yUrx|(N-^!8k-3TFrZ5Qx^ar0^q1(q5d%g@+ zmH2=bYWm;>QIgehTpcEWyI374(t*jv&e?jMUAH{%K?k$3 zpzFao`5P$p=q$$hF?-^(>2Ee-LlAbHf=q4>$e_c1BCKkLAUi9eqH3il$&CTSNr3&NKQT;={fEhoTU^Ufzk6;BaG!t966k z1QbC0*18d;Cs#UGe3%S)bUX}t;GO$G)IKt=JYouy`gXKphe5)TH(d6PI;*5ht=tt} zdCLt%y`obj;jV+G;HD7T;%@Q7x|`l3qU#8H)141=Zz{Tu;d__STP3dPYO@z|1IBoS!ZfY+k6;Z3x8? zdC3$(Km!Y~p~RyM1YEv5TItNKg}~C{Zeaz>tt8e;4$N^pm#)_GVS{{^d2vB&N}Ie_ zhoqdItk_X6b=y3D#$!{`4;22#EX^S>GM?ke7Tx!Vy&7f{=;m4T2rmQ*KABWNjJ|V% zqbxi3`_Z?bh2y?1k$^I8Uj=htT+)->_jG8@-8lJ+3qFZG5NVpPTXV78DZ*j^Ba6c; zWd{nKP(L|+b%Op%KL+sJ75~y32>Ig+?;^au`tIm_b&sp8(yfPkv_83h=W=)Z_HC-) zKK*odOCHtiY)2gvlUwWw?Wkr_;5)Lv#WtSJScMo6Y zbTK%Nx>Gz;=WPpgVf4VN7UQ%~m!Ist0&8f}%J5>_~sZNt9m0!a7Nl>=+I4K67y_IJ< zfL)BiE7HwJif({hJLk3e2ypI8i0Zf&S$ve+MIBh3Yd*Z5A+! z)Ngq;$)Q&|ZLYpA-Lkmb`r3S5>#4GZB92 zjDR5^gGL9LvIh%M;E{(5t)Wf4joLq=Vzk|6B>l4f=F^C-o--UQcUTR(2738;iAIFo zvrSAH%$d=>r%xW+*Yn}Vqen{}-ogZn(nS4;4yF9hJ@hssT$xx4Xq*_w>2q@7X1<&&l@0TGwz~-j<$0_Y%VG<+ ze^`OfA8M#&wC?`+Pv=!stFuqVh%+?IZOT$CFDSbRWskEV8bzfOG7g|<_G$ioPRjN} z7ioCmR0lXP`ueMto2z!=t1QM=$^%vK3a1xywgMQb>`D3yNgkg$`LCHAELS%IdE-eX zo!w4jKll3gqo3yk}a@K))$&FwMl{7!_Jpy;e|40TK?UIJ@Jk|L}Ks^`6;*;POv) zPtMi2lvwwv?a3c5R|A0m^cQ=@ZZ)NS`57gy-3}nWBE218>R-N43uRqFwC<&z0RvLA zow3fM4b9zT%{%gr4pwtJZiytz%9+L#6|EGtpRQcL!LfKZM#BcjvvC*poF`V#f$pSx z7C!R;d7t*%vNA<8fEfy8>FnGnc82EvPy1QEb^Y4q?&i(g zE7xz{yfvCkCwrS$cedB*68q2pLyy3RDs5I-K|!w)NwS+gf0tqbm6Jj7iZgoz#k@M? z!VV)sZ-1n>8JCM3fg2#u$>9;4yXhmP4#O_UDabHj;IB?`8o=Ws@bapR?yl~$(tGtx zVJ7Ps2ya1lLts%9P?974Utn}rUNB{6WHfjgaMTYPMkd~Ieuf8cW%3GMZ-(}a!q~7h zh;nFMKIo>!gAkuA1jKz#ZPa6n;w`KJ^ULzv`dkyVG<6 zK`xX!-0fVc#G3H<6S>e)xBM9S%!YQ4tVdF{?;Z(Q$BQgn_^Mleblr_TqGNh7t%`#| zmaU@_qT+%@a+xY?h*CWzaRn(j4~#N=z(>$ZAV=HCU9W*z&zLKp0n^!7IMOEDd=g44 zQKitVyo~y8`oVtYYL z<3Hiz6#jFfOJT~=2c)q=6ek0W5XH4L#?#~HTA8i{g**Qp=8-7sDEM5TO|F+?06*-N zH&h-%VM1vyTlT32hxyhw1v+wS%!u_^Ax)np%kooGiFFHz0I_oavMPiFqk<6WeI9Z` zImOx}1W*x*YXRSNHj4J$bXS2vmPb=onjl9tK`yIzBnSxKuLMPSExv!51vyL( z_ApU*XFrnomKCP=h&YeE5w@F{zj3Tx4x8O6_bL+IRzxTPf9xCo>+kUfP|qE@LNNEc z^*5C&fJ#iQc6V1O{hFAh>Lv21cNC|TB^ZZw(t87GE-*en)>PMce|KOK>*0wpsaA_gYiQpty=iv+fTf5%Y!+FuE7|GE+lCIz*oxm^QD<+Bo)V3l{az zDUOsXK*{J)K`Vg-sY@ye*ZQGzso;HdG)o}$T%(^{bYc;(75&n#C(&mo<1 ze^@#`EjUUfzbkQb%@(0WZZq>$z zQ;Dz3zn_5Tri|__)CqDfB*1X05tNxIB(aED+OZ%MUs4@X8*G7v647uTL8xJI=g#V# zKlI@SLs7s8n&OW4`$$TVS*8;lOn7;Ygv(kD7vA~}PsKohb2~HXw#x;C7*s@z2cXJOdc7~qAj8c@7_QeqJ zKGI82R0u*NrYZs@F(dO93kbac0r5UqI-Q#*10X{DI! z7y8=+t~{Eqb9JXx_Ge`|!6!@>kL@(lUu4%{J$k}Iy~gPCA9bfNeSO~gW?2y|Htb$x zj)#l7v|ewoF;b$Olq4H!$NyDnbm_PV_m{WdQ&&~v4@0ZU1c;aG$AYPhE;Gp}0ahcg z>Pl$%g!u6atq#N_*ssYa&@dpMFICyZngKCv8S`*n13rxvGQ3sl4H`-mAH__VpoyhL z^|jHDS|7erApnxe`(fIBr}XBq02}wajkM@rXqa{OtCKHwPc8L0K6|}Nq~mi>@;~Mz zU(v1uXXO`vc8*cHio(g6=-BU;$43XhJnbIV_mrSvsh2T)u#Yl2HTMsALf7@Lsc)(_ zeOf`WH1v9y&+^LJ{aZ#gl0B&100>`|1>8 z*0yDg-vuNnYVSqE(IHkjH75WO5sG8dTyt}ufRua$*W?iiwi5W}+j3bfl$_AHCtUJE z$Tz14Ug#6yE&R-bJ4za4R8j&~t+2AaCdzQiZW+~IYYP%MOVz5U@J`cfxJ}qWXJ2>} z|CmsT{zBX=@!Y0T*nL13=CGjRGe%VfN%>Vttl;P=A(c|DhaNV1mCC7D3>v*$+WBGW z*-7F;^FdLgdMX|KWYWaz#BCFCbYqTomu!{8E-BLP48AXR&Uub=EP8IGfz;b91{O{- z7y8RN`CAh0l{ksfkl2Y8F^2une2vC}zM<(AK_fK%hz6sztJyiOsb(GeYas#}6_Fgt zL==cd3nQk?S*jiy%EbQSuF<4x?4el*CP&A@pt?s7lHvm1L0^<))w9FpbsJQ$=F9v6 zey}+0)`iLt2-4^@g*3fO_u`jB?2?;5(N*O9)K{I6K`pQv9?VmN%84bm%Vpx4bHd)= z%vr`G5m)zWIRwV83WbOo}#EjA9OWYJMEnhHqKVJr|95N8v?z*Y2VKpH@+ zfwycQeUiE^fkD68i=nYGE5f`0m%OzE{gpMQzygdE-6@~SrKg^Yj$F1T%?=C0L9XQQ%n778Dw?@nG}tTK6YE&Nq%cCO$|GLtpj4@?}BlL(G|!)OvXV zG`V%5oZmJGj}Bc(Z2Bn$iYkW!mmvThnsAgEjA!h|e8E{R{5&LVO3S+a(RG9~v9Mhf z#}9v|-eobm;RE^g!|&_U(anF_2)F)e4}iE;GR|BIG_X%MYED6s0ZtA?BK*#6fCwV! zF4pID1a#iMkK?8M_(Ly@yoNg4&BpSp|L3p$;0M$0VaHW!4{)V$)fRtja@!E@!F&8~ zG8cH?+w6r8e!u?uec}7h@N?n0-~WBz{{1fhwm&}j$07MB&+*T~EcGg1_OtR!|5-*I z{>&J^;mvxnM*s8Qbozyt+iGgo{;jsa?@#;T)cLy>=EHffh8osB?6toCU}^_g{JF5S z#V`JueqS|~MN^jJh0|V2gkn+QMMK~+0J@DK8WNxo^A6r0q(|fU1TA`tzh-FNOp0Sx zr$A{lCAQIoxs_I7k5I$hi2|Oy-19f^V>3TAOk0mFSkkTo5hH;Mllj{{J%U|!*KghG zzFNI`gN9pIzgoTJzsOTehc>Q>USVvqjwa9Z);=mvR-h~%P$d4>$!(Q057 zPbrrtv|SB?z_zap1JJwo&5By2Y(RkP{56J#0aERcxipmM$9$z~vgTf~DYlS(Jm|A> zhFus9Q&i_Bnu=txyv<6sW|>|SI{j)`g_FnK{LXM4ySVs18A8z`fGI*ev0%-r;dOw8 z-Gv}AP|&O5zl1GkS3U|u+)`mqjD=yq#e;FfWEBL>=RPohcw($o5gBVX7kaUc9x$;p%WdSYNd^3-X8!&5r=`at@T~2=-=F z2a9orsI?1L9ylHrCgKh2aQ@*q?%kWPq{oWJd8st;;X=_v#1Av!t0j3tGb%>TFieG? z&$|0hNE2%hEf^=ytSNCEBqFrBKnV@v9GH$2aKL_J{gFtK!xULZAgerwnxnC^v!>d5 zdcc56ODdMAg*!Z<3&kSVjlGo|OT_817~>mTzIV=s@KzH5L45?(IeB5?nN-@kcrh$O z#7kO)5tX#eiPO$i%tuu&0xNfMaKZ&`3xMc{HggIXi)xZiwEzo8$Trm^O&Lk+h`nro)b?LN}!pvVwde`y}7ZxyRP-9=&nBgARS_-j-k`i?I(hGl7 z>GLrMH|%@Q0-`eC>+3q8?9u~Dy3pAvYge=Yh?acS^AbY%^y3p1JcL5Y6wD7Z#DFMh zlP$w(d4(>d^^HCfv`9u$!_M*N6dZ*7yR@cFn-H7a)xg<^I)4pqT8Oca{uNGzH0aA+R+{7ghC?5HejcZV)nKfcAvuiYq5uNOBlO9n%#KUF(4ot`P0EMj`vg~r(_Wy0&K!lK zQ!N2;DrnmGW>CwvqtaYD)S38NAzT>FMbxdi8^`PCYiBthh%|9|>KxtD=tBB4Uqo~+ zyve?3I8x%wAD(e??-1iB64fC%z~T!3g%!WEjDzNJM!nSpQV513VH-seg#_KBDq z##WZVG^&Q%roZ1GpBRM>F1MXtaOPf^VfLn{aOhyw>99OFxTp;Pb(jKHfd=79X=i|9 zrSoQCmg}Eg<6K_uK7TKI@Ni@EJmL^jIM1T?))zu4Th4JZ;BeunkhI+xrueqIef;pd z(hzPrECV_Umj;J}`pM?{h94!@u-3s}^Pe^Seczjvk?&l)ef8F-cUG=lyLD&ST;B8Y z*%fRXud=SOkrMZ`WA0CPK8`BtHBYKgzd|zS1Ic%5vc5fGEJ~HoQt)zwz0%0`Q&O6aUp3fH zymuF;w7p1H^Yn>53BaSI6#^|%`>+z>>Kv4)1O8TM$5b<2hqhBNi<1-pzJtXv3=V1* zghvxGaE6Pw|3TSAYsO-n?l{Lg^76u3SKpCWd$dYo+LaN}7VmUK^r6^S8|ACVXZxpT zS9>Lm>SSv4Ud~>;d;RJ4x2qJ}*o6~gmj6@0v2pX(l41uQHmvKODOU-5mk=qZ-){G; z7CF2SODm;76_GwdURX-VRLu0Xg1yXsgS@aHxd3A_GBuCDjh9>-r)3gebfr4>^48U*@v~NAv2w*rp zip>z~i*pz}JKf#aw#;d>EJNqWk3M&v?YPOIJtDbvN2l*ypCQSDO9FFXx`Z6kqKQH3jd{5ulA)Weix2FW??AqV7>7Lt8tOGki;;26-lCS+V*BcR#CciBIr4!dcn>%JcUt4^H=2 zsC7Y4+9bt_pjh@;DlZOhRD}Q{JB4hKE<i+HJ{1Tx(rfbqOb1|%_ z{N(y)D>py+WaY;7&u(|`UV{<;;2+q;$Bk*nBg6n9_aayHN28dPUKw4#eeL$Gx5r-` zK0jWiJmZ+?u+ zw|vB~s=`8b-r3=IMxiPQ{V>BGA=}HZ8EFJv8 z)36BBu8Lu#pzEqL_?24jWD6zAhoxM$T($j}?$B5t3)0e1ny{FZ8(2B)o)J;F{ubT@XWDZ%Z<25Pczlcw;G>bZ%4ElFozvxc>sjADf|OQQIxTK6;6^5`~wa%X}usoAWM58&X|!`b0z z_CRv@?`XICu@k-5Z6JWE9SU<%=cnWR&}a}`7K$lK-|c=$kv2-BMLZ4xv^jIU)1q8^ z(%ebdRXyeKjMY+tB@CKM8ZhDOfjHiF&;fxs+U`(X5m{{($1 zJ1Y*#sDq@`_E#=500&qv;7SM`G2t84EU`gVWa$KEwttSykI&zvu9x6P7CNH2C%?hH zyd2@u#3YyQ30w?cIDBy6M;ucU<@f+Syj{74nX~*u7>B3_yQf&nBoSx@50&n*-6IlU z868Dw&x`LEf_$c!mN|ILGyEDDpCH4VSNb`YDV01tq#%KqCVDAEcaEd2kxoVxLv0l5 zxKL|F5hGPSVuJuSo&JstiTPxKgp_XB(%dB28-bd#?@Q1xk|=9%K}}TRe4I9eS9LEr zBTe+@f+?1OBHZG-i!4DN1Er87W#WIBbga4smV=mqiH#>FU3s?v7RPQ} zv}dfMSkXDAsp#gq5;s-1eR1xn)Vu`&$fbgz+bMN>=#X&VTE zOE(B`S9}HJ6NUzTNQ(>YVXm~EvAy&>(&B!R?6-8`Y3g+35gWG>ckyUZ@gatIkW+iw zTrsBR80IePci2WhDZ&%bk+V}Gq#0v9x->W}r256Gf}wE|AdV74g9q=64PI)VIG+<~ z-~Ul)xbhHpk08vJTOLB!tRj*=7h9efBKOGtgmCb5?v}ks{TKi!)q!jHdw7Yy5G->O z1LO9IC{~&b{2o39hwrgZX5XVQXBOTD3zfuNP4GsCEm)p9?}}*@DOSSvzj+ zL7uU${sMx=2G8E$xQ|M*3zMz}c>QrTU6Ao;f&ez4y_NqgfZ!nG!Obb^M=>-+Fxu92 zs@{IjCXY_jQKzuUW(qCyV@N+Jp%bsl3t(xc16W_HqA`Ho+##W?_JjWyC>8@Dm63{W&=Mg1< zN{rm?TucvU{Pqrb$SI6|ZsVVW{htRQgMUhXgzn1u;;l~x1zrX-0MNbnNl%xfT8PX; zOqqgdisON`dJ#PugLZ_ha}PZC#FA7$)lI@BDmfq80&{Z> zeB9UQK!G>CUS-wTmZGs&)Woo;q#sZI53XOiapxK{PhEbqVA1Uee&De4!@pp`o$4SY z98$+Q1U89;E7+UK9uAPpKCH#9$ZA$>NmdM>UVq>e&3U7n(>!m(WahzL$;u%b8&&X| ztQhVRX&D8^>S*+)!Upq&J_$I z!gg%NQL*U?wiH#opm3o|yASN}_qaE+91{AD#Sk$Q6d@5lp(`5MTr*{1CAYbpsI9@0$J4EaU(+>;0Q@ND45q*8e0$KAt6 zlWw^JujokM!if4WCSUQ~dz3!3sLNuAmk7ld#VLc^M(0{dkYoOFMw@)qT=#vBtK;V@ zp1JyP@|D(TU7fSBvNhg()NO5a>zhwD)~1iXA;D$Bkn7vsx)>3k{ea*jCd3$?PXW_&)){ zqcJ>HyPV*(wWptd^bxG~AsQ3drjpjT7NE8U<^pC8R(wOx=Oo0uM^nYkKUF)o;m7QU zpf?#Ur4dMFkU@W6j_R7~s_tWYMC_fu!yGTVw`oc>$pG=GOk;?~4#Ub%36Bs?hbl0K z;7bXgkS=v$$~>8B0p~yuvuQ6aD@PFg+gGWI7hv)WX^u6_3%@WN6*1;CtKS%Hc;oLCm#I*3PkRr&lLMyMlnNQI2ldhP~}`)qa)Ugl&YVc z8V9#g#sAORyENCCrF&i#-J{$Q3LybUgIY(dWvD8W9``wfF@+LOjJdT^g5v+{7}cklUkDteujP z-+fo&DqLqf< zTIF*`fA3v~i@-@1_dpAlO;kn3b9^W{7n$k)jNUGymHe#j+|ui^^7sutPHwTGib?Ge zO4&zIWOHES(cT$&j{;f(Xba$~FIBr%ZM>WJtHaUi?efptM~I`$LM z>x5f|!!hinfppMCu@wQIlQo`NsjR)_yGO>?;0Lu+W~Q>()-0%TZE5)TXEdahDO}L- zz_I_@$khk})4Mf`q&+{oFSGgY{`N0^u_lzDygMetzM>#M?TJO?a_O1$Ml@^l#02lO#ORC7Ef|Vktu6uFL9}kZ(OEY#~TL% z`w(7+UVbzoGW%!a)?MbV1c6hlEtGS|;|Iw@NZ}uFNuaiRlfnxrNX=LZA3TR+{%X99*GwL*QAiB@(aPtmQk~@p3ZuNjtpxFX`A`9{E**ql z!Hg2sJ8yXKfzYEN0Y@U1K*rL{!Q~j`UhQ{vH0N&fG3tYZk?!Hc70_l0@vlYO za%%OlZS8EONQp)6R>6A^9|^|gPaGGF#t7icL> z#dwdfxHd3R@WcdEC`do-wI1W`JBA_TQA}S*9j&xqd5jE+O7yT>af4gzZ;U}R!DZ2) z9OxW==p@*4RZ<-4iv>+M& zgQTRSvNChE28$s?4Gv%*F|<*Q(==ESI*YzeBp2MxiN!bXFjad<6;&O9*M^|$iO55JI2WpeIGGhOAmTO zCN_0qxRJc>i7@Kvt0k1JCxFP_2XdU&)od7S3YyE0dV_*=b8s zSpu7VmVG;`?iH5E89d)xB0w`-zT&;nJOPh#Uvd@phF#9iSRThcJw&<05ef^}(_oHn zbw&(FW;Xnx-0KIt`bB&lUc9sbVVeg6Bg6|ED#NA?=M<$`k3*yl;zTO$H6`x2wnZrM&-$j<*Y=XTEt`j1zANs>M<;6Z#O8@m*q+@ za}0#oT0?3)rCA1?j@zb=wM^j)g1p;596>$qo1S?5ONE27B~X~SC2F}t(bb5cfjVQu zX?}Wdv^+&7m4mf370r2YfTYFh+NuHpnHZ+=iXgcl+``M#I2j&n`wq0@lW*q&1B#2= zCVC7HTSB{{p%o`r;Brn}kp|>FKA`XCNulcf{TUurteh{=6q#JJPH@4*2Rb3_q(+KW zNHKO&u5(WW6x+i^)orTXfyJd{yU&OeRE2*6BYJ{{>i}F;E}vFmf{nlt;oq(oK@sma z_eUD(fS&X?fazfUfPvK(p<-X09v8krUtKFtZ#IrW6%zu1Z24(8U1mBsd%efGt4>r> zNm@ugr>i~UOI#K~(a1?Su6tKlL1YI_FOpf`6&G*-h0sd_3kno#Ra@55uq$D)j&fh7 zKde7!l^l{jR7=EfCU}{p$2d>aPnu^yRQ%u_Kk9Q$W?RzknQ2)Mr>{hY4P@?139afk z7W*-QQ*^lCF7v9167u1BjM#Rgl^WyeGg|I>3b`5_GgPQy&;L318EzcFRS^mziM4j)Jvr)>;F zld7#D5z^9$&T%?2gLOrNEJx3)eh|deX!-&k97KX< zIZbxgigXsHY_u{sf{@yzSBrh-Wpc7O*@lgvzjH?&8Yd^8 zg}}OoE6PDxo+s>2qHr5dpH?;kz%6%KffABOd#l5Nfwn!)$7sgPu{FT({2C{|<#=U) ze_u{b6e~|1r+KFg9eckR;N5ZU^&28TX;y9>rVDRJHF8CLFuzdo;xn}fg^&68KEeS- zdinFvtFcw+hUeNifaV-g@YL=CR|rZFHJceCMqw9TKnP$rb0R{DY03*`!b02%7P9Uv zEDj)HqEX(#nGe^k@nhx75xAwS7)ml>K5U5Y_wK-g5V3@WHpoH0Pl3$6Qnr&^&Ky%r zRUlnHBtbxfz5kk7^53$>^N;HZD^>BCwqa$fJB__XK{@f-T6$HfUhJON1`Pr*?-0VZ!&wUs| zwrM^FeX@67M&WEL>dEl@S~?H9=SZce*;IWsxg>VGL97|&;-%q^K_=17{GCdBi|6eTxBY2gP6g{@mrt z02jSZst^?f2Szec4=^l3Ee?C>z!rYR@yTx|DJC1N<$0=SrCyUHZj)+PZSEDeUJFkc zbpTw^Q^ddOkb*4mb12$G*RT{E(yi~W>4cP$zo9YfFZ;H@hq_lUB>ark|G2-)B;meZ zk=yGzIH4U+NdHHSWiXr+-jp{q`kh;W!N(I)4o#D6S3E)#r4t@;X(@aK(`Kav`{UF7 z-QQ!fu8au6=BKZXOwMr6PKZmshTFZf$VYMZSaJ3S<=yUtHcW#v>)2^4iJf6PO%O%* zbKKctYYtw~8c&xF1e~1~R)h4BAas}q$iAh9*fXePe0tqfLaiEW$7+2^gwmiGW1+`< z;Qm&5t_oOD088MTIgv(@$bzJg<}Sd?W08Y=LsP%fXWCFa>vHFf(KwpwP|y@VJ;!UH z?R&cmmj-1_e-%%}!-nf{%aBf3r^?N{0D&heYob;k0mW2X5#0FHz7_KSnRfZ;liR3c z8(Ee&;0;uj4bdc}nJEc%GutD8O0T7FF>3(aWi8rIf?u57{u`VVfL8#;9Zr*ss-1m@ z#=rkoN2a(hvj|M}R(G42fCqqM6s!i0u_w+>W=~w}|D}nydY(Yi0rL03tVgI}aPh)N z;YZ)!KOiLuf|2sMjDr&ZZVa4|UJQ#jTCSs34+|8f0Pm+^Z~jIq^2@zn6`t?!YAojp zf??!gtRoTuv=|8T=t`v?jd*w|b3{4KFhzKIay%hmSx{1Rw8WzGE4z$_XhmE;Kc+Ky z#Zii(a3Dtn%?(e$4EK^pl%_4whHKr2*-K%3^xTxWSO^ZGhOUD-3R6}g&vi=7@|SzN z^l4N{{8W8wpx*KCB%o$;4&0vr_v9!pv9{7qs@CR~^7`dMykCNbD z2QZJrR}{1yEOi!UzmW=sLanpJ2{dFVBzm>tUpBqi;S3*d^IWkoLea1dy0I5p(`34Y z3UTnG=?_Wp05dpNs30K?!t{4m9&c|y!jp`daWH?L;4a`o(xo5>1BUC~<@$AhAI)Sm z|J#LQ-<**vehPm#Oqvc1;umWQM~MWpM1=^59+MhNw>S)FTW5C}kbSB6?KvJ%L>><> z3DrH`?%&hz(mS&2%Xln(=7js^Or?#@k|{^4^tEUq^m=6(@StMD#!m=;3%evxv54AL zW0?Yw%y;+?p%>MoN+x-*x_YJH6Ay&K#cc-WAhU0=#6W)l4`c*R5`C_V4rFV(DcIX` zd@ThzE2lOVTd|h=AS9yyi?5|Oc1*!SORgF8ELWc#zWD&SF}Hj#YM-^1Ah|Y!nK-OS zs6QiDg@F5;hAl7Qj5D;Ay{S?na*p?VPBzd7zOcAi&s>u}>r#7=v`nG2De8J@L zQ)fC(;AniMSf$!0SqWymtwD%rEppzF&6AoxG+9a14-=-Y9K9C3Rk5)0h2;=xyRvdy zrSdZW;M36o$tnmog+dX^iH4cqc{-Z?R`C3PEk&BIO=H zGW8eEO4y4K18eFEfr+E$pATKTDRP#vs1HF6S`6M*#_O#MyTJpMyP+{ZYt<8tq8{0eU4{v=xUL%X( z*5>1fJL`|uzgv4iigtrtd{H_*n-O5#okeJHaPkP^@VW4!x)awUSl|e0ete?Oj?-Mz z6jBCpcDmevC4|Vi2LW#ajGfrbiVphDLDUvy1H))Y_3BMt9yRwphu-3uD`}9jy8^h; z9uQCfp}Q!jgg`iBzFuf{U;(82mV3D~Ea!}i@9l37z6LMkXIoyX6P61;?2 zq91^NkP5uV+nQ8{s}ctAT6G7|o?r^_X1uArNsV_kc!b`xO$wBy77LTa250Y?EW-hg zvP2Ako0burT3m;th3XST?`z3phDMftw!wCer^5~zpkvidDx*S(X)`H>O8LnAEEGXb z^>5Yu_To`N=3DGl2Z9GjO$pHq)nvXK212F!ZGA;O(DBjlSlP-7`I6;nEU4q4Z@GJw z8bp&o`KP%O2kHcdAOJKnB=NyVA`7dw~u+t&V1 zKTRoEvzDias464x!DpujXBXE#gE1m(_fOByekUjWU+85%8r|L}!wY`Jcj?J82*?Bp zav7nsZa#lLJ(S3%KSAz5+4+jR9JJLO)HGd ztr<*)T#N<5S|}pcD+g;?;kOlPHcwXIoGZvYOvQXwF;TD{!YbAmg;9;2$j=TAx?>Gu z`9pejAm;b%k)YESNUCM^j&3cbK^fxBT@Ya9W*hT;jk7RXal5cM*twt}5)mMj6I(I$ znGg$ASvB#Sv!8y#I0^I&q3ouPA1v_w!6{_us>GMP%^Al}c>tT@;KkFj7C9^DaX*LP z6?5>@Fz2Lqg~k8SulBhxK6m^KXQG{Nv9ftOLuWWRiZ-wxwt>aWYz%G=?$L`zD(`wJ z_`sE48flfEtgMNzAw$BljA@89tV{k}&SrR-9$Ss}_Jy5AYTOC8nbJTa;%CTli~Z)J zlDVXBvw|h^n*d9$+3r@-rMuD=uf-df05dB0pePc1c9d-V=NjTnJWIq{8cGkUY?p2y z{f#lcCTj0eb>Tc92^k*_JidAzzZ7=av128miAxqht4G5TM!w|*FK9G2ncwLBr#a>bpKg7@QU1vebB30~zy!q+fbo@#z^ia$RRGyC1}a2m)$ zOfuJVu2~fvTq|fCf7g`NUd&XUs`2+1&Xuw&>6M)Z#<9xk0rW0fOZgH8Cex1|pDfgc zw#~t5gMdrrxs7g8Dm1EiHxN~&7FJ!)QXn$dZbS=l=}Mi0kiccTpgd=H)Bwpo7TfRd^HT--=kw^DLSu-V6JRS}&X;3>*Y3c}@5RuZ@tjPDAGUD#h z@-=e4#RV-1?@lE*o0~urHX5C)kIvPp=6%f3V7qV11EIWQEIZ(^h1Pp^C~Shc1J$9n zH#-rMsdWVR5W|kh0xeN?ys#s@uNtdl$)lQU0-;RCNn1{yx~r(Ylx;Wfet#^go7rYB z-;Mu-mQc+WWt}x15_hBTHPZa8&M&8DH79#t)s2XNga1soC11Z+_R|wCju9EVph9f4 z3t8MqCII!~nH%OUM#{0yQJskZ0QfX4qnIZj8K{;9hVGNRozM!GP`d$;D{TqQOFA|tWk`YgR83qdA= zonW8GxD-x{1^zRXWl@M0&^0WtNx{i_@1Jlkw~d{9d=8H$ z$6XF|WC~{6wi1QtxdmNdYG?Av8s*Vce(Tyfs+qejSc@ZYoGAwqh4FhANNbfHx;o&N zv5t1{?e(12=sDO6JmCjm#cv3DNCf8B7W{|>_m#wjQ@#3<%`HN(z|e_os$J0(+nh5r zbTc})5J5xtpq3bawt-^Mz2CujbWE=f-iPf)47gc5MwhR zmeN;DRs47q>LvCve?@MX29}{itFmb%K6G zb7F}2j7BXT3uM?y?jnx5Joo86R(y9G=Fx;K@wKCO*uZ6_41@{|We5!$wWnsqv#bV{ z=4t7uK!CkiHKEAY!%;}Q&&9x@b_1X=Mq3@yNHtN`VFYtJv;7*iimg*`(R?c+cn_FO zK#Q0?bH3YU5k!@5sAdIYw~m^0QT5X}$;nSw-3&0#=;D^F0Zud7i7BH}&r;fxOdlf) z(&4|V#h!Dr4&(>`)JffFL|I4CC(Vm~U<^ixCA!WC**55jXc?m8Dd%GroqPpsYq?s) z7@XJge2Ko<+8tx)!xoW{T5 zfFe@*IbyWEGq3uu_2>2U?br16#Tuov;`7Pb>mdT|>$d~M<~M?1Tj7XXfaapmPiUxA zVZq7lA86z!!F>}8hexQyPz?me7o62PZrfOGneMY-I6s;@i zXy4*GfEfj~_5Mjp11yL}h}2j4@ zpfvjAleN>+BOAZt>b}2v>A@Cf+zN{CPw!BZs@HkUbGN6j4p{Ti_%;c5!sf#GAvvN4 z)@c#|+Oyv>W-MI?&~m7Tn!j;j{O#KK^5v^nzgW3;>C&ayKlD)kcMhe+C(@1sOfBCU zCkp9YeR~zXdnjtrnLRT>0wyt!yuiHK4yeTLDZ{~IAsEDow^$Yz#yl4v0r$k~enk&e*y0bK|!?Mb-| zm!PQ>4JckYW|>D(8Q+_6yit7J!ChVjC(;?{`sZILQx`VgG|ry`s7}`|0|speH5O{z zJHTcBV#T7slPDikB}f#%O7LKDJG}TBz62D@I`CweTCP;-7v23~ej}+gsTo5spVgEm7(rosZFN|3x6vJOf{Ky@#MnCy&{AitFNpkS#yD`MkrNdMF z#MX1iFDYiHH*O^u^HGIS@8AjIj5>n2u;eSx3uAQa$&MMwPP6D`5)+#qZyG3P%RLW( z-izQBkvD7nLL{R#rv%Oi*1Moc5JqkiJk9ax*F`v+q~B9omrkNKEz%UrT5JuuWfR zqL;$u*}zWM?%!WrTP8E^-fL0%1mx9glA(Lmz=3$xR*u)d+q%ED@vzO92r3UE2HG6T zAN+!$^o0VN$Rx=LimW0gPN?!qS$4J6G-6d1MkW5kE-NEA8dx_sLKZ?1^n)kNIr-B3 z47tqb4loH`?gXeyPQ7$*?+Ciu*+a3-clRh7FnYKHke9~4ee-5~`P!A0%hxaeF4jwR zsi98b-RQ0gT^$p+7O`2910{)^zh1fsE3{N{F&xLdVUBg>U}Ohz?C0X-52VOPBGPQL zm>kNLq8D7wJ3}U9d9PdlWsy=70^%oTn*_SnNJU2B{1rOWGE$DgSadS8$W*+=Th0!M z(9?#Qaj=ng6RIyw3=OaW6*7yy**)43)LO709|H{9nZLx7{f_)E(r4!h4&CDm%veg$ zqGg$Ojnj+yJk;r)ZN1u>qch4M-ax|AZ z%A(BDMhf9Bp%5Fx7*!sc5)k#tvtu$Y*krZ*VNDgIBHOvxG=6IvC@j4O^@D`OPkb&(fME{POT zrI#V%!|7Y={?22XN>7)sT~8<4X1h1k#L$7QHxE5$qa5t}@xGU8u+vZuV}d@H+!m&e zOjEX(-b z7k?n_oLd9KWJD8b(m6!yf(8sewaY>$r$RC_b4qVXYTocAwDy98HyENZtUN*Eyf7oc zF9bA$60VK+Z>eIk1_WgeDwO<&kG(^Y^!B{e)d~`alvm%Aj+}3$hv0^OUgWaNFd>9TIuG;3?Jf%Mm{^hoLHIy?q9m8?Du3Rg z{7YOFeE4y1?=@$5LZD(g-uYIAL+;yDV7HEglfWG^w=Sf_(_yQ5pvlQTT-#nths^So zNuQB?d*kbukg$PzzZVviAs3gjyyk{Acr->0#AQHY%~?YJtv!qSvjoXvC|=gysj$pK znr@R)q*GSToovDR4r$TJRgDL{Gw2L`1sbj#pG~)>+4dYyAF<*02N8x9l1nTh@sHJ-z!I25HU#170C;$V&H5`lx zZg9TmIQv1v6t|t@(fZo`c~3U#8onI=Y6aI6BeCOzeSMFkf`OaDhU#(`a35HQJ{mnh zolmRExRUxz#x(#22MlI$^e1Hv96w8qQ=GfdZ}---G`J>{*k}}wmGw!z1eOC6O~lSf zt`tGNnCfR}RxoeA#21Jo{@FXzTi@GZ-E~t;5$c;`l!f7v2Kqt+L}hf?FRMGjbaZZv z(q=F60-hslGI>%pS|bU84-jWEER?twIcIC-zS4fu0afkGMPwmf`#6~X7;zeq&1VD( zcz4jZraYP=X}h&?l~iZ8<+n?cBdCrXGP$s2w86bNrtZO!meNEc%}qzc{!(10kF7E1 zWR0+9MyYCc^*hwLQ)2o$dA;2P9FDgJ)_bv(&NuO(I^XqtO z`RO)rAY<)2jphaZMEojB^>up6Fsy*2Ee^}1yoAg;xAGza-aG7Q!|_@!?lU8XAD;&e6yRx(qa|WlkVJu7{1&@n_gb z2fLpYS-u-JRVoafBRnyu%9Sl-nzj52z&8C+8A9ioDX{F_4{#HuQzc5PMd}P3G7lIh zvzH#hKgRmQ_4nJ`mD&{<6~X!|)1ZyoM)M$gfeR+S1z_~{2WgG7FPA3}DH$CiLEUY| zT_@UY5I~jNl*ba_#$__Lc`%v8B>q=?R#T>Pb+$~NohHHAn_UdU6Yhu`ZI~X+fEtw6 zncE->wH(R+9Cv7tyvceR^Bu3C`LS{vkTBs1BxU}oIvV=Sj+C5?@5m3<7ju-}L>VfF z>FaqClwz}lBG{%$T(WkV{~q@dFkmF`fhs?)haGpt~O)IARD{{vcHC&+cGR(`YKlb{N;3t z7@^)AhzaM~>%s1v6Hqmm2Qv&A{}qj2LB@VEbtLY+l5Axl=n80=#d?OD0Ma)QlqXt0 zBtHm@#Hu20^gAXPki@6vQ0~d~Aj4m=s{l9h17-xm&Iiqff8r}_^~Gs=YOEk1S_ZeM z?p^Hjo)B@qr2|PYe2o=S{E-~WUvI774WhG>p}=cy7-1z2jR7RsrUhuGSL_6nYTh_V zl%Q$UDfawYrDjE9yiY9*7(7tk$w#VD975`K84RPSsP{Rw86hCjbR+b~_fb0O0r1C( zw$&)39XrU<%ZIeTN3Pv$H{XrCl#E7?qysxBDmb86i%tJbOv`xe)#vbnyqPSH?HC?i6Rsz1jdqr-z7~P?%VwsrGU`hpCUeh78@R> z&@__RXh#`&5-Nzu$-l_) zZ4H6Egrc^uEftMjc%f;aD3b{xtvNT1Ndj=AYbcZMCv9G z)8fSEDntR3%T1Z*+!ur>dL-f547$YMcgw6rgiwNI>H5nM6qR((aw9PeU^q|XvLu^@bxx&~# zYPPf!XR;U<%(nL#$t5g><+d)C^EeCM8s%j(BwJtzLab09I%1rhHALyg_$aPNJTT>v;T@+u*Nr z8LF+T3F{PpHhQ~0uW;4)ZXFHy->IDPN7eC+U(BamKcNO1)a~w~3zwtF)(SBru{pz` z_R{L2Id5y#x0t~S1QSVUI8FWyhM3)>M$KI3vAyvQ)jK%wr4$pSsI0N=4V2Zawg4c4 zWOy=;PgCaRO=|n%!pvQeDbZ%Uh;@OZ&XxF~HT~kZ@9Q(4j=MW-{+0`KbX`^|9Q2#~ zUsPMJ^fo>OHEl`_=;QolYQ9$ne2@@>zRe0?19{HTONa2&^6Zb|U*rk<=|U@u&Pb5y zdBTMW*C=|1jc5I~m^gb=Nt7Z-#2Bzd;u31 zwCnEUa(+d0!uhlic!H#J&jMrv>(%w*+kwxRq!uaxAx(U=cmm*H zoIj>g-L97e_pG{Qk$?P|F!YR{NP69wVmeXBsBqDiwd8hfJ|!&e=z{aWJ2nah%S@P8 zPhH5tzqC6`Jkq>1yuMCiI_D*NSVEbO zH^Yrc%F_9`g8gO{iArP8c+t;PCZqcZlaIniSW+=G>?Is0TyvEmRJq&c-wrUj+0_B)agFBsx^IsqeIgrLu-$4%^rWiV<^mR~|H|x7h{guRq2A~<{6w!l{Mq93BOHUe#cQl>UFHz;18Azw zD@8}}c9Y2PtyCt_c>UY;hc-1|7HT6AN<G3M$|s}}bdWw{kT1z9-{&%`QZxEejCCla-o;pN#EYvypn7eiv`0@On#i5lw%M2+Gp;XyX+sE|K((3S=33b~ z1}Kl-O^>*9;b+vg#J)JnGQ2}8ETdB(^ZmfVn#P_zfB9Z2t~|YLzjyQw!7HVrur=A7 z+{6QV`HL^Upqc0y1<+jjf*Yb9n2fGtGbB>5?9L3$z_^}G&VMPfuU?wasU>Zbz|+Uu zfA{hw*&41jElpDK_~;AE-o!UACcbrReS7=jw;S7Q7ay$AVc^lNwMVy;p`BFT<-|nG zt4$}zw}^w{2fBFKIf323$FOoNMq_u&Pc|RjzkP0de1GlH-SzDq?upxZw25nR^VUQo z7!cF*VTvcQInUHA6Sge5^c8mlUb=GSmqb|h4!&FM-v0_sOS;%Kb5hUsu4bPNmQY_B9x-wRIo8*i(sEj4?dk8x{Lppzc!A>f9j=_ zaL>zECzn^ResT56WcAXGtCzlpzv|1S(h`O0<*}{k{{DDx@7e0t7$o@27r$UzL^7Kr zoHMj*0zxL_15;x&qS(*{rP+R_Ra)5xgEF-Vjb{Y6=cPDShW6caRnAUz@ytiH=q~w+ z=Z=>SVFMv@iU5)S-0+}L95w-$;>U-ZI|@em$%@J}D{PL!B{*}uL`$*Ro0>=N5klZ4 z`mIipXiJcgaBc*DLeU%!Bn?QD*O0K6aYf^qnCRevbM~vk6#=x)8y=2WPKHOao(hY4_MQAQYFoYQp_!fOhxz z?RgwuTy*fN4HgbcI=I~^GL|rFP*V7*dN(?(X~aSZa;KSFIK$wkAQc>mtC(^#{Jh@n z<_5Pp_KO*YfNGzbWUk=!{G>Vrmdvs>FWx=WiBYR%UUFTq`E36uG>!0gzn#aV`_Q*H z*S8;@+aXA}ewzU}>_j$=h0%c~w*%l)1+fT<0#w#WdNq|xw%Q;X3JAGpa_!;w(rCB1k!S#=ul!rk%@*4QfNP0kVx>7M-2&Uyf9x>?G3<0cn`IbN$Dz*i+6AX5bYD~!8zY2xgOC}|MMnDu7*-b(9PKmSIl-OMag>SUoaYA3c=8+2O2bf| z)0Y#R#GKpL30)5(qC9AnuVg7$IfjkU3?z`WIkjeE^iSDHQf^#z#GlK@HZ+$1yMHJ^rKV6y@=7yM}m+rgJ*g>{+c1U+*W(U~N(9c8|U$e#SC zZK59wplLn58g$+>)JPsGYChw7+`&GJw-C=kPK&u>_ik@KShp?xd%zD~KG}SH|28bd zwXyWMmk~#4)XcL)O?Pv$L02XPgmkEoK#+)3XutvL~5TD3P@QgKhw@YF9+CFbl*% zlZ5BB1#)kUc>G}Pdw3n#q!5TRUTB>!;s!^!n8>adg}2xc2t{tmA+yd2XlVi=4A`Cu zpsYvrLDUN?`t5*hDxK0wM>88v&exRCd{Sh^#w6G>9a7t#! zUtniVX)TpH1zL0Y1qq)PJaue9c&EwDZlOPmzljg%Gw8jdwV%zAL78n{OIXrA7udoj z*|{v2ab0Rj!oZw!s$wB|AAriEnm=~zJ>ix{6Yv&`6=2NR9IPxI+C(@g=KdM6{#KYS zl?~IeUR0PA#EtUdITsC zz$O)im%lIgTlFqItcfVN_c{l#uq~m91yLZtis6AHMpY$xUJQQAe5O8DuwtX#PL`75Tv>(wo z$K1JYMF$=lxZ$tQDWcfSD^1Yk##@hX-ru+dR2AWYNMae_-kr@yx7Mi{ZXIa(WV)M) z{RwN5aVP`|fH=Kp`xN1*mcT-|H zd_clc-QoJ{$B)(rQ8b(p`?l3yj8)`?l6FbL(Vpy(DkT7SZUP@2gNXl`$>mDk$4==y z7+g)BsT=xUB$P{$kS1yM2S{8+*)s5|HIt8n;VO#Rk><~3qs_SuxLO*3dMV)*ZAcTc;?xp6&pFBM zx-|nET*COI0;1#bI%Xbs!QxXh^;km=)pMR;2f8G)e%6UhkN%yjcOYS3+OdCPwuX_l#IN>7_0X5#fz^EM;%Wv$e!he3Aq-Ze6qDU zzPb6`_{xnNH%t@2CA3X9$no`GudJ_8s*E-E<@oZY>nm4oTwS@cx_S-f@b=68!PP65 zE`731?>B7A3*#qi;~QVBUcS0=`Ra`uquH^r`!6VEGqDt(K?jeAkj9)Cn8B>=Da~o= zxJa{@De%V;S`AO3X^x?F`#>GWKiRJE^IWkdSnI;8=+#`nZKt7r<+J8-#H^8 zpk$`%yEP<&0g=d!T{cUq7=H#rT^ZCqjak?w1F$_p&X5|=3_C1Wea(+KuPddbaP+|a z7u=i^)sIPUSM5}Pn;xk)UvqU!8JNGa_8z=L=eaAA6$s3xCH@nJJF;kU9V4s^7T`>+J z$0}D!Q9<;`3Zn{Nd<#Q)xU)Ea%)Nv3F5=L<%t>6|(Y%eh;d@9TNFXV192!|_g*{x0 zqG_fdiv4u;nXXbVE!pa!l;ahbWlXFkVlU)Q`py7aMGDvt8%-V<3&2k9aQ9316i0=r zz~vWm$+W!w$bq$zK2D6v#=r2)|EZP63C!8-Ngq-=bTNsJISM?Gd1+{f_haai^%WXFSXeleM1Z zUeQ$6a3;~XUR|LsFxB&{ISpi&^UYpU2ar7?3pdNbl*Lv_dM&n|Bmie zN8?`~zdCZ9gQgyyZ;?#JN??v!WJYqCB+@8$BE~*x2pst* zxar)57LJ|{R5zV#gW^8-QfQa0bmL54?dTJn6?*-kVY6ouOw2rGZ0OiJS+|d_bEzM5d$vWw7SCy)P+R%EvjO zUJtm^e4Pnpr*>jG-oCpresq=Q5E#w7`*czHZu|1pKmUp(9QSgby?pWz9#sbo=U^^# zOCpF%)e8EpUi#%^_JgndSJ&hN#o|CEoR-{iVG666x_i49hwC83hGtNCW_MFwh{FCG z*tO0fFbXb^FhNJ(G+&U3#&p?9o=RPTv>;AkW1!9)KmQa>%5O+V(n_AP^w-eS6lfPCCp zFa(-|c!a(~9@~XVT)}EEqZn}N>&_GU61UJwa;Aax#ItHG8z!}HvSvMnNvVcNT93@o zcmJd`l*Ee-(>6DGsXGK%J>`CS5M&H#(W#vzYzegD!PG1~O$PM(EzPyN`cM%nipy|cM1zl_h_G0=MV!Y*GVx|1!&dyeXaVTjm*_7Au z{#3k}v(}(kDPVuSI9b7vw%0uUu_<*df&MGi4x1hZal2SgPE7>kR!I>ZHRYT9j?Uy- z;EXjl`o|w3?|MACub2kRU9pOm^*$j3#@}3`JNgsVZg|1np!Zj!->l|Cd6s8W_0#nw zCT=Cc^VH@3DqCm`YuHaK`X9!+GK{72T%54%a(K=>h-*4I)=? zW>~|uFNf8;Hv~xG^DAyz>}e8hdc@D-lEInOSxe~F%tt6-`opvKYE zp@E&q%lZ&K=FEGa&u0dyRZ*vW`o;Xywf=BO^d>nt$1h10`Xe0f$4_mv=2`CioOxIh z1nn(w4!!lVe&jI4GWe_DpC;LWt8=D-I;ciKv1e|~1uiB@qZV5F&{)kyonB`rD{`El zkI-IRzV&2dyE23kQz@5-+0d@VBQ1!TpQs7d5OIyB?%&+qwum40m=`5gEvGUP7S>7+ znmVBxpw+u1E485`h*`>5KS_47FhDpY=U?wP79^VxslrrkhW$r5y1y1}jn;hZXM9h7 zK}GqY{d{O5Iy;`69UjR6f#7{B%^R=TB_^tI{jT;C_V_Zy{YTlv%3qWAM{BZ(@3FPx zhH5UZTF7{*u#z}TE0~KNF*}0^AhD3y{hYUM)h;;r1-+}?hz+`{S;?t_JNkJtL)ly;)yF;HDN(~I7a)|bFXny}Exg-ay*&GHh^<>s8<%YpKivCn2Yu>IZL9zN0o;A)Vte7+2N!QW z*zOPZe?NHP5n9|+9=oWZT10_w_xJ8@ZrxjdG#~C~V=?9j!+pz0ZTijaizTe%&le4sa4Zu9%IpQ618=<2a=oPNwTa>VBp%d$Td>YZ1<1qF!T<5g2qA5i%!|O zpQDgzd=qZE)L!M1X}A)^J)vvwT;B`>zWC<(N-`@ha!)`bwTt}gxFN}>r_Wwbe%hzw z$FPn8#TQVL1URs;Ca2V@0~Q@+@|;eSr_)#SiHl$^4ppW0 z&$J&*@ofJXeV@yNkES&ZfzpGANDG40l^m4|n>>y1yw z&z>L7Cpmg?(suLys3?kbqI%!l-MZD4zJ)D4#E)`tfSG@P?cw+dPJrYPwAHme5Bt>L zh|x0HKRudoQvjkG#i_vSHfwwHtwD?9+v~SFyIz>p=wXcMC)VyAz0}`NXZa&xV zkDpOGcrrPDwSNpkYJX}NeOFB3>8<-4gi0sd_i)c)w+5V_5rQ}+>;c9w!5n33<{=-- zZ#cd#ksj!~j`fBNe5SLwKd-6KGXq{wRP9Ys(O}-Ux@&TR2;SL&)!CG+Ic39R2SdI1 z19nOyh#iE&pRM-a?y;6X`>4R}Pi%pvfA;yM;a6nfpY>lJBJ2OGC}OZEXyMs3Vk4tW zTMutqNr7A{wWLn2a}8L}N0&eruQc-cCC%g-Cgtx<_P0R>ZG_3{p`Aga2{5^{wVFr) z^A^q|9$7c)$$6P%>-X^pCH&@C9fn%^>&R5U=0mvuGZFbP1&0D{>6Tu)?9zkLc@Rl-XHH|@=yP_ep{(g{t*6;X`eT!@mD`-Bn%rhZQr$ zORJycLB9UOD?x+denpOL{%7^Z<;j)n*bCPtm-A^~NflPrMkHq3d+~-&rtdA`nsZ;# zsv#AgKR)WeYtWaG!*(PM6eMyU0HKqGHLPB~0SqRWFR!u>-|P$6{*eIDQ7z!~n8?A= zlp4IoX6gCx4-xNlSTD*_1fp8c3+xY{TTqBlhBRd zu|}O9O^(pP$oT&K``SF`H(9;G|NQsf0)9Q^KsrDFYjeH9wYI?UY6*Xc>+v~6EfFT= zx=WFVXb3A?k=%mr?iYcC^Dcs;5g2B*SC`Bpx-kygVnfmFfM~W$I zHi1d%jxVxob5YTzYZ(DqIJvb1dJl~A4nkCCtiokc(CW^#kYM1j?j4^>%#b9F=}$k@D>_|B}Qhi z!r-?4m~!@&2fGCUB4;Wqs|`ALID;Ear-25HwpBAXa|5ko$~jt#yYeEjyj@pA^n&|X zjej7EDtb}#ZT|~+Dk1cM|Gx6yF%cQD%)m{?b$+9F*M=t-R;@duM^5XR%Ra@ zJ18FA)bQ5i$<@#U7*On}cht>H5|GIdi6FI@%H-o@4&U%%fSrtiID5$ zMLir}yLR;&ElVD6ueHsh`a1QUweN_MF>QPAPgcjv*H>|6UB7&7<@y(^pa0Ql%h>#~63k`iDk^{dIHUpJT|IW>pz94;>OoA*eE^+b4U^@boti z&vLt>HjR6(QUG7#~-yMIWsHH8@xkr2C z$dC>S6Sv%sFgz`Pl}LLZRy8(k>Hkb7cVQ{9KVNgZAXtnsExJ5ABecffv^e^dnv^`B zbqp)mA`w*k^vlv2pP<0Q{_$+wJ(K;yn>S(jb+DVXG&$O9-mshR$aUd-%xU@N`1vb1 zWu}bk*@l^vW}myF5v7Y?HH+#dZj`+r&XP?zapPAe<7=pKZ^*RS*uMF2d}-yz^()sd zf3do9Y2`YcH(R&`-!{WeP4i2*VQt~-qaRi7_&>E4%VceyA78tEd4;UaOMUZePq$mi z+SBat>FM#)_^nvqJ#Molv*h0N6%AmPV^OknylBtK;rNlvMsMBD0ygmf{VL1ttGx92 z$|V$WY9+4#=z3}sGPP|%E(dq>nku5)`U>cG**@Q3R=Z~;0=_{z3*>9)h#ezeg5;PUF#gpRzLvo8=U z;o9WdFo$)LPgSqxQ=!|;PM#8z&0VG3UcDmSJ+)5CQUL@s$sw~NcUEj2EaS#>4-JH$;FMYskDQ(FK}b_czF|I69>-^+gsY+ z+9e)WT}vAS{U?X4k)4xQ7@}+<=mH0659ZGP;NbjQc5Wb zVZSg}#9k<{*hm}Y7QtwMGaZ(`Lxv9e>@9{{P#woiaDaub~fg*VyEFJq~+d>OJ+kGO`xQtTE{Z)!O!Au`?N{*Qal zI4-oT>QE>8{!m*K$i=;aVq&d?Mb;~|W9;Qa z9eF6@o^~ZP#K%?M*z)zl!egP-n?Y|Z^fOA5ntpY&-H|yg(IIjHTNK91Vj4Wzr4zLb zdFDQ8v3cfz?kkt7EbMv4f&^iI-ta@|3l^OMl+wKhqH0U*G}RAp2NxjN(AP(i3@NmV z&(83R^OIz^{fB z#NhyH@(8cUK1zdtS7!BR=#ewNcbA*q=Ac?}8Fa+S`E1Q7on`+1{1-e=iQ^u( zy>g&*ydwu5hb4JlJE{P>rW-4q2gjxz_q^M}zK zI!Kmp8^Y!)o&yp&?i{>x@#LIW==OYH)+!f{G#D-ej+@*xG5(YBHd$EPD_f5?clZUF z?ccX=63SSZi34vhuC1MBbyO5q&C>4i8`^APg6i5mnhqdZd>tg{uiskF>y*P!DVU)} z=QGp1$+)KJ627C4zRuaV*A+@;n|&jI2;CE)eTKk)9t|jIX#Ip1rw19@`~6#vjc~sy zy|juMFMpe?D0n|-s-bN>=i#IKD_3q~k!|mw5gZ#sMz zfCyI1zkDX}SH_nY-{$l`c;In$_Fj1C^8C>6??1S?_|5!uJ;lXu=EvtZ%S~2aNXa`w zeL~=BzRt_@(*h~BH+I$+znq`NqrG6+%J>mVJvDowob{uh-jOQR;k@|f{1g^2ZeiLv zRCn&&UVL#5R3#ItT*sAdYtxR#_hoB~FU$e$3%4Jx&DR4t#tXmr_#Es$zJ6=`;U*Ry zzA^{D4`T@KAIVwB3T-@NaV1ygN8;1e7yh&Wn~qQ9e!+r>;A=cIRK$!un4ZvD227;B z;3b+s`jOA!MWBezh+DToqV==alxNtIbU@(wju+mLhuR^CH{Pb_8T!I@N~p<(-g})%OwV zBe=RS%beLBrf<{5aICEGL5vp~HJq$?U}Kp^N8qa< z)}xB7aAP8#dj$woWUPhan|I^2sK1)y4=ZV5VahpMQ1q|yGW;aKQKI7Dw4j7B9&X%Q z1mT=p_!=v;6yxJ>-rii~U{~kt#5X_w%ERqDi<8Y6${&730)M=Hdu{PO5NEv#2iB@( z7vKQ!UEL^rVVfP0gib&D!uQw(rz~|k0A_dtgxIo7nFs-mc-JZy+qJ|;H#{bbX(*>c zIh@vZ?_J-4-_5@Hn&dMddv%@})CU=6lhJ(a6;r={_OOiQV-Meb`1t1!%R)Z(a36J1 ze;k%0&uA}Yo7~1WwAJh{4iC#FJ~l(E+d3K66wOa+8D1?u5xRa4$l7a-)-M^Yrxce(~P7h`xff z&*W-DqRfZfSV0=|ycHqIHM+!AKuycHnv|*&t3>f?omN|{_*^Y4{f5yo9rmkRww74y z9>u)8zEN$S@KI76%HzO|^w9%4*I8#d+cOjhH}d{0vy&=r$v14-Dv{jdi>;<5!F6U7 z=h|e$h!WMm6!lmmSk`b_Ho`_3#poRqkaOZyZkXge=WnAWWC5 z-dx)Y^zC*zm^1w5Y<3QDS#{085HCVcHR9XF0bMlUBXv`J|eZ*7pkQ(SiN$hc{?oz``(m`6g9tDi_TB5a6do~wcTVJEw z%#pZf0F?n1LVafdP1`#}^j=N&D|ND9RgY5QlBzDFRIFO0u80L(b5N!AFNg=xmp=>t zh_%2x=i!0DK2OBN_A|b&TXGGIe~r!ggwJvP9$uKemBU>9Tfg`Px7Izre}DVl#?Ggo zeu~wZR^3y2Q?OM*28_%>|#G874e8OjC24(P7~ zn5X2%79$!;iuIXAE3wvi%e&H1Y7VA`#u&>rq;0D}BJtS9Y()X=!_Vr;oaz}|BIiK` z|L&AVq+Elu8Tu}S)C03#>pOLCt+#6SkNn7;gzJd-we zK6^sOs@W>!a2D0m0d~oY2KjG|_uHqOO9;fx`C6R?Ed}dtvn$trNqILMXw7S5JQbXT zFu}^e1ydPKj@izO546{>^H#=(%k%;5i=fL~z>(lQdnfkXqa?XpLhbKcggQR;I%Uz5 z%P?W64w-hglhG%iEN>sv>_rZ0Pbpfr;F9>&*l5~l_LC#tU_@`WN;jg}+2Q0ZPT{xq zbs7KGB(~2Is zh{)9+V~>RY2>-Hjn*G=dARQ;tSOXps0)KBIZpI`Uys4pesNsa4Y>&c^xlROm%R{$F zJE%?$$${~jC3$#jQYxhWk&ybI05*`vXL6wKKa%L+=1E;Gcsw8m5?iH4+uRfi6!Vd0jXj`c0BX83wiEHc4f>bEelnf?$c<=Y8X5fS zZtx1+%`$8%I`AbnevJ}h*GpSzfaD~!MwA}xzW_#ZBJv4^A>9v-acFUy6Za@Ua66ik z*n!0C_>i?wh?vG^binDIDa7}d|6|uYv<0w%{~@p!IE4ZHO+>f#m^71~j_=c9kU?KV z_0Pabbp10+;uWao*+L^!Ji#mbu&<##u1&Sh7p*cU74Pz!W3K2cPEY-cjH8f8)y!HP zFoWFg>A|Qb3&QnVPQ^M6k(XzdU#T@xbcRSm4^^OhlRW`t+oitoylGvw=j|XI07uG^ z$^2&17qA$i_AY87vzJmt50SUF+kw)(8qb=$*>imw%yCloAYhcyn$18jq8WMUwY=7l zOnl~GS)})nr=41+tA3vV%Ij0S&rx{T_Qkz$8G1BI^_RMM2bKpHqGPivufVZk&*HlS zQQqF%nauuD@m=E}9p z8B6r7yT6*#vOWioN*3l+BU{58Wpgs|9)j3rtw-_eKN8$0^49$`K<@HM|pVM5$Sz$Ic63|4A3X4$TNGHt~2WK!l0ODr5 zvRcQ5j*7V|prGI6R7B6zX5_8_E~NFfDZ>d0(b40%eS91I&}rj#2g8z`5_3x978PjE zvg?6_VQ3C09oV(GfnIg;M0$kGpR+ODq?%3s8iB)ExZ-N^$ZStgo*LR<9wT+rIT6|Z zj?232kT*a2CW8QQ!zJ7SdpJbW#=S(A)h!r0%2=vox)WG!` zxG?OENHaD@Ah*&R90{Y-FSXr%b~Luz281bhX=}&=%(kJ2I+SQHuT!tpD9x#_LoxsU zv=IwoT6$UH3&0vd52&Cbt$iNISU$4KGMF5czq6Kun4)A?h5RJg9q&pG2C;s zU?@w;V>Ea+jO~#YW%;OPgQX<#kAt^|pjHG*g^&a4I%n(=pt2DBvN5vT^Ludx`N=VA z8|0%p@e7!y+&{dVu8p8w=iE|?l-l22U?+AHw8Nr^%i=>LjttQ&GxeD6P91X z8pXLdvbQ$BrOW4efIcF>kk#4g>xq&xt{-34=m9AOWGb@QBnnTcqg`+^vEA^9Lqz1E zGrc|F_R2`{i@fl5mFp{9m%^Ij2k6#bbii=k8>(6Filt63pgbm9;C z7AL1Kr+hshyuKUN6AU{YUwV6~-$VQ8{(8HQv|GbiTjS-lctC}hM=6WEM(_k-lZRf~ znP0B8$}Jj1`fumCELuYvLqmInFK%)Ka=V!pI5$KP?E1iQmSG2Q)kdH^e1 zmKt9cZ-nupP9zhS>Cl$w0x4Ussz=E6ym~6z8U3L#pTIz177Y3Wp>FFD@;iLD#%=>V zBfIp{l@Uwlk4T%lHiDeq)9hfO|C2zP6%!Nc~vnKMm~00UM>5lvf3qY0T7%KG>paa=zZ znE3Hv4+rEM`~bIUWFGoY2c_1O1@RPBD3%Qj9ieO&w~LKHPsS85B9M&|K^`zaw@vC*!&Ou+l7^@VR!j-W1 zY)()4urWI`pdl7VO4n$0f)MzbU0-(qjS$cRu96ycwk*LhSVFEb2|pB!A6)0Ku=tD+ zA0lL1>;mqI9LzATGX<#5EnctEt-=A}e9vFUa^p2WU?GaQ{QMH9=G%9Z*}v_nU)8a( zh0+@2j{?U-oNzJrs^<|t&-Q4tiqjF8&g`D~@A&rrhS#9$8wNkTN}2|%`!Dn#+7L;V zTRSLi`@r~?!Wir;5H}r`#?B-Ml>Ta?bT)|@&ROvn=Nu+^oz0Tzghso=ma2(uOIc!Q z^5pXxrYuT$WjYrAyoAJv;8sUfp+VMGik!P*(Hs%@EUbq?5GGWF4Fj4N?*`J7@#9?c zW13mpbHq2dk~2GJMrvhw79)v@VIahKx*4Sd5V#;uWX@^iMQ$Cio3PvB_mZW}Fsn z-rk_^_oMTOUE34~cNM)|*X8PUqAR&!^z;1h55M8_Bg_Q-Ic)hCikit62R0jpv5z~ z>41O_2Myzx&8sqA$&n7nGnClo$?ynxzE!xAVQc0vN|j>O#ewafG138M%Y%tFRMsj= z*>F_Zk4V5m^GKmDya5Kzi}8P9*p_vpiKcQ;e8WEWUZ2pcUccn7tnZmT-LBehV7eGh z)0C)Idu!+|KMYvR&3LSu>2N2o7NCM!!S8?ui*T1Vo%-S!uUjvkC?4k8ZJma$8jvyZ zf=6UZpp;1PY0)V>hCSdK$Fc{qij7Z4vw!Tl|L6RbewlIX=vD!-)S*33OP*SPo&#>) zY29Yit`heS%^nq$35e4AxHsMlQyL=K818rpqb!Yndrt$iA`S|74>GLG1qBD70H~i2 z*$=lSLI+%HYDRlOjQVOw(uiFmy8%j>W597{Ws|E0Tm}q5aEkxZa{FLcl;|RGR7yn2 zxEKIC%*(#fLiV|8y$kyB-Wy6=a1Lv5IY5bI$2Xol>O1+JdSG#uXoKBY+BkOzPr=E_ znkd5vtj_+hzCcrFvbgS$MZ(7<6YGPZZU!lo4Sevqb~M z3totpYXvT}2bQt42>>>DKlaY&Z_vCne8x-b9G_QndG%Mj#{gS1?RjY(J3F8vN!n~nQeLIpxNe}hQwg^k1y zi$>NVqVd=sB>+SEX-x9@o79u#1-=mGXblB^-^2v z(D;)|m4Q8KjvTO7hfR|U&`qO!GFn`l=h(O6rD8b(&yRx_`r0EnOH zy7^d9ZbHNzJRR+uQWu2JouDF304V1}YX|!o;74c=-Ffb!`)GH~Uvq4daQP8n`*@j9 zD3I=Oj#J9a2?mJ*)0YH%&@jDrrW`7Q6lPgLR3Q?XQ6ZT)o!ZraChqy{F~?m%NIvEP zo_#DJ9Kh|vCoG~OI$T%NJh4B~4NPBN(F~Iz@|tMSXXdKCQrN&FM-kr6(-0+DnPe7N zROA)*i4}1T!vT)njz)0iex(OLdLrW`N(pgj4$vUK2*EhoE`ZiudNMm&kavNZiw;=| zL`IFWK2GvXa0r??4jSh$7QS(XoD3L>Akbw3wikMsU?2C%L%r}lGk}%-_Q8};%F*t* z6AcIqWrzfJSnPtWYnOpDXD=;_j-EiyO7}7fm5kpgQ8vMtgut6y9q`F+5ZsCjDXU@f zIRrnm9Z_Q1D1sqMZB#c7CD`GiDX>l?s|W9vckx4lD4fm+E!+qjeuSoA@mOcV&EWQ? z1BL-tH6J`;sIzugq_8_uTmw@Co>yGtya5~>O8visioN5b)r!n24_g()()hE7&?ENm z567s@pN%)p+4Wd4n+3%A#Ic}s%jSU$eyI}*usA|Ahw36y&kLRQlcqJ+k(x>)(TJ5c zNy+``_*-Y}<=n$Dj`!ZNL>wAkQMU`%e&vxgYc4WZjX?yf8>Xs44Qvl-v157HvG??{ zecsHav={m*0Uf&EKjSC}6bR0HjII^dXUK;SxW{E5+n&zyKoVA1rX;7Jt;btWqCT1B zg<^SIWjkXCvI|Wy!|vz7hk}yR*8+7b=mq?Sgisz4;uFJV(QN0iYNn{5kwKSJ!U{tb zwKTLhEU}09OH(s5Be?}8)8bgl0=Z^@4Xe~h$iWg*PYI_^NjB?`o}F?o{Aa;8BoT?< z2%}q6{aGJyPoRF7dLKHfs|wR(37sJKF5`@Uc}7=>FP*m?X2i7`3d`BAfGyi?^a9{E zP;pP;I}pKFqfO!54c^?UL|O`tF$y? zMXQL6!ZXwEpV5=cz(oYy9~5CsUK}RmWXfK+{GFQ#g;H@W-AtolsYcMEzLMh;W2Ts6 zyzy;aIjQ-=x?4Ybf;?9UdYwfvtQT{pNivO>LzDu;b85C+#L`c032)o!tN8a6@=bl> zc$cOpUd^PdGm@N-$dK}TR!Yq6h^ssGe2NM$rl&tniPoH)fi(c?wcHX)&{ZPh;i3=YDox@Twwr-P3wd zHBQEx&#Fk#!T~cmTS=lU?EOCv)*fw-H*apQKl*n4(Rh1jZ3mCRqxG%LM>~xby#M_0 z+Zv6B4#roi-ulX4{p@&k^~)=l#%m8qmfzvZ0D_3uuZ@=MLRrH-c&vmppurguU=zIGcrDU?=pSzf^96EaBnh=h*0hUX6|=*56nN?>=$l!>p{UA zWkQ(M)y3?89ZNL*V~))nQtN_=pwzl0r8>+7ZH;|nN7<1phv65{dYvO6QQ7RfK{pCS zd8HuWsm(#@tF&y>1ZFN4u;$&+eDtjKROgmTR3wBn;W@2cL5@n%8rVpg>f!F85tI(I z7daA6n2hc)lwmob0`A69j@AZ^M-@w}Mdvac6O?I+##N-n5{T!ppSGGcZZllZFJ~8VQaD+`lju=P%lKL|;`oLUY7(M3+TnF48wSi}kVx5SX{j zcN!tl4v?<;t;nQz&JW?s*!Rc~Vc{i$?;J$^+~MBa3a&ic8}*zRk4n-7rwQLTzxf!+ z9ILO`_X|?*pj);4wHyPAX8ACAyQWycA;~c=8}p<%0v4!iL4#+5D26HXqenvllV=pH zqtX(IA9V*B5ii&VJezXU`RW0J5#yf`~mj>PSE!;b6>?AJxcxl@v!X7C`W=^u=N^Xiz)f z@;MqS7_r1vy$7f7mYPi3pP^U1K*GK=(3&^U6_64jJ%R}1BR&S`$LbK7e8+B zyWBO*oNm4Q6BG004)L3tx4(BqdiFp`o+1DdZ$Y2~+;EMeW+NJsn!;&#$YEu0mwepp zFEHdJ)i!V_?oro_`OH~${*mOB3L9opT?OtjcA+1QT=oFf?WSp$i{L-N1%Bozn~fWq z;Qay4P!Uq1)coufXw+qFb@ukkI5sme)T^f^@T>gu{OH_4bq@!o1G5Bw<9e)Oo9C=Q zIS&%_aF=XKDIiJFA4-N~M9Jwpe*D>p2qY5F%#D{Sgga!+&(O4R0O5e) zM!+%!s$yuv3mJQq3CzP(hLs$?v-NfDO{JDyqc?d3>)&l`?`#+ERj)|(5fY+xWzuYq zU5R2Z3S>1sYah`^|qEivxe^zl`?8yUMWx?JY#aviuN_Q^7$7u zkI~?0+@)5MthqX2lX$zcQXf45%OJ9B$lo)N_C6;j`iSQjScq-;{Jyn@lr9tl>IyQ4 zIE*_K<0yg_V!1a$!Km|g&tLWM6>cUFv@&|&XwJ0wc*7%hyoM`=MD_S?bE<>XgX_U| z-{kvWaSj#e5O;bC32@h%mx16H5}4`Bj&~iF-4j)lh+cejk)~iHs_jv*h6otBR$iNx z@He3#&wu!iq}1l1H6SzR(TFk>>X|kl+!mOf1LSzwpYNRmawB~#VdC*TAybAvs78dE z0`2B73?#56<;#-iWHm+&)Gm7MHoVqaX}>7in|>n8);ZY>B6->w}je(R9)g+WXw3uRuQ z6sm>&BC(&5QqOUkkcYt8w#5xN4%5e~az<{b1J1I7?XV&yK(2+SlwXpfeUhDY1Uq*L zh!i;11}N18B_(*uM;W%qs8NBfSBq!1{L-N1&G%5V-wYR` z0+@cs$A?B#_zakt8CMBD#AT8F{~vE}_FQMW?|1F0Lj}AjxaV$d)j3%1SZd2d58j*J zds&uk?Y1Q!Yq@*(*_^#=S(0sa%a&_NYPXtGx!{5-2xFKD5QZcSVGe{b2_gIeTyen# z+)~9|xZ#q|=lgr!cfFF`=Y%AMd$6?D`#!_(`OVYAfv86l1(3uRdGk;i(bu}{I?P5T zfzk9Bismpm--83>69u8p%Ert(G8jd;1>A8xg&QO55LYFA8eE+F+%kMm3Y5!nxFjCP z<-F)TmaH)6kcw`B`e+NUEzhHwTJ@SJ8vw1mpD0$O4XK`(4cTr*X^HeX5;!)Cf;ahyB>TiS84XJf*-VsPHP~$e_xFU#E=6t<$&Bvks@JF_JJyu z+i0`fZ;c5fQB;W0a5R!oKTW-I$M`ycL(o%}tvyX_(PGZ2;@l>_fUFDAGzG6ziN)(d z_D)YvcwBQcQ!%L-rNco`|16(ibSTT&JJBDO7U3@!i@KnkorlRG%ZgNaf&9j>Z`3YG zpqC&Gzu{J1N0%#&^H?XUtI{=bb9hFib!MZL>e*-!0CiQ?7sMd8J*bsL%&Iqlzs&2% z*1C1yCc6)feFV>X1GqfC*Qd?3Ra_cL>q2B0r5tf=^A{uvYQ$w7SWAJz^U?B>0Mtdv z+8VW1&5Ue{_sX z9PGZ@D<666LAlVNb}{|t1pb3+xvm&GL)Mwu$=TMA2o#1&gVmfvfZaLzYu_4{l{b@! zXm%ip>K5V*W!iRPmv17_$XI!0l_S)E|H0H|To*Dwg2Vfy_AztQm5816JIei-a$T9N zG?(t;-U6tDAEJqjcbB8+!BGlpoMybz*RS06$#@M{exr0E@GQxd12Rs-`8S{vwmC5l ztIWvk?IOiUjv%gpBo_}x!aCr%ZqH4W^#F)2i+-~+paO-Q2U!=VL=#pp`v97N7VCK} zp4{^VRk+aJojstH$}i>&wW*^fN$-+;<8)wMPw#Ftb~2cg{kP~#vq47+g#soI$i{rN zQX=~xsK;ZqxTSs~B5{`HL@AEojy;{3RJ~)#7%e-C%_+kxBAWAKiC)TDftHv8EWP41 zNgs>%reT6i;~SBr@L>P|R;ndx@?=06J{Q#jsq`FH&QVsvc5i@d3xh8$#89twLOOZ` zV|L7`&}@&6)n`=0%ubGv6!Zn8wwM93iV)gbAbodh_P&>Ik|a(xWEhZgT8dxxBl)IQpDvoS{dopFq{Bow!fq_;R$Vl9Pi3cZKW^Vb~!VVon7W%jxw2&KE9?u@=`W1`-8DHxQ z^Mzl*_9U$)Kv{;AwxD!H53B(MH57U0bZ-ysrP8zrEF2T|s9ZVo06QCjMYQkONlf4c zup2@1L^oFV4CsjO)<_9U{SplM;NbX!;foAQe0ly)=+XNdMAoeTu24Lbx_ReOF%c(E zzC9uv4W*4IaTX+xX~3&!2;i;5@l3 z#RjDU@aU{1YLWY#1o%pwS43RD8Mo5+FjkvwsQyj0{3@aL<*6;z0b>YMASQs~!D;iwqd+E=FwA#wuS(d;n2B0~16}J~X_>-WHupzWb1*lsL&t z9bdwoNoNu2l9@~$NxC6D6fk3JHy;SgV$IgDX_M}AFuVHPAd??JC5$cC(3G~c(OK)Z zJW7I!@`$pTPz#_$%dLHfI2X%>E9#{d4V^9GMvwquju2b%7~R5PO)W~qEa8q)&%1{+ z`m7W0s~$D>-=D%|A2--@Dep43X_p z)@qqMSh~{0JUCZNphWQN@6q)Rp6kWytf0|w`d2s$eKh{#Fd5*UK!@uN;IItRy&VJ- zdeX=q(I0B^?ofh%^yATJc`IG4P?+vKx{N(d)9xu#qjwqbPFS}369qB*ylYhE#Ja&_ z=dcV%S2-+$K3Fhhlpx)pUK5f?la@piL~_Yl@(dAmw(mH7-Cc5^6N(GIu8ih?Qr`bf zqD{msVX4U&z;&nD99^7DJy0rP6}OxGb``_sZo;MTv$*>%KJ)b{+Bd6HBv1_z*F+ow ztMh--N&h&LZke5O|M5=iwJE@q{H2BRU>`k0d-gfthxw8nu)SO9>n(jH-1Q zQ}x(>i7JE@w8u33xvRHQpJ<1Qwd3C$AN{6d%o=opHk2L9klmwp9#uFe%rE^5N0!;dQ08lWfi1FCww#h_>)pLpt=iBjOqzWH^-l>f$iHSW$=q{0D^cX_&Xvy zi-Ouo+3+KkPKbM-3wjkRh>%|#z2uS+fQhZQlvS0~d8N+~M=G78Kf7{!wDeO}{#gi^ z1chg9w^9zsjj3N1xtXF75!C(a)M6>%^Bi50C`TH9n5~dd@V7^Y6sq7PgZWqE?X#ca zLrlD#ycI5`D5Lo^s6NxsJ&P5Yf5KZds0L$9f&TW$g=*lG8XnESgf|eR5?T!cnDN@==jbpA#b@3bDmKsR5%tU!b~IhXyP*u?|dquq^4_O=P(&Kd)f* zDYuoVAR4TPwg%`S3IQ^J9iCp#WIR*v!Xw&~oI3s$72S%Vy4oqv_4v_VcF{TZPu9Be z#&v*uOCDQ)uvw2u3bsROJBfEIs?4z_7@H;&cj>2_pgJx+wE)$-c;LWe)Wh62Xga~m z{m;f9e87TW0BE=${EAQ5UzwsXL;Z4mM1ZUAQbWu8?quc7{P6cV*^1Ic;di2PvWfk? zWEUEb3@_Q6&1!7)BMn0 zH8}~VoWbwHe%;aULroB_-293C3tQ!kOTvAIefx}XR*s7k(^1yN-sSIR2-=~5LsWW! z-p(+ZKn`W@Bw}E(Mdf5ul>J&v=rn_~@vjPP$&q4tzc0@xc9?)q>_uE{^la0yLn3h@ zxYAe-A$iIhtGoz14s~A&;Ed0~rqTYnGi8^_PHwb-Nx``rhT-MxFU^NUOvN5O8r_z= zk~p~7N2a#18oq|ZDj_N}e!!s%s)QDN*l))WV1w|;12P%tJH}BVBV2g`{k+c3?H-o+ zwKCJ=Xk>+Q8`KEKgZ~w)$omxIaR?k))8)gg27rxnK}i@jXg`ZeO-56OE@L_QS#BNS z2UuHCR=JEg--1fIK@3hOY7V8f|Foj~&!!>Q9g}{@|5j6TT`+?fj;^YMi@HY1O+0pZ zFnO#fdSqMX$aF|Sm0nbKk;Yg66r8h@$ys_5jLl0Y*V0k+s=)A|!gIAu0x%;t+10SR z59wpiMgQob(N?_dGx)$+WR&tOsDgHRZb_@K_nW)U)^XdlHLa|4+<6ggctRoQYp-R%8-?D! z{*wDmUXDlHoYkDd1{iX=nF-^Wbnl3$3Fd1s3gR*+k@R%Z$-ylZ^?Oi_BabJt^CiO{7TcpJ0q1V38d;tHGh*vsL0cVqqG_5OhxJ%Qe(iVp?@o10b_X!hz3xq6Njt9uYxGl$`;zd zT-^`pgK6P}3C7tr9%_D7E#h?|U9z}J@`a+n9M1V@j_+i3{?EFP?|usf+Ae<-er(=T z+f$d5ZQQTs<^-hG6RJ{2pd#cMq!89xRh~sP#51$*tyD?5t^`9STl@5rkC%UjKi!fA z&SVoJR>I(jkP+*k;B`j~*eY3zY)HN=!wDM)8^JHq= zZY0hLnqH!czR>T<)pQ4QVYDgF1?d1MX%6V5s`c#5l#`sC5<4Y=V^ML~%(2PSC35eGa~y=wzUNzg24UcNfyg0;stFq&CYjJ6VVsD0vU z#*Z!;jp$oac9U)6m8O&-%A@g8=gO&*(f9J&mq*W6X+wk;W8eFOnt;LP#_em7UiBBH zs6RNeTI)O>El*=@_CE7_lizLU!Dftp#PWS(Z`0dX=Kq`&c+Wcf`oqO*AcHw(8z`J5 zx|F+2V~az{$a5OHr{e<;`rCh-Z^=AVIakd?F1^s1Wm*N~lUHl7D2835WT-D0%hG4L z-(K&(5bLxE!8IL|=w247sL;cey#lz!L>v_Nb%j65P&oz3W!=94*1v(2-_=Gc+m921 z)L52|)^E7_!qGDxrr6urVVHELBFltY4#NM{cfm`cc~}Bk5(U8vbi$?8`JWP={|GLD zzCz>w`wzeVHNiP+a*;&atR~FVNuoVisFWOwq}?t`l^%iPFAoeZJokQJDppH<$#&jg z{o!$X9ZXmX_0$pmOhtF9zz|*)Y8XaRO5&vwM{;BP8lv#ns@W25P4U?+i5=y_Iq?do zzogK`GgKBxBpr%Cl$Gkf$(gf+ub92{3G?M@jQ|+BawSFyi>99j9wyW(*pLrCrcI(( zs7Yevkav|~eBimZ{sqaBGPDoZRFqL?h;EViuozIEwanEKV_93h*=@S>iDHvf%ym0qi0puFP&bvqPvCD_0WhzSI)XvYsNtk+xnxIobGK_wQKS( zW($&bc4GlsCkaqdQ%S(Nix6-U;0mv>RsJeXw1H0(0r+7xm(e&wS|{+6$``g>9MpqF z;Z3@eYiSb#34#CuA-+)<%a|R{WUT ztGHF!s_wPhYd2TcKBa;6ax~Vk&#lcb@N!?e(~`8n6#{LjA%x2;yfZ{rw#+jMS$IwV zOR(}G^`4_kLH5)=U^c?C5L023VA{;AS5#7-a}3i~lntXx?KxzDf>QkplrSiWqRCPK zxY%IV#Nbs-Bvg0}`*I6*#?$`mZ)Pos2H! zsC2P#YO%-r2?11<-hn{m9T8N;bE}cXETc>4Q1A$T%ev}t(yES+S#7+T96A~hJNp@| zCJQ8JfzF7n02rM}p!zsljMi6FR-IpxW&UCOm zbQ(G7VtOu54}Rc^J0Kna%)h_Qn++ zTnvDHP;|9K&(T+=v%h$jo~%nTsY+bCj53@!GYt-Yw{`?L<(%Esy%jzoG=qSB&H5~?v7;zL4eeM62*`mXiowSgn#B_3I{&|LQi z7o)9sQuV+}3{*5c)cMgdEqV*5xw7!(slZj;X}w?y1lbQc;IUquJS;1)KxnZh8m6EX zA->8#S}_+n$w}{MXcf>w;C|&9c(E2`00x)rhJif+oxdKU)YZHUX8e~k z1R=OWT>fZ*VAW|5(1ALY&F~EI1KphYA866*-!tNX$WD-G#ZoqPWCFpKF1GeHEk@;e zLh7YCk>-Mxq}#d@g4N`#aW?KI`|Tn4g5#_C%=Pl>z{83LH{s0oDUZP6;M&M`PsiJG zL{KS>^AFb|4l~lEp{xD*hY*RG&~vXH*3KB2(aADo%zzig*`tY**8I(gn#ptuq7Ax| z8NABV@d*>s`TpP#T9mW!PFE(|N+V zQH+GJTN8R;zmOJNpv9q>iH@}@_CPe66P{Y$6-FqdXi$fTD?UV~FKnsGi5#*&%GE3L ze?fBnO9uR0Nx7C$^h06Lq->3BRuHYw9v*F;wIz3ria{Cd|8%v3Jk>U}8=eES>=}iC zUb03$ij2Yjx)%W;hjFG$HxdQZpRgH@nr~DiQt-_U_KDr|S@mYCDO5VV({()m7hV59 z#` zUL8GN|0Ne+KYC2A$V+~V_}0}kP>_T~4_uJamk%dM6=?T~a`MdkIys5&et~^jY>` z!2?9Nvl7NjTMXiwU}+lws}rEaUP#ojDwdRnoU|UnC~X`W>x7f&p;t|^l~(>#b|Bv; zktneznEDxUz7+E}ZMX!{5KO^OPxk(kI}oi52mhVd+r^kd6rp~Q9fFP571q@tENcL5 zhlvluacUSI=-(bw{+M+iR_<7Gaha`oG0r{dMr8=jeA^sRf6bs$EK8ty=fsDmhC7Hbl`_KD2dyP zSvokKHA)H60}u1Zh#is#%m?I5jm{jw0PS%JK|p9-01`Cj1455ag9R7Fd>=^acfkJA7?th=~@JNm|=+lC3YAgS&|W7b(N z3s+xzhXbndnnu}iKS{fFJ(i08Vac;?A?TB7^p(7(_;34`oKR^eSaB#B_JRdg^VTLzvGFwRfTEWqlr zJvt^1q5r1eM#(+N#{Z=b*FloR%jLA1g>#9$7SU;AS8Sc5yqGV!49$p!`jOY$e4AbVR9PE{TI^ z;=Vbb0{vOEh~(P5!0XW_9aT9Is{p1Tw(2X#D9=R~qrzOzuhSpAYU7kQEf2_fm2HVz z@Q`3&D@_r{+Q4Ch%(iqEqD{+5SMr8Aj$g)wRFn~cTySHaWRUe2<;7pj)T~*g(;FQ` zbGgFJZL$Xja+OL$)2)jd$mDxdxrs@8UO<5eU#sP*VI`zjT+`W)ks~`d45(&TqRi*6 z+(+W>?)K|6Kx6@_9`!rfxEj}1Z^?Y|sBLb3`<;eb za{G2FVe;cuE)?K&y{)ZKEG`FF`YQHMEaGC#gxAVKt)dP#4=)&c>Nr6HG?fZBo=*SF8_40NI?DU^5_!y z+vVQE=Haey#y{o2!HrYWkAA8z7Vh*JowqidHZ=HJ%3%ScOG{JmWVoNpt@-<9(7^iP zuH_R{X5;}7HGe3G(w6vqbjc3D=QmjPw@BRJ zg95>k&kpfyXsIAm&~vakypf{qHAp(TbnbNBeehW`rc59l2ikev#Zb@)4XDLcwRCjY zW7N${_z5pG?Oz?6_BbPyQAmX?PZUqAiWF;{Fdca=U2=hatx?)CsaC-@9Qx8-V28QR zT_)%_`_FEEeC^Xue}4MijDX+K>gmDht`R?O0Qpy?rN69c?4R}WLN%v~{n+GeU@LH8 zJ~S<(MkZjhCbbY^5h>)0eBp_>YG&h6v#MjLL(!0~PB&R6?*jq`#+P+OPRh~_UEuc5 z@E}SUrt+o}32(MBF_bP)C_rp{E2HA3ng45UW0`Ue@;b4xxx5@X8yR3dI+Qx!Um*(v zx%DD#-vn91ul6Z zU3xEWC-~So3yR4b+i4(nwQzbC*w-{7I$7B?;74<;K2vpdQ-`rQH;vI#Pr;MvXFz2? z+IOuDDkJQ$^oY{wS6qR*GaXMJPB*7d?{0MZ-s4AHZhl~X_IP~j;~OMw9ct3T_m_BY z#&uGE^m`v&yYL=)BlI((sN)ZxZ#+Kt9?M^D%Sj~ei1-^Nh~B&uNqW~NNq5ZUTuGEr zr0M{C4z@61ZY=4MT8*R~TBUu>4!a&*-tO=fU#CApWn%$4@KhHXHg9g%;Z&OYqLGCh zQK!^paKJ0O%<_q=T4G&PvPV%(3lIcD1^&&Pkc3d}JZlNrdNYy3X$u1~wlAwgRWnDo zI(*olw;%0b=;EnT)kioGcF>NC>lc(!K9g4!ferzJj!IFGpB0pyqmOe0puBzJVfCh< zB!y;{_Sq=UNi3lxPL%X2f2aWMID{)vSGTQSg;v=ZPzCx^^to`bcnDHXFd3LXu-x2z zp;7?h#0Z89Ur`(a;RPR|VH*RHsZ8vmgW9p}+bD18(?`e$;I>o}XOP(KAsQ{(iGCEDZAi3yuuna^5h!SNy%F?|`;<0Zz|te_h2NVN@zYuX&I9&sRT}G8UXGASzR_8yy~tGZg~cpBL1kvhuu_74RkiVO654N}C8!Uikyt zfu?b<%`5<2oD*#%#;i-na{m@S*6vb~~lGx|b&f8H?BepmuT|Arv? zQwmo+SX~>MTv5QaIVf!mx1jgrp=9|B2l}c75Hf(brfOIeVYOVBN&$=jeQi<217tp{ zeB!3D0*6?~V67hNUHXo2E5Z0SF1`7`>DvC}AN$ddel=e8pY-!rLjn7>D(I)Io(c*^ zCrE$=q^tfOLTiq)R>p8a-a}Rh@zv9%ZRvl=N>huSZ<;QUgpM zaXQ}7mg5GK#XzttRKHI7;ildbSIfN;BxSo3Sp>K&R@d|3Q=-daODo!=IMh4I&?`Fz z$8K>J5#8WXycolA@>O|z-CaAeEU0T5-%Vlm9`};SMbDK0Fmt7`;DR1x*9-MG$7eM3 z?{2NOIl5RP6Y@ zhvO2RJRB3qW+>j@E@L+73Fzy3nCf`+IMOSqJL4`Uk02{(I9Se{T_&A@K`Brpn^Z1f z^btsm&O;*7yGQ-vIW4ds#~9ikOpYCfkQUlPQ3h2)vnwmhyH_k{RLx`pm;ekPLWvt> zfA6-crC`ssUUE3kBe(m7?i$D!%(&3D%Y9)LTj(Rfm0{RsdGAVqC(kVu)t`Nc_KcuL z0y8o6(Hb-AX^w_F$ULIHiB}!B2-yXsW8nJ;XGW{qbiXhv-;>}Vzq1Sn*{+@=nRo8G z6&ErO)OFyx>@Uqnr5_<-xh(-#Kd{qNtfOZ+{xEYn7oV|C9BZdjyWXR*K~`(MiL;!?K+wc35V}_Q&8KAE18O(4S!)pWN05) zw5~#3s92TO<7L4OEa+x5|1%1uzly+I`Cx@Vh`hc!yw00m^0^h|AV`WfgkO}omUob& zo?x?^+cLs2pN|;?!Im|elsbKRN;qXP(v#WO6nK&_#NPDdcB_Q^HCi=uM~kQViD!F} zSJF2sX8#QK=)dJg{!C|9-}(M~vVEtT`_VHzODy0d@h3CU+l)##>yQG+mlv)dfB5F$ zkXtNJ?Gx4!1CloHbM!XnNN^?GZEFT$L54rEcB?CCkco4UCc!NBh1p~C*aR5o|F#SL z-+xQ{e?5UvJ942LZ6*T6v`J^gdqc>CvK2*G(Ko>2UsQ_Y;}vx)&7q?al8+Ga>*F^E zsRq&%hd*_jN=DmrYJ=y|yLEC7Zo_8j;f9x~{U)r<+$+nQ%6-2qWG3()DyajrBK>*>x4H|$^zy(XXd1ePNURarz$L_;TcI)xo* zD|(%ALR3_N+a4`@j=BP0Ii^Z$4Fvp(m$krTL0#T@00m$$&R$^(m$FyBl-9K@8(pus z)}&okSm7F95NajgflNSmU<)r;){%9jo^3{t6Clxisd)y0f5+Qzfp<)&_5S zr2I983p7Bb=Y<@Yf<46%DCY?9WHt#>EF@0%c}3gOiLZ}l&`yO)FxcdEHZ;*t2}X46 zo?ss|Vl!qi7$3Fj-Bf2!&ieApqm#>oj;Kpk;mNd@Nv+sxAG)bjowpA`H3(By*{jJA z1miPmYhKZS=%P@EE2i@rKLV_pM*4C@O*o~KJeK)0J#aV<1~w$hD3Sf{N?j$nQk)e+ znPKBX&@d`eEgjuG#}O&^kP0IZ@g<{_ug?D+>HISsWcUUzUHbKV|Hy4&l<~WT5{FKv zx}iFOI3SA9!_ISU5Fd^<9C?w=5MDttMETb~Hpg7@3y|-&Yg?5-Nv{fm1p;nvZ-2#ma?&+_WXKUahY$$7 z^v=_r@ft^1fZ%AEstaa-ugNHH-H8Jt8p+#3twL4LxbibmE2em`GiAN*yz#Goa`PY) z2AJFa6?yrwl1Z+9D z+(1%6c;-BIwe~IoT*V0HOt(hp6(A+;4Yj2;Q|0V$Ky~PMR$zG00`3MRXr2n)GW>{f zU=oaAd+2#;XTtXBiii$cx>&q+6pb@58*K_2SNUSUf)>*U`)6IFOwy9tI(+Qbc;k!7 z<(il~Gi-FCX#SoH!|=svur=>dS&FSl*x6GP?7}nFGS?5 znh>13eg&yOk~&Ckc|DH*kR7uyrfhCF_4zRF|9cvQTR72FX=-7smhIODKEpdEGc zi{zTg!Yl4PJtn9ZNZG(S0O^jU+u5qwnZ})1G?>_H_pr3Os8-nAZLLkTuON{VEu}fR zxvO(;j{N2FZ>cY(q(uE6Kb=C-;?I;(W-Ydo?+5200$1E--_)AY=3+Ya+|Y|3@e(NY z2Re@gbc9;LqDoy#;3R1u+$w@6jN&(IP~9z@CZ$`TK4T5LtYnNklj+XJPwFU>Mg<-C zlEG5V4h#R$$vN^b(e?QX{fqThqN|m3maZ%M@YrH6Ba@oV1OvwNJJQ40xh!7d*&AXt_GKTMCZGZoF+A5U&lcY1sEF3KwBdDG*l$5dNw9 z--&@_lZ1kzx|TI$>1a#9UH<8KZS*R=Q}N0bOR8N48szfgDp9X&xLFBcZ(%w>5#uEc zo)gEO(I;LyH~d^s5_bh@dGXn=uYb6V7ZRHm&7xfbUj&9_z-oWng? z%J?4|uZ>Z}GkMjcn6wU^!X1Dfz1{wtGyZ*e zrhj!0O#Oy*iVmirGhurC-+DVM>m-dpjF>~{qpC=>4P3ZGi0CpGU%9PrifH3u8Xb0hOeDz8U z+PvGRVZ&9x3qs>;kB5O2s-*SeT`C=}s=E9-`6uawzRR7NqymJ=S__A9{pSVCU*sTm zrk}4}zjov2Urc^^?b?mio$2=a=hN-2)s4GPY5%37t=B|Pk49#H4Ltx48aVEdBV_?{w7K`P>wPis`j${a18U6Y*mdF;As)tk9D#DMa8dmy-x) zObxl51zs?$o$@J_+weLQ)wrKt9G7~n!9a6Ru^S|4e1g+~sR0L^C1@bWjUQZ&A7dPc zM{0dY??5LyBlY|5+#lj_yD!byKO9fEan8zx&FOS=ybiX)ng^xu;_DX&$E4Zg4T|q< zN?k=#XCAjp#@>Ai3V>(`(<1D#0ZG5exNc3uTuMMXUZ)3QwuNHuQ{%Uu3b+)^D`ptNh>mzTE|M<6`PgG9X3*E?^=`+B!!;N{K(bIx76L<ucij27S-&e$HY&tq5`4I7#D%?W+&~ zWfGs_YRSfR!LN=c!wbCYJ~@(qz$5U<%L1@nssoFD0-_zng(NPemBCGRVT~SgEn-Ax z>=ES?%Y^|DjpwPHITNAtfR4*hw9_gjRleHAUq zGwL0VeQ&6g&z}Eosa=MlV-+#Ml~BxT{yBt=+982bHNnz=T+5AHgt*e_%-argKL&Nf z6h9!tyD=*`;FwZ(6_Jlel;oul;h388-G6}6u(DEJ*{c^K+ zH<319ceJBoDTH4&;K85wSivEafanKslY-o0(tgg>`G4ejy@rjblF^Cg2#9HKb^bA8 z|EMgoA}-!#Z8A#BZsYoYru^n)aqW7J%_-q&SKRI+U`{UeF-iyk?g&vbod3tpd&s<- zVpBF*cw!02Avp6IaU_A}B7y2Wr4~&@td+83AjL|dG&MSe)0V9q7C@>aRHMOaSb1gR zn>k5||B18yKYza*Zc`t0RSy1i?bAo1@YaqgYFu&$(*C0Lp4j5YzJxGAT={xI~=MYrKK zIc+(t3WDdLyo1|lRqRP=ygC&tDj+BQ$#CUZy_ceMN1y=Q7GICQF>L6?*bNKND0)9y zsUj(HdQSC~^|hJz^YxXr8@B)t1Xx~=G%?=ff&niIujq_Li?H}m zB_KYUc7|SH)!9Fy)2?-rOT{%l7Q3O-05lmgG11y|Ye>P0@q!$@xv$&@A+j z7<4-!@GY{$>}YOMY@NH@i+sgEB1FJUDS+rRRnSxH>qo#DH3E*P^iW#@K3zXWphn7< z$EIK=;f&t;-A!lgyf3mxB@|5Vw)>uWTkA`3%!8;P)gH0d2nBN%_VN9^Heq4JIj2jg zBP^Qp;PL-tW<;E3B;hnR;`O}Y>w#-mt@5MUXeLL; zF-A2kgaOXGxsE`T6QCWeIwXjUthk(jXjoF8LetdnQlYE>Y=12D=*qNBd=r#W`}+cNYiL!5yfgWf!!@w?gz7G6Y$|vD4>;gMba^ zzF>|(?By@-kaT5UVHIlDd8Bp+FT*TWaXgr>bU>jzK9{^VTw{1;{TanX_>piJb*egO z+rm(sY;mfF7&g##Ua^h7w>ZmN)5BaCn@K@Kow`L&Aqf_36*m=LxPC!|xvE=r%9Bmw zH--3nk{v%6HObaZdO{fYiiPryqLE5|caJCsw6|4HUOr;D>%v;c9u zCwr;QD&RTQ6$J#lO{(bjJ&dcN6<>9EUQkrA8?Cjd zWr!?PHBT5ljdlheVHYZ9c!PTxpL7qVR<0TSuuTWWiPR)MgPF4$ZS}A(yQUnEH&`86 zKv-9fm*0}5T20@ReX$e+-pd({3&CxWDK-59N!awHc>lHEDHa3+;!G+GIl!8dfpY#D z<^mEHQ`?&COyIr-UpO@!`up^60cqh*@|}u#h8t=39I+aedhG;GID*2pwm<-o%njoj zE)~vc8XoRyLKHxQLuAlj?5u;iI|Zdl7zM-~^FQq%Ys2#C;=340bS_Ax$&Vz}eU-t3L>4PKmT@yN#t7vwnR z|9S)#n|e4cKVG|WWqk9K8!I<&eDuluKh*;MM}JGZ8}yJJToINiznWln7qmAO%%J7&6e%`uJ6cX4p%e{Sn$*!`~|-)Ok7q zHvXM{wxSJ6lEP><-rD$b{9~jLzSM9EMhhqS#p8!OVamMZKN{Tw%i{BCvh3>k$;RaF zqYdOW$RZbVEzH^tW%I#u;d);eleMd*3nQ4uu4T26Vx6<`$EIN%U$!Vv#ugY{M$Vzx zfwN3eQ?g`Jr%#Y1nm)V8MA!=%UOdLOj;ROhnyqr9?>vWc*-ACI5yw$#k{3M88fJ*Z zwVGqv`}&}+r;G^0VqV!??xHG_p~53OR+@AfH*=IB$Xe5hlW{ah)T;zK=*`he09!RtI^h_gA;$eOoy~;gq={zJcQczZPMdKMK=67S$Gy zv!%;-VHoT)`7O8#$M;U&eE3ienXTa3vr8=vY1f}@uB>ma-}!Kek(Xgd!_Y0Ps7S=L zok0y2o~2fdn&& zEdl9G1^{sXyHateoc2Db8-es=d@bCU!VA1;9eqNULrwM1_NhW=XF_^5RQ{yNmtMX8fRvdk7A9rLFHfJuWf} z^46Ofv9|w8?}KL!K87-Jh3H*6CJzPetR8Aj0oZo|h)SyYjO$Cgje;yBG;5rtWA*;Y zE}1mma0!v5%O`Ncj&DSUU}N0i*}U(F#;s32y*dBSl|;Wp60I7n>`BZYy6PX1K>;VY$*dxLuM zN}ArOJ5$C_6Aa425JQy2F^Ife_kHzZ1x3|>(9}xC0Cm1lHb_^UPeL01%>K|ymcLFJ_iCCo!W^P%Yo9nMLJwe!XiLZx4`p~W?IVqI$&7p&81J6u;KX8iOaxp zkO0jQrw=AupYQzGAN_AU{(NI|`e6KM@^Eu&`^%lrH|x`j*&Qb&fYJ`p?2dZi@#^*} z%;q~<$$fmiz0)2Vt3y!-s-;Gw_ssH`3qM}ZSRw#GBRocnzxK)Xo7V_PqTA=jFHVa~ zJ#j(cD8n#CvR2l7lO7ck`~qXd1ccHU&9^Bu8hv>*hZlaSIr!!NvyuVup@}uh;DX_t zGi2)X=Re;)-n&UQ&feeqGGf;z-}Z&u1_GbuF|d?ETxn! zoq916iLp>aJZTO>F<^AU;eaF%*gHo~U(-37>+EvDc)eni8&ghSubvDEpnXnBv$>cr zVcg3Uh1|S;^XAQK*U9@pLLH-NDP~EFYC$N?)3 zuW(qd%iv$HJS10v09_XDIaZe}0KB}5CF;b8 zl5?uNQMS8hfgf54kkfXHa|)$n@j2)+<%+bD#p*u zu4jd~%Kv{fBLAX{WeL%pjC%MhyjKZ^|B&T!TNAovOaM+J$?>rM2-1hAd`Djv{9v3} zrS**Z-`(#c#92j~ru^0qtvE#UEQLbB8c0eOJl$EFNC@0{Yo9W@u^@WHj-T$B%04+H zpqg^4brfvEwUpSV5(x>w!kL$tjMW#Bt+vwuMZd+8XzbjDktaYD2cEHe0P4hCt&Eo? zaT?18KR{mhVH7|%sh6eQEztQIFm*Xkc~l(b)iq0T1!>n7xdjD1y)X1OP6}T&npawK z$Ps1hj7CK0tAu`WYiXe_?s%}v5t-Kwl$djoQqHn_w9@T+2QNAj_sPKvXjK^XWnzuO zqAqcH1YFz{C8A1ZxAvXu%&>rF2WPpd{3EHh0 zr2X4gV~1)msXcQxlkN~S8{WF{i(fu2RrU|)24pmYHoW9vNID!6oCj44*HT-u+864H zIwJ=}*7>ua@6Kqjyt;RMxXSgLC(#VXD!Uw!76%@eeH(Oecpwa>ow?FFv?0vnBfz>e zp8uE9%5OgS(U0yt`D}a-8;j(oH}jv*PB3~;W~+NIOfeWQ-?29E$?Ppk=kb-1&!QI9 zb??;ATm3j=&8$A(Z6~Fqxb*Gu-TOP6chRhCNbVw#OB}*m;*v7{>{^=UX&^y#4@%50*81Z81sx(b<@;HsqfhTYk>-WM*0($MoE?p-OQz zZwnU4i|(4aQouxPm6+p8mm)5)joW=e(13YtT%7~!-V83)6s9QD#(GvFi|Z(_TQ{d7 zGbpxE8IV?2!Uyqls5Dt4et1UL3i>yocLR9V$^8}5`69SDSgY0Oj<;ADi3mC8lxg?d zCb^}up5m~TIRTJ9zYK+U_Kh&tEid+PL)HFUBe4XW@ZJk54fU{rW?Km~g3PFyo~4gc z(vhvTdwG4px^_-4x*M5xAQQJpn{_owb{{Z(z=i9!;M3 z^T*d0Yirefik0CA`*dY?`H$@phMrg9m{NOFI>+j@26+cFs7R5@M9V~>G}R%pLw|T- z5Hu2W0Tu3&;7Mvw-l!u3R(++?RF#6d@H($V|%i!VE zeY_w7P8U3wsnpI3aCz^6y#tZ>!Uhn@#_?t)CB>Zyh7r}A98hj{dHD46@%8JsKe{$t zVO{Klnxa_gHyuV%CqQe-q=jAB{#80Q;dvLFXJ!DrA>XgKbVEd8(#^QGKqqe&85?=; zsG}ulpIR*)WUBLRh_wJSG;$RXM+>wX0Fh|d_Ji@-joUXq z>F~9xGm2!d;-4^iS+vA++HnNavU1)}>nIwC0v>^o1q+JZNI7c&!T93GI(ivJ}!~V9+Pi|lT*m4@Fk0B{RtOvW+sU>iS_!^*f zY{Ju_&E8a|=)VJhR@Zv7V@&-HDakQ<+2O* znAF0A{Hl8h%#GBLQ0B+CKW&8RP-tgFaw?_^!)Qh(Ul7vxhV3CBaXsw=f&ysk zts+_x6i67>ra?SE@!!E5t??quE;NPP!vDY}8`5?=sva(&Rq}2!TEjM2G#6E~5Psi0 zp3lgu)O1P*lb?)6-)kNt9A8q*dwXq-Akf^v%dJz_ zW$*HO09Mlp9;6X^Q2dUcj%TZ{R?E1~OZ|h#2j5|-`Jl;!Nub3z4+nPH8Xak#>^`hh zN!3)OszS*7Wx)4BwAzMmRjyKzGK$@C7I&#VyifZ%l$-{NeEsnBoBi(V8tc8Ixbk|e zrecV#+4rb8?BKmGj7Fpc>6AMULFFb1%U$IEY(9V43(H%#uipqXOUg#5#nwV6rDVZA z3HU09<{W@O<9uH1>8pnP^SjFd8;q`z7xD}Ab6guT?sH#^e~+|f3XhQc9S)+nB>lDU?OUhsE-Y!>hQ@^$m0tGBK-^{YIp4oJp$hkJFP zyGg=r-u_%Jl53#`oM36=@PKX^{*T^#gal?}+P#FtUms8`5K@eQJ@yKR(wVrQ;8Z&gAa#lG&X^>ZoJ*EZzCNuLq6GLYUf=TV)q$#e z`7t?5&m0K3Nel{A!U$4}MX(ca1pn3>ycYYI-1;&=h^`Kz*l@W6Om&M!*0$>494YIg zwk>;SgLg@{GWHDNVu0zkP?7x!CsjgW?fUJT*OGv8+^DBhpK|t!eU@x6$$l`L>{9Et zpmZ)Y#ft(KVhF~W=MK%{Z&}9i=$*VIrNf7VA8XgN_F!G(r3$7DMqDPd*Q>X2Or?K_ z)_0pfCtnPVBCZLl81jojU?fBYOb^UK%=F}9V!F*vgX(YjjKAugS;RjWL#~-Pi|wFY}T|MK~Kofp21uh0l@3j)ocW>GOIDOcqUwH>QZv=czd-{ z%XI2`Bm+U$jucwry?K4fkV4mihwz6avl;O5bC;U|^EVb8`Yr6xJLEVo-D+=bfv_=zYDL-vCBG{x>#djqc=L>h-= zyN=qWCYy%;b0ikg;W}`pNKu;I#pe&Mm;)%A!+CL=w1D6^?hg^kJ$ccqM^q*cIyjXf zCShsGV2COqYuE}*I8>sBFhXQd4cGh|?yI2F8_6yx%0&*au<$L|19-;wm^m%b&qy|N zDZ|XqGYJ5Mi9``IygJ!U?~)SQO4d8FXwxHvsuft|Yk=IHd=6MsoZFPga%NrPNLs`G zk+Ygpk(PwKKyc+3CA6eAqNV6p^?C;0DQIFCC1xH>5q5EN+`QcY z4N3fnO1J|77U zDwWbAH!*nd4$Jn@lJK7A8$C3zy;S&Ne(GW-J-oyO8p%)!b7b^iW-Sr}W6O2UD})?r z!@#mVn*7I$?5x(b%X&I#%0_Fgap0S~;Xb_^t6$GRv+&bbvPDS+nBT{6JKS%#Ff0@h zXF}?LAeQo3KM3vvhbS{GML8wM2p8zQ_=H6^wG`gYofEN+1(2In+ZvUcXkr1D%y(vd zWS#6Q6y>pGlc+qg221IPqDCs6K|X{NQWgJ9yP3|%$xH-0V>|h4uSY3$)Pxs$cCF9m zXkcf(06d$N>)#VH4iskPIm!YQAc9s$Ogjq$rtiEgHW^DzJ9>9VjMVm$?B`)ZAq0C1 z3=&9b#db>Tls{oWx&d7>Q$|;saeN!Bw6Dg`;S{%P6w|SY{3h$i>Rf zACv8@7BO=sr9@&;v{Z+Ce7c9D5%sxt+MiEVbnwortE0vl!=v(v>@R!JqL$^dPGN#+ z9{Ut{)NnimO#_c4X?TTq#N> zK1CnJG|+2f*+XZq^&GD;{+G$7WyKHRfvOG)4F`R21XS*8L5I}+4CdnTPhV0z7yBbt zg^4vVjO^!q*uN2}1fC-FLkA71(7uwnFreG!c4*8X_#Ka7gB8pqVH;LQxDFFtUt+Ch z_0l%KRa@K|UoS524LDCnbPM2h6IB|?)GLP%*qKUxbAa$0ZqEUd(rjju0#|vyKo>5K zoUj_dfMg_wcKyIg0>q?jr}OM+hTzE>5shl2RH!DTTxVN7!T>5EH@@;r$~w;t@Xa=S z#eq#_Njlp(G`Mx6G_gwH$R}ZgJcMY&f6VOU$m*BINQNQ_AjfCKFFp^`g2)+l69u9i zssN`TNxwN99NcQ0!jTS&$+!vkK>JB&`2+jaJRf5w=CI3VQv$?JYN`7)Jf`Z>Xlo11 z0>WlvmI1_7V7dS&TX*B?y^^z!)4ZdP!gFA6^=6v&=NyWo>V~!0iG|?(8hWGHsA9eO z-`O`dFw!{1S|}3~e)E}aOXzrr>cHdDbSdShZ%Sbzhd0hJm{xTTR-BqFS%=HnQ>J69 z%tY5Rst8h-8Gx)5?acPf zZ;@M*NKZ9mA%tHVJ$flsYHS7_IA$=a8+;rnQFl0aeaW;RgXuR`*4F5^IwP3{I3~Pe z5C+Q&xX}>>4+X8g(mVwyfSNgL-3^7Do>AuD+gsPJi4oAASp_E;Z6(gbH0p%T;bP;! zT&UTC{K$mvo(m2mi!qYLtfeWgUU~pe5!lh-fKT&#bhNRAg`pNop&*f!!iznc=(_^^ zg>_6O9jC?CnyIkkwOhA8TKVK1ZLo{BlQYo1*i03VUZhe1(W9l1_7WH*Zc9XM z=-hcPIoZQREIQ?BAS^k{USPlx7K%tgysJ~xa;%Ir7}p)-yw1M@DGaG_pIIrpF@h34 z*;7@e6ZB?o@jL=Q@rC2P9bii5yUTvx0SdMtcr@TANMTrFJ8WPV{cCv#zl8ocRanra z+>q+u+JNK=VCsC4(B?3*3C0`Pgbcb%Yf(uS@y#-Ys`kS!9|ML0_ALT{Dx;<$5QrsG z{R7hkk>Ez}nX80s>@FvxAw7!Kg~@dOF;5IPXbQ9G2j=;Ehuk`i};gB0Ed`1#62Ox!nr}#+Y1D~#3 z|7g67Bw&bY(t>|^*OVeG5d7mMO(IFaa=n&}-ke?^MHm*X^Oi`zknxqRlG(+1P-qeT6t1ECqO; zUkbm~^$7j-A;U!LHgrae|778aAJuJ$ocoWjz!q&Em#{p~X1#T^{04j!yI_P#s^`uk zY&7?TrqHjv3LR4$0v=Ln>NkYapa9J_PoiEn+)5f^bHpfpGVUsiN>NJBu6||BZ_%ZL zlP8H`-EI#b4mjERiY3Qs4`w*%mHB^VqUqmD=e2b+21!FOr!D~DITconE~=<1g}ODE z(#bPX9A@)OcZV8@*GJ#lwQljSc=icVrD1-C8R5F6|tp^Y;VjnE6=={^vUSTKMl|nX>EbqvIep2+~l{cnZ z+Ih-E&uSl38duu4R1*)1o-9Y9yGT43UW^L&gnw2y#zQ-xkLLfihxNbF6OQ~9EPzry zqZz?23HtG0Wkj2NTNN-}(y)RCRLn`X8u6>650YsbAtairZ=ZaiaTO>P;kQc=FoP_r z_b6my@rue@H7Tg9MHlCI5XW$%YOScP$Ogh9J^=n)bO>(c5eXFx3}#(e`0D(>agTq2 znk;HUIr21cEw7U6gCDbpbk*}HQ4Y&L;sN*VRQZPO<|+bSp%aEZyzvBM$7YX^n86j5 zY2sg^8piA4l8n@_7+-NS^6a?f9!n0)nfPYzu!@oh6|rM^D2uGrE0(a&4MymB{hC_X z-qnpqNs>KmhCvom3dHb^5*NY&OnJdu&DG6gl#^4S;3hYc{UZQ%q>G^t#0xyR0-9fo zrHjs_ki?x)77`9_ybki2P=F1C-L;Qp7IJ-0(rlq-9^8{#(^YMM?=DUW5L`@E`rO5@ zh`1P2VXk*!2f@w4$N z+nMF&cwpB}*Dc1qx0by)x}4Kl zaI5_-hUHyNL<`5MZWQ(UhSrAKEDQp8O)IM$X&tRB*H(JEGD@IWE_y<}a`WQ=0^&qf z@x@P;9k50V0L7PFo`d$=_%%6orgw-@T?hDTF)KtBCUR&GWF~Oqa1{+0fH;d8(fHHZ ze!0Y|a#n=A*gO+^p27Ag01+J+ZozppzCk903)EsQSIU%y;PLJGe;cM{(`wQ&nMZUW zMFaGk?NRQ_8hOm#rU@wNs1nf8i+<9sNSJU-`Sdtp|skllYPLEc}Z^_Z)(CvZ_R6W?KK*LD)hDYVJ zL3bz=``ECmS8WK#MCcXd=>vv>P|BJ%4RQ=e$oHx)KoFNC2=J0#kWGzEvm^AMwjTzY z0_R2nrRmzd%21%Po^z-l3DALrijb(_l>&=8_{QaQY=}47*DP(w4GRLO;c-gX5r?F{ z96`CI`$f0))MXJY9eF&bcVI8jYoMCMtq`c~wo?4DTcHJ*R8HbcXUL83-YlMGojoOR1GZ9ECVrw><6{gNCh$@#1d7^ShG zbj0!u99F$xE>>Ed|92wo|Ee~j`?aLKbolK7ssxmF9F@T7+1;B?1SPItqkR#Y(sTPE_R4>lXrUJOq@=byIA+>2f9{ zql>0PfdcFGF=}&{EiL+w_Fvf(q*z{4Iy^E?=R@0RSr45dxGUo|WsJv^V>Q`~&wvdr za*DbmMm4SL2-3&G>l(@^OCyr33kg>&hSb!@gWm1RWWlFg>4Ap4tZrn3%6=B5_3W+P zBv4=MSCZzy#jIEY6@QXi@P9Ub{P+=E&Z{TVm<9U-Wjc;BO4A@?ww}%@kp+cTnk~nt z>a6LyQ+6w@g8aOIGYW7lPPXoA3yx9x;Sh9Wr>Ypq%3$LB3nK*eY|5)%aq?sD;DR&5 zMXZYlK=utjCS{rJNq{ivS0t$OfEdr$2C7P`h2lt!>({6#0K&9jx3Vr63Ns%TaQ-d- zJi3VQt$6SJUleXGNzh7{&;VQ2H-cLQr_P(Jbf~sqYU4HcQ_+KtyoLAuu|WnvHhf@B z2_p6F(dyFZab1)$-m$uk?s4=ch?fS%eDTM3`7LI;a4lm#6K7!ECTZ=>QA%|u-Dd* zVhm0DETCUal*@<-UcQCnt5vgiw2vetIH4G=K|2LUi6A3wpK`+tZSm@(epO9)9ow-d zGPlu&?`;6}m$29KOJ#I+uROHTqrKa51&tZKg9c)#v#p5}s)8k=i1@eYn@@3;n(pkB0ty#qxbr%w{Vg*78#?7A0U_7ClAS!UD$ zOMK27j9x}_jpzk8+kMacGO6GX)~6V2S8a^7C5I~;2>q`&?k+B?dEb#Va6-i(b}lWg zn2Ou)+)VnwBcPe}QHL-r>-5l=CQT@gxS&T9jis-BIREvHex}N$e)sTrOZel$z{40f zU2E!JCV&UTT$>l5-L57o?-(nrs4m(fmu`3XT~nt&3u2qLYW)%L2)%rYbgMW|HI;Y; z8`ODX`!3Wbo#N>_gHOu#S4#g*#9$vYmv?`70FzR+A>G!gx!Nt7V$^AK0CIquYnx$9E1f5dJ-wfF>xke@t(i%Oehv1>J!-HRr>V`-0B~#(n6M&)4dHF=eu5~L zP;I1ronS`6lqg_V%3-JMR~ByXb>T$}r{-f9zOu{p4LPmFoIq3+nd`}W2c>uJqusM6OeMC7s&bWza+7apyjK&mNuN_H% z!<0=mOQINVa|8xMaFnU~@>q=KYAA7r%8H$bZ~zM6H#3491Ghj8XPPk(A-mMJL2Sx) zZaMjccm}(z=W8u(uf%APPno=UA5+Z)EIdlJb5BXj8`Vp!Zm~FeW}Y1s&c=h<4Yn9#(c%^BPpo?t?OEcY}yp zeX+{N2no(^j!>=i-Z>fRqS5=%<08{$akdU23k9ZhTFnI;Xg?5y-Ux*_5V}Kr)x=S_ zwnGiOFc!gX8p_A<8VhZp0fXN2xMa-c_kCh&OO03VoxSF!mE8d#m#&VMPAV~Nh>WfF zU8;qcHa zk3lqCYeMFj&w0-pAmKk(E?DXs*aA*3(=+r32hTqMr?e^!__vvYeP9Rwn(R^EOLbkX zYq^pZn^>Ly6}jc#Bez6jWX*uM`T5`h@(&tP_z6qwtYmmic>*O`{!NM$S~pIvIB;b2 z6FmkMW-s$e6M}p(oJ`;0B9L{mNaWrMc&&ji(q{Q)MV-D*TDa&*i41VoSBTap`55ct z!Dbckc9b-j!!m)JcV;M86XXPtyl|Z}U?FcLrSi}y+Q@6aO1To}Q0(m$k)|m*UD^W?fgmULFCh@%uBlLr zC#!S# zVQ)4t6erKWmyrU8Gg1&QkC&BIiLy2?3OqN>X1dL^OI9#0;hQW03p8A&0i;i(jwu;O z0&Z=E%V_>r<%s`RE{0;^6b}tf1RPh%UhRE2Ivv#SK|54#vpqxLIR(UxSe6(rE^=GA zctp+Mg}1;@=u>DqJL5i{eP?j`5q@xAvR$+(4WT5s9-iu^1u>Lfo~{k88sCFWF>~k0 z>!7-m!pJi>HmJ{(4Tu6lUlO;q>Ax2`DqZvc(M|uKZ2AGN?IW^dD8=dAmRUjqMbQud z3g<`i4fH9o9!JntM27v80>kj!H9dLq<>nR=4j(NFah;-HB*(DB{C<<{ukBZaA*dl6 z=ycUG7Djjh2<7(Sfw;s}-_rJ&q7ywup`Cg@jztK+oJR@$z)Eu0;9qmce_ikFrPaH? zyceC5cpkmn^j{6^0KHgLBx9rc>1EvJMXygbTfl=KqtM`9J;` zn;DIs@6sOqJESBdWwp;Ct*G$QRJw#2kZtWuS+yohx0GiGs394GnhN^^f@kU{@G#Q+ zFe`9$-qY;L$cZ3(P*>|VTH0VLy7K<=B4KIvDoy9su3h_`@%39KFHoB`dvS!#!D*;= z$GQtfFYT$nEoBIR%8?nQuje`q#CTWXzv=+Vw$h|dz{*^H&4!JN;2*<6wrTrFzAEZB zKa9FBygHq#Dy=O1Bn&#MaFseOS)|%q|9+BEh`iQIn@=V?lJ454pWJ|E@6T{W(pQnv zXW2qWVx#dd{qRbQmy~+`M=nTIx%}}pXp@0j1xfHHw8N?4BM466B=t5Y;znIWrp>^@ zMqON@tgvBi8ogERK{I~(1{2;9FUF1p~F>mLav%?t|i5EH4wmEZ? z>&{kE@6+Q<8L;1SwrI;=CnGqrxScg5!GK`?s8-V7e%<*xPDuhdmdFrS>dc!$lqi`IGa!*!T#2~K8+aRG zuZF}FwJn;Y$%MwA^L<09O(0n)S9f`MT`HM#gtUt-5?)b=yvRV6ya)neuG1`ob4BA` zYI9M4ZAO_CSi&;laD-$zc*K?r($wS#98i#($ju^&QvPh8c<>%q8Fa&QkjF>nWw0pp z94J0RK;g;zhIf>Ndj}#$4P^8=3%QTj&yMo?TkJL}@?UUgWY9swQ{aM8qK#fQa#S=r zDy>178m-R_Xfmn?uc(e0AO;-!u$-JMM-PtLv+w3=tXO&wK=qLxQH^o__}X#Y8j~4~ zPv076&{H8m0?m8{%ePqFc}gYc7E!c^hrR*p3O~rj_45(wH(V0kgP=q2c8Q-b&Xb(^ z)^rLT>x9FvN>@2GmsY93EgOJ)w>3}$mDO<}WdujXacO=KLvy9BRmLen*SW6a)%e`& zKp8w4h)0smz*T4K(l(!uAM8vGQSxX0*A;aCxOxh&31(lVRZyIw9EJ)5M(DBkXjMB* zheGg8PUq;GmA9p4B?pC(-QT=7Xl(6(QDjhsn}G?ja`xXI%u0t~8BKv;HHrDm|7Vx< ze;@wnMiK~cO9Th1*lR%J`-1EhD{aVYVmkRpv>0Adp0Uh=1TdDO|2)!+X-(M zyv|)6)6MNI$Ivge6YtDU+*#yO4twGcqB0LBPjn^?w? znH6Qj0Z$xCojipzlsw4?izhh#{?Gcu3H|&bLQt;r#fY|ClE$uKlY8{mG>B0U;jUXl z#8ty`I2@>figzo)DyQZ}7OVnIjq_#(#d3Mg!ouOHoB+IIu%LFMCiVm9hC)cDPs9(r zKRi&*Hc)f}Po5}m&S0F)`&-*jHn;9O$j;NpkDqMp?D#7SQN+Q?A#IV;-IC}Z!S&(i7^K;A*nBLM41)P{^}WTf?cPT6#K2+8T_aww+ix z96xMbEbUhy8$xZykS$=+#n^y1XFvnY9$Q)@-iI~nxSHFq2H)q&<+Us0CE?bO-tEt| z3M*Tnj5oHXn@=_#e&rO~TN}e+@{F-RO3b#UB8!j#z4QtKP9KmHj%EgXRSvA+5E$@V&D!ohnr#QgW~>G}`u2@O9( zNkzi6TCPT8ItRP$CwDiuCQrT^uWvtk^mGb$KsQ^!++E->GQNa!ScidbfdOnMcXqZP zKAmo~{qStN2rMqTji>7mH}7stwti>_u?AQl)F>bp=s*Eq@EDnwJ5V^9nQMIf@B%bB zQuM6~VZj_i*(jUI#`+eu-dY__?io?OrZJw|fATjVB~EOHL*`p=S?PYEV{ZSm*fsca zcyG_*v4$5Mt{~?K)LMhBn_DaCkK!=fPp9?E0E|1FJ>@-xR}DFE%kLAm0!O;T>kf0r zZ^Y1t5zK>exEfPZZLpI@d2mUL8-KC!aC?1o`c-wDTADuC;I^*mQyIZvfV+J3Xo*l< z`)u%4$Y?^4hU_d1Ag)gpec9;XnwtLD6wI*z!N0*6k0#Ug2hGgQ)>LcWcZ8)*mpz;Z zooFx+g6!eDq>Lk$90NQd;4OL7D<-(=v{#yviiL5RP2_*S+T7~#X)@h@wDbEq?u=;j zax!Casbd(CNa80i4v(IBxj;<6;W!9ifT2`-F*}@nhkp&d6l_CMYbAEq9I4mk^@<&Z zslvbq3o^4E#|`f=g3+4%fT*b-Hm2*VxaCaZ>jAj6Jsp3=?GS@e*eRO5KY8?Mvhrl|)o_$MPoL~ecNS@p z$VWmZ{W&Hq;cwny#uXQRrt1wF`qwivLaXD5V$5@ zlj=Db$EDL31zyZ5`5&5BM2xW3(T&3)PoGoc?rd*=zT?an)PupegCDb0sBxf(GPsE~ zP7Su^*0=2A9sOf4%!Rp7MY6so;azVXL#LW_`p962ze&{u{c8uUyFiO3mv;VxVcNWi ztQG^rdO^d&zUxY1wTL$P~EB_!$@ zklImsh-Yo`@L^eFohE#7wu>YEp}&)Y2`pfR3*cQGZ|TltXLEgwhWmKq$rQnp9ZaUv zjVHD5PbfCMFv$dlX>N=M9>^EhfiQ}uQ%>;)A5Yq78i(7$5p#}mAJ1%)wL5;?o>Hv# zcYLkgxPFW4(I4}Y*Edqo_hdZ&^yBMmH;T~@)`N@3kO`LJf>CJFzsng~bOuLujG@68 z&DK!lVA*BeyKqyl^jl<*$AXM@RhxbF9zn8WIs};3o*>Axwf^vF#QFkM_Ha~BU#xeq z6ti05j2my7(OPOTBkquyvhVty%d28!H{>KyXy@q;y2oIYwU0izHr^nE^n?J;ctU|Z zMvHCfADUgh&PK0NbV;4z_>-G!*FJ(#Pi6f4>oNxek>Euhe%%GacQ~rl2h@V}euA?I zTf0LyofcsNF+G{QX%}UoD%Ee$gU*i_R5*ROa zHklgp`EwZJYO(kC+uwKk@|%o5m?XIVgRcevruv_l&)?_s4p+In-fefX|Rx#I&prF2s;pm__W@S7oJ*L*cuhLB1DG>cXJ)IO3Pr7 zF5y_Xb`K_XYCAQu;~jG_I{61;)Fgue7AD>g>jv*v2nK_6%&d1?=(WI$(^7gsq&5xu zj9F29p!%<18I00%@_~w1e#pcHbY_4#IC;x~YlQ9x)PYiNLDy8~07Iiqs&q?_AFSTR z9$gp*Xs?jrWRcS|2>wetQ2wKAPeI*Bgqw~ z;BU*z>mdmf4DOyXFL1D)#5KAKTAdH-hAN7f&2E6$;QIE~^vUGz=6XaZmlWL{KiFO$ z4l>!JDWTH9@9&6uA$CwxUhz17@5xD z`Bg*%xTHiJ6YykrRs6+DLGp@;EchH3OFfWqop!u(f@TNg<*g3cRkc>c-_AM`2&p30 z#|=RAfK#-rHg^eQM$3{}NatA5u#OtDn5ztT)V+--!-0%hc>^YD)8%suj}kcu>A`#V zxLi&wa>?g74e3fO1nn4J{$O**aS-0&?&Ev7IPPqyQ~UryPQcuU_ZG(h>XttpFg<#T zSK<)}EeaNm|1jo(ROgXTRnRl~aZ*XKRo~;j9>7%JE}m>uf(Tju2Xh9h2({LT-QW^i zRR39cl?Nj%+{n#UoLqy>U#xk9&sar@CqN3+}3)}17Q#4M#8jO;QzI%ThydYBfy?hQVSkNy-PX5VYpfuKK z$kGRiqDCz3Q=xXI*Jp`-_RS%Huh@W}9}Nas!e?nhid`p8&V2kiEL-rZ$d)duw{`(268V1(sJVGx}gPWiKDlCi^i!#AcFV4$ge2%mGEk#Nh4CEvOTp zBi6`7!vsb+{YqP)6Ye{F0$hN#hUi8v{kniS&_+ zrgNALeKR1`EN!-0={fI7GcJ4kaEv=;>+bgb`wusMJQ#HFV~#6@?w$Q^dQmILa4W38 z*{pnFwNkXEi#BXOV>~=lGI=>$xCV9CiC4FqK{t&l@h(q>M>7X5e>ZAVuk4)C+rET(oTB^*!_a+2~ z0yt3WGv}pxS3qI_wD)_1I;1F+>|iGq4WeFyQ7(9$nDT<3t=BWkJx>CMRV?HC+uQfP z8iH-%EnZ%t6AR8{Il{{`gl+u{(Qe#_@|Q%zZ~Rt?+}ZAdOu6AXY!nj=F_LPtcNoLQ zFHr(?g;2;CuLDGO53l0^ob%Z^id~0OcSAc!OFv32ZyeUbWJ0`Z1+O}k)y3(2b^w>e zd|53fvdHI+t1B%rzLp>cQY~TFNwTY@rv&x9Qh|e2lb7T(jv$Fn-0rG--Q0dgs3t}I zo=qVnvFe0Mv2*KL(;|E(25YA`>5T@%!2Jo2Kxeq45@(o+%54uEJJ=xf_saMG5g zIUDZZl%aaF)7k+W3G@eC=BT$8sKDz5%>audcFpq`05Um+JjWuQ<-(7G*M&E`9x5AO z;CzotF&F~2fA8r|T=PWJVUJ&pCnz0UQ~m=2d%|Ru^^`4~fP~@l!}TXtVM0pl10Vm` zVA9T2=3Tu1FKcfSTxXi@c~#R*NBAsYM=ywIPALLXnPDj{4>`E#%914ys?jgoh&0vL$Mw04EJamXPh?ydEC8Ts@!P`aS~HG!>{?htVL0U zWK8AJ_LgZ8kTMA6KR+(&Ay{1V%69_lFd)cof6SG>&YJ&n62W8wA~(KHevD5!M3(9gWeC2$6(cvArAB zh4Al_$D803S+!-@CF&n5Z|*l6jbd6e3SFAt(sHCJex2n`AKm)}u0l9u;|Hj)V|U9a z6GZ}k5CR^JKKe0R-r~02cc(-2n8UlJ%xIjqlwqlU&OCsH>a$5BxpPPBM0^;HaBQC} zvzS_Rv7<}OdI|i^o0fMf@1W-gxkZgX&^52Rc7v z4&-ZHXQScVJWik#(UN6stBVnsT=obw1Jsc84F#$naet;m48?Xd3JUgX*#sV$ern6_ zJ~lg-oTJUq;m#NstZ6h%xNwKs_=~p)q=U`nkJJiKv6^!D`9KY$8JcgqS{Gf+f)T`~ zut+teJ}9J3s~OT{#w+5{G}WkQlUtKu?hMb>kRU^HPArI>ds~kbE2goH7Q-3de!R7Q zKdT~t6AzrOj^Iz~`WrX7tE#f!Oae0rTcN9~7T4sI3K*Ds9+ zU2j}l8$S@qJsM}WN9!95SQSM$=t;~0(_4u2&JJzJRhBu>McD&7`5h7*jlqPF<{1oM z(ngE1XGsc|za?^c+uUrjesR4n-BrLS;=Ue9Cu6TL-Aa&G%lDIuoFtD zG%%r4GPM^(<;MN(9o%0mQkaZ36YtWns?l1^MZ{8CKpMlpw{bXDF4NM^BZvUR9=)Zg zAVmQu5XNDo1=yjPGul(!Flm{bDphfeHQmS8^>Fu(rZ_hr?%>IVY>cKh|MtBt9J-@1 zwjbZxLf(^=b{pN5IU0&L`WihM2sXanb%e*ae|~#oS9_@+$7l;G8NKbpXdKpa@3xCF zC+-g1Xnp4w?DifAYlqHZ$XKu}Xo-}ll(>w>7|o(!8;5=r0L+_=Ln?KtI^lag?s$fh z96jE>@VY3=Bws%V8HGncigj{y_QP~{=m-QfN6Xnm4=__dtv?_Nu9>xI8aAZ)J>@oq z1+3KfP#!93^k*EBqhZ!oEweEF30A7{@L>BZbg>&UThq=2TpN972 z9ePp639?1m1}>=@*ENqziSTw(5Qki#(OTXTA%8EH{Aip(s&r8j3tjHSfA5kgMiSK9 zZG=At4oA`AG}g|AlF2H}0SW6t>X3l~RF(5YbqD4x`w=u8_ zA)H}4@WZ$!aZwJZP1i%A@QRHuleo$t1WxP@Gg`<=NvMW_ppB?j<+&a4nw`Z)hY2}D zAU7K3;qANN!Pc$&w|^41GRx5sP76H=cZn0NZ|rV&r+hGG`pd>4jxht$E24-ANWYpcZEROgDy}OLZwW<}hwMM4^)gyZ zk*~t7rykUoqenV|5{RVvi46H7wZ~E!#4}D&&31(QXpoj)X7eoQm*1e)9O&?gbW;st zT9JcY<9-i5(s7g{HCY$InJ-;N#79RyS*0MtPT3JsKsPb7yz`7dtw%`2laT2vf^?3nC0y z-z@HFq?q@-YQ!1A*;^#AB(N5dlay;hfGj=2 zt&T=<=F{U9O(Z1u(k;5;-NI{0+Dw^HOz%bWU4kx%&CxJTf_5H0`lbl-U4M@r8vUqC zADj6?BGTAKFPcN1ozi65UQjR)BmN^Vq(h5>i=^-Ldo&*m zcOC3#v6bhtZeigd-E2Y+t0<*?+C31XMZen_F}yz@%{*ZuPFr2O68doS zA3z@F+j;{1lq0dioVf{psE+(SHubx5$`&^}TG5aqHl|52V5E3He>;2ng6M%go_SNq zg{*3yx{z7z(7TVHkSO;UnTJ;U7D+8#TdDMmrQAo^ymdq8RT9DHp6#+mU!**Dv?(if zY0FZzO=5SSG)eWhowTWTqhxM~7NcS`N^-uzFvG7j^gzJPlgKrVevczbE%i7;Dn#;o zAx?#>;rD2aCRh+&3(71F*J)Ck3&))j_$38n>!2s;5kd# z1v2x>wqlr#e+s2}>HroS$?9ZqpSBvF8UrEZGihj5Oamrr4sDAt63~3IK_NpDBjr!! zM8t3y0lKr8rJ+Ir>zk6yB$=_mcpG{bka?>7XoPvzyj{h$DvNM#-3E0_9~ zF4|(69+;1DL8ZK%%z|}(H?O9OMq9-V%4Dm#uWS{AXi2@IR5c$U1a`!$;r{G9rky-cR1Dcal~3hV0!JdPcCdTm|2TGJmV`JL89Nxb` zpB@e5Hj=d2*(L&s6t>C`rXL5&by>!5!BRVaG!SivAVo0#ZQFiGt^l&l4Q;CsP63{= zsAA#a;dVe^f)57_;QwFW`$b^=774a3Hgty$M~gAOJfg!0)(cc99AcCQ5#$G>_Xpzh zBGtwZdK$v$v96Fq>-dxG1(mk&(mf2c?-qOg!s5qMRhmiS#k_`=mB%3o zMXYtHR^qGwHX7htWHqt4q0zu84I2eWD{ACi_tIRWNj{94N=_aP5%sevLk&XR4vHF3 zBEKbB*b9-%FaVW4`q3yX*-uLDR}V9^Cgq;Uwb-K&r*N`Ei{7Bkj58W6U{O-Pqc*d| z&^$hPf9p$2z(;TE-WaK70&`Ind%tKJjpA!>apRts4u-W9op*|+(J;4qk^g&k*_xY^ z`7YhG9_NGxi{IDfSS@X~<322GG(i<3vLKklMio2JI|b1Gsq$_-iU%)uX^Ek}TdvB4 zB;K?3#r}AB!sc0HwS4MmRnAOSR;3yG>W-G*vYUYBQr$?a_*$=4IY?9xO^2NXj8&nV zJ1x0K11v_p%(0*wvL5AK4iL2|9k3Gg$?G2LP)a-+X8qyAt$SM)t`vIrZm)m!i+SxL+i=2rpa6asU z^3(@9z}$4jIGUN8LrHk>@PPYA3QT|(OUzWSRKkolgC(;S2I zj#JQBB8O)U3!oMgM#I?H@MNJc3DF_U3pMr8DY1p}P(@FtZ6JJi6)P#)+1qx`!Xf;8o%wWkO7Xc%Oxm&epq#PMVEcC7#yuBjn&P-V2UU`@OT3reVga)F;;2!DyTjS2>;j5=9cUV_?*_ z+{pN=_wb3~MC1m|eWI(*CG|rc)J;(E!g)~T!8FYw*Oh?`B`6^c!m8(I@#(r|q`o_C z4eAE8sC5Qly(2^BzCeh>IvC1_O*Los5fI+B5Yw-F4<)2IrWN);Z|jHRNLM^?eL*jJ zdnNcz7cY-Y)MtdeZKPUuPRO0qo)kw)uy z3#U{vGa(#<8C7k}cG;x0l))6gdi#Wa=WG{%{r2di<$Qf_izwSBP`}fsxBYW4poO?b!-#fE4=jZ4I?__f)gkk3WT`Y-ytndrOaPk)6mra7z31cvF_}|o z?$DU6-C~q9ig38k4=yrsLu4t+=8sRj3KMY^dtlZ@$QEMSPYxHywcEJPDwVzxR zjKgZ)Eu>Tf_~pZj%8Z8DyiLs+H5PZRVYAj_8KUzZPIVZl+TK1Sa1x@uP4J_$iVNTy z(5=1D*cT%uf8aY@K1gOfV~~|Cl$PIz_8$s$L-(LGWWxZr)mw0w-`)vJ;o6#rAS4u4 z#RcZJ5ZkJNmZjun9W3F_Pp%J;VZE?d9KC}(Zv+wXIr;qa8`F9Me@DJ|TVUf>X(JPC zG<434JXpaOC8(jQ`WV-N^+W=o=o1Z!?U~Uq;lB~4u2s?Aa{z$y&I7#ok#b;T$2rCr zuy-_21smpg($$NealB(R4lnr@LaV4?dU7HPxrAY5$XPH=i+I1Mj(>ssOv}GBS_%ri2n#&1 z*++?E$icR!xJu~B@bLC-k47v+cI${P7&Y$>X%2CM%4fiW9<3xQ^TN#mszYVn*kYtz zY0trk<%^c$XqfjKjY9V=OOXS#ikT~g7uZ`2D-;&QTW?u&i!wiS`1`Z(8d7KDi&>CM zw^EsWj}}Ku1pbp^#f4e*ikAuUDt{X5WQ@;-*HgSv+`m zZsQnyBqBW-Qsmuo&=3QG1am6KXs6hmd294)fVz`*OpuOQgSHQC^;@GzEqIKGp9;ZfoICf|?-HWqf&t}- z{Pz^49;IV*`^habFos5Y)JhUBwE>&UeIHzlmb(9GIQjaa?&NfI=X%s5IT!m0fo!qr z+vKCgzD)qXC)SU~=z(umijXnS4>WV&KgIWs!pK9TfvSxTNJE-aFnV7;tjoQym>+XD;=EIF03OpT$niLd|igE0z@bK0jlV_QTKoWl^u9#=$e~nP%mSME` zD$`W;D=~#a=Q!GFZ4Y zdhXpnlI*rYy)qS!caiC>iO`e#hQQt{s=}F}K3P8f7db_un?sU|YLj0XKGHWenl}NM zCwI1igm63Oj)~^lKA>Gbvc?WV>Ns1-4voo}=$1EvaHDYy`|CbPtYz-0t}E-3z&1Fu zHW0ESP=t-yy1W&Yr+3^UVQer&@B5?!+=h$Bv ztEDY+ow;sqH@Z-AD>EAnBsxD$13bSEG{ZlfVuZ?|7D z7n^26@LL=&=8dw~9E1Rc(e0vG$-}U?#j+)y!xuc-n9tMFQvjqhHpx}|U=POPPEL4v zyp$o!-EG%_=+h|102e*82A=P*9tP;S)-Z_Cmcl-g`@lqcu5H^0Wwf;5!BxsSoJpSt zr7;B1Y!5ja2hYHiPUjS9iDt1NEdCpzOLhnt=0gT{qcP&n&Ryx8T;)`?Jr$@Cu(LzV zEB>j%X?$?{W1VC)Om4rMZ<=`nqi&&EoyuZ=Ihd@*5r5VB#%P?5@+KAHP+*ceM^D_l z^(@`?V)rd4U~R)^BN7}eK5>6eAimzwB z`wn{MvEm6f*{_vdG@shREPAdk!o&53UqD^CT_IU)qfK?s({RklzI63MoTOQ9KcR@C zGvNDT4v=|5AZcUEkQh$dm zf<;gygFHmojrry~mc|a(7cKY!w`VUH#u>6qS=8v19&o)}DSE-1ET%gY5>rWZ zBZ{p_Xy>^IRdI}{8Vy4h;K@D{&R6TMu)Aq%2aMY~7p1^1D<2KfUq#s%F1lmg-q*`) zp8Nna^EF?pVY_+!1dExW*@y(7d&q{nKQviLw|mNkZGU)xC4Go4b=Vt(zoi%EgNF+D z@NSTJP#{=0W(s`&B*IVqcrDPEPHy#mu4^;8ga;N7u?u`^)VXN zj|~owMp~|dX`7>`X_1uV8;fMqWn-7aqXCApWDgX+*Q=5Fbsm;s%oY(`pvDE1dqXJVR8Xqhsf1+JuwznEHyDK`hIc}yLJOBs*y3me% zBR`k7-a*iKMrzs7d)vgLfq>{tU4OxOJi^}rwdLEr+&`o{8f2i84d)%MkDk{Nvt2@$me_JJuEcZ7%nHNyJF^vXyveY`_314 z^$*IR`#m$F2D38(u+jb!d!6^bRq>vC^XQWI3j@YhW%TaBP=WOXni!*Dq}@@`LAsf} zzt&(VFaVUE^Jt(PI|@7F^_pn7PMV$Vas$goV%N<iVBI;4SxUSago?|DIejZ6F3Z_ydK>^QMc4WtE3?!ZVPA~{S%=5lcjxMbd+8Bf`S za^pQveb+nln{<+QQq>F`rD&ilXkjC;E*1Lkz=j`wNEmr=`V?^9Rkq;e5{u?4OTCZ_ z3yW&T#N3!~1wp^(UhtxD&mAfgP=nv!qi$|zm$XF3wdiIsLvgMYg2f(CJ6kWcAd4BB zvegO4sg($nzv272Dtbo^nT_9ohxy+V83dx2QpI7YQ)j3;&b z3y$W}dPZXmoA4G6pu?ElJ7oL9()zXNzR_3McE3kox8_}2kb!Bkg=NXjd}*Am?pOK| zT>&4g7rI8V%(ZjR-{sMJ%Wrw7^QQ{|#Z&V0a`?FqwqJP4X&L%lI5T2wv@VDv(V)^R zT9A_1u{qt@enNfl4z(Qfu*q;Hxf()u>;mHtuYx;ei=5Bn+tfsFnsEqA5%Wm7*}0vd zy`ON%(Q!tww(ITVlmbT{pd%4K*fRi;;4GK z&s*!~+-=B7-=(k3;r{XT!9kgNn<QllkyH9r9G3$T#JM-5cZSU-^++Tn4aO2+ZdUPGyIGkR+HeH!s{oJC}&#!US?xXdM z+Z&J9@9a({Ymn784b}76P!sml5xV@~@iup{v&dnXh!bX>Jm6}qeR3cJ&t>8i zX1VCWtFDId%og45u!vAgkK>G};~DtvP1K6*M$ZDTU0k4BL{E3;$=a1&+LAdp7b~Lq z2JH)ak%p2QSp9rlVHEr_9=uJJ2TsdI)sMUzdm-b!ZydY{&cCs_Gg;oKNo>YN+#Ppp zBs+*mLS5ATy45vkoK+=p>g~0i9kbv4$bbx9agDl@2j<*51$CX~(W9M6h&QJnf0t&h z$U|+8*`$@Mz=mQ50qgDqh{Nhx>$%1a2Df)My$1670%$)$I{vPcr-e}+y#Rju>~HsL za7VZ3?&zn)+g|vP@%@b%D!t=x1I5+=gNdOIA!VBFj#+V~sNZ_6b+C?bs;xT*_UF}sMI1+2El zHT>=qXt|hJf!Cj}U*puhe`0&!H=H`w>ETMc$TYHP$ZuwJM7jxbr-x*Si29GwI%qm1 z(M{HiWlonLKVDBl8+fcam;I?@`hpo%E1k;PIF2}HQJ;CIIU_$_FJ8q|z%J5{K20ab z-_sW}7hhdly@4>mM~POHuc2X9g=cd7*yQRJF2!lj{b_hpKJLc*vpS}B#8{APpH2FF z<;|Dx#R$;B(3Q)fcse-`!HW5A=B&t!QLi^&SnPD|#_H9+*!iY@uVqjAvN=H%+gQ$U zXh!^O7%>L)@3rEI@FzCpv5jgQ+%a5et&KR{@HfvDrb1p~VPNtLY#kR$CbW;Vs~%DT z=Gy8f!-Dd@K?eY1K9ru1roL2u4G4VjJU*KN>52~oJk_#<-6pt41O9DNAjq&nL zonuyNK%|(yNJ;w&sR;ZVqu_Maj!vx6gOg&LRkl6$?mnydY+)6j zz3cevG#QPgmnv%Kon7&Be(FiaL33IV`0`VP6X5Ua5LwUP57=gQiLOCKDU z=IlqN{ep7uH1@qQFdi}n%#r7)uMSMByFHJmH#$9?UY-ok4SZn!-1QM9GY=rd=-$nbNdK%!)*+J(i z9YMjGK}1a&f?W_%CJY`uKX_rHKnIVY7$~cM9nl10ecq5{edFWJ4K!znkr)+tNtnGg zB~xduyDSpq-2eV17bTj$IqC_PO#B!7ljVgDbsYHS!w)&ESlX+|<4hKtg%8R#ze3b?IZSaMnO<96yK(aR)yF$#knb2x-#_WE?B$g~I;@|W3b9vJXJeH@ ztFS|*3~;?an(r$TxZJus57*P}GxH{;RZ1#=YddypR1I!@ z+{F6I^!k;juTPhsaZY<5etiG#`pR0L{W-7q4w7I=E+$35{|BgLOA3u69-SvJAH11P-v7Q1(JyT8TdEdJ)d3W2A4i0putj87d9l8Ms zz&JeZr6p8fOG4s9U7%R+T?QSb+UW!ZEZ9i7PHHT_;bKqk4RD6 z|M>Cadn|7l`uTIX=UjjJd)fPM7<1#n=JdY8Yd6AchZ;OtJ1&bZ!}JV#_l64*%c#Ds1?!e17_qiK6++zB0AA9HIn-8bLz2UT8Zj1X_o&u$L}?FIS0nBmTY&u zs%sfpJ>?KT4g9JD85xZu3uRn@oK6gbqurDGTT(Qyy(V#?^3_o6by>*-SWtW;gUg;( zJtV(q-gk4-=V-zfIYUf){yjoIqqTuly}d3GVKt$nukCiXAOE6T7!guO$1tF`VO`i! zI%apYj^rGaAjt8B#Rms)Vj7L5+oerpY;=gIhquumx%9F9S^MnM%b#Aqarqi8YrlDg z++Mx<$#nh6hm#9$?I2L*f3AN1$>nR;Ze0FscaBaW;I_fvrH~MPKxdB3GHm|C&nH|SI=I>VM<;PM0a_5<1_qc zA{0T;-jjKE`_b0M$-kjH`_D{%^dpX8hyF_7wEoFA$P&oOtG1F-8+X1H#+4?ULU>Q^ z-Z@T3JSLuo9+v9I3jq)gM-r{r8V0_MSm2lNel4~a#|C>%wLd+ZESc;5>NR;N=-^Ay z5TD^Zr??AYn2HG!OQ2nKRcS{T(^fQ1TgO*|&Do?TN4&ILW5y!G4OtCatjL!!=V!G$ z9)>9)*$k}_s#lwIpb6UqXy$zYth)Il6R?}(S4Rg$8CibH{tUs)m(O7O8eU+DLhaAb zK`PBEIkM2GU0&RzH!zrVY3?It2&RD(HJ|PmlgZbc^~^49luazIjG4kPF39?kCw7YDGoYT&Q8UUFV(|;jw77IcSM+T)%qk0 z#t`-7H7P^s43*Q_<49g|9$zP8_J~WA7Qbf(1C@koVTlQoVMev$?zM9g7Q7vJA_3b)K2nQCkBJUETax#au^`%8QEJQ^$nL z7T1dh!CFo^iCejY450fqWsF2QXxc{po_sn%%f$O~c1nZX+UWz>3g$&nRmLzZ@hsy* z-q|G^h0y@6@@}XNLNmO^7tWN4dT5+I#&0ocAmT~N7*#b6uvwB4?M|V189g}Vzna4m#e9G104aOH(-t^!td(n(I~{{vouIN@ z&1Q(n9kEPunh(u|K7vdw4Zb`%KN2zn&ij<)iQid{JK9$k;_sauC6SYB_?~v zsBA*N11HSZqd@7(0;V}GQ~--UX9vbS8=+2~ahIMZ*yJJ8a|-)hTws?HktpA}5wG`= zRI`}FRI2A!MODxUBTuTwYMSTAj!C-4n}_KI%)lW(rX3Paoq$Rpz}axvoa?EXY#|Bu zZ-yhy&wAj?C@pzf6hVKTOXFHcQif*JFX`kN zrhC8o$}3+Q=V}aPPQJw|=e%U#7(j3mj&e*(M^I*frt>WIJh0Q*;kOY(OE6~|OHx)d z;hGxCmB|2_+5Ab4#JRp9a|-lf^(BTVk(m)`#qp+A1$nU*)W1&;@A*NKKo_V%=+1D9dfcKm&S5te9iZ@n_3T* zG;fpz?yYHAQhJ8)7#uI`ZGUof${3=Y&!&$yRY7cl5zCE3K!mA|K#Ff{I`SH6;8&15gx#{P@%~|h zsEMIT*g=>In6v$FDnmqCz(w~8Z;Spbd>f~iPyVXw`V0T?kA8G>`qOoy)|@B0kSA7E zt5`V2USS1=N-*c6Xo!3s1uFU!4cl0U*<}+(ib_U-Q5{+?e48iSC2xFQ?Oh(YoYuTd z%t0Vp8)pyH&fz>Y0V@6)fP?5rNeyQZ6#%PHjU5=N#je*%__E|COQBjQI$gHp4F0$B z8>%^}XMv6LYiMK0v!XQ^TK|OL3&~8NC7F?i{=*%d$ZLF@giG^!P$j zhQMl02iBs88qgzlJD!iRQZ$D{H`+NT*a@Gq2M)~EH8M^LdWON8?0N;}hVXs?dmFWc zL_s8DJGs3%*g@EFQLQ3B84hd`uECns(8*UJWqEckh@Ey{Z(GtUDjVX9I+|A~1u_Hc zOy%|-&X(}Cfp4*sFf{n0w|vbZ8mdc{Y*&#Hp5Kv2$PHyL;JSctDe19G6FY!n0*LOAPmNCdwc0<;o%Pe4QHE9+URA#n4p~&8|#aJZ=@1w#S%yK$VJoo3LqjQl}Yv` z+Y=eeQO_4Ehq4brv;)p#LcA6yZj3qRU{42J#@p;!M1hS_aRQ*Maekd}bM*76Cy@gf z6QM$3C1}Ih@Q6eSjJmlx-G2J*0d_A#g+1rJ$&h_nSjwUXi65dYvXWvkV?qQuE!f8a zfjFA(A3U3sO1DZ5&KokPE>ElMo*d9Y|LH->W_hd_HxMyOK zyuD~Tz*ZmE1?BgY4pCd9AIqC=^RelXskI@9>Txl!3Ia;Ubf+~yK{=r~gfs_UDFKId z_Dvb-k@?@zDE0D$*OKNA6WRZU$YI-N>?v##Gr*@SE2@RDpw&Z6n0n1(v6f!HaRB$~ zEw|>8ya4K_wD{N{!x&R_@}-WHf6ER3wLi;-FA?fZGlII}Vvpxp*7V-y?pHm7myu^k zyR>n!lNdZM)s%G&{lrpA_;dQngIkv;kzmy;4d+=hdwh_v#XY@#%&-VQXdT_M9jWnm5H&oI&ck$flu8zEOMvXI7>?&`-~`{c@% z@7M52eZTfe#%9%Ib3C|3Hqr;LCNI!mvF;LT4UFgH2s4Dp8uLTp;upJo!~sI8I^)uH z;R95K5FkEc_-9xF-b#I7N9V7|*~`LuVW#xcPgG%gjPgyaZ8Etu(jH?p&TJ%urXAO2 z<-s+Fs)~$)4q$wC<-x6w`PI$@YTP*ElfDoGw%Z9a3}KRqpzAPj=)(KbzIwd=py89# zKN)PzqUhQ5*UtZII0elntFu?3jeExW-22u{JpxC<4vq=uHD+rHEQ|>W73nj_q+}Iw z9Lg-n8A;b|;}@jvLXqHJCKK_X5YtuYFXLAdFd~C(Dxm^GGnBTrA*c9ON**g;)9C_R zXQuN}KEQJ5?df3X?-fR3yO8VT?!zbC*gks}lX6Du&YefS5?a|%AwppK!jwcd4C917 zV_9%+6*E|!a0Z(oAI|ufx!M~Va>uJ&mG|=G-r*sN5SRzhfXD~LCFFWbbUo51lfy-t%Uz0x38}^& z%9S)Ba}zhYV>UdEpBT1)YCF1MFcnXk_VxLz*A%PM@h8~hSxo2?EJB=-^DTsPOD?1l zzcZ=+gqkVJ6D#)U05IK82Ps|ESda-rXYxt8>pkA|gwPZVlpcul-_pwmC17+t1-s5c zxu+dyeE;m@#}r@E^(xp+tDgJZYd>1tuthtl9~0pIgxDC)ig{N|@r46hyMA*mG8iaY z)4v6## zz|wF~v@}q7Jsgt^AkdO&J|n|s`96k}t7tl9!oX%7cuuwDn3Awrj3ak2N!5GlxuOsK zz}Gh;QJ&kOGcvI9fFqlT-t(4{kFbShSUKKZkFjY&RaycfozY06d6if*7?J!L;S*#= z3(sa;#HVZ1meNslGC$>=`Gjn(^X#XDl~FJrA%awT0c6SU-IA)}Nhq3ZCBm=fSi4;NRux zSL-MLjx6lTpV5Af`z%x_qE&6zshMubT(oMqPLi&oCa%I_W2BZxfH?EnYYq{Lj*=(Z zUAwY!{mOLpkG38K5aIrhw!fmDDM~pNyofZEBTk+Q72o*z`o@<&AExu=?cLq`xBc~t z(g1BTQ>y|_AS0N_Npo8CfRJBNhG%aC;Xf;<$SSI3UGG7KUT}~QC=xf;p=u-?wpDcO zb4NX1Ez}$A)!#720Z!VVeRFco*sEA^;O937tIrR*fsX?F?+Uq}0=bC-F9dz-_$e;X z2gg60zfy?+7Xcmd6^zD&8_GK&M3eEQOaPAWeZTp&nt_Zap~L%R-_eL&^uZ?c!C*wk zy4-fqH$I0D& zBu=pcA0Z5zq&klj4Vn;(u7(x_h2&6HM~zA*0tinLFTT)y3_2u?0SNTA9pd12j}gRn z(o#VQzjwgBiOLMbUOq{!gnmrG^D)&IIF@8wt_96Gc9elTrho&!jD&{@&IyN6NF62U z18nbhc6QlNjq6<@EUToN3;kh+vl^7uV4La<=TxK*G~RDL4NoT3G%r~2sdZl z8@PIi0C2j+VC^MoXi7c6xHvrPBx)haDH`Q|i}Q?W01XHah_DO*Ou8pA;4T2$xchk9 zbS;^*&12SDSBe1=$^(ExzsMtZX=>{^o9_?BL1&Im}u zh;FU#?%Xz2xZ1qMLCShsvRcj!2?Q4g8L-vLJAq)X?y!~ISQi6%?c{PqBW#ei6j)12 zDVI>q3!1v5>2VtuyI+77NUf?npz$ldtoZt(08>YY(*%1(9Rxh82KU1TfTyur)rN$Y zyWfswa=Q3q#M)tQ6oDZm!B-qdtDVn2`VuOd3q9h#c;_G_mjxtUJDi=NLD6VZzM7CO z5;G3l24nE#?fIFjC;z@!w*;YA;FYs4 z{Y2ckdmm<;OO;GW>%v^&vXDZ!L*WVtK$1`Vw4Bq<-7So(utWVS)%FDUFgiNoMXia) z&3X`l?>(A+&ZWK|e|qH#5k^z_Pe$;U_d%MhP;sY%9REw zoW9a!<32Z#`bDLcC9v@l4i?dHKlHU?M05wOp1jaYyc1C&T-cFNgTtI;|)w! zR5W!+iohyEy@7TK?_YAZyo4aptT*h6qsU|u(53l>K<e;2M_!+!xy7J$Q zNbn+bjv`N?qJ6TN>ega^`DfV`0g+2-5(B@5v9%O;n+KtSD=6@~>4|m)^GE>$PAT&8DVIaYl1FYigY;tLMesywb3~k;_clXzn6(Ld6QGz`%D@+O# zSaO$$CYKB@zW^L~n%pJg6fPQvcMCYzfid8TgsXs&W#jN+v*$PnodDi<1i2G{1~&KE z2dING0|DxnN646~gZ4qYYQt)m2~jqkTQV#FZbf1=?`Ui=gzM4dl5RE45Po}AV22sdz7WMZ zDmcP3y*W;4WV7Fkw+{d+yMIbfM;3^eCjt#uHhFfy+=_Kt+c*|j#B-eA+yGbvj*WeAOb&Sy`-Fs1WvAc+`e{cWf=$R3gtpfE zN)l+n`xjE;k%-P$IMb2ds4o!FE_|cbOWr}4m69*5C=0gV)z-;!{SIA;l6gRc)8dNk z@6rNi73;&m#4J6xkj35s{lpbm9q~(au%haA`GT@#>t@vXkglS$)K3o?c*x-!J^au% zWX+hs4sRpkr_L`^gr9lb7)r0*HI74ZG5#Vy54pQTJX1Ub@97se#ITja;5FEgtFW?-(2h)84{5psO?`jGTKH}-E)s5BLtHIago3;@+G<3EgG*%QVE^zygihv0&M=K3xh1*@i=@Oh=LbDj=1Ah=D-@{y`dz-fXhJ-%XK>y;d zQFpDB6~hiP_gfN+J=OWZxca__{V7%|cTpT8VF&36&e_fXz%mA!%8V0LZmrFZ3^nn4DXb(`0v00ef3U93_cCMJlH;yd&)#9=~x3Nx$LA z5Ygn)Bb>@4W6-3!aR3k-^s<+O0%ZFoWwUia=tO+5r9b}|i)(VJR8Kau_SyC8Z5zf` zBEAYi6rIrZ3)tYRMba{c3$1joU&VxjT=BDT|g0!XJh7IR$SxL@t%dAe3BF;XJlu74K_ZV5{SDgaAko zjtYcg9JmbNT|iooQa%ykUI@;(ZwbcWZwY(|Rgq6Rg)C?%o)g(d-!E&hngMbOUxEVw zXq;tMgG8hc5q=aUTE(B__#QlafD`oqJGfjV-2`ZUyQkcAPrjB6V@OA<)gl+pn(pHV zqjMjFNS@y$Q&;t&h*gn!Zs&2fDeCXWCCbMBAr5*|k)YkxlmAFt_Wv=tAkHB?OzSQA z7NC@)i#iZe6#&dStwoQ&4czAE2h||p^d|y$;$b9pV&sQR^-jU&%4>t^gxlD22`6PZ zh|p@ix$@&nDG!#iO*ev29K}5YKZBP9@{0wl#+j~B9qPI1jDyepV7I7|E@8}$E z1TrW`kIHUUIbUwCQj15#*ckfH?e9S?5I$m={K+|)B)H=L6Zd*gf95^(s-JSCoL0;I zLu}!)isFhS%(iQ_|JwqT@Eq6TrKFc9S05q?By;Vt~9ZQ=(xlzAx54 za=D-xv};DrUtey+wET>F`$xzGYH3gp$o}fjfe8q44Y+o)cEBFyXhZzYnf5@TRkGtO z*_=K&c*7M%Hl_}{tVyFDRwsQV4hA*tEtyX^?BKcv0*Oiz6n%4etZI(RbC7)Urw4ce z=GhlvKrfHEs8dxP@%kFL;l+bOr8IPpHX%YZ&P0^X&6781ML}<6YxnwLsh^oBg{E*; zIY~UriY7acS3X^XLBj7`;GLDVE7zg7@a?|o% z;qN~A&s^J||Ffa&<}b|ndSVlYVVgSq1ZQBHq)V`uPln z@nFV6m+1b~{CfQ63u>X3rlPm{Yunqj_6A{#i+aF>>W4~Bqb?v|XeH+xpP(#ae^Ld) zoS%MWPO`fNo2q2IAI#UX2U=jf89Rer-uP0MaRenF+Jo3+7Wm^~ohQ(5p73ZFD3JSm zKNZUO577s=?gZ#xlp{YzFtHGIC{j;{;}Q{`cKjSRyOM>J-ZU;1M9SJJGV4dRnJeiV|-?MSH} z6-miFAa;I0_Y_zF{Ci4_gk*j#lY`ka)_~F~ia_2H6$SHK6D6wHH3?WEj+*nlv$Q7+vA|@I{$`Wm*c`c2KjR&Xe#qe)})|({LlRV{~xh8a!fdo8AUUw$6z_> zF#A8FtZ#pHYh!zL_x6{o+}_S}yHa9|s!-P-oZ~l916MD@xes}>8%Vdeg}a60`1@RE zS%K|S)t(2lBLIh3PktpJJS8Y`@?Xez{$F_Oj^w{T{V{jOnFtp}@2lH8>nK0?sc@`; zZ(mVNKK*3%3MMf@Z`Hvc|CrniP0PW4iI*vapKn5ayZefh-F>(uIarlk$cCQMD9OO# z`6=fWL>bLmV`$DrJ&mrjwpI+t19#68U8uV-RRAL4I14Y}L3&}g4IeS*nEqjW-R0ai zm^r+YHDfvLA0H~#+lKNckvqr?mGw0^LUWy0=rVZzpWz<6dh_b1mLNp8b+K#%Cld8x&T7O5gL^d53uK-+{g-5l~N0LoYp$OyAr+D z-~cOwY{ZC0oV&bDWW#`Iv4sULGbU`_llC|%H5Sd{BzLl6`mxX##0c!=>DB3@{j=4p zH?RL>x`ZfJK_pnGfp5fFNMyaH5=3|-0nG1hkTQZ4=)Hm<@UgLC*E(J1u225I-8;j! zZZi^`3TfC|MeW9OEB;}UQL&1DygOrKLt-@C6Ua&zr7 z`4R`(6y^Z4gK;wA(1wliqj5T(dx*~^049hLShA|NW0};&+dW?C#n*G+mdPXRmSEI( zxbUY#0e=VcbQve;{`8Zd&?<<8$JI}6UehTk+~-STfFndCV|Fae5=fLv%aULlM~9Y% zCBzL*IiC3vC_O4LaU_tMY63QnD!9zm&E!0=v6T+t2Tj-%6HzEKe6P4I`Yj-V-sMR6 zqkZNBUfdp7Xg6NRuE{fL&iC*b=EO-gdM|cw&lpy~$EqofiUc`7HuVs;SZJITX-rq4 zLl@Q!Vo2jev{I}{gI!9!gzlLBSmM0ATG++RWS>D~1$x~n~Wxc%TV ztBcT|E+JMAIbjxj&)5@rt@0s$JWf^f%;f+5*Eou(6$HaAT7f*cdI^VPAnTgRp=(KG z`N?3RBmR8<1g*e~<=Wy_@#eYQjv=DB(8+{npl}!I@H7Es^i32&)M=diSY2SzkeW_z zn>G9>t-YO#=;1JR7<0_fucUKS_55_Y{&MyMCuIX_y1$?9>$nGn#99 z%9jikB_zk9@J@3f_lrG6P=pIAZCkU;2U%ayFol0@O{V2-$&eFP3_hG|mmyz9I=nUy9<_t{ypUh!;%42(@so>v`G>84{W z9Jg^lFO-P}VOhTUTK53K-o6C@VY@bK1uLXSgkqA_I3(QUc8S9Yh=3rdjsgLTx;k|c zs8iRP_H>`!o)n!meCf zBAiu)JV5Z5UX|JeFhdN;b`r>G<2npzabD`kzz~A0M910zB~GT|QJa-?lhQV%&77P+ zeQL}mo)QLY&%z<#I_GhYQz=Rgm^^4=uwL!~nu(BPswzL9b1llrQNfS z5ObX5f#5-ve(^%O5a|gu;|N23)L{>>L!=(7`Epe$t_2lsgccu^^#TjVXt|Wj53s~m zuYP*-Go*{OWlAg<6i*(HIq@RpL-<9cJN83?twtvb$7&CX(5$KPneuYTS(|pNFh^}1 zC_NJM^P5+%+{|ndjVwXsh*1ddSCExsq8uL2PaP^5lceVza^VA6RRQlPcO-Fxf*PSJ z@POD<5mbLVN9eWHaV8=ru--F0io%K}MlL>*OA9Qau#f{5ReYg#(Uss!4Y^9&v~yxrb=iF6mGnoZ{yDr z)|3}^BQ@#h3~{p0bi5wmJ%pLx@7hPb@wUpg6F5o}Z|K0WucXNkGiT;1J5gbgX6Bus_KxH&c( z3F$b8=HN8L#R9Cfwvmrf3lN}G?b}SWt=`F@e``R~Z4*wVy`V_P_-GJCkr|UtMLQa& zLL<~-VOp&AIn-{Th^M|KCuAQwy^jSsI8x0HXueJ~BMLjp0c!`vpA%P7F9Y+_^$79z z1s6UIRMi3Rt1PyO9oiZUnw-inMhlh`KyJsy0)%bn%K@A2FelY@+jJBmlVKHA+|dFm z>&ZpqQ9A*5H4% z@KUoylb8W*bUehoy1Is-LZn*fP%3%AE?E+wtR$woB85GplJ>TU!vUklG-Tdo*QJ@4 z081H8ppAf>W8U0)U;Hk-T`u>YKf_sd4)}nMIw)%6M50#0(QJBX3n#n|4CLYbn*RQOV({^6Q^37RR23K-x_TgH@)U^1AbOwiPSUb$QG^4d+E8WhV z#Ij7(=jh5qyC1=}gpP8!dVOv(b_Bj)3j{A)4U4-7`WU#jq;Sxo5r^U=zA!=r5^R&< zC2K3N1`8k=2Q3iBmbe^(k=+PG)M1!lSZrU0;^{3FiF+fg04ri?i$df_b~qJKO+W{+ z{jfOz{rGVIIa)uGnKcWXA2*^W*aHtw?6^t5Lfw(U*GL~qnEP@ETGxt$Q2VUoWfg=P zSQ=DxQV^bF0|`Uow~#CGrM&pV&^;`&mf#s{a7`c65}rvux#{IxOS>L8T5XOKo-K(M zLDz&A2k!^cwDUOu&Q+#`oip5~GFQz<qFR$Q_?rSC23)JNaKhtEEe((D-*#A5^&VtoSvNpN7* zB@#c^x09UR-nK?8pa}o$__ZjV1|Ji8UVLK(BAEycMA#c5xoiUXqe-Yhke>E~OTdz% zHxWx`azJKw#p?9S8BW>L$(P#Un7K-xFRR+B6|Py(<3!A#dl(O^!W5Pwd2D$7vvI^^jL{8E9iW9iCwdrwdPYtQW;rJ~I~5||6q z-SZP#`oo=&61Xn;kK7R`Mc-8Q$}5+tVz2vr(t{GD2PVFN&^muXKhruT=ba~}OIR|} zVtvEs93NS8Y;zt=bh+v5#3>+o=_)9og+x5Dl!lm3opT1fOj|vkhFZa(-XYF9()nJo zCL$UF6>2cjV4_d@$1pT(9c9+eA9^?RU*cBlqP!J`aQ}18x#@x^06{_e;b3(~9VL}U zmwS?LCjcw`C|RQgck9}EBY!_wuc$VG`a|$ADxKM`bT`zMBW{sqYo{d$UI4l%%VG)a zV5FrMt4U=vY>v|%AyRlTEeh2qbURp4RX3&dauIt2feb!C28?E38@Y_)^ggnXyp%(x z=5>ROq5~Af8}8>mA@1@X;6N9WDwxS?L7q|r!`I{fi8DI9__D>pa1%C zD|klTETgGA@j7S5^wYw{P|*4|jnUxI;+L8Mb%H`jKNdnJ{!1 zp#%`Ol0G2{ZsF}as8pm*0cj4u*y{E!K}P^uZnNn>g}0-s+sFa(?nyvx7MuKqbD(pC z*#kNYn;(Itgozo^#NfCT_i@s z&|mbDO2ssa7``gCNZAmq`A~#(;7ZckjOhXMh!YaK zQ5~e_sP$)DjPdG_1mU#5BS2ul5K>thG4YR#5Tw6P4u~d*m7=NZ23IR&1^b9kPRe@= zIv+ed{s3NFI8D?u8Y9S_a1|mK6z34V{)L+y0lhtigLgnyOMImw2SrUuVJVMMQ)q;D zk7>5WPyZ4=f`~}?VOcXJTf{U?Y0h?WnOty!FJ4Pi`UCvBQcIDq#Q! z%bm079Xlez9xn`laKwD{>dquy!6Qu$MCVZ77r8~j^k&Q{tJK+0xcC5P-X!xfrBnxA ziFC|OHzD!)`B&l%C{u`%E+v=|Szk!H>FxvV$Eaqefq`(4z4F22pio2_v{e{Z5+`p^ zt$z7SD=L6{grpZXYG|Y8U{O(QV0h<@LSUpy_#-$?H$8AEilYU!;1B)=R1yC=t&Hs z7WIw+^AlSyqw!KPflgY&7_gV4FI_%ffHsG3KD;^oAWjaPy8>G~UQ zrBXoMVWUwitc>ihR`!r@H?$Re4r8`axURHtf|s*ZGtssTv4{!+Ro2ClX3vKf=MIp0 zPJ!YYWG0R45QA@Zc$80pv8T#;R0I^^)ND`GkXdi;HGB;|RvLMQm(=eU~Z^tbH@e5CD$$95wcfG(>7&7vifa^{ED# zE#D`@oxtvLaq9xhhm*YOj&01YU*K%|!AGz*W!*;~6og(fBK$F#h=U3OdFYBX@hZ~3 z)f51GLlru;&yd(3pg5Rx$gaL4H^aHByTdZTP^%~_!uyRr*g9Hto3rDlNbKwX@(OxD zLIWXo;*XH%2g}^N0)x}Oyms^IXOrJ{9pRrl*P(1x3GZZ)oOO5?&8(Y7(AWq8Agm`z zB(0^OQfPMXPbv!k!AH#u|EPI72FwB=&9p|49JYj6oEt8S@O;z$nop{1VA$y|L8MO6 zh4%;!q)G%DER>~^6lma4;b}V14Q(x0T>BaJue1CV_5b+k>;CI>*=$EFdYtdbI^tdl$|?!yetm~ydTZcMSFc{Xas3M8 zUcK@8m7ihryjk5kdI4WFFVgYhS>L^)m-ETb=AX-$iMK3&2X~3~I}Z}WcGFUW>z;fG zx?t*`>Pn1q1fg=y(HGUkF|AH9K@gsIxcfmPklW0b?jh0lPjZ`wjKwlJ%t+M06C!kd zI34e%S~tNJ1q+S3*MP`qWu&?o`MBIfOK^q#=Q#H=Nd3LVtfu>npJ3`LqWR8vCa=R3 z{62`H+T*Wq-!`sYz^Bt+-nZfut^g{=pVgg_TzO+-m}ot(-Xyjm_WsKGr~b9xS`;&B zLP@qr(ijcpp2H3Bz^T?h+3_Qe?1Otj#7f-9SDYAsuacUAel)ZLZzCwv#vpA;C{x5zaebLtN`!3L(((>Xlja>SbzTbkN2>*mt*Oeiq~<|t3~S{LX- zQ@i4v3>ms829IVC2(~j@#F05zMK{%VuUe@6^*;1L0mW!oLA*VZH9G-@x+%%N!U}0B z@__0Na*E96&MkPIUAEb%KDrnQby5IE`b!}hj1y0{LTIj5_@(2_;kX=w-mo3sXnY>9 z7{NNmvN=31`0E^{Yf`Vz3F<$~dRhnPma8=G09r{*W)I@s(y5FHYBOoEhH*87gT+Pn zZ7nL9N{dDRphrF^4UXQgK8g?cRX5sk!XC^RB{Cm%23#D-<7)=N# zHw&sar@zFy2!jSKUZ6b+YFaVK->XCA@@ArQ-C7Kxa#;u*}oi==F|L8Zz zl=AAcVO-`ffY>-7_|)0E{;V3Ix>~ath*D<2`I$Pv?LfY3&e`nsERI&RA{Z3I(CV($ zaw_#|7$m!QthokMhiK$_CSEU4!ltZug<9)4T1wzPVXv((zW3lr!9~z&=>=a z(O9m01RrsHT;4pA)@2xh3dH%Q7v4|Ad0b5s6PQH+l^=vl*`6I7e8O6;0n9c^ahq%% zq~S>Qz>qeFF~G~e_3-pcp6~w&?_Ixe2>2m#IPpHm+fg#rS1A;D_KhkPec`zMpi2iC zb7C1S^Rg|hT}I13J61G&(i;~|+QcH%Du;$q=RtlTMJ-n52eavuhg*MG%V~7X)XSTL z(4?w>vndVnM#QhF3idmz0K61j9R$%~va9C`1dSPZKH^w+pv3XXcss0PetrQTR)U!! zOwMuFKy?LSg&a6$MCh@`QFN;EjW<^fFVUX5p-D$^mQcfJgp%=*KAz|&;0kJ3&MZ02 zn5MwWDmUbSU}A004o;q(zcNz52Q|v5lQq+E)B7)p9C6~p;aAWY(gi1|W-4qE4Zbih zZSWwO8lyWDVZ{U#(l~Tn=?|}b-5P8I@4(_-Y~~M4=2UB`VcI#td5H_;eCH>(1C#%4 zdh70={0Uq&C$bA|Mfnsg$cx0FMn~&3F_$N+Sl! zMkl7rN|)cZ^+YcJi5#Qe{Oy*CsE@Ti%70>LeoI{g)>>XgSu;rPcuka--|{JzXf^@! zj`)%P(6g7ENHD`+V2QD?M;cziW4ce3byn7v(LY9Ecvfrd8AL9I2}nd_p^nPf!~A8q zx0gAj7{XaEy2m^-yC#7Sqw!`p)eq!eFg6L={W4ANU}-Xn)w3MY4j$4j2PZDWX)F_c z!ZUn!>~T`NmV`>gR59B(N#suIs20)=GbBqifwT%kcpM`3v62dj5qSv4 zlKqJWN{-re|3yPpW7enKk{rFc;GvU`N073R#q)%CQOBy5Fs_XTp=EWagXgsh6}Hx3 zCO~zqN)q*Wa1M_Tb%f|;jqM3{dXtlL+)?N0@r(1*;ESjog!wIY9RZhpcxw>6iAwSU z`nldj{&9%kIaY^K6R zx_1saP&FS6t^J3h99vyi`B?hBE*6y`<8Pd{9T-8~);?vR6d-QMvZRPT=S|`^@zrP! zpL+a2kB>@ebtrTxj)6yO6$$djQk%C-Mu=X7M2Yp4u!<}QwnuNX8pAnCMW{J}PTMh9 zwEd+7k%VLZWslX%8@iE0P^MI4U_$VnX(QCD@4+2yI>jWkznfJI7`F4gu!(O8{WflO z3;L28cpI4EZ*$}LYdXyF>)^^CJoMT$)!!+t36B~Amx&3#0u-e1s|{2SfB05K{n~Ni zc-1uThd1z++69nyhYhu}1c{(ZrPc~H5;cHS)L)T(qf;KvmD`yFGG!>3-Q%MNP1j?H zlZMfg!i2ujKh%1$t`_nUdoYMJM}!vsgJLqGZ+(Qb?ITTeV3aUjy$hg`o_a!EpL}jc z#{{TFziak4G-k5A9d=X+2fyXMlRv2;7}GW+{fu^!#CO%#dxU)6?(Sys}GvreEJEW}Gq!emUG+4Q$*WTh64V5Sc%Y;mCd59i#s-XBK^7OZN4m^Uh=umi+oAy*n*6{0~Ox5ci&(K<4W6+F1TL7Bt z)LDR)EEb>yIVFBj8EXLiZ)lh_ea-{1RfwZyOAq;S2tA%JXAr?)|5wBr%1%Puc2%`9ah>T+^OcLrmRL3^ zaX|b7O#}rcMsGQYmQZK3Lc5Ca2B(4Lnm4KX%vA%U%P15jUhQQ4(_n{*d#+2>7#ae$px1eHt|kheXNlH zPPzlr;Is1J&_r0c~N6wD7D_B(2L&}c32pu zYeQmLu+$HVU)AuM!Dh#i-Qt_$F)Actb5~G5EcSp%Ki)x|$ zL($s!W@%A#~QgH zn@k=uSx~0ch_IiJS#o3?GB3&)4&o+G84*>A=}CgYnN(UGJWO{PePCOc)5d%1Zi8k^ z0FMdvsSu5GdBrQ(iMaxBY4zOXhx$1T7=L@6Z&l1ZdsCuRS^k>#@J`=T7G7k_M!@9` zVGA-Wj3ZVQj0R*i%pQ4YI^7-~qg8z*MSV1(5LK52a3~lT46^C@F!gLbVde`wNKc0V zo$u(f{rng$eSr$&=n)dVAwv@jY*7@B@#zUSv`3^Ia1qc6$01YGi*0H&rs@!it_Haf z7GITb1>w~SuFR}mu@(kwKrGWmAw7&eMJOz{5rEM`%JbvK&qVmssGkMi)}(V(&M|eP zcNoqa&cDXF)!7GYC1OWH6QI*uNOy+slRKt(M4T@~%xm>-3kitTI~hC-?VF16z=`4x zW7GooFp5BU=Q|V?O%L#U%W(;H8;&5~!iM9=Vs51J5uOOxXxyg}v;U*4G=z9F%pL^k|145_q{2E?FLQ^GVvN*L;# zJwYRay>kcwAa-7y4vYd;glLYR#x+EODA<;?WyDGXts@etZc}=DWE4s|E6Ca4M{!Gi z)CiWkvfbl(m7QvO!CK&S3GTI{W~B}r9MVP-TFO$vC)RR$9+{dHucm4!!fK&~8m&%7 zDpObFoHn2Y7aBO=mPq?GWq+lUd~x#MDkuK=e@HozJc19{QMeIY7!7eH7fK^|K{9bDlVHpD;&rT>mtA;47(a(m2V1ppdwbyP*3MB&ZC?ZX16}-Rjeywh8 zHSZzErfI>=wrt@p_LeiEFAMChSwxu#9D+QPFzd*Wk1)C@xImK`KqCLZMhdAi_^Ea$ zmNbBK^MF=knJJ7_RrH6zvKtys#IAgpwz4>1;no3&mH|%DSmeX;E*-XUJVA948gOC3 zn)&HFhGaoTdD_0BmY%;kO6tn9z(K~{=-MHcq;OTl%s_wi&otb-+q>|p)%Yi;Z4merM!X22&-F5EuJ&Ow-aRtFKUa{e2iaqejKyeNC*YOh_ zPCxkk8uOBFsE+f<*!$_rAJb0b#f-ooyyN7*cddU5`rqBYIX!vv?B&mNN!Y(@6}^on zf#=^){7J8)@4neTC2#!ky`QFIAz}f9kk4p)75L6J9Xrx(KqoVcel$j2VNDx>JuiRVeK&>FGWEp zy~>N?#YOBEuDQZsZ0Wc`8KR#cdr%!3*1y*F;T9aLmhtHE&-*g;aQ7ijk)gx;5d@OE zw+BsLa_!Bs<2bp+f=^VGHB_ zvEW~4`_fFZAiK!WsiwrmIK7nw)*L1G;rC*ukuQ1AzidZM!g4 zAX?Cfu?yxwMZUXn`+gga#Y)vDtIwuit)8tSwN|J6#wY)Sn0^JS{3Ug^T;NwhZ(-6@r-2;ifUyH0+Y+P_p6it(KoNkk*t$Q?sg8;>e|Y&M-|H5P*vH*6|?e{+*|*5 zeD^O?{rLRZPjS8jS}d4}zf?oIl_-_O4ancLtR_vg@scSAi~!?}W1FlCVFNSJqTI{t zxdvOrARXZ_?5!s%oxkRw(~M!(SQ-S75LQy8aQUFTxq@T*HX7oTe_AU<%4vj9ykS=jpfB_nyrF}egFQQ_mBTOCQq#j&p`2YkEaZ?f9Vjy+VIECzzTu94o zlm)=zbLMRwF;c*BaoEj!tot|m6{w4NC!Ve1_;`_b_z5Nah{rq=?s){ zwE%GuISjMOSg6rkUwgOwY$mxiv4T++oRAeDHe{q|W;9Pa!UCIaJl^F+$|X%s#%w0b zR&~e1#OW>$))b(g{4WB^-rVajRyE5P=Uz?FI~BGv_CTgf+dJe8t*u_u zXN(2R?hJ@yJU)Zz(N6EmjceCd)=0;JOYz&MH*Tz4A=>@O2gYC1z}W^Z2pOfT?4!u zAc3vsRZ;Ol?;$wU&@_-b3E6W}q1gGI&_%BasjLyNpRk2E=`8Rja{`BkFGt8zFw9-91 zLFxeALNPOw5V&T#I)Iq|>#x<(&_n2k1pl~Wo*j415uLkl1=AfBOIZY0d*n8c#|Qg( zqLGI#bcf~I+ir)frDreU-h|Z#ZP}O`Iw)D*Cv+jA;g%AbyqYa;2#t189@98wkGxGn>GGn|f<8&OtG5AfkrtQ{HG19a}ZAXgc7AOZ&Ip~+GdQz4}YP7&qn}Y{3l$(8F}&+qzEcoqLG{Jz*t~fmqNvko$R<4 zuEyHL^|QVg6HU{Qut?=uJIc=HdWP#V!$HD&Xibp&rOG6JfVNRzokD=Xq^O~~UQj;S8itcTe}gZ38GXQ6IxOuKeDMTh_n3b57|Dg>NK z9q>X58B{7n6MZN|z!S${a7sdjBibJ=r}rklT714r$e zy)&3r?uBw^ZX9f7$=bw@YM;lkW zq=N89PBkvNHyeTnwv+W12(rT|CD&D*5Z^bNS-W@R=SJgMNh5w z*dt$3j4=^|DM(E)@kM@iraL{8|xQ;W0@leDr3&mX%nobQ5Ls4W(uV#z#@$R|- zjdP9^`BuIW)Sej_iz$2Ze+Z|)s^&X+7(fcl)_MeUr|xlADH1|mws7$5l$}x<|X1rmPbVBoI&(7J7>?-I0U66M^jb zoFlm1dN)q)+Oqp{yXZ1}Y#nobhH}9}LyT|4k6jl@rO}DT#hzbq9$51w=Fz-zh#P2q zW)*-MEtHK#FuXN6e@#aPg3Pcu;Xk;ionzttzWX%%RG`Uc{j$_p!$-9iR1^DwBd}_i zmSh|<7Y^lJ>=(?(_R&Rjv=GRw{N~b^NkXc70VLeruM>6C!dL?Us8!+uYl&QHQ&*bVE|zMD)oUhZ=;m&@Y%zdYe*;OsZAPOks#_3`S) z*N>mz%s8iFSmc^MSe-t8Go$A05mcPspRlEyC}R=J;9TqlC;9`mr0FsyOVbG;ZZskM zu#)A6UrbK^Zzucfe-3ogi^L{CJs1H{D8uylX{Ql$3SJ z!eRoV;(ApDZyT1y;1WE`88tSG_aT|`(|bF+U^*%8Z{ojfm)#VbKozodC3t*qebd$9 zdTB*7zSt(<$|_B-E%b))Ddcb%5s;2ItWH&YfU38lcle4HSP(`?p$QKiNPJA(VvN#C zjDjjX5SlUn3^2RK5YZYDTV7W|?iZSsrUM6SKOQg!6)!s@>RKD8`>4lFA?l%|&&hTryWcDpHD&J@ z9B*FAx}Cy8_Xu1ZB07K*KjTc2d{zuE#Oo0cndP*r2;-l`gwX-1!wsA}?bnC@0$Lwo zj4-NZw|mCto^>-HqM+qWTyB>qN(;3tRi70yyj1b(DEVDydGoP%a@OIJYxEin$_-+u znT8mx2R3Kn-1KMxV$?Vga?p^<={6SD7h|3d8@JQgKmwCS1LZ4rB&uU^4F@EgNj7s1+UoAs{rhpBgW*=@pOF4F_sI8!KxQbQ z)*x0FNl@m+8*XU`%9jO!K0rw;I3icW&P0GS@2w$8yJQhf4v4$85DXiE>Ns`DxUS^G zUG)F4_io*FU00r;s@N(FzI@e0_`^~l1UI!p?h`slL z?1#1OBY-&jviAJX`eBeswC}Y@-P`mX_)$pc8zes2COsGDqqf-Moa-G?INAZu7p`blH|Hpn`k{1xk`;@v4$n6a$gW2Jg^ z0kYymk!Xdsiff)Gs6-K8gN<`F`Kv_i@JAfmkAED7L3n_iwS_q^D9A!zw{f<33b$}1 zlfR-hd>-@P5S>qRd}6L$=kw?2n-5e?=yEOJ)9Kl(%qC<4qxYK=xFEf%$t|bIJS9x_ zWVi6a8MTuTE8>(;!w;!z*vW%`OH{)hw^%Wc*X8mLsd}5q+9E{xE#vsBh2(_yMt%Aw zYG`BnOd_HwTNa?U87p)~=t^G6q=G?dOmIWjC$&!Bf$hNriJP=-me)Fa-TC`B(swbK zE0ph8Huk~v)AUCs4m0G-Cfvh`be9+^3fqsV|2x*PuKVVSDE76_g;GG z{loLK=M+T0{{E$}c7OI{`+$7X`tHH}u@*N?%AU=?WMSQ--?2Ike?wpo)$~Wd38Wt zcefhOUBB}2&3MM#H7vO?;ksZ^aM=1{E51n<$J|!(H9z=tWAi2_QJqP?WOS-VSSfqQ zGBr-!h9ek%M33`W4&VbeJ9{)`2{vN|zU2)u`Mg`FKP*k~YUX70Xw9a;gJI&8x+G7< z@7aF9%2@bHnB@7o#VqpeaO=jO0av=Uj-w6IV9M=Cc+uAuNzbSa!KP~cOym6C2PLJK zNyZ*zu1gp1{OQ)a>sP^agjSJJO{)Z>IzYv={8(K%mck@aZ-Vl|q_^*m5 zXzgQ6%Ml2{B(g|(vxQn535snReV*<{7s|mSRst?veB3A{0Ckz;mc*pdot1r!J@Z~? z&V1n7l4TY^kqyQ_a^8t$osBQyP#huth_-p-xucmOoDXtBHQ^9!T$U8pR5S5xW(ve9 z_!D1-JOWREl^MBW9PT$t6)noU$D&m{-u|CUJoEEXQOtfYEP{68GIgm72uI6FvX=6J z9DoIKN{}yNDCRnUN(IRY&nU~~Ms}Yk(ynA7E4V1~-0qv6Z_z!C+gg>%J{9dmGr~YP zGp-VX?#vWC@lQ%RECDTCY`L;S8YC7>PBr5XO_QSxSWs{OU&}fFc?8|C)|Idix*kXg z-SUqg87k8MY)wo@fv+^m<~3HjcNRC>|KA+ zLR4tfjma=t61hU_$X9Yt-R;<>K2!ouEJMD{iYmF~B1Ics9-TOJgGVY=CL2`yAHt(kg@n8P0edQNYsxXI3y%erC_=+7R zQdudMY@|g9E#c%5o=4tQ!4Hn?-YVi>Z+O)i1&kLTL1zFr5S0j3BF&Y=HdcyHD`~9n z{~uEG#t_y12%{VyQ=LLoWnB-mc3e!aZ?wSMbe0;6&TtNm@qSAT8N!- zcp4Y5i>xij!D$ofq}>99D`f2DmCNQdEumZsq z+SH*&Sm~V0;Bh9CnJcRLhQJGtRrQmq*W?&+XF^AoFV7K$lFA+(6H$(>x8%_{yy~<8G=A)jXi25vW6`nNZu1+f>?k z?BrBIWIN$lDICDb4geWVHujA3zKCPIt#av>p4eo{T?%iyfy-B`@I1cj-pT3EZXIU9R=n>+x;;C#S+<-)~;rxA699 z@(<7NdPTS=sY>EwRMvBz88`Es`pAW+oGYH5L1?HGIsWuBPJ#>VA(QN7ZzTA6E6$W+IUs4XBbfu zDltjN+QA?CYKepOM2(efV)WI$sN5r7PtH2@_LFmyb5t3+7BAi5pckj3m+w7&q_`vt z*ge&|JQvf$fF}PS#0xQ{e*zm6Jv6*sQrC=}{VA*>WaA~rOwJ`QH9|;V$HB#z4&Q~$ znj_sk?~QW>V5dm7eQ@>EPil_#5jRo1-Wd7s~G4`csLHOy1}U=|3n_J2JDuW)rsO zn*RVwQI`9E)E++zcT-=_Nq)86R(lhxt)wxtGR+1_kh6A}I(sYL!eWk&aW2?TC*1|+ zoFYGtVnp_%Y>UTS+$&dK3VqE>%doNRZCE%uv(i!*$^B6dcI>Z!F_?3JQr?N)e8{(G zgknli>IK3**k*Y-HLpXf&CG-h;c3FSp?Phr@QlbkGoi#*Q0N--lk{V7S@Js+`_3v( z_tVS^pFxwTIcC;Vne6|Kl>8S&pXXc*meAxe#dSDLwVPYmwEwhdhcoP-W%ejbTP`ij zYfa9DCb+$G3pJyNaS}`%jQcf?W@z8MWMHmtREXkRm^WT1kLG=} z7zD)`M?K2?m}v>z4Fajb*QVDa&6{FIg-%H{*$9CAME*BX6~Rc0@M4JZvm#*~3*B0e zfEd)1&>Hw8skwon)Vo`U&To`g3o02i5}%Hu6{N#8HQwP4iI5S$93?@S7n1SYFbczfsP(>t-38Us`C@ zjG?|mUww@Q&O2Ba7hM8A(3i!?dw&iP$pNX-A;c#{rD-a+E>$Wr`K+5 zUHz1~32#rYY<&9h&o)2#_~QBpH#gU>Y<#?R^~#6qSKs@Lvu^D6`8WY~d_q)D_e8N6gVo9p`{O#OPxmbNDzi)B=4X09A z8(DH*_mvks^n$N+A|E@Ws)U>5Kgmr`KkX8E@3FDT^k&{4aXQ&Bbr=#6LyuIt>WDkW zS9QeEP!&uT9Vw)Xs)>19+9||{d2^!m1OzIW3MIoo^Hg9@(1YU}Kr}^;l9_f*}`O!KQS0;A|LwMyL znpXYg8-J(*aeu;S0z%eU=$m%z6jE>I9XcijLSBFR0ktSR0_rpvQ|Rbj%5uLn9it?9 zSxvJ^IaAcpp_j_U?sG{sDYRb%&b*Z@lJdk0)1Q(JH|H8Xn0O36=HuRV@m{bBR)-=xAu6@RjNo_(ZhNySfei1Gb3OSJ~jn z$>v~pNx?usbRPq@?*#cGlvTlpMu}W)V1p@4W*>Eum+pbl%--T7U=vE-U+IT=+?1~H zDt0K8M)Ji|nMD71L3_ZJ8H+#+5@aDWiINpb8gw+?rKf4Fb9uq1>fvX7keCJ6(Rq(? zx%_~8WzvTINAOVzvg2fzR6-G@UI|`IuVm*NB;f5yZk{V6NZ--rA?Gs!;u;({eS-j< zsJLDqriaWgIFQ&VE)Qa_?2BfX=JfE z%5=ZPGkQ zR6|Hq2hz1X2kyx0Xs9AaiS&WUm0>BW?9fp48EHitEzIH&YLQXQ^eJKN0-?=tccsXQ z`Vui>GZhq8SvXZ?n|gpl^+!OJpB)OU10!lMdH-d%UZ^@My-}iuTSD5>~>wJE_vav>lp`Wd9uB&A!z~#OsmifI+1U|Qa0<8f-4;XEV zc-?89*Gf(AMYY{1$|gJnVs*TmgQv{&ed+Jx%|5aowpedJtKg*-^%96 z%6oJ!ymy8FY<_V4nEe17B9MAjTOl206uB4rq=@v_y zr|Mns#uJ4_q5m2~eN`A+wpn~Ik2H93P6lB;>h!o2t+c!1VY?8uPgA=J@( z^Hy6IrXT+~UA~61XWrlVA{rE8N=TN9G_UzK`i=o?fyM6jmo%`F49F*RRm{nmlq~cq zY4|~GjW2r>MYcOi7Yi>15=?M*4?_O9KRFYlOmVg?YcAnRaZhsaJ-Xy>$^wv`p(9}6ol-=rI*-4tRm0DT67 z7*3`uca5^e z;RLSG3S}+9oE%Qflk{0(7Ve7Q?OvY3B!u-jpl?Z4v9V{FF9^?^w({U9nmjG{xJV^3 z^xxCQyg{wwgPdHAx;&jVU=S|%d8tAN4bu&|^)Ie(rcIJk5!z!Z%ZQ*hw&` zEuu`#i}SwvYHnkKp>J(z-NFsbKf`4?MCO^Cp z*N)<1pUVihV^Q^z%|%7+l83Rm3|ny1{9v27@ft5OXTNyh3h5EQx`v!Tuj>g=adx+cIcA0v`g>`$wsgW zu|Pe35c~r(I>egyPbGpf9#@MMU6Q0K<+RaRn0yv2iTlAf1lG_&S2!-VWE^b7)DDwt zv87rHlp{%tcaUBd`llsdh_*;jIPn>po^`xi&qUCppYc$>nYYwEB%G z(IRG4U?NbSbd=0xc;7bW)k3VW$*JWbT`(thK%cmiE}L%0JuF4w#iq#l0`uQ+=Uq{5 z{>bGK(sBT{SO)NsWSma&d%y^>aY}F@PP04;seXnM3vUs@ z-nQ4*ryVA>Q~?1*DwNu@it(Uo)eli!r|T{pT&adb!nCQ}Azk$6f`J>H{2#$&Pf z%ms7dxFS3$;a`@1B=bj|+NrNroD$ZIl$quCnBYiUXW0T)V~j~&X_G|8h*BcB&M%cD zQBA?#$grUT%r*rCoj4was-eDa#jO0Jw8(|Y(tJXH5Saori5fg@q3)f|6D(!mOfIBmD_c zSho$K%om#I-N%s-`c`6y+&R9)J+GF(ce58ouLR`OJ>RP$QqJFZcE zVx(mIcqh2W-&K~*$aSJ$1O@ylWq_8^+!ai`mX%*)u8=d?$}*xBNbO^hz#SU25$q~`(7the^^q|zdcXS^xF=`(`Dq`Ih}xLa0d@lpn%Tn$1@jPpgKij#Rb zp;x6mTw9%jc-S1CVaw&~X2GU+iPH>mIIgkANf3kdBPo#^7V1yI9o*cKb^L?=As zB0bL%dH4a@eld2y=u)Z0f@imj7spJcyZYXDwhx{}Wj9T&WpF=y`_iTL$<+wXb<`BH zAW_yosrnL~2WH_yd!Ah+t@I;B6&(P3bgx9L;yR=7Ka7!_v^rl{8ZxcSu=URT{yy!t zq5dc7*{BGdxtN*=hev--($pbXc}b%1M{u;s%fwDE31a7zZHzCX3=F(YfdeS+2!VH*`U{?sKEI8#wT0QF>mO` zz;Jf%VApA$sO$bmMLoi6?;#K7IjZ1^>PR*$>R}Py1(PH$4s8}TbmyB`py9!qjiA-o zcKR*56%qOdh0{C5zY~|)rWh0KT)UD84UHQ87N}9VEo)x&SoKUg^^wLH^*2_rgbgyG z?$J)&SuS1-uF6l(14`}b-7AE)mXY0Xiz1l{z&ad?sjU0q-(Z#0<<{LU9&NL4C@j95 z#P$>_CDkx*Age7fPd9X!AlAb#jq8AV4GfXN7dX^wztNR^IsZSgf zFVz{IY$hN9pQ4{2TK?XcWS0nq*}~2j!`WmMP?JnRN^&ul&^EEF9vq}?^oECZQQ~6o zN?zo`&3U5|^UPfk0`5VLb61@S9cgSYI)qtN2Lv}z!S+wuqtiF0KMj4N)62~>DHYy1 z!jF!qqaF$`yc*~wPprE+Gne54+<)HCI4ztjc~trmwrA+#a>wTkLB3WqOg3FHiBj-MAOH&5p3;&IbrhTI_ ziTE2hA*XzmhghZ{`qEOZ+pJB z3H*O?etUh+{$oicVea*S7@2PYODsMS^9%cJ$As|Y)aHeI4$g0`Z>-~7K~0y{*S0eG z>?|$byq}qH6C$BrlN$~RTrfHb&Sl*Ko`{5Pr)dw{#3O8r2C1{riu#7M%HN>k;*zoH+GgTtDxld4=2dcY5`>Sdszfd=hZqm@A z5hgH&R@EIi^5Ck@gSYC&9pRKi=HSlkdFW=#ZAInc-fA$+OHo-pL=*qMzk>vaJWd=M zhCf1V32S}X^T{FWWu-wO+H_3NJxQ}KV~*5jbRTghGYWD4R1@c6gQ~@jK6jB{WPlV& zNV_CvOrEeKEG1sB1{i6=GX==mQr9f&8zz5e1A{;&~kPMuQ!Fs%6e*)M3}eK?N}L@0TF|NfWT54`-)djLJE zYVpBh+(CRkaWr-9$81zcJ?{!Mwa1BBl%Ga^74opSr99v|r&03FHcNqL@dz#p-!t!+ z(qWoILK;}t^uZQZN5JJZ%a1CxCiaBH`@Z8oe9}X=V^!N8I$K+C@BXuA=L|UAWLeSG zSR(!H{5Giv(g9zgZJ)i|8VLcBRsk>B7hCxEGeaY3M13afPH{Ora!F2+6m%B)E5lkI zb85I)sz9EbE{?yD@d~;hhHt}gFD*v7pteyG5r7A^4_~nJjg8^F8Bag_jV6qFc+dN4 z@A+4-20UW>G>vOPSw#HUO-y8iz_Jf--X)wi?>#HsC3ZA_f#M5&ptk$+F%FErG`ayn zPYZu{F(7)N3s6f{Mc2zEf1l`)SM{9|-v2-xVjP~UFrnly*)X5nbXq}zQwhU_so#{KKMd%Pt4eW#ezaX2yG^-%a|x9s7@1l zGL@4BW~JT;m{@9;2Rgjs*lpy{oU3ISpDk=>yw?lTpAAduzrs&Su4LwQLmdyc$EdwSY(T zHAl*|cxWA8!6Avw=sXAFV4+B{voz#&Tc0Scq!lM+%DfIGYB7Zc+5KC{Z_$l(7u{MV z-Hv4IBLw{^|J=pccyiR@WF%J?At%Jkgn{qk%goR`xt_s43}tXh!{1CcKBsR&D-?~e zs9lYa{DbM|m~pr6 z%;ivI#Z1DFD#kQS=nC(qt_AL5i{?RW@8mET=Hf%s%6#k7O&6j;e_xn>bdMVm@5ST% z~So!}9C70B;a?;hhki^0phNq8hw^DnEVm5e`?PYH#sBJjN-P`hX7f!Qk5?;EB%tEiX zUbr-eFs^7cflb#7Tdv=?Zz87YWKQ#2yA7QkPBK^@T7|_b6ZIl%tMBgr9os;z#d<0? zcxpsS%m%g)6cbqwo-&E;>^E)~5)FuFz0p~^_P@D!(dExDY~;>R5@)~pn#j%tZ~qN% zd6TZ3&8<&vzC3;Qzgs3bE#il=<@YiPfXTNHp1wT&;umX|)?a@eef|XXYb)1$^2VEM zEbJMLRd8;Ra_ls&KijZG$O#F^nF+2jWxl^pB9LMIW^x`ZvqSw+k#@@-)-6xX$aI@L za(3`7Jqv_3=A+P0%JW$|5g7zf{Th6};U(N`cwGEg>e45Jv!Mx2GK@9nYE+u77{zaE=2L8O=>=?GXMw{T=EdX{gf?+oV(1|lEWtWoqe4B zoJLpd!*ZO>bF7nO6-x21hin}YF9X)xBpCyXl^{gcPSpo_GHERo)N$ev(v7G$qoRkZ$k!-H;AvV|d+4wL^qb-`miRxn1qaqt6k2ZB3eEXjyjG^0SKOvmcLJSk)b%j6rS^VJ<;1v8&8^k6-T+JKUz&k~W% zW)nm-F+}qIu$#2tl6uSSo8@&w_XGjbdxub@f7_^x`T9vT?ZMxoCwr!pb{ZKrPQ6gP znOZQ5TNIdrwL8vEE|b|Pu8l-ysMA@RZ+upVV9t7=sT}}3x(Faxl8rRHTY(wjfs&E0@`D)s=uNCHIwtCIW~hw(A&INi2u59l&53l} zWi0_xc23J)8FaLYFn#0o*RNlmp2xtGnTE8)R9ZDaHRaFC+|uB?%M=bPHPc=>XQKk;&937xA}@89|}4da%AfkqQ6N_g;F5mVCa5>tW$TIo?`u6lAGA%5@6e300fIA=^YBW;l4h3zPR)UUjfO}-MxJ7G*wX!P)q96=Vw&1w; zDcra}IsYClD>qrTo|R(mzmlU5ddA_AT#kMJvisri?sw7_kn!-k<;e6Z(IRO1#0wL6 zK{$TEh{`~Arrv?bA(=g918kvvB#LZJvL`Krol^joSb_rGY@bNfmbF5Y5n;mewlhAs zKAO5p-4ic>1p(8`7cI||oTCey7zcc0Rp6;Vj9MAXt0NAso=$z6-@dn(s+OC?Blo78 zxG^8^QI0-y<_s3~Rn9we<~=5!&eza}8(Y9qBdBFpi(Ef4a`rO?$V_vL_yIb+&uW zF~r>edrHWEi-f$)niMHHmf@DWoiE~IB6&G&5-9Y`yH``OpeU!@lSe|}4t}^+ZNk0M zR;{vaXh_>ejd)ojMa$~mWjR=ZD6Er=tcS(#7Mw&5^k^B2cMJB^*PCgAN_5Zn;Tt_m z8y(6!=9DKXL|{;N?Oh3L!3|4#B}NMkL6SGH*Mxh? zp|$;uI^=_x0hFyk@~0AsldnW5qpOSJ#^vMYnZp^xChI0Vyvr@i*1vW|F38aSzp0%5 z_1}#>zoN4zcr1xw_;WR<6EzNE9ULjG4r@((W&ED%;mp0*hJNYG3zO^HIE5En!7=+7 zi9a$gsGN#hM4*t?$mcr&s8tNDAgg{rh~$8|02f0doUEmhtk#j>FzBTXfi;F=Q6^GqIB!0?{D2)i^4~FIoXs^$;=vI{pgf{iPwe^$P2nm zzKZqGLwOsXkTYxbo%Ed7umgYTimGWlHq0^pi#;58rQWBb3{)o94`&dl8)qUDG);Mm z$IbNP@PGe=vtFJ4;_x4*Y>G7fv-6KHJb9(N+6`!^&rt8uM_1Y|y~je>ah%6VB3UuR zkonj2Nac|>n9!!Gu5JOKddtH@Iy8vq4mP~6vf!I5^HL;QxLX|=Bc7Do^>~%VyZvf<1B!aT>p@xA``fADT$--& z?2G)%<9vwHb14j;ob{p;84#zW|9{(o^sDLRcnJnu zq~n;M-?B_L=3##irK_|Wi6EGGO>S~=bcnpc`PVPJt}ye{_5Jf-NoRBz-_y^%-tMjq80ztd4&%A>lJM|CNW>QWk2 z$3@Rz^~@i(Fj(JQ*#G+)`tSb}7Vo@<|6@lxS(|@)asT!C!`HumY5!;J$%I$8{b+r6 zcJI;p{Nere+dHhb%!--seEZJ1cg}55_eyI^l5tHwMdWFX@$y8;`$VT&F`R>(wt`Qo zBx`BIQ|!JkH+{}&`pU;X;SLL!Qg_8CaA4XC#KQ8ook zlh?HF`o-l5j*yW=Xj-CY-#>MU=9BRZ{2M_?S}?U-oV?F$St&qruY4+*cAPVd8T=t; zrP_GL>XWX?q~}Z+5bro!&s(B7GlmmV=a_ej$)3p_>2eEd-? zGvS?OIf~Cj^!FfbtCSNNJO$E904upO@)%CW^WM1&(QOjW!F=yryZ%XPiKh}uj?!WR zv>*XZ_Ra3L>??6Y98cU6Rz`XHkOjmnjEsPahWJzj%BZN<8?X4Qz~cAS>UP+ahZ@6J*-CGV}i`LD;KVQP_Q* zr-M5~#C99n;b4FdC{W&K^&}D>icxBGqK-r=O=d8jAW0LezPK9*I}?E@faDk99Dva$%Ol9I;#*iW4SaJO{D!V2ML1tYH$ zX-%l9I40IfH;QmBacSlo=hJSp;-7I=5%9dgR#)PM;8{Q^mzgj1bs;^&W%cj-?r)NY z5@eJlsyQ>Q!3ab)brjSb4S3V8(dBFTJ8Hl#%ocj@HdP>2L))g9!0G4Sx#7(2SB*Mf zz=v`QOKC@{6cR{uP9u~O{d{R8A@~Q3 zcnibFToX$UY^~@j3o@g1L_1iB8BrXiHg6k-Q=lTmM!F)2oYUvzi+0!Os8;ALUFXHp zyubvhb1Dt-0^;1MK*H3WwNRxD@~XvMLwA^va>WC-jN4~}A{AkWE4QI98J2Nsd~}qQ zP04_+q1R5ZmLz8QZ%;q0K2f2H2 zBEZz<)+PR~5WriSc$j8RHyE0n)hmv?pS^~^f=z#u_;l9|kGGIL zXD@hrZ$rwct4u+{vy#9$1m_l&Wl8vxyNil@RYo{ZP>vkF8P`pKaPB6L*`)ZutO4<~ zFDBsg28wn-chx}T`A=$K$CM| zi7_|xf@B6L1;6AQa*=;cYs83{6X9c@1D?$zIt{QO`*|}W#}%lB2`?-ViwcoFsy=dB zH$u09MF{s%t%?1WRa+Bc)Ye6~UnyILe;CVT!4tc$eMW0x3 zqi}8TSOKEEPpmPXKrGqa7--}vQ)8S=X3gF^Ie4~KhzYej5AYLWCzKREp4V8Se)$7FY2&eho$tlO>RVsA=})cmW9 zmtii?O?EG-9kD>WJV*=@#@Io{T8%Pu93b4d0teICKgJmNWf!CQRZ2Rgb z>mSL;I^TQTnbBVJcXR|Mjvk{}+sx-a(+ zTjPCqo`oTFil)D{EhTkf{WhN#t($30U4ssW7)v}Rx8nZ6Z>DeCe~z~HHfpKNConP1 zu4b$md-gAnvKKeo#AIQSu$m_QV-3uD){M>JFnHei)?<9q)JMNmi+B7hVSxv9 z@P%U@M^wO&i&BfAuy5b8#@jOc4lZW>7D3cKTlhn=JIIj4N{d^-?Gpas)4HEajM*rK z5}EOE3_$zz&KA7Eh70%%re{^Ca!XnwrH;hVO>quYPi$KxxpNt~lk`nZNLst_FIe%Q z(>`Y%DWt^fe&)|wIZ`w}8tzm8o-%OuVhDa4e% zAb`xlJW2|dTc#Z0%)4&3qDlabpd*!~(8qBfxHoRHcPkWZ$vu!?iXN6Q9Yjc})XN>J z>t5C}4D;a_P_sDsCQM>6qL{eFP`T(X^SM>bDNNfy10SJ)FRn%;zI(nYussBwB3H-{ z-i&>8^q|q_X?u$hW6c|?Vtd9s#Sf!c7EMwmwNqn+%$rDnL-Ai_!GHA_d$_|TsCgYn z%U)U05<+`=q@WQDYmS)=yeGx7AhC;?aCHh#OMpV`NZ?10@!4y1tPsA%a=iJksKpdL zy2lakrIzDu@eZKa-0aI@ifLAvA(0A>PH3FUt+w8@IgX|#{DJa zVILE+BEnlfm;Xm#5$68_RrtNs;}+fu6>icSkAxwVEXn{w9em6$#Xz4;Yu@9^E!1hU zlJf~}BjIMBX62Y~6ppM`!F`C#1cpcd&bL>bw@cScsFBjBlLQ-m7S1Z#BmO|tY1AK4 zDb!cmS&fV6CbATffpiC1g2&K-vHCTqC68T=b~hZV$X`{19r;2)v9Tqb6DS#}xvcyb z8i0ckNIPv-g}RYiumrz0rTrDYuo*?=L(B6P5$QYfazG71@>ijP+25a9AKsF`Je}Dq&I9ugR0miHhi5kX2F0lXKz( zQ~BoUGXMKkv=5m2v`-=Xys51v{CG!slt>k@P}Oi)_?dE)U6F~#3vIfDX~9!;F6%Bj z?=jEDEfJZD)nPGFlT}AC@vxD#Y7%l-1~&!?GmfmJWK7&B`Z8kXHfeejG%{z-J!`$+ z`F4w2+LaN#Ogy4w6MP|jO#!!UkmwBm1k=hXIFQ;Pex^>by6_hFOCB8W84MgjC;Wth z4N8_h_|OqC9mJGI$|x5nJ~3d@RgQ1j9r!*tEt%!oiyg2-k1IS^&JTOe{O}$BRlOCw zUDz;j7qh8j1oqV?1xh)P7kq3bmv>@w62%mCX1r%ilOYWmH5{ItyBuWcoLCd6XvG)3 zxQ5D}6xjW;L|6JkGryHc%cD`al-2Am`wjC)uCP0#1R^0}tqc|Pv!pX^zvE>=QArWd%W!^lp?7QY{tR;}WT)G20^+;qzwDz;C;R`F)zZJQ%l`faYOSU0qukgAg@xmW z^i$u3h#ze~xU;=?_rYV9Wq9;16*fofq8j>>DfQ%ETrVOm;u3R=os}0Z9pPn4U=hfd zg;+gT*^JViPK$aA+h;89N=z6_CKe$lc!j2Y*u5?J0*s0tI=vI}8{R~yW3ugf?1`#8 zQc1GaGIo>Xe0R`@E^bX%TD1lajvXHN|82?e-=w`WKZ&Zw<~<5KMAR&H2bgn41_!}6 zDKcbXXdObACr97@5(mtAh7ml&5vf?k)96-p{v2A3I?1Nyl`;}$<(~ZPnL=4^rUQ4#I*DDNu@gUh9T7@nJ9Mjyucy24PEJmZS|&p6>e zs}s{IWx$DB5nvKn2%Oedlm0$3Z0!urPWOm^s;)dSb+g%9cs?z-!&kBQuoZo-s;6Z(Zl?!s? zDEuENlUfg@pBZ>-i`!`j?jTW-$xah%0>>19Wp&|GZ|e?j!z17Lelc=4etWR}m$I#| zYm%FpMafUnq!|0b0mxs(O#9RBiQxsm&%<5ei0ipyuplK8);acmF(cI1mJ9MQ%ezZK zmTtLohu0*B;iF{Yv|Gf&I32dJK@7G~Da|c)Ery7I!Wp=oRzzShJ5OKU|96y;Z_r$^ zTEP1xbJQ!JZ||Q?AuUD;!x)|AuC2!Ac<X6KQ)Yx0c`q$w7{eGTg2^ptnH){p z5!fX+<(kQyheINxh81Pje0H^?h9$cP-uBY69a;oZ)8DN;_=Y!jZm~!!jra)l zoQ-(?T@mZhS^rH|@jaZOP0|pc`*RgwG4$ zC?MI@>KVI+<`x?m44YGrEf1@ABFj;O|Oi;aYj#I~QMneG>Diu#b`THdSim zmG8`rZ`k#pN2UIY&VBfRRqLcIf0AwpQ7{gCSbA{~mKXxk0U<2Ox{%`(Rxbe;t+I~d zJ$9_MJDam6H&ah_EdRUjI_Sx}Pmvz;OJEO17`A73X9u<74R)UHu-unpD_L*LlrRLD ziRhpp_sq?)$9vNcKD~?t#Vj#%&oEe+*jz{p!li^9G-l6l2E28T4HjJz!JVjt_rSG& zowN#Ja-$m0Mg=&QvR_wT(+=m8E!MCLmdwahg`V!Fc;^_x_lax~ueNYU2&ihrwwSTN zqmM;9h$e8{!gr!Y8ch#LwjaEb*(wNPRXPUqVEY!EZv1;P`hU$N^o_``?x9!yIB#5u zoNY51UqXNO5x&KP9rm(en9h800wHq2V!L=x<<6iMg0BgpBjQQ@N6O3_?Cuo{7kgP&mTWRX`+{LQsEJ8erUpMqF9w3?wF&Asm#c~ zC{`^!UL_PQuj+G{6608Zv2A>uc)WX*4J>8VX`(L_z_A&`?F$A)Ca!8#5X#lQy}!7T&!( zCL685=X2j0ZZ)rCGadwAm}2;L%p<{q9=w(oE<$EM+aipO+oo(egDMIPAE894uOvxk zG@;h#(~ZlY{Nk!s^zzk@KVbtQb3Z}y3BD5B1gJXGA0T}a(e1nI(@R7gtW@KC6|Qxk zUS8vKyBf-#z3@fYi1}A&T;}RTgG)$xUIXsklQ@Yeb(Z!7E<>GUTY zh&0ZH>1UhYe}e$!@jfkntP17)Wd8KllqGNEH#l$O%9X2|o3H)i+UCY<*EcrV&za4c z--{(x9%;|dJ6|bp(CGdJG1E|)Pw8IsN!i-UF(p~GZrcbJA(Nu^mg{#t0IBi~HsxC?;Wu<*5GvA)l z*=cDfmI+E=>T+SsvA*kJt7P*-6)?jMm#Aaq!GkZi|8kv$`sY8p|K)srejh_TnY<^R zuj~;EZL{l%vq4UDWcBvLv<)mRFppi)fYy9?8k_HKU>E^3mCQ+K)ZL$LQqDF~kl-Rt0_u6-+?$2+YP~RwY4=ney?= zu45Ao`P6BO7-7}{q|cEn&X@Y)-5nOg#o=@lC~^f|Y3}Zh%g)@oultQ_;Y$I3x&hfj z9}!Fe?_MATXXA659z5GseapibjmFZe9~qJIgh%w9URrzWbySU6_SVHUe5hA`63sGN%{bQu zfn2gP6?J1+7hm_xx8RWA_>QE~*VB-c@Zl#RMiFfwj3Ldgrk(noK9lMI}dlnNeolpnx# z4|k$a(_N5Ploogt(ZjSH(BynPIW`p}x9)B`v6&7PIM@CQfr4sjdHI_beiSv$J7Ou(1B#OOQgBK ztgw~vb=6@^W_X?~&zqJvAh(1vwq4t$`aANwH%lZ`7SmE7Dn}E06Vg2FJp5q9Pm(rT zP%JV)82x@7$9`+)q=PaItn~0ucu|?TV0feltQ5+};Bm++H7i-jq ztP4KY9e)#Q1kAC!S`xWO_wKWi-X1?}t43Gq$fpeSL$`Uule^7=*F5c^>nH$Zd7wLY zKtc=mncH`;m3TZ!!SJ_mxF;D1;u@!%I`dx<@Hd@Y1vvrcgR(4^DckApye2w^R(hV3 zR20`T`rA}B84%3u6adGcezoAB?%BUjjH3iGcpo#VwI~0oR4#185)NAm5$cE;BNuB} z%a{Y=t!!Fke6{^~uZVxB@+0ia`CC}ufyw5HxeF&6<+)z-fq?}>G0PDyOEw#jFH1I< zrSa=CghJq@L#di>DZ6Y;9wyVQ8wjQD-2aC0B%%HJHX(%_+F{Kv5Qw7oZur7*uME;J|sF4w?I)n&nBds+Fe|N?q@syNGHX=%} zykeT)oA#b0JCgW;ZgckNPB|abZ9G~WLS4&Pxy>#~4f*SCQ3Hh=t(atzt71b6BG+J| zPiwSPuh?TRgR~Ylt5s9ZA(RbfrjOQO3!0f>;OUuquY`@SY=8tHRC@F#r8p_E(=+Ck z!ef|bUx&RB85>i1b6))jfG4n7mMYKHfzMN5`x8!?#KdL?q5%NL8{r zmaxd!S(Wlnox=s^loc$a{3dKk%ykY471^&mTv8f6v{8Pq#tfu#c#DcIo0Iw+vWEBP zY4Q>E_mEP$QmjOquOdR_$tk(Oja*Y>fxs@vgR9bcr{u(95#H>Ux+GA3`_6q6FgcHB zuoP+55@r4Yk1C~s>Brk!Y=WJvJsKdINs?+LN+C-`no%NT-~3|MkMq}_{(_W6?{kU3aiEAjk}f7wY3Zy z+I{4OoX`#y)A36^R)MTEgZhb~V_~C6QtcKcugXAQm(6gV7Y`+u05rE#BXuf-AU5$l z+${#F%HG_&5dE5mLY2sRG969}Lr7uR$CdKjk(kUAvI{p+R1|;CET%Xv`Erj`Sm{nB zw{K1&I4F1G03yqMylp+uCd@Rz*&aS+N{7cyLMyZLQsTAhwim85S4hYl&cuQw=y9m< zsQJ6eq|1}A2C(jw^A=*6rEpu-SyaM(%lbxeTl7j+Zz6_5?)MmP0%DU2B2Vv6$}?~Q z1W}A0le106^6|s6Ia#Xs@jy0z&g^Y6+TrZBupa$CG(ZY_S`snsD&4c&M z<<>c%_Oj44cvD*J{|6>ru2J!zSP&-Snwlu8BaAXd={~Moj41NbsZtaf5~{NgV_{jC zDKrX%!@2*={hD)^<-5uN=`Z|cIx%>Oa*Z(4RhL%Bkt0L9!fWnk1KNmHsIl|i3ZMi& z*uN~MtT*;_&9VcaajU4X8(Zj%+loiBCc2vS?_4w12g?-Zs#zEtD^3Nuv$L_PjWrL* zps;0L=P>J z+9l(iG2sVJ0O#~wFimDOWoOlwpZkl>dYQybutuYf(*(^YZ zB<$*9V8o3NZr{33AG4~VD2?Rigi6SsGqxairl`+%reCbNO3xmPYq;DR3?GB1$~|`j zK7uc}FXplFRVmosp=zt!N!!$$dQuRR_ghTGo)p{eL89{HsvWDGy2G2=SK#2uF(*D0NuQZ`{QD;g4s_ zL}~3|c)n={n1LHn*xKHmHBMV23Y&0d?#?gUuHP+NNs&Xwm2^up;vaQ=sLdn;Ffo+z zS+2Bg<%nz;27(oce|3eqRiySX7zSLu#Y?c=z+;8sy;jyPj&bH zS~pxeKJJjhUElu?1@#KzzGc43d#$lN)&4fU0M|$uAPi(JV7vG_ExOPpzbiRC<4R=d zc=%@8MyXpG=z~u;-urB0>*{oK>$CT+UEQ3rcTDf zloH9vO>$+CO%{CgxtX=n6}%z4Ybqwhl1?GejlR2s{;>avqBbpK(b(w2x*>${h|qf4 z%dwMfyn$|b(SM!tMu5gDjZBiojbtD!m`gg{jA5|X*F@2z;izh){w|5s)tFM=t3$Em z^eCTnJ7TawE6R%5uV!5iD0B(8<7L?fr!-(Qpy?xWFp`{n$w3sauxp4N#MgCupKqdq zzmOB>JG{2=fgS={{>H8ahmW-NXS2}nDc%B=W$#y(sostVZ z>0T{{vr$&KeRci4FWy&YZ_tIfJ$-fk+WYT&2GInKqu1CC9<2m?p%&nU^^VXyJYJV& z#b!rrrhJ@B+N6HCxeOBS)f5_O)6j7AeJUavH`~MLyy7R>u-c%pUO4xk=Kjv>= z{`ahF_vQb|MIW+$3NfyPx$rI{r{Bzp8x0%u3!5*|7?Him;WPQe(^nS z^VyI8bpK`k^3h8l{lP!qKO1MCi?hG?<^RM}6J>3!bd^Ew~T@tP-mytn5&4xhKn$M2S%zsC2s_&nva_#ChE zJD=(A-rL`gzQcO{?h!v7o9|Yh`6GUJoNw~E$j9-HIT{8P1L<5amiFRsmydiS4*qSC zAH`4XF7bIQf5gMz`y35}@fau%(%w&zk%mFiH+^-{D&#;s#G%j8eNy$lvY;InlfFJFm&DO9s2KFsMPi^FsF%hZ z4TFlo3_=c#(TYzbCdx&hqhYXm4EoyWhQVquD7gytQ(xWGFsK;xwFl}PX+G2z7k$+* zs2I#3%20bC4(cF3O%9U(I3#yH)HgLhG{hEjSsYCcsvL~LKpcz}h8zup@ffIwl!Lzc z(t=mRpkgrA9vCBtgLb;l(J-hO^!1C>J<`4TMM)1lgcjy>p74>DLu_(i4D?O)gZjqB zTyp4WaxhK~%++ZN#vBcUiopSdEWVMwA?8l4=PO_4Q_Y)NHeY^U>PP2gNnfzIZ)>p9Qx*u8U_`E)3V9RiJ#++hC#((s7=-$%lpO%Lym?) z#bB&1QXiSOYr5#WtKsOA>H`hse=d!q$w8HaRoeqG5+7~#vU-2Rpkgpq7fEmB!uYt) z(J-hOjIqi3J$-3kaB3J-3|6g+#6*3hon96@Hw;b}gAyAolaYo&#b6G<&iGiLH)rR+ zAMsH~`S-=O669-n+@H(hFTQ@^(J-hO47CUHxW12=3^^JG6$5#FXdTV?Ouxuai_wP1 zXhY>d`b+oL+cLh_@wEIRb=5L_nl4(ME-Lz{uZ?aPtPTTh!H`(3VNfwR4PB(2@T1>! z+|e+o7|bBj7{5qe)Z}2?{DUEWk@mL4Y0G&1I2rKoO%AFY48g#-OrNL32GX?e(J-hO zn43@^oitZba&dkApraTy42EG)^uG3XS$*axy`T5*hC#(Z85m=ei$3yapQB+=G3cv{ zl!X$P^`ZIEa~lQ~gRycT9@+?fr9MZ)pkmNh4)lqnw?D@m4TFloP~X(JpyVlrV9_ub zkAbqFZD=vt_}ukSIZzjg!B8Ky$w8HazV@KRXxid2N5fz^2I?T`-)wTq4L^hyW7iCs zagQ-Ens|uIvR)#-e&%R$Q03qN>J*!>ih26t;YT@H7CSc#z8egd+3SWu#h|ZEmdB;7 zwt39aFsK;JAmmtkpx){0Cp8Qz2E`U=7lzDF?rV#S>@*C8I#R^P@O442EG)=&xU@P8xGG z3@QftL&Y~*Rh%qFewNwmhQaA#pzRieWidm;pkh#Dpig|D4OTDd8`EF76b8Erg!-InWJH_It-KrKkA-7N5i0E(8o8G-_=7e>T5p<77c@n!D;wK`mHa* zsbNqtm_e_h_CUYKPmvFPJ@L^ns2Gg#i}XQ<#>)+ZiosBOAn%Vk8U_`E)3681hra5v z*r8!iF&LtYw7Df0v5d~k;_Sm@0pJR@OLB(LG9EgGOS(AhBwy&b( zB&2)ui&FfvioWXu=vic8Rkh5LuUl4AXu7ECq8S(r&DoV2j`n#Oz4`i?qhU}nI1M={ zaon>0D^duf30kLB&8lG}JFD_CTA^S2r~bDh5O3Ks{rOrmpe#AxFcY zVsIM1skr!2PL4Yo1{H&$a!}&3CI{p5MME*rE|)sNalF3l?@bP>9Gr$OGGC+~(r-HM zXc$xs<`8Md=cF;3x@5(z@Mv;SnP(d3}Y!B}0SUpl0g(=ezQ43&dopNIOW4TFlo0eoC=SXHm1HbWh? zET7jfs2CLbi$$Nl3Vl@lp}swiToOmaU>pYWxjgQt>7wyDyBTyG8y|>8iw}nHpL`nj zKs}{BSeDOdx~S@+v2vg;D!PeZPkb~CDh6|?CJue-$;IzEF~Og6V#8oK2I?1ezc`FJ z8V18LP|r($b^e&6VK5E@aWFO*b2JPp218;r<)HYZL*=1iP%)T8&l#VS+T>Ep97_8l zI}L-1!D++?%E^oLRl}fS&{qzmuQ9>0_^a^xvY!ou;TV{+9#XqJibunsVsIL|$oRp0 z>M~hr7*q^q&}wMTPMsvZrS-BtcfNk+Xc(*p19g(0hQUiOJ%J9|)-^u2_&nuvn~%P~ zy2kw+{jU7(x&Hp^{IkRetE!`kiN5Qye0GzAib0{jnDniqsq>f7nXivM8U_`EG4`P7 zqBo(mpFT&!pkg5Z7g<=PE>a&EOB{DJ3{DpVeWVxFni~eEkAb>rSx%{8P%)T6t1}jyFBD* z7*q`U%7Oa-MRm%PVA3$C7|bBpD&k~u>2ov;Dh7S!KpQ-yZgv!(hC#((6>{*R`u$P* z`|pN9#oz#XlvsHcy)D`cZM8Pr&v8e?pkgpa4y3husranN(ffISZx~bz`q%?wGU@Hl zR!2+x_Yhjx&-;Xrv>ej&+Xn;budW%Bqu}y5nj8$1gMvZxi;^yo4y%xZVvn`WeQG%R zsOqG?aRHaa(d3}Y!K(ctv5`OYSHI@1~9>y@%xJ zj^fkgV0Ch!Jystri;0iY-+wm@Dh5M*Q~gop!FX8=h8zup@fb+|5+^qd#`RSUm4lKq z8tS7qIjC|lgNcXci?jpAX8NTqMjM_l8iRql$dC4+VK5wnRo4&1qxebUbKKE%(Q0&2 zkptre>E7pP7*q^aEeGPEoz_My%U?7MDh5OSB5CcXZ*0aTaWo7n2B#$l+Jz- zLB(LGUnBNlCJy?!(d zDh6Zhfx1R{@YB~uHw;#XfwCa|n@t{Wll#~MZEdl+`a)xlCI_pRgT9zF3@QeF8iuEcEpl9)oRD0UF<7-t)^E~I7_%+2 z5eU`33)I7*q^at&5Bgloj=n zzaMur3@Qdgbdfaf>x&-6qG3=m7~&Vn-z6>^TFYq|jKe^iTxteGZF9q*VsIMvKpD|a zH+yh8J-_<=%0P>gSC=>KW0R%3JT89^wF6ulN7F@B7tNr^nD{`QQ*1+`?#ce!FsK;x zl>=o!n=I|e91Vkt!5BFx^#d{K>mM}?R)c}EAP(AzzH-qps2B{1(d2t=fId=R+H*-9 z4TFlo7+qB4pu_`(z9;$FFsK*|l>=qL&$1f9GAtSf6@yjCf%drBdW^>L1`F_!@!uVuMKV( zq_s~EAcXr0s(<|b*L>7NV{&%ZG?fW;RG*{C!D=v&_R530sc$`@VNfwp9!i|Hs=jOe zBtOgi*M>pGpwM3|`t&-!$@wK$!LPlKhC#*PG~__r;Affd)G(+RXrE_%`oss?fMxXM z>lYpkgNngv$$_>&n{eFGFgSe-UKB$#3{Dq=l0VXJA9pkiDh5OC!7@E_9NicH-Y}>b z4E0Ub_xh&#KSPd&LB(K*99TBs2B{j$=U?zzAP`t*T)_WgNnfzIgtO=OU)jP+mmPv2HIn5 zIK@xp*ApL24yqgs)kWH7`M<9nC?GWq#$zD;wF&B?AxFcYVlan*>Z6n9t_%OSxv{H@ z(GH-0(MPMQWvZWy*_P?4CI{o>KpoWNV0Cg(WI%c7Q%^4Tpv4ENU+4++Q?IY_xy9!x zpWA$-ue7zN$nVPUp6l=S7Y)TgInX!lnLJ7ZL+-oCLei!s6WJ|aWo7n z2GV~_-qcuGS!4*+|e*NeGH7zmem#-1{H%6BWoA>*7Wr~m+711WWc{S3@QdQ=rJ^Br_NXR z>#O$7Wj72e27TfKd0rha|Ep`p91Vkt!5BFxd24Y|9{L;&gNlK6pxA^}=1tX2%_g6$ z$E%MnlCH*G+JV0MpGyuMO%6_14vO7qa&R&^D0--mZ>s*6&VH8Vrw=jyk$*HfsB$nA zgQAy~<%Euq{m?%f2IDZ0?#hBVC<{Z5hC#((1_6i0X!@pp)JJ{eg@!@JV2EEN|1YbN z@%0OjhC#((tQ?4ia?lr(hQVqvP!BZ>zWaGNr9RL%M^ThilY=S;Lwr;HqQy_4YoDJD zgK-!XzqI`9L;G@W!=Pf&*Dq2Bsegv*poYP->%I@wMcQF;7~1pL*E(m>%#xd zFG~7$73-UxhD{bLZGm_lcQjp8bF z)@+XIq=rGopu}hDq(1$o^1XJs)iTGg88Su}6&+-Z&=-p)2UQOG>LTf_ztdO$bIGBj zVNfv`ql?62s9k6nR1Escfij?79-1#L!q70N7|bBb&|F2a2ik&W4~FL|#$upvq;2SH zADSGjMh>(E%7Xf-$-(bd4wMD$bDyKhL6w8PHd%g`@B7mHC_W8?;TY%>sr#E>w7T5& z7@J(|ftd7-6Pg@UIT#wFDG%zSzV$OMiKAgK9s_NHws@#cY8X@u#^@sHFAnOVWjz#p z{mjuYs2ChTouZFc)nBCVBtFY4Ae!&WW^tC7_0_^ zF@BNyrp0LE`zpp@pgi~)ax|Mb9lmROAO^)A57j|MW||ySIT)&o z^gp%FElwV94`$GDXkUf7I&rXmpp5i6njBO)=wlB`oGk78_E8+gr(sYrIE^^DV708i z(=ezQjMYWjX62%a1{H%oa!_&=%D^(; z|2VoY{=H!^90TKF?eI`rTySU@R19ViWlXN3#0Y)mqG3=m=&OsA19g%y!kD9BP%&7w zO%@|%LyVTmM#G?Duqs{D*H>*AR1Aj3$=YONg`qi%hC#((tQ^Sy>K^gvb2JQAhk^7r z9%~p3U$0`-Hd!pxQ{uABcWQD_<=`|h5C{DuKgS&ngNnf%B54!u^Ko9L|9-?rTkYR> z`23oWd|mRP(s&t<^YsglhQV+Qq`$eiWjy{u063vxFbso|yEgV}`Jxnqu44Xy`etmt zNSV+->T@(XsB&-`Hd%SmUM$0VGadbTkYq2B(#)&{l}oaYw_TVxSC+wFfVv_w#UQ7_1Hh{Zegmiw}m!$)}-8{Jeuf+kgNi|4zew8qS!Qoff=R=mVlabXV{CGfg=PNV;o} zha61~svHc#Ks_Ywjn#(gq=rGopsziU=JLNeyD>+@U^oWmD8xYjbIj2&7>9v=k$Py% z(J-hOjIjsG!cZ(41{H%DbR6TGs+U?#|D~6nKnHE>8lPKyp7OcPM;<@mW8bddmES$r z-|gk~XOV?f?T4d$yqQ1zc<#~Upkg2%%0i#|fxJId2NggX2IDZ0$D41ux}M)Ya-iOq z{>EqOn=wa|gDMB7VGqPeIZK^Gol=fU2N0Wmp2dCi|=?|%!nqO4wlFRywhQtTO9w&|- z_TMH4RSx=KAYbbXiNVkuMM11#P%)T6l%ctb5+C?;ncgXMU;NoHs2B|Kikab2JQAhe62|^|cQTgVkZ6 zP4Lrl6~k-#V|9^opr54v?{hRcsB+NPHf(7ya^7*q^ap^MZLTN0Kg)Fg^RQ_cR1Atwq)s|%ziH7k>KyIwkfUKR9)sfd^wmKHuZBUzVAVER88J3^ zQ68gVP%)T6uc0|R>8vi&H}%u!Xc$xshS&q?tq$_%GXHZKCJlp%!5BHv7xJSl^u?lK zP%)T8KXEuoO~1rm>Y%>$0xmgpGz=;RLv)cmZ?4+7pl{B)0MRg54F<|Zt7VR#kJd*Q zX@`{o=`Q`p98C_Y9Q4INUucL8K8jbvU^oWaVsX$ek2x9!6@#HRSsb*-L$PQWR1Es) zB5i=QA7hKTJdTDz#oz#n6j@kRJz2Y5;^;*2XaCzUs2B{DgBGJD-((f**`1agsI!*k zwVNDNIVgHaEc(=Nj1jcQ(t60zFsK;JAmGs4b;;Su@2!?OywC2mbWw>Tj+2ol2UQOG z*yQ5tsDJc*#vBcU;TXu@VllLqUvO&}497tJZ~3AWr%H$4ci(hb9;3-Ym4g{rj`546 z^ANdc7*q^~#s}JEY2Vi;<&roW1{H(T@J-F>DIZN2ovi1#uWzbNHfP=HXh{#O!Y22{ zK;Kjy)G$~b24ifpx<;AMHuS}$*@M%!2QTV-X&6)thWbU?1@%(vFB;$5GDa7bys11d z9(|4`2UQME!#6E)!!leN1{H(8ev$T9J><_ZN5fz^2J*J_A8H2*ZViKq!BCql4%&gC z^3X7-7|fvK*qoiRp?>OfGz=;Ree8j8n0&9zU6u&yQIpN2uj zV2my*xeD!bU%6-)R1Aj5f%-_jFw+d0l@;pLA%>noHwoaxh*F^gG4E&yb^GP%#)|5A;n-%)BfX zcpgR#gVkc7U1&CWc)n<;O*SS_4w^0+pQ{+7i%Q;9J1ri4j;4!Nql*?XXmRpzU9<{0 zP%kxmFdPG8vtkogkvCn8AC}2R(?wMm^^MU=j#OHYIT{8PgE6|Om*I zmiDcNGroq?$2Zju>j#aYJ(tJPlw_#8*7^92CLYpw;Xc$xs z4j^E`VO9Aeb(Qk6tj63hs2CLbi$&i!x!49S?R_*1#$h0zOMl}se;;x*48~!go{{$2 z<)OB@VK5#8aTt?7Z5UJx=FoD+=OlAL@huQ;UH0`qfPpc;n?|okd2FgU= zoJEs^)yqM{;CCkn*7Vgw4TIqroQ7|zeGrpnxHMf;C=V)?JtPH$J=P$#gVNfwREqh=*y=;A*hC#((Xs)7f zf9X+~Xc&ycK>BM3#vBcUVHl`iiVf&nFF1-F>WA1{H(8 z_Q0BfpJopd?>&STJA9t-k(O(GZt;1_=QbbxPW>Lw@w@W7=lc7v`HYc+5~C>tO%8@* z&{qyFL2qTC*@M-|!H^hDpGezme!|~}9L*k7U8GJbIIN<-NI5ZYAwJ7&M#JFrFi7)W%MYu3Htl#>x**9p`*z`l>>EBvCFH-T^AYAZY;}R zGz=;RGiWt7UnJd^(VMTIIT{8PgVT@$@vwf=YB(p$UH7#I(sxW;Pz0jML6w7I3zUbG z=Iqox`l;Gwe;;x*3@QeFdV>HdiqO17kFG zl0UTzLyo44sxBIXfqfIrCXeqo?PHVGJJMW#Xej@4X&g-ssvHc#pu`A;oK-u=iy=qDU>pY0T^(f3u3_-q=IrEsWkA{w%~5b^ z98C_!$wARYMIH)W`}}MejKiSNeoX$fVNfxc!@M&-C)tZdnkxh5C7Le!-Nwm7VlrSm zbTl~_CI{N&lDAeK#vBcUiopSdEV1$`dw#`gSzfPUP%#*44~FI_itIEDhGC#C(k^S0 z^^L|H4TFlo3_^~nqm}*^@#%9k3@Qf27HAhv+VflD1NG5R+uSgy7>tzzaS)SM%N$-$ z?qib|?LlAN15AgGCI_pP1MPI*Izq!>H5in>iXnEPVNfyXtBbV3>i%W%*CC~I%s(0i z6@#IEQOVm4wF?b{@feg`gtlPF(J-hO4ADjUqC;t4@M;)T3{E3wr+yNrWidm;pkgr8 z9;l1-i-zXz8V2Jq&^J;SN&jY($M;nXk%NMPKbsu3qIE_Gr4O>Y_PR zn(;YFO<$U82h3Lw<$o@XqhT-(1L?0Ej5!(x!!eNdEmx6z67|6<_QM%slM4>|rrPBp zN0Wnba-c41IlI;McpX5`A`7ePZ83IGR+jbRH94qqaGDq_la+?S>0+RbP!^We)*1$< zhe6Rn{#=&FXc$xsX3%PAf02A%=0h#hJDm2+(J-hOtlAzFIS?OzKkjH4R1C(*fihsc zCawGCjT#0OgW{Je4}JRVw7Y)#(wj#C#*bL|v(M2mSPce?x~Oj+wP8>( zPzM!#w2C;n*kt`ub6Uq84TFlo93rWYPFg=GHOyu7J&x{+e{UF642ldW4}EO1x<@;( zEDl?w`O)7S1{DKkU~G(Ld?p@!j)pLU5P+2qyrw#=aC zm^iuU9I@$hG&!hpFct%KzBshp^>;T;?O3Xw1y*H)kn*CoUdPaGz=;R(toI5v{+AG7LPp-kcPqPFfbm|FItwT zZWyF_gKH2%`@6$O{p0Vy<}+3f)JghD%XB|qKXWuWs2G%7k(l(YAH2ym(tpU&FsK;x zvB`zswF9lM;`bw0QLxY+EX&V5PfnT~43h)xuKLGMUmJWBhlWALUVH3Dj)pRqpdDRJ1t#QY{m0rz`r#)7%m6K z!}>-|4u1dTK%2ZQc4%@?<)HXP>ZFtAO_c*b<}8NR(;5a9gBf%jo2yXwi%FlOVNfxc zLpX6bX+2rqFa0fjXnyqEhC#((j4o2=o4+1%Gz`XJpe&R)*x!d74TFk-dT6XYC^ote z77c^dVW1qSk6ImVc)#fZ^eZ-D6*)U)LQMR*EWh34pvpm^zgYB%5A;WkmHj#7Xc$xs zR$&i}hnMmE^Dt@{tPTU?WPPND!S9bf&_*j4FS6534yqgswFlZ_&q4b*aPWb zK4Q}6XmU{HU=HEL;iUN@;{a_y-*|va4jm1HiovSm1MPu6>x*(p4TFk-GO&tVMc+C? z!=Pet8gihm);=t=*A0V;!C1ejZ(IO0aWo9ZVNhZK?eb9D+%OoAL9w|*`zsm-6@wYP zJk%zu?~RAG$9;8D!=Pd?BtB3E`uag!a_DFn497rQAn%LAn4@7(G5G)6JD*)klC3@; zjIby8F|aXk0qOP=*dWrX`H*=NTW>4)CRLtkSR2G=nlCKC%*V{;f3gKj*C zFS_o1(;Z(#UW5%GSJw%#gT5WG4?#{8JGjmcuHG*qKASi3`KZJWdUk*fF#olMBmLgf z9tJ%I=%4k0>*ITLebgrmia}@J6b|qp9%B=o5(aw=@bl(FXFmUoO&IJkzz&%I=pVn- zDPd3y-VX)d#&Pd6ee}+e-1MiLn;I+3p$4v3OYETR;KR_6aruh(u3^A|tq?PgN*Fwr z0XD!M9&5Fu5(dR!H6E}p#9l?7;anFF^h5ZhmES)wF0by@X&14BJv&hU>a!!mpwEDK zi?5F_`trUAA4J}B7I(+#!xB3vJ0K1i6Ryfl$&0j?BM4zo3_5ucHqhOpkVzO618ra> zFJg|fS3yi5K6gqO6ocDP;O={NFj-|02E~B+uPs~|56GQhb5z3Mu?)~XG2`r=qcA82 zt1%h+s*Jc0ps!f}?r#tzC3ZbMhyyvTQc zJ2`3?6oW_D0r40v$fFVlk7eL{FY!h9#e*w+5%Ya@?=E&wcHsI9pS1D}=c~~_?|3~u zeK+(#&hz~^$n(j4z8=S~$MMZL&@Z|@%ZqmHfc(>Ae7w8F4$2O$VsI9JUjq{c#o!Tn z5&L(n56<2L3xi^?x>vz`N5`u%cno<_!l1{1xsCqGIahtp3jm`M2F2hu^wC`>!-9kS zh&*Yfgh4Ur=BBKJ$%nf35C;1UnD^)(7M&6X#o!Tn5pjc2e(KR(Cxk&UcvL)aEq7!iVNeWqd=Y-=Y(L^i|Fnle zF}MwVbk}J3A=U`46~@QAOBh_s09!bFX7(DGFu0ZhK52Em90u1hzz?DS*g^j}S|=u( zm!kXC`9FqyEU|;KgVl91I)_15_s;~97om671;6}3Y71ArcddP#t>0n?#bDJA*ry-{ zaO{*Y*kj;xn=tt4yxYS1;LPv5#wvDDc5oXC>aLTq2add7wD*qJBlhfI0vlq-QHdRt z9jwM=@>15ttG;Ju5eCIz*B8Medv<%i$h84J>E3sK@iEu}vTF~qgR%p3FNdqvXz<}U zd$te;k7d9*nYesrBVkYsR%0^ro16!^Q^KInfEeHr2G^{UjRnMo)tHRW>Aq(aJJ_=W zd_A_XQ^KInfVq$UyYpXeVNeWiLn+<;BJv(=g0=IiU4%g~Sj~&j^;>&EqsyBm4EhZ8 zMa=)55(dSflNaH8*dxLwVA3gJu+IS9V+&n-2!mp<5)a%1QvaR#@0c(s2DhPjgPOEFenB)c0i8G8UZ_4U9*M3H4I#%G3Qrfa~KqZ zNBAOm5Wit_RKlPb7zD`8L!ZbMgBtPjYQR!SHYgB4%I`=hQ8 z&gS?%EW)4|Ji-^j2Uhr_qY?(iV8srI$=CwNnSPJ-{%Ly{^ckRgeE->d?VsxU=yMnp zgYLd5>tHw_J0%Q?!HO@^2eC$r9X#jWSA6$=#}1hL#D=%x?wNhW4$2N5kr%x+mBo#)H3gT5W$htPZ12kD=}pcw4h0XZnS(rTU*2E|}ECU@gP80<6fIRdg% z!eF0)`6;qf!k`$e=BDVJHQB2FpE-p=F?hs&k#QP%RKlPbbnJj+K1V2;NwMqpQ9{ihT^8 z@tkoAgJQ4}lZnIF0DdUX(S925c)3o72Qhl3#16_1ZbNZ9&v5WJu*iNLD@kk9-!~lc|V4{C}GfNU_3_dlrSg;=B4DQ_kN!pF#ub@2X*)E!k`%3h90{y z*}MoIi3k0d%>36Du2`dC8|+^YFV12{?BF^(P}i&RAq*d#?X%?42l8z-+6w3KO!&USSevp3?7jev34LnU@u1{42nS~ z9*_^=i0XEQ$$=CuM z*tb~qNnub7R(uh9X5PD3G(NUV7!-pYJ0LH`7R*mqfP_IYSg`}Wj>aR^O|e`Gi3+*on!m7iRt5QxAh{7!a59 zZp;4Ob;k}|C$mlqgM9{_c)*$<@!)xFbj7w^vh*J#M>7wt3HjR!Em z4-peqN_^3tFZ$FDR&_6@FenCB*a5MDwZcjXgJSSuD9)I0#l9&lh}G=no!Lkj6a)1S zi+lG?T_1OzBahpBEMZU#uJA=LIeS*{gW6w+FenBcJ0K==U!|UE_nuIalZX81kZoK`}u8 z-Mwo#unxc`R%3G*6oalW!XEHN@d<-sp#EX8vQEYhI1-ch z*9TYI0rTJZfUi0#v4gUM+fdSOOh)f{mf8P~*{c{NFX}Vci3jASXZzDfeu(z?qVh#M z3|t$W>H6qg7!-r|LrM6fd)CRsT6}-r@p{fXn1es|?`5KUVlOPZIq4YsvBVC_4t9JI zxhFh2B@Bweqt*woVGVaw!k`#*?SQyIUew(`4TECv2s?leHh?@TVNeWK@*?vg;=t;f zY-SM#JqG%C)@5hDe%AME^)M&~x1pf!ei61{Ojym2!k`$e`Xbi{-B_$mgh4TQL`=pe zuo2dgM=`-@$;ad;0KU?ZCbsjE+heJe~n8&ejlNPz-KES35BoUqqZ(eWn=(*D)|R3WNT;Ei3B- z_lc1Bnw=6mC_7kXK%C_u?(UQ@Cx=L~=$jmMrG&wC4A4EXcQscHgJQ56572dIuX?tT zFenB)zKHp+-%noj}(gKHSLM#KMbtduaghJiT|`i~v_c;V76!8#3_SSevp z3_5ne{5MBh)xDg;pcveSQg&i8b^sIn(@F`0Vz9DCW9}ORy8A?O3WH*>YX|0~uvsZ# za4iG&Emrp~!k`$e_#*a;nD6+Z>{UGL;fn9p{4n%sZgj=Fjxd4`oX%oK?4a!65e&$Y z!rY!k`%3h61~L73>ued+|%y#Yzc-V(^HVEEnwLsDwc= zSc%ERVtf#D{w(J?()*|FVNeVnVF$2+6TFT}7(AAN>jPLEl`tp{-D${aJ|}^zFdB=q&gDOyRFIgh4UbwF7J*&y$~?z8`wP zuk)Pd>v8;g9QQuM>F!-)55xpyr^F7fvjcKdVnK4#FJlKhN8sp`*ugb+U@Yjc2!mp9 z^hiO*{KXVNeXZYc$rz>{p!mn->#*s)Ru?*s%kA67dlz@CZAA54`YGM!EI<{Cmvu6=uv5!ih{t1I((Dg;+McBgGp3tQB7u7H* z2JeSvu!Vcyb;SRpcl5tg!k`#*?SPmJ2YgYdgh4UD2DSA3CnfWB9sAI~NcJ19Ho zFd!y$*9Ec&gJQ7ji--;6MDay^U$nD6z!tjsQS6}X;KR_P9IpJ%aqQyEUxh(2Sd9m+ zk5|`Z1IddL2F2hJcA$?sixFW^3~pm~cK0gKG5Zwg9Q#-)VNeVnVFy0*j~zVzI|b1( zae?*P>Y6QfP72iMpEYh-lqKGJKtK57et>lwrj`g;{S zzR2eY=>O+O6aJt*c2IWUJ_R}Iy?+mfwSa4a>=!-%-L3D3PS|tke6QoK9hjFUH|;Z6 z*)L-5<8$ymtNwosc~Rnv_I(jPh`AqMwC{^L@c>(3KLXj^KaCxf9Xw*ch;{Q@&-ufk z80^Mm;(~Eve7w7a!8Hufzk7D%t1Bf8ior@=@mb5(dSfV+Z&i zVgkA8YECMXFenDMp_H9?fG>J$O|0HOm0?f}I(EQ55wUfJiiZ& z@Belj%zZxpava72>i52P4Fl`|4%w^t@_QBTSFEy#FDg5@A||soNN)P$y!(!xi3iO2 zv%GVhezU|5$_|JP*uuTvt%>g0tLQ#I8$&;qFenDZV&n2vYcx1vGiUj07!(8b-^q*c zOWhnb42l7MXy?5OpX;x(2!mp<5)be(%zb>!nV%V_-z;HJ40i2+9LeKN#edQv42r=c zVzTdDoUPl!;IRzIiO~O9j0l5buo4f@Eiu98HsfQvgh4Ur=BCVZd=C3}oe~Dc;Ock) z6MT^V=!j1kJdT06D|;DyJ}O~Q3~ob7J8LxNJZpu#SJB@$-C=H$xBXL!e{cDdPJE{mdQ_pLxINDm!3Zyi#HZ#Q+{~Sb3&T-g)Nh?_m)J z#h|-qch4H&j71m}18iVtuY!2Y!G88i34>y=;){s2UyTFbzpC?@PZ$(~t}i0*fy3E4 zY}Wgy^)T3H;C|3*J|u@QxQ+p_xl_WR7~F;eyD`~4J8XhurG&wC42aR@Mq$wV?){a# z2;c8s9D3g=v4gS$_AJbeu6pm?I6}!KyF9|C0-K^C5YJ zK{3z|;gjzDy-YX|7nu9q^>P>#gN_}rMux#o34>yA8;b0%56ns7vASmw2F0M`i--mI zBi3cz95oDz!HO?pzN`Dh&Pl;4j7U3UIH8nIYgxN3diejah-sKgF>c0eA) z{O4Hp|1*m)=rb@c&GY1+wlBh7V0E^3jvegTL1(WzzUcVSzco4y~4x{c%B-vL4Qtiig^k;l-FC3aADfc|&#B3N+1W~GEdF<7w!pQDk7 zuEyY*PZ;bmAO>_}u`I%1j{*5m;=y&#aJspvd1>~GzTAEhG1&E){$)kR7nLu%4aM!` zMc4tcdNoFeK`~g#i-^Un4U!i<&pZ6U74H{y;sFfcfem!?qu4>&!LBbNKf({i7xmw> z+hu_6iO;M1MzMpkgN`pECU6joSNAB!kdGw{iot43HXg%Zr-VT<*!4xkWo=@GNf;D^ zjvbH-k(ce1FenBeh9Zp#SH0r}AM>RnPGL|Cc6||f5wSUWQ9n2B_#)zR_D!$bH(g=C zd?)@g=fmJS29JmbtQlZ+wy&LdQ1Reu2I!s`k(hk{_nVp%!D99I53*->&A#bwUIYh@ zi=hl z6kk-nXeTD)^YQ(@V=?RbtR4o%VAT%v_uXeVatVWC@QAz!KJ0I^UOOsbPzNdOeQBvUi9ViBH}@3T|9=pD6xaGgRA2Ke#!O2+52B%Pz-kV>{uh5#oZSZ zf2xE*G3dkt)&w9|Vt1i5-+3>@qmpmpfw<2F2j&n2e3McYS6fVenW6 z#Ay!J5=SKriot43W}Y*@yFN%JVbEv5{3a)Y#ZC!>J_B?Qht>U|nO7JTgHB!q1AGx2 zy3caLpct&i1N;!W&l>Gn4_Ew7;BDx0=XYa?&+H4G3XzqX79tL|1nCEBv(x2-3=yMnpgGa;zebE`G zFenDMF;REd$(_CIFenDA@!+e$jGX6e4SeK(K5Y+!J_Gb`?)j-sS3ieAF}OM&U?2D< zIB^`6FenC{bu#`)Tj)O141;3Oi3c(`n&bDhhe3}4bD#Yoa!)wylrZQqK==52_Nl|* zy60$}cmN0N0S;&DuyOjZ#16_1J`63%;i~6o_$+MZY+pMJiotE@s=H3c2JlPlkDlp! zoc^qY!8HuXOW}Y|TFp_zpct&?rmU0EIWb|UguxyIV{#Z=^W8bdV`B5l^JM%#EQr0G z5<4h6xD5q%V=^&-10MLOl@bQUplb)lh1GmWPGL|CcI?31G|%w_k)k z7!$7AtH4$`@Kr}8cF?l}=0Cbcc4M(j!k`#D!VXwBaKP)Rgh4U54JGZY58N+WwTmz) z2F3#H;ofyJ^V=M$8=J$R7(Buk$>(e@H4KWujxWLw;e%K&!OET;`o`xFi^+XHDESIIO(eg5JCHe+>OtVh3dhU0+0Qw8J6{iouRAG9C~cR@Z7_ zPz)ZC7qNaOKAichFenCHUxbc{#T=ay2F2hJc0jDa7S8s!!=M=4hOWA~De(Y%AQr6J zLl_i;t}kMa!(dhSW5~x62F2k0&>i;YceT_{RT*H95&*A>vYq~ya3xi_NiOIwSVlr}d{>vl`iov7S2j;Ene3oHQ z3|8_Y=RUp%8`vpfPz*Z0h&2I6-mCbs-<2ST)%{X!Cw5SF(D6n1q;4z@gU{cqxDBQ3 ztkK9#;jtPYVh3dhkI0K)!hQz1(NPJ5Vz6rm=o#OH&R0qp6oYPFgwB%}U6U8B#ANnO zo%7^HJ0*5dcJPRJ;94&6;J)w9>G~q_pq=Lkv4gUMRbPY;A|LJk9-96u42r=cd=a^+ z>jrf`%P=Sgx1pTw8qK{?-zS>&d{z&GVzBCqhy%o2=J`$ugJRH)$;1U%bmKx86oXYe z!0(`cj-3()#h_yc`Xe~Nq*KD67~F;eyD^!VU|e4HNnub7I(ESPXMM)=o7lng^MLP% zF5Zu$^BuEY2KXZwob5-9(}yK?P^N;0gvlyL?U8M{QwH3?8vp;X3*3-McU- z2D^6P{^{zPEex(>fFELQkleJtcl{_|WV}v1c%JWPf1_^47qLe68N%8A+-n@-i>~uU z!~>4Aed;iHUPB!Ht;X&eP2FdW_S0CSkrUznS4w53gN|JfgP9X!wNm3r);>|m7vzKA?@b+3Bn69#(>u!Gh0Ko}hV9r4|G zfIYmmCZ6?AJ$6ubu)_db;Bc*gZtpE&Pz<_jG-Go&E`&ib*s%kB5OzSUUMXQv3|8|Z z*Tl%35(dTK!%(FD=)aE7{2l9e<6y7#zm0?U@BZos$$LoOje|aa{X?4!`P(|?tk?w4 z70x(?K{43zMaE=wzPfi22G=n__w1d*VWqtLoqsughL{QLDUetV4k@R#rY>e~u=w```4rSKfn9k@$c{c>i_(Ur>9^2U;gm z>VJ)Y{_N>*-~Apf|9e#a`@7#CAOGUrA8?^R`;GtjAAaj^-~Eh}|1eJekAM5`fA8t( zpZ)Md|Hhrt{>mSQy?Gt`dmqQm()0G8{tlQ7J*HPN;aNFnlQNN?>JKk|h`+I)A zpZ#oC&h3s@dR?XCj_Qt^rTvv&$NMYi^GDZly#1A4N9lO`E9d^U+kZYkw_Bg@<2cV- zx1aZ!>vKQH+uyq5tSfEzI=0W!^Iq5bEa&rH$9C)9*SgYvp0_^VXRbTmcE?*++U|9g zwtJnq-SbM%A4%`0oX2?|+pQl-uj6^^-hZxp-TA!zlwQyNO2;Yfr?j8fIqGNo-0!H} z>(A2uO7B0{9p`!PtDM{I?|J2XUEA&Nd8Oy)y7#kPX@9S0Kilm$x7%MipP$Fib+7CA zqxw9~`Yau<^yl&V)*WYkmY#Q&;91}N8@bwI*vP%_EXx=>nLsa=d#^# zO3zzY+FxnA(su7-yVtYb`djDi?{)2O{pdROQ+gfijG)aB{jJaP=srj7 z-pBjT*R$R6_P3wyO3%;I^N#bnb3f~zcbx6B^t{(qzSYn3-p6tC^{mhRtt;;xZ$G8? z_d4FscKaPk$0_aSb!_)~Z?!w#aZ200&RccwGxzg)O0Q>srQ_zh?T%B&tP z-TwZ3wkvI)<$T`j+t0fFypQeno2BRN?|9qi{`T{{{pa?1+}zLebNf-<{oc z{T#2fT{*W~_vf{)^!l^(yyIr+dB<5-+U~fy-JjRto?>Ob$ z-*%cKdrD>q^@lXS?H-_Om`q z&(Gs+pZj}1+pW+2y`JaoZ~I)g-z@ESbbZ_B>(1?-S9;x9uHN74DUYt_`T6IX``d5+ zIp+5HI-a-P@wQu6+WuC5f4-yso>zMPx2|iyd7SsLeXh^#^L6a6w7>mk>3QWm&bs65 zH~;@^x8Kn?+m-fL&h6Ic``PX|<=pPiHMh^#vu;17*HwBwrR|QN>-JN6UF(js-SM8c zU3t`hZg;%W@k-l|q(6t!e)D+Gdw-?yDr6w!bC4zWuzu?aHI;+kci` zZys-bK5yOY%>Cx`_Oo3%|D5(y-g{lIGxzs8^Zo4adB@qVbewW-x2` z(tb+&&-b(4an>C-w>#c`%DLTfwkvH{dY@T(Ug>@8XML9TSI+(CcF)`H^=!B9&p)@% z=k4e9>~Fi$aZ3AHx8K}8pZ7ktTUUA=rTu1Uf7`vUSurN<8>V8`MG`WZ{2bBcf9Shw4dYc zZ@bcV$J^if+|Tnz?T+)hb3g0$v##{|vz)Kz_*r_Lx!vpC+df~%`#awHEIqG0y3Wzh x^X?DFd!--V{n7aM>tFoV82u-I`k(&YU%dO{QUCK_{UdLu{?qv9Z~o>F{~x(PLx=zX diff --git a/pipeline/README.md b/pipeline/README.md deleted file mode 100644 index bbd79513..00000000 --- a/pipeline/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Azure Machine Learning Pipeline - -## Overview - -The [Azure Machine Learning Pipelines](https://docs.microsoft.com/en-us/azure/machine-learning/service/concept-ml-pipelines) enables data scientists to create and manage multiple simple and complex workflows concurrently. A typical pipeline would have multiple tasks to prepare data, train, deploy and evaluate models. Individual steps in the pipeline can make use of diverse compute options (for example: CPU for data preparation and GPU for training) and languages. - -The Python-based Azure Machine Learning Pipeline SDK provides interfaces to work with Azure Machine Learning Pipelines. To get started quickly, the SDK includes imperative constructs for sequencing and parallelization of steps. With the use of declarative data dependencies, optimized execution of the tasks can be achieved. The SDK can be easily used from Jupyter Notebook or any other preferred IDE. The SDK includes a framework of pre-built modules for common tasks such as data transfer and compute provisioning. - -Data management and reuse across pipelines and pipeline runs is simplified using named and strictly versioned data sources and named inputs and outputs for processing tasks. Pipelines enable collaboration across teams of data scientists by recording all intermediate tasks and data. - -### Why build pipelines? - -With pipelines, you can optimize your workflow with simplicity, speed, portability, and reuse. When building pipelines with Azure Machine Learning, you can focus on what you know best — machine learning — rather than infrastructure. - -Using distinct steps makes it possible to rerun only the steps you need as you tweak and test your workflow. Once the pipeline is designed, there is often more fine-tuning around the training loop of the pipeline. When you rerun a pipeline, the execution jumps to the steps that need to be rerun, such as an updated training script, and skips what hasn't changed. The same paradigm applies to unchanged scripts and metadata. - -With Azure Machine Learning, you can use distinct toolkits and frameworks for each step in your pipeline. Azure coordinates between the various compute targets you use so that your intermediate data can be shared with the downstream compute targets easily. - -![MLLifecycle](aml-pipelines-concept.png) - - -### Azure Machine Learning Pipelines Features -Azure Machine Learning Pipelines optimize for simplicity, speed, and efficiency. The following key concepts make it possible for a data scientist to focus on ML rather than infrastructure. - -**Unattended execution**: Schedule a few scripts to run in parallel or in sequence in a reliable and unattended manner. Since data prep and modeling can last days or weeks, you can now focus on other tasks while your pipeline is running. - -**Mixed and diverse compute**: Use multiple pipelines that are reliably coordinated across heterogeneous and scalable computes and storages. Individual pipeline steps can be run on different compute targets, such as HDInsight, GPU Data Science VMs, and Databricks, to make efficient use of available compute options. - -**Reusability**: Pipelines can be templatized for specific scenarios such as retraining and batch scoring. They can be triggered from external systems via simple REST calls. - -**Tracking and versioning**: Instead of manually tracking data and result paths as you iterate, use the pipelines SDK to explicitly name and version your data sources, inputs, and outputs as well as manage scripts and data separately for increased productivity. - -### Notebooks - -In this directory, there are two types of notebooks: - -* The first type of notebooks will introduce you to core Azure Machine Learning Pipelines features. The notebooks below belong in this category, and are designed to go in sequence: - -1. [aml-pipelines-getting-started.ipynb](aml-pipelines-getting-started.ipynb) -2. [aml-pipelines-with-data-dependency-steps.ipynb](aml-pipelines-with-data-dependency-steps.ipynb) -3. [aml-pipelines-publish-and-run-using-rest-endpoint.ipynb](aml-pipelines-publish-and-run-using-rest-endpoint.ipynb) -4. [aml-pipelines-data-transfer.ipynb](aml-pipelines-data-transfer.ipynb) -5. [aml-pipelines-use-databricks-as-compute-target.ipynb](aml-pipelines-use-databricks-as-compute-target.ipynb) -6. [aml-pipelines-use-adla-as-compute-target.ipynb](aml-pipelines-use-adla-as-compute-target.ipynb) - -* The second type of notebooks illustrate more sophisticated scenarios, and are independent of each other. These notebooks include: - - [pipeline-batch-scoring.ipynb](pipeline-batch-scoring.ipynb) - - [pipeline-style-transfer.ipynb](pipeline-style-transfer.ipynb) diff --git a/pipeline/aml-pipelines-concept.png b/pipeline/aml-pipelines-concept.png deleted file mode 100644 index b01526dab9c152842441b7822d36a7316d7fad06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24462 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 F{|77diwpn& diff --git a/pipeline/aml-pipelines-data-transfer.ipynb b/pipeline/aml-pipelines-data-transfer.ipynb deleted file mode 100644 index ec485d5d..00000000 --- a/pipeline/aml-pipelines-data-transfer.ipynb +++ /dev/null @@ -1,336 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Azure Machine Learning Pipeline with DataTranferStep\n", - "This notebook is used to demonstrate the use of DataTranferStep in Azure Machine Learning Pipeline.\n", - "\n", - "In certain cases, you will need to transfer data from one data location to another. For example, your data may be in Files storage and you may want to move it to Blob storage. Or, if your data is in an ADLS account and you want to make it available in the Blob storage. The built-in **DataTransferStep** class helps you transfer data in these situations.\n", - "\n", - "The below example shows how to move data in an ADLS account to Blob storage." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Azure Machine Learning and Pipeline SDK-specific imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import azureml.core\n", - "from azureml.core.compute import ComputeTarget, DatabricksCompute, DataFactoryCompute\n", - "from azureml.exceptions import ComputeTargetException\n", - "from azureml.core import Workspace, Run, Experiment\n", - "from azureml.pipeline.core import Pipeline, PipelineData\n", - "from azureml.pipeline.steps import AdlaStep\n", - "from azureml.core.datastore import Datastore\n", - "from azureml.data.data_reference import DataReference\n", - "from azureml.data.sql_data_reference import SqlDataReference\n", - "from azureml.core import attach_legacy_compute_target\n", - "from azureml.data.stored_procedure_parameter import StoredProcedureParameter, StoredProcedureParameterType\n", - "from azureml.pipeline.steps import DataTransferStep\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration. Make sure the config file is present at .\\config.json\n", - "\n", - "If you don't have a config.json file, please go through the configuration Notebook located here:\n", - "https://github.com/Azure/MachineLearningNotebooks. \n", - "\n", - "This sets you up with a working config file that has information on your workspace, subscription id, etc. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Register Datastores\n", - "\n", - "In the code cell below, you will need to fill in the appropriate values for the workspace name, datastore name, subscription id, resource group, store name, tenant id, client id, and client secret that are associated with your ADLS datastore. \n", - "\n", - "For background on registering your data store, consult this article:\n", - "\n", - "https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-service-to-service-authenticate-using-active-directory" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# un-comment the following and replace the strings with the \n", - "# correct values for your ADLS datastore\n", - "\n", - "# workspace = \"\"\n", - "# datastore_name = \"\" # ADLS datastore name\n", - "# subscription_id = \"\" # subscription id of ADLS account\n", - "# resource_group = \"\" # resource group of ADLS account\n", - "# store_name = \"\" # ADLS account name\n", - "# tenant_id = \"\" # tenant id of service principal\n", - "# client_id = \"\" # client id of service principal\n", - "# client_secret = \"\" # the secret of service principal\n", - "\n", - "\n", - "try:\n", - " adls_datastore = Datastore.get(ws, datastore_name)\n", - " print(\"found datastore with name: %s\" % datastore_name)\n", - "except:\n", - " adls_datastore = Datastore.register_azure_data_lake(\n", - " workspace=ws,\n", - " datastore_name=datastore_name,\n", - " subscription_id=subscription_id, # subscription id of ADLS account\n", - " resource_group=resource_group, # resource group of ADLS account\n", - " store_name=store_name, # ADLS account name\n", - " tenant_id=tenant_id, # tenant id of service principal\n", - " client_id=client_id, # client id of service principal\n", - " client_secret=client_secret) # the secret of service principal\n", - " print(\"registered datastore with name: %s\" % datastore_name)\n", - "\n", - "# un-comment the following and replace the strings with the\n", - "# correct values for your blob datastore\n", - "\n", - "# blob_datastore_name = \"\"\n", - "# account_name = \"\"\n", - "# container_name = \"\"\n", - "# account_key = \"\"\n", - "\n", - "try:\n", - " blob_datastore = Datastore.get(ws, blob_datastore_name)\n", - " print(\"found blob datastore with name: %s\" % blob_datastore_name)\n", - "except:\n", - " blob_datastore = Datastore.register_azure_blob_container(\n", - " workspace=ws,\n", - " datastore_name=blob_datastore_name,\n", - " account_name=account_name, # Storage account name\n", - " container_name=container_name, # Name of Azure blob container\n", - " account_key=account_key) # Storage account key\"\n", - " print(\"registered blob datastore with name: %s\" % blob_datastore_name)\n", - "\n", - "# CLI:\n", - "# az ml datastore register-blob -n -a -c -k [-t ]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create DataReferences" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "adls_datastore = Datastore(workspace=ws, name=\"MyAdlsDatastore\")\n", - "\n", - "# adls\n", - "adls_data_ref = DataReference(\n", - " datastore=adls_datastore,\n", - " data_reference_name=\"adls_test_data\",\n", - " path_on_datastore=\"testdata\")\n", - "\n", - "blob_datastore = Datastore(workspace=ws, name=\"MyBlobDatastore\")\n", - "\n", - "# blob data\n", - "blob_data_ref = DataReference(\n", - " datastore=blob_datastore,\n", - " data_reference_name=\"blob_test_data\",\n", - " path_on_datastore=\"testdata\")\n", - "\n", - "print(\"obtained adls, blob data references\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Data Factory Account" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_factory_name = 'adftest'\n", - "\n", - "def get_or_create_data_factory(workspace, factory_name):\n", - " try:\n", - " return DataFactoryCompute(workspace, factory_name)\n", - " except ComputeTargetException as e:\n", - " if 'ComputeTargetNotFound' in e.message:\n", - " print('Data factory not found, creating...')\n", - " provisioning_config = DataFactoryCompute.provisioning_configuration()\n", - " data_factory = ComputeTarget.create(workspace, factory_name, provisioning_config)\n", - " data_factory.wait_for_provisioning()\n", - " return data_factory\n", - " else:\n", - " raise e\n", - " \n", - "data_factory_compute = get_or_create_data_factory(ws, data_factory_name)\n", - "\n", - "print(\"setup data factory account complete\")\n", - "\n", - "# CLI:\n", - "# Create: az ml computetarget setup datafactory -n \n", - "# BYOC: az ml computetarget attach datafactory -n -i " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a DataTransferStep" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**DataTransferStep** is used to transfer data between Azure Blob, Azure Data Lake Store, and Azure SQL database.\n", - "\n", - "- **name:** Name of module\n", - "- **source_data_reference:** Input connection that serves as source of data transfer operation.\n", - "- **destination_data_reference:** Input connection that serves as destination of data transfer operation.\n", - "- **compute_target:** Azure Data Factory to use for transferring data.\n", - "- **allow_reuse:** Whether the step should reuse results of previous DataTransferStep when run with same inputs. Set as False to force data to be transferred again.\n", - "\n", - "Optional arguments to explicitly specify whether a path corresponds to a file or a directory. These are useful when storage contains both file and directory with the same name or when creating a new destination path.\n", - "\n", - "- **source_reference_type:** An optional string specifying the type of source_data_reference. Possible values include: 'file', 'directory'. When not specified, we use the type of existing path or directory if it's a new path.\n", - "- **destination_reference_type:** An optional string specifying the type of destination_data_reference. Possible values include: 'file', 'directory'. When not specified, we use the type of existing path or directory if it's a new path." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "transfer_adls_to_blob = DataTransferStep(\n", - " name=\"transfer_adls_to_blob\",\n", - " source_data_reference=adls_data_ref,\n", - " destination_data_reference=blob_data_ref,\n", - " compute_target=data_factory_compute)\n", - "\n", - "print(\"data transfer step created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Build and Submit the Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline = Pipeline(\n", - " description=\"data_transfer_101\",\n", - " workspace=ws,\n", - " steps=[transfer_adls_to_blob])\n", - "\n", - "pipeline_run = Experiment(ws, \"Data_Transfer_example\").submit(pipeline)\n", - "pipeline_run.wait_for_completion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### View Run Details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Next: Databricks as a Compute Target\n", - "To use Databricks as a compute target from Azure Machine Learning Pipeline, a DatabricksStep is used. This [notebook](./aml-pipelines-use-databricks-as-compute-target.ipynb) demonstrates the use of a DatabricksStep in an Azure Machine Learning Pipeline." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "diray" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/aml-pipelines-getting-started.ipynb b/pipeline/aml-pipelines-getting-started.ipynb deleted file mode 100644 index 516b7aab..00000000 --- a/pipeline/aml-pipelines-getting-started.ipynb +++ /dev/null @@ -1,631 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Azure Machine Learning Pipelines: Getting Started\n", - "\n", - "## Overview\n", - "\n", - "Read [Azure Machine Learning Pipelines](https://docs.microsoft.com/en-us/azure/machine-learning/service/concept-ml-pipelines) overview, or the [readme article](./README.md) on Azure Machine Learning Pipelines to get more information.\n", - " \n", - "\n", - "This Notebook shows basic construction of a **pipeline** that runs jobs unattended in different compute clusters. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites and Azure Machine Learning Basics\n", - "Make sure you go through the configuration Notebook located at https://github.com/Azure/MachineLearningNotebooks first if you haven't. This sets you up with a working config file that has information on your workspace, subscription id, etc. \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Installing Packages\n", - "These packages are used at later stages." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install pandas\n", - "!pip install requests" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Enabling Widgets\n", - "\n", - "Install the following jupyter extensions to support Azure Machine Learning widgets." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install azureml.widgets\n", - "!jupyter nbextension install --py --user azureml.widgets\n", - "!jupyter nbextension enable --py --user azureml.widgets" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Azure Machine Learning Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import azureml.core\n", - "from azureml.core import Workspace, Run, Experiment, Datastore\n", - "from azureml.core.compute import AmlCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "from azureml.core.compute import DataFactoryCompute\n", - "from azureml.widgets import RunDetails\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pipeline SDK-specific imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.data.data_reference import DataReference\n", - "from azureml.pipeline.core import Pipeline, PipelineData, StepSequence\n", - "from azureml.pipeline.steps import PythonScriptStep\n", - "from azureml.pipeline.steps import DataTransferStep\n", - "from azureml.pipeline.core import PublishedPipeline\n", - "from azureml.pipeline.core.graph import PipelineParameter\n", - "\n", - "print(\"Pipeline SDK-specific imports completed\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialize Workspace\n", - "\n", - "Initialize a [workspace](https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.workspace(class%29) object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')\n", - "\n", - "# Default datastore (Azure file storage)\n", - "def_file_store = ws.get_default_datastore() \n", - "# The above call is equivalent to Datastore(ws, \"workspacefilestore\") or simply Datastore(ws)\n", - "print(\"Default datastore's name: {}\".format(def_file_store.name))\n", - "\n", - "# Blob storage associated with the workspace\n", - "# The following call GETS the Azure Blob Store associated with your workspace.\n", - "# Note that workspaceblobstore is **the name of this store and CANNOT BE CHANGED and must be used as is** \n", - "def_blob_store = Datastore(ws, \"workspaceblobstore\")\n", - "print(\"Blobstore's name: {}\".format(def_blob_store.name))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# project folder\n", - "project_folder = '.'\n", - " \n", - "print('Sample projects will be created in {}.'.format(project_folder))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Required data and script files for the the tutorial\n", - "Sample files required to finish this tutorial are already copied to the project folder specified above. Even though the .py provided in the samples don't have much \"ML work,\" as a data scientist, you will work on this extensively as part of your work. To complete this tutorial, the contents of these files are not very important. The one-line files are for demostration purpose only." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Datastore concepts\n", - "A [Datastore](https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.datastore(class) is a place where data can be stored that is then made accessible to a compute either by means of mounting or copying the data to the compute target. \n", - "\n", - "A Datastore can either be backed by an Azure File Storage (default) or by an Azure Blob Storage.\n", - "\n", - "In this next step, we will upload the training and test set into the workspace's default storage (File storage), and another piece of data to Azure Blob Storage. When to use [Azure Blobs](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction), [Azure Files](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction), or [Azure Disks](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/managed-disks-overview) is [detailed here](https://docs.microsoft.com/en-us/azure/storage/common/storage-decide-blobs-files-disks).\n", - "\n", - "**Please take good note of the concept of the datastore.**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Upload data to default datastore\n", - "Default datastore on workspace is the Azure File storage. The workspace has a Blob storage associated with it as well. Let's upload a file to each of these storages." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get_default_datastore() gets the default Azure File Store associated with your workspace.\n", - "# Here we are reusing the def_file_store object we obtained earlier\n", - "\n", - "# target_path is the directory at the destination\n", - "def_file_store.upload_files(['./20news.pkl'], \n", - " target_path = '20newsgroups', \n", - " overwrite = True, \n", - " show_progress = True)\n", - "\n", - "# Here we are reusing the def_blob_store we created earlier\n", - "def_blob_store.upload_files([\"./20news.pkl\"], target_path=\"20newsgroups\", overwrite=True)\n", - "\n", - "print(\"Upload calls completed\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### (Optional) See your files using Azure Portal\n", - "Once you successfully uploaded the files, you can browse to them (or upload more files) using [Azure Portal](https://portal.azure.com). At the portal, make sure you have selected **AzureML Nursery** as your subscription (click *Resource Groups* and then select the subscription). Then look for your **Machine Learning Workspace** (it has your *alias* as the name). It has a link to your storage. Click on the storage link. It will take you to a page where you can see [Blobs](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction), [Files](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction), [Tables](https://docs.microsoft.com/en-us/azure/storage/tables/table-storage-overview), and [Queues](https://docs.microsoft.com/en-us/azure/storage/queues/storage-queues-introduction). We have just uploaded a file to the Blob storage and another one to the File storage. You should be able to see both of these files in their respective locations. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Compute Targets\n", - "A compute target specifies where to execute your program such as a remote Docker on a VM, or a cluster. A compute target needs to be addressable and accessible by you.\n", - "\n", - "**You need at least one compute target to send your payload to. We are planning to use Azure Machine Learning Compute exclusively for this tutorial for all steps. However in some cases you may require multiple compute targets as some steps may run in one compute target like Azure Machine Learning Compute, and some other steps in the same pipeline could run in a different compute target.**\n", - "\n", - "*The example belows show creating/retrieving/attaching to an Azure Machine Learning Compute instance.*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### List of Compute Targets on the workspace" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cts = ws.compute_targets\n", - "for ct in cts:\n", - " print(ct)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Retrieve or create a Azure Machine Learning compute\n", - "Azure Machine Learning Compute is a service for provisioning and managing clusters of Azure virtual machines for running machine learning workloads. Let's create a new Azure Machine Learning Compute in the current workspace, if it doesn't already exist. We will then run the training script on this compute target.\n", - "\n", - "If we could not find the compute with the given name in the previous cell, then we will create a new compute here. We will create an Azure Machine Learning Compute containing **STANDARD_D2_V2 CPU VMs**. This process is broken down into the following steps:\n", - "\n", - "1. Create the configuration\n", - "2. Create the Azure Machine Learning compute\n", - "\n", - "**This process will take about 3 minutes and is providing only sparse output in the process. Please make sure to wait until the call returns before moving to the next cell.**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "aml_compute_target = \"aml-compute\"\n", - "try:\n", - " aml_compute = AmlCompute(ws, aml_compute_target)\n", - " print(\"found existing compute target.\")\n", - "except:\n", - " print(\"creating new compute target\")\n", - " \n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = \"STANDARD_D2_V2\",\n", - " min_nodes = 1, \n", - " max_nodes = 4) \n", - " aml_compute = ComputeTarget.create(ws, aml_compute_target, provisioning_config)\n", - " aml_compute.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - "print(\"Azure Machine Learning Compute attached\")\n", - "# For a more detailed view of current Azure Machine Learning Compute status, use the 'status' property \n", - "print(aml_compute.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Wait for this call to finish before proceeding (you will see the asterisk turning to a number).**\n", - "\n", - "Now that you have created the compute target, let's see what the workspace's compute_targets() function returns. You should now see one entry named 'amlcompute' of type AmlCompute." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Now that we have completed learning the basics of Azure Machine Learning (AML), let's go ahead and start understanding the Pipeline concepts.**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating a Step in a Pipeline\n", - "A Step is a unit of execution. Step typically needs a target of execution (compute target), a script to execute, and may require script arguments and inputs, and can produce outputs. The step also could take a number of other parameters. Azure Machine Learning Pipelines provides the following built-in Steps:\n", - "\n", - "- [**PythonScriptStep**](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-steps/azureml.pipeline.steps.python_script_step.pythonscriptstep?view=azure-ml-py): Add a step to run a Python script in a Pipeline.\n", - "- [**AdlaStep**](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-steps/azureml.pipeline.steps.adla_step.adlastep?view=azure-ml-py): Adds a step to run U-SQL script using Azure Data Lake Analytics.\n", - "- [**DataTransferStep**](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-steps/azureml.pipeline.steps.data_transfer_step.datatransferstep?view=azure-ml-py): Transfers data between Azure Blob and Data Lake accounts.\n", - "- [**DatabricksStep**](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-steps/azureml.pipeline.steps.databricks_step.databricksstep?view=azure-ml-py): Adds a DataBricks notebook as a step in a Pipeline.\n", - "- [**HyperDriveStep**](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-steps/azureml.pipeline.steps.hyper_drive_step.hyperdrivestep?view=azure-ml-py): Creates a Hyper Drive step for Hyper Parameter Tuning in a Pipeline.\n", - "\n", - "The following code will create a PythonScriptStep to be executed in the Azure Machine Learning Compute we created above using train.py, one of the files already made available in the project folder.\n", - "\n", - "A **PythonScriptStep** is a basic, built-in step to run a Python Script on a compute target. It takes a script name and optionally other parameters like arguments for the script, compute target, inputs and outputs. If no compute target is specified, default compute target for the workspace is used." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Uses default values for PythonScriptStep construct.\n", - "\n", - "# Syntax\n", - "# PythonScriptStep(\n", - "# script_name, \n", - "# name=None, \n", - "# arguments=None, \n", - "# compute_target=None, \n", - "# runconfig=None, \n", - "# inputs=None, \n", - "# outputs=None, \n", - "# params=None, \n", - "# source_directory=None, \n", - "# allow_reuse=True, \n", - "# version=None, \n", - "# hash_paths=None)\n", - "# This returns a Step\n", - "step1 = PythonScriptStep(name=\"train_step\",\n", - " script_name=\"train.py\", \n", - " compute_target=aml_compute, \n", - " source_directory=project_folder,\n", - " allow_reuse=False)\n", - "print(\"Step1 created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note:** In the above call to PythonScriptStep(), the flag *allow_reuse* determines whether the step should reuse previous results when run with the same settings/inputs. This flag's default value is *True*; the default is set to *True* because, when inputs and parameters have not changed, we typically do not want to re-run a given pipeline step. \n", - "\n", - "If *allow_reuse* is set to *False*, a new run will always be generated for this step during pipeline execution. The *allow_reuse* flag can come in handy in situations where you do *not* want to re-run a pipeline step." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running a few steps in parallel\n", - "Here we are looking at a simple scenario where we are running a few steps (all involving PythonScriptStep) in parallel. Running nodes in **parallel** is the default behavior for steps in a pipeline.\n", - "\n", - "We already have one step defined earlier. Let's define few more steps." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# All steps use files already available in the project_folder\n", - "# All steps use the same Azure Machine Learning compute target as well\n", - "step2 = PythonScriptStep(name=\"compare_step\",\n", - " script_name=\"compare.py\", \n", - " compute_target=aml_compute, \n", - " source_directory=project_folder)\n", - "\n", - "step3 = PythonScriptStep(name=\"extract_step\",\n", - " script_name=\"extract.py\", \n", - " compute_target=aml_compute, \n", - " source_directory=project_folder)\n", - "\n", - "# list of steps to run\n", - "steps = [step1, step2, step3]\n", - "print(\"Step lists created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Build the pipeline\n", - "Once we have the steps (or steps collection), we can build the [pipeline](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.pipeline.pipeline?view=azure-ml-py). By deafult, all these steps will run in **parallel** once we submit the pipeline for run.\n", - "\n", - "A pipeline is created with a list of steps and a workspace. Submit a pipeline using [submit](https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.experiment%28class%29?view=azure-ml-py#submit). When submit is called, a [PipelineRun](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.pipelinerun?view=azure-ml-py) is created which in turn creates [StepRun](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.steprun?view=azure-ml-py) objects for each step in the workflow." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Syntax\n", - "# Pipeline(workspace, \n", - "# steps, \n", - "# description=None, \n", - "# default_datastore_name=None, \n", - "# default_source_directory=None, \n", - "# resolve_closure=True, \n", - "# _workflow_provider=None, \n", - "# _service_endpoint=None)\n", - "\n", - "pipeline1 = Pipeline(workspace=ws, steps=steps)\n", - "print (\"Pipeline is built\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Validate the pipeline\n", - "You have the option to [validate](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.pipeline.pipeline?view=azure-ml-py#validate) the pipeline prior to submitting for run. The platform runs validation steps such as checking for circular dependencies and parameter checks etc. even if you do not explicitly call validate method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline1.validate()\n", - "print(\"Pipeline validation complete\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit the pipeline\n", - "[Submitting](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.pipeline.pipeline?view=azure-ml-py#submit) the pipeline involves creating an [Experiment](https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.experiment?view=azure-ml-py) object and providing the built pipeline for submission. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Submit syntax\n", - "# submit(experiment_name, \n", - "# pipeline_parameters=None, \n", - "# continue_on_node_failure=False, \n", - "# regenerate_outputs=False)\n", - "\n", - "pipeline_run1 = Experiment(ws, 'Hello_World1').submit(pipeline1, regenerate_outputs=True)\n", - "print(\"Pipeline is submitted for execution\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note:** If regenerate_outputs is set to True, a new submit will always force generation of all step outputs, and disallow data reuse for any step of this run. Once this run is complete, however, subsequent runs may reuse the results of this run.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Examine the pipeline run\n", - "\n", - "#### Use RunDetails Widget\n", - "We are going to use the RunDetails widget to examine the run of the pipeline. You can click each row below to get more details on the step runs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "RunDetails(pipeline_run1).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Use Pipeline SDK objects\n", - "You can cycle through the node_run objects and examine job logs, stdout, and stderr of each of the steps." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "step_runs = pipeline_run1.get_children()\n", - "for step_run in step_runs:\n", - " status = step_run.get_status()\n", - " print('Script:', step_run.name, 'status:', status)\n", - " \n", - " # Change this if you want to see details even if the Step has succeeded.\n", - " if status == \"Failed\":\n", - " joblog = step_run.get_job_log()\n", - " print('job log:', joblog)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Get additonal run details\n", - "If you wait until the pipeline_run is finished, you may be able to get additional details on the run. **Since this is a blocking call, the following code is commented out.**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#pipeline_run1.wait_for_completion()\n", - "#for step_run in pipeline_run1.get_children():\n", - "# print(\"{}: {}\".format(step_run.name, step_run.get_metrics()))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running a few steps in sequence\n", - "Now let's see how we run a few steps in sequence. We already have three steps defined earlier. Let's *reuse* those steps for this part.\n", - "\n", - "We will reuse step1, step2, step3, but build the pipeline in such a way that we chain step3 after step2 and step2 after step1. Note that there is no explicit data dependency between these steps, but still steps can be made dependent by using the [run_after](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.builder.pipelinestep?view=azure-ml-py#run-after) construct." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "step2.run_after(step1)\n", - "step3.run_after(step2)\n", - "\n", - "# Try a loop\n", - "#step2.run_after(step3)\n", - "\n", - "# Now, construct the pipeline using the steps.\n", - "\n", - "# We can specify the \"final step\" in the chain, \n", - "# Pipeline will take care of \"transitive closure\" and \n", - "# figure out the implicit or explicit dependencies\n", - "# https://www.geeksforgeeks.org/transitive-closure-of-a-graph/\n", - "pipeline2 = Pipeline(workspace=ws, steps=[step3])\n", - "print (\"Pipeline is built\")\n", - "\n", - "pipeline2.validate()\n", - "print(\"Simple validation complete\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline_run2 = Experiment(ws, 'Hello_World2').submit(pipeline2)\n", - "print(\"Pipeline is submitted for execution\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "RunDetails(pipeline_run2).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Next: Pipelines with data dependency\n", - "The next [notebook](./aml-pipelines-with-data-dependency-steps.ipynb) demostrates how to construct a pipeline with data dependency." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "diray" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/aml-pipelines-publish-and-run-using-rest-endpoint.ipynb b/pipeline/aml-pipelines-publish-and-run-using-rest-endpoint.ipynb deleted file mode 100644 index b32381e8..00000000 --- a/pipeline/aml-pipelines-publish-and-run-using-rest-endpoint.ipynb +++ /dev/null @@ -1,358 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# How to Publish a Pipeline and Invoke the REST endpoint\n", - "In this notebook, we will see how we can publish a pipeline and then invoke the REST endpoint." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites and Azure Machine Learning Basics\n", - "Make sure you go through the configuration Notebook located at https://github.com/Azure/MachineLearningNotebooks first if you haven't. This sets you up with a working config file that has information on your workspace, subscription id, etc. \n", - "\n", - "### Initialization Steps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import azureml.core\n", - "from azureml.core import Workspace, Run, Experiment, Datastore\n", - "from azureml.core.compute import AmlCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "from azureml.core.compute import DataFactoryCompute\n", - "from azureml.widgets import RunDetails\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)\n", - "\n", - "from azureml.data.data_reference import DataReference\n", - "from azureml.pipeline.core import Pipeline, PipelineData, StepSequence\n", - "from azureml.pipeline.steps import PythonScriptStep\n", - "from azureml.pipeline.steps import DataTransferStep\n", - "from azureml.pipeline.core import PublishedPipeline\n", - "from azureml.pipeline.core.graph import PipelineParameter\n", - "\n", - "print(\"Pipeline SDK-specific imports completed\")\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')\n", - "\n", - "# Default datastore (Azure file storage)\n", - "def_file_store = ws.get_default_datastore() \n", - "print(\"Default datastore's name: {}\".format(def_file_store.name))\n", - "\n", - "def_blob_store = Datastore(ws, \"workspaceblobstore\")\n", - "print(\"Blobstore's name: {}\".format(def_blob_store.name))\n", - "\n", - "# project folder\n", - "project_folder = '.'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Compute Targets\n", - "#### Retrieve an already attached Azure Machine Learning Compute" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "aml_compute_target = \"aml-compute\"\n", - "try:\n", - " aml_compute = AmlCompute(ws, aml_compute_target)\n", - " print(\"found existing compute target.\")\n", - "except:\n", - " print(\"creating new compute target\")\n", - " \n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = \"STANDARD_D2_V2\",\n", - " min_nodes = 1, \n", - " max_nodes = 4) \n", - " aml_compute = ComputeTarget.create(ws, aml_compute_target, provisioning_config)\n", - " aml_compute.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - "print(aml_compute.status.serialize())\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Building Pipeline Steps with Inputs and Outputs\n", - "As mentioned earlier, a step in the pipeline can take data as input. This data can be a data source that lives in one of the accessible data locations, or intermediate data produced by a previous step in the pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Reference the data uploaded to blob storage using DataReference\n", - "# Assign the datasource to blob_input_data variable\n", - "blob_input_data = DataReference(\n", - " datastore=def_blob_store,\n", - " data_reference_name=\"test_data\",\n", - " path_on_datastore=\"20newsgroups/20news.pkl\")\n", - "print(\"DataReference object created\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define intermediate data using PipelineData\n", - "processed_data1 = PipelineData(\"processed_data1\",datastore=def_blob_store)\n", - "print(\"PipelineData object created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Define a Step that consumes a datasource and produces intermediate data.\n", - "In this step, we define a step that consumes a datasource and produces intermediate data.\n", - "\n", - "**Open `train.py` in the local machine and examine the arguments, inputs, and outputs for the script. That will give you a good sense of why the script argument names used below are important.** " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# trainStep consumes the datasource (Datareference) in the previous step\n", - "# and produces processed_data1\n", - "trainStep = PythonScriptStep(\n", - " script_name=\"train.py\", \n", - " arguments=[\"--input_data\", blob_input_data, \"--output_train\", processed_data1],\n", - " inputs=[blob_input_data],\n", - " outputs=[processed_data1],\n", - " compute_target=aml_compute, \n", - " source_directory=project_folder\n", - ")\n", - "print(\"trainStep created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Define a Step that consumes intermediate data and produces intermediate data\n", - "In this step, we define a step that consumes an intermediate data and produces intermediate data.\n", - "\n", - "**Open `extract.py` in the local machine and examine the arguments, inputs, and outputs for the script. That will give you a good sense of why the script argument names used below are important.** " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# extractStep to use the intermediate data produced by step4\n", - "# This step also produces an output processed_data2\n", - "processed_data2 = PipelineData(\"processed_data2\", datastore=def_blob_store)\n", - "\n", - "extractStep = PythonScriptStep(\n", - " script_name=\"extract.py\",\n", - " arguments=[\"--input_extract\", processed_data1, \"--output_extract\", processed_data2],\n", - " inputs=[processed_data1],\n", - " outputs=[processed_data2],\n", - " compute_target=aml_compute, \n", - " source_directory=project_folder)\n", - "print(\"extractStep created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Define a Step that consumes multiple intermediate data and produces intermediate data\n", - "In this step, we define a step that consumes multiple intermediate data and produces intermediate data." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### PipelineParameter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This step also has a [PipelineParameter](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.graph.pipelineparameter?view=azure-ml-py) argument that help with calling the REST endpoint of the published pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# We will use this later in publishing pipeline\n", - "pipeline_param = PipelineParameter(name=\"pipeline_arg\", default_value=10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Open `compare.py` in the local machine and examine the arguments, inputs, and outputs for the script. That will give you a good sense of why the script argument names used below are important.**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Now define step6 that takes two inputs (both intermediate data), and produce an output\n", - "processed_data3 = PipelineData(\"processed_data3\", datastore=def_blob_store)\n", - "\n", - "\n", - "\n", - "compareStep = PythonScriptStep(\n", - " script_name=\"compare.py\",\n", - " arguments=[\"--compare_data1\", processed_data1, \"--compare_data2\", processed_data2, \"--output_compare\", processed_data3, \"--pipeline_param\", pipeline_param],\n", - " inputs=[processed_data1, processed_data2],\n", - " outputs=[processed_data3], \n", - " compute_target=aml_compute, \n", - " source_directory=project_folder)\n", - "print(\"compareStep created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Build the pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline1 = Pipeline(workspace=ws, steps=[compareStep])\n", - "print (\"Pipeline is built\")\n", - "\n", - "pipeline1.validate()\n", - "print(\"Simple validation complete\") " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Publish the pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "published_pipeline1 = pipeline1.publish(name=\"My_New_Pipeline\", description=\"My Published Pipeline Description\")\n", - "print(published_pipeline1.id)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run published pipeline using its REST endpoint" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.authentication import AzureCliAuthentication\n", - "import requests\n", - "\n", - "cli_auth = AzureCliAuthentication()\n", - "aad_token = cli_auth.get_authentication_header()\n", - "\n", - "rest_endpoint1 = published_pipeline1.endpoint\n", - "\n", - "print(rest_endpoint1)\n", - "\n", - "# specify the param when running the pipeline\n", - "response = requests.post(rest_endpoint1, \n", - " headers=aad_token, \n", - " json={\"ExperimentName\": \"My_Pipeline1\",\n", - " \"RunSource\": \"SDK\",\n", - " \"ParameterAssignments\": {\"pipeline_arg\": 45}})\n", - "run_id = response.json()[\"Id\"]\n", - "\n", - "print(run_id)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Next: Data Transfer\n", - "The next [notebook](./aml-pipelines-data-transfer.ipynb) will showcase data transfer steps between different types of data stores." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "diray" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/aml-pipelines-use-adla-as-compute-target.ipynb b/pipeline/aml-pipelines-use-adla-as-compute-target.ipynb deleted file mode 100644 index 3740f027..00000000 --- a/pipeline/aml-pipelines-use-adla-as-compute-target.ipynb +++ /dev/null @@ -1,348 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# AML Pipeline with AdlaStep\n", - "This notebook is used to demonstrate the use of AdlaStep in AML Pipeline." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## AML and Pipeline SDK-specific imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import azureml.core\n", - "from azureml.core.compute import ComputeTarget, DatabricksCompute\n", - "from azureml.exceptions import ComputeTargetException\n", - "from azureml.core import Workspace, Run, Experiment\n", - "from azureml.pipeline.core import Pipeline, PipelineData\n", - "from azureml.pipeline.steps import AdlaStep\n", - "from azureml.core.datastore import Datastore\n", - "from azureml.data.data_reference import DataReference\n", - "from azureml.core import attach_legacy_compute_target\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration. Make sure the config file is present at .\\config.json" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "script_folder = '.'\n", - "experiment_name = \"adla_101_experiment\"\n", - "ws._initialize_folder(experiment_name=experiment_name, directory=script_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Register Datastore" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# un-comment the following and replace the strings with the \n", - "# correct values for your ADLS datastore\n", - "\n", - "# workspace=\"\"\n", - "# subscription_id = \"\"\n", - "# resource_group = \"\"\n", - "# store_name = \"\"\n", - "# tenant_id = \"\"\n", - "# client_id = \"\"\n", - "# client_secret = \"\"\n", - "\n", - "\n", - "try:\n", - " adls_datastore = Datastore.get(ws, datastore_name)\n", - " print(\"found datastore with name: %s\" % datastore_name)\n", - "except:\n", - " adls_datastore = Datastore.register_azure_data_lake(\n", - " workspace=ws,\n", - " datastore_name=datastore_name,\n", - " subscription_id=subscription_id, # subscription id of ADLS account\n", - " resource_group=resource_group, # resource group of ADLS account\n", - " store_name=store_name, # ADLS account name\n", - " tenant_id=tenant_id, # tenant id of service principal\n", - " client_id=client_id, # client id of service principal\n", - " client_secret=client_secret) # the secret of service principal\n", - " print(\"registered datastore with name: %s\" % datastore_name)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create DataReferences and PipelineData\n", - "\n", - "In the code cell below, replace datastorename with your default datastore name. Copy the file `testdata.txt` (located in the pipeline folder that this notebook is in) to the path on the datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "datastorename = \"TestAdlsDatastore\"\n", - "\n", - "adls_datastore = Datastore(workspace=ws, name=datastorename)\n", - "script_input = DataReference(\n", - " datastore=adls_datastore,\n", - " data_reference_name=\"script_input\",\n", - " path_on_datastore=\"testdata/testdata.txt\")\n", - "\n", - "script_output = PipelineData(\"script_output\", datastore=adls_datastore)\n", - "\n", - "print(\"Created Pipeline Data\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Data Lake Account\n", - "\n", - "ADLA can only use data that is located in the default data store associated with that ADLA account. Through Azure portal, check the name of the default data store corresponding to the ADLA account you are using below. Replace the value associated with `adla_compute_name` in the code cell below accordingly." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "adla_compute_name = 'testadl' # Replace this with your default compute\n", - "\n", - "from azureml.core.compute import ComputeTarget, AdlaCompute\n", - "\n", - "def get_or_create_adla_compute(workspace, compute_name):\n", - " try:\n", - " return AdlaCompute(workspace, compute_name)\n", - " except ComputeTargetException as e:\n", - " if 'ComputeTargetNotFound' in e.message:\n", - " print('adla compute not found, creating...')\n", - " provisioning_config = AdlaCompute.provisioning_configuration()\n", - " adla_compute = ComputeTarget.create(workspace, compute_name, provisioning_config)\n", - " adla_compute.wait_for_completion()\n", - " return adla_compute\n", - " else:\n", - " raise e\n", - " \n", - "adla_compute = get_or_create_adla_compute(ws, adla_compute_name)\n", - "\n", - "# CLI:\n", - "# Create: az ml computetarget setup adla -n \n", - "# BYOC: az ml computetarget attach adla -n -i " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once the above code cell completes, run the below to check your ADLA compute status:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"ADLA compute state:{}\".format(adla_compute.provisioning_state))\n", - "print(\"ADLA compute state:{}\".format(adla_compute.provisioning_errors))\n", - "print(\"Using ADLA compute:{}\".format(adla_compute.cluster_resource_id))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create an AdlaStep" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**AdlaStep** is used to run U-SQL script using Azure Data Lake Analytics.\n", - "\n", - "- **name:** Name of module\n", - "- **script_name:** name of U-SQL script\n", - "- **inputs:** List of input port bindings\n", - "- **outputs:** List of output port bindings\n", - "- **adla_compute:** the ADLA compute to use for this job\n", - "- **params:** Dictionary of name-value pairs to pass to U-SQL job *(optional)*\n", - "- **degree_of_parallelism:** the degree of parallelism to use for this job *(optional)*\n", - "- **priority:** the priority value to use for the current job *(optional)*\n", - "- **runtime_version:** the runtime version of the Data Lake Analytics engine *(optional)*\n", - "- **root_folder:** folder that contains the script, assemblies etc. *(optional)*\n", - "- **hash_paths:** list of paths to hash to detect a change (script file is always hashed) *(optional)*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "adla_step = AdlaStep(\n", - " name='adla_script_step',\n", - " script_name='test_adla_script.usql',\n", - " inputs=[script_input],\n", - " outputs=[script_output],\n", - " compute_target=adla_compute)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Build and Submit the Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline = Pipeline(\n", - " description=\"adla_102\",\n", - " workspace=ws, \n", - " steps=[adla_step],\n", - " default_source_directory=script_folder)\n", - "\n", - "pipeline_run = Experiment(workspace, experiment_name).submit(pipeline)\n", - "pipeline_run.wait_for_completion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### View Run Details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Examine the run\n", - "You can cycle through the node_run objects and examine job logs, stdout, and stderr of each of the steps." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "step_runs = pipeline_run.get_children()\n", - "for step_run in step_runs:\n", - " status = step_run.get_status()\n", - " print('node', step_run.name, 'status:', status)\n", - " if status == \"Failed\":\n", - " joblog = step_run.get_job_log()\n", - " print('job log:', joblog)\n", - " stdout_log = step_run.get_stdout_log()\n", - " print('stdout log:', stdout_log)\n", - " stderr_log = step_run.get_stderr_log()\n", - " print('stderr log:', stderr_log)\n", - " with open(\"logs-\" + step_run.name + \".txt\", \"w\") as f:\n", - " f.write(joblog)\n", - " print(\"Job log written to logs-\"+ step_run.name + \".txt\")\n", - " if status == \"Finished\":\n", - " stdout_log = step_run.get_stdout_log()\n", - " print('stdout log:', stdout_log)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "diray" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/aml-pipelines-use-databricks-as-compute-target.ipynb b/pipeline/aml-pipelines-use-databricks-as-compute-target.ipynb deleted file mode 100644 index 3c792fdc..00000000 --- a/pipeline/aml-pipelines-use-databricks-as-compute-target.ipynb +++ /dev/null @@ -1,651 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using Databricks as a Compute Target from Azure Machine Learning Pipeline\n", - "To use Databricks as a compute target from [Azure Machine Learning Pipeline](https://docs.microsoft.com/en-us/azure/machine-learning/service/concept-ml-pipelines), a [DatabricksStep](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-steps/azureml.pipeline.steps.databricks_step.databricksstep?view=azure-ml-py) is used. This notebook demonstrates the use of DatabricksStep in Azure Machine Learning Pipeline.\n", - "\n", - "The notebook will show:\n", - "1. Running an arbitrary Databricks notebook that the customer has in Databricks workspace\n", - "2. Running an arbitrary Python script that the customer has in DBFS\n", - "3. Running an arbitrary Python script that is available on local computer (will upload to DBFS, and then run in Databricks) \n", - "4. Running a JAR job that the customer has in DBFS.\n", - "\n", - "## Before you begin:\n", - "\n", - "1. **Create an Azure Databricks workspace** in the same subscription where you have your Azure Machine Learning workspace. You will need details of this workspace later on to define DatabricksStep. [Click here](https://ms.portal.azure.com/#blade/HubsExtension/Resources/resourceType/Microsoft.Databricks%2Fworkspaces) for more information.\n", - "2. **Create PAT (access token)**: Manually create a Databricks access token at the Azure Databricks portal. See [this](https://docs.databricks.com/api/latest/authentication.html#generate-a-token) for more information.\n", - "3. **Add demo notebook to ADB**: This notebook has a sample you can use as is. Launch Azure Databricks attached to your Azure Machine Learning workspace and add a new notebook. \n", - "4. **Create/attach a Blob storage** for use from ADB" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Add demo notebook to ADB Workspace\n", - "Copy and paste the below code to create a new notebook in your ADB workspace." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```python\n", - "# direct access\n", - "dbutils.widgets.get(\"myparam\")\n", - "p = getArgument(\"myparam\")\n", - "print (\"Param -\\'myparam':\")\n", - "print (p)\n", - "\n", - "dbutils.widgets.get(\"input\")\n", - "i = getArgument(\"input\")\n", - "print (\"Param -\\'input':\")\n", - "print (i)\n", - "\n", - "dbutils.widgets.get(\"output\")\n", - "o = getArgument(\"output\")\n", - "print (\"Param -\\'output':\")\n", - "print (o)\n", - "\n", - "n = i + \"/testdata.txt\"\n", - "df = spark.read.csv(n)\n", - "\n", - "display (df)\n", - "\n", - "data = [('value1', 'value2')]\n", - "df2 = spark.createDataFrame(data)\n", - "\n", - "z = o + \"/output.txt\"\n", - "df2.write.csv(z)\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Azure Machine Learning and Pipeline SDK-specific imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import azureml.core\n", - "from azureml.core.runconfig import JarLibrary\n", - "from azureml.core.compute import ComputeTarget, DatabricksCompute\n", - "from azureml.exceptions import ComputeTargetException\n", - "from azureml.core import Workspace, Run, Experiment\n", - "from azureml.pipeline.core import Pipeline, PipelineData\n", - "from azureml.pipeline.steps import DatabricksStep\n", - "from azureml.core.datastore import Datastore\n", - "from azureml.data.data_reference import DataReference\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration. Make sure the config file is present at .\\config.json" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Attach Databricks compute target\n", - "Next, you need to add your Databricks workspace to Azure Machine Learning as a compute target and give it a name. You will use this name to refer to your Databricks workspace compute target inside Azure Machine Learning.\n", - "\n", - "- **Resource Group** - The resource group name of your Azure Machine Learning workspace\n", - "- **Databricks Workspace Name** - The workspace name of your Azure Databricks workspace\n", - "- **Databricks Access Token** - The access token you created in ADB" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Replace with your account info before running.\n", - "\n", - "# db_compute_name = \"\"\n", - "# aml_resource_group = \"\"\n", - "# db_workspace_name = \"\"\n", - "# access_token = \"\"\n", - "\n", - "try:\n", - " databricks_compute = ComputeTarget(workspace=ws, name=db_compute_name)\n", - " print('Compute target {} already exists'.format(db_compute_name))\n", - "except ComputeTargetException:\n", - " print('compute not found')\n", - " print('databricks_compute_name {}'.format(db_compute_name))\n", - " print('databricks_resource_id {}'.format(db_workspace_name))\n", - " print('databricks_access_token {}'.format(access_token))\n", - "\n", - " config = DatabricksCompute.attach_configuration(aml_resource_group, db_workspace_name, access_token)\n", - " ComputeTarget.attach(ws, db_compute_name, config)\n", - " databricks_compute.wait_for_completion(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Data Connections with Inputs and Outputs\n", - "The DatabricksStep supports Azure Bloband ADLS for inputs and outputs. You also will need to define a [Secrets](https://docs.azuredatabricks.net/user-guide/secrets/index.html) scope to enable authentication to external data sources such as Blob and ADLS from Databricks.\n", - "\n", - "- Databricks documentation on [Azure Blob](https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-storage.html)\n", - "- Databricks documentation on [ADLS](https://docs.databricks.com/spark/latest/data-sources/azure/azure-datalake.html)\n", - "\n", - "### Type of Data Access\n", - "Databricks allows to interact with Azure Blob and ADLS in two ways.\n", - "- **Direct Access**: Databricks allows you to interact with Azure Blob or ADLS URIs directly. The input or output URIs will be mapped to a Databricks widget param in the Databricks notebook.\n", - "- **Mouting**: You will be supplied with additional parameters and secrets that will enable you to mount your ADLS or Azure Blob input or output location in your Databricks notebook." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Direct Access: Python sample code\n", - "If you have a data reference named \"input\" it will represent the URI of the input and you can access it directly in the Databricks python notebook like so:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```python\n", - "dbutils.widgets.get(\"input\")\n", - "y = getArgument(\"input\")\n", - "df = spark.read.csv(y)\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Mounting: Python sample code for Azure Blob\n", - "Given an Azure Blob data reference named \"input\" the following widget params will be made available in the Databricks notebook:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```python\n", - "# This contains the input URI\n", - "dbutils.widgets.get(\"input\")\n", - "myinput_uri = getArgument(\"input\")\n", - "\n", - "# How to get the input datastore name inside ADB notebook\n", - "# This contains the name of a Databricks secret (in the predefined \"amlscope\" secret scope) \n", - "# that contians an access key or sas for the Azure Blob input (this name is obtained by appending \n", - "# the name of the input with \"_blob_secretname\". \n", - "dbutils.widgets.get(\"input_blob_secretname\") \n", - "myinput_blob_secretname = getArgument(\"input_blob_secretname\")\n", - "\n", - "# This contains the required configuration for mounting\n", - "dbutils.widgets.get(\"input_blob_config\")\n", - "myinput_blob_config = getArgument(\"input_blob_config\")\n", - "\n", - "# Usage\n", - "dbutils.fs.mount(\n", - " source = myinput_uri,\n", - " mount_point = \"/mnt/input\",\n", - " extra_configs = {myinput_blob_config:dbutils.secrets.get(scope = \"amlscope\", key = myinput_blob_secretname)})\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Mounting: Python sample code for ADLS\n", - "Given an ADLS data reference named \"input\" the following widget params will be made available in the Databricks notebook:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```python\n", - "# This contains the input URI\n", - "dbutils.widgets.get(\"input\") \n", - "myinput_uri = getArgument(\"input\")\n", - "\n", - "# This contains the client id for the service principal \n", - "# that has access to the adls input\n", - "dbutils.widgets.get(\"input_adls_clientid\") \n", - "myinput_adls_clientid = getArgument(\"input_adls_clientid\")\n", - "\n", - "# This contains the name of a Databricks secret (in the predefined \"amlscope\" secret scope) \n", - "# that contains the secret for the above mentioned service principal\n", - "dbutils.widgets.get(\"input_adls_secretname\") \n", - "myinput_adls_secretname = getArgument(\"input_adls_secretname\")\n", - "\n", - "# This contains the refresh url for the mounting configs\n", - "dbutils.widgets.get(\"input_adls_refresh_url\") \n", - "myinput_adls_refresh_url = getArgument(\"input_adls_refresh_url\")\n", - "\n", - "# Usage \n", - "configs = {\"dfs.adls.oauth2.access.token.provider.type\": \"ClientCredential\",\n", - " \"dfs.adls.oauth2.client.id\": myinput_adls_clientid,\n", - " \"dfs.adls.oauth2.credential\": dbutils.secrets.get(scope = \"amlscope\", key =myinput_adls_secretname),\n", - " \"dfs.adls.oauth2.refresh.url\": myinput_adls_refresh_url}\n", - "\n", - "dbutils.fs.mount(\n", - " source = myinput_uri,\n", - " mount_point = \"/mnt/output\",\n", - " extra_configs = configs)\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Use Databricks from Azure Machine Learning Pipeline\n", - "To use Databricks as a compute target from Azure Machine Learning Pipeline, a DatabricksStep is used. Let's define a datasource (via DataReference) and intermediate data (via PipelineData) to be used in DatabricksStep." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Use the default blob storage\n", - "def_blob_store = Datastore(ws, \"workspaceblobstore\")\n", - "print('Datastore {} will be used'.format(def_blob_store.name))\n", - "\n", - "# We are uploading a sample file in the local directory to be used as a datasource\n", - "def_blob_store.upload_files([\"./testdata.txt\"], target_path=\"dbtest\", overwrite=False)\n", - "\n", - "step_1_input = DataReference(datastore=def_blob_store, path_on_datastore=\"dbtest\",\n", - " data_reference_name=\"input\")\n", - "\n", - "step_1_output = PipelineData(\"output\", datastore=def_blob_store)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add a DatabricksStep\n", - "Adds a Databricks notebook as a step in a Pipeline.\n", - "- ***name:** Name of the Module\n", - "- **inputs:** List of input connections for data consumed by this step. Fetch this inside the notebook using dbutils.widgets.get(\"input\")\n", - "- **outputs:** List of output port definitions for outputs produced by this step. Fetch this inside the notebook using dbutils.widgets.get(\"output\")\n", - "- **spark_version:** Version of spark for the databricks run cluster. default value: 4.0.x-scala2.11\n", - "- **node_type:** Azure vm node types for the databricks run cluster. default value: Standard_D3_v2\n", - "- **num_workers:** Number of workers for the databricks run cluster\n", - "- **autoscale:** The autoscale configuration for the databricks run cluster\n", - "- **spark_env_variables:** Spark environment variables for the databricks run cluster (dictionary of {str:str}). default value: {'PYSPARK_PYTHON': '/databricks/python3/bin/python3'}\n", - "- ***notebook_path:** Path to the notebook in the databricks instance.\n", - "- **notebook_params:** Parameters for the databricks notebook (dictionary of {str:str}). Fetch this inside the notebook using dbutils.widgets.get(\"myparam\")\n", - "- **run_name:** Name in databricks for this run\n", - "- **timeout_seconds:** Timeout for the databricks run\n", - "- **maven_libraries:** maven libraries for the databricks run\n", - "- **pypi_libraries:** pypi libraries for the databricks run\n", - "- **egg_libraries:** egg libraries for the databricks run\n", - "- **jar_libraries:** jar libraries for the databricks run\n", - "- **rcran_libraries:** rcran libraries for the databricks run\n", - "- **databricks_compute:** Azure Databricks compute\n", - "- **databricks_compute_name:** Name of Azure Databricks compute\n", - "\n", - "\\* *denotes required fields* \n", - "*You must provide exactly one of num_workers or autoscale paramaters* \n", - "*You must provide exactly one of databricks_compute or databricks_compute_name parameters*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1. Running the demo notebook already added to the Databricks workspace\n", - "The commented out code in the below cell assumes that you have created a notebook called `demo_notebook` in Azure Databricks under your user folder so you can use `notebook_path = \"/Users/you@company.com/demo_notebook\"`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# notebook_path = \"/Users/you@company.com/demo_notebook\"\n", - "\n", - "dbNbStep = DatabricksStep(\n", - " name=\"DBNotebookInWS\",\n", - " inputs=[step_1_input],\n", - " outputs=[step_1_output],\n", - " num_workers=1,\n", - " notebook_path=notebook_path,\n", - " notebook_params={'myparam': 'testparam'},\n", - " run_name='DB_Notebook_demo',\n", - " compute_target=databricks_compute,\n", - " allow_reuse=False\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Build and submit the Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "steps = [dbNbStep]\n", - "pipeline = Pipeline(workspace=ws, steps=steps)\n", - "pipeline_run = Experiment(ws, 'DB_Notebook_demo').submit(pipeline)\n", - "pipeline_run.wait_for_completion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### View Run Details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2. Running a Python script that is already added in DBFS\n", - "To run a Python script that is already uploaded to DBFS, follow the instructions below. You will first upload the Python script to DBFS using the [CLI](https://docs.azuredatabricks.net/user-guide/dbfs-databricks-file-system.html).\n", - "\n", - "The commented out code in the below cell assumes that you have uploaded `train-db-dbfs.py` to the root folder in DBFS. You can upload `train-db-dbfs.py` to the root folder in DBFS using this commandline so you can use `python_script_path = \"dbfs:/train-db-dbfs.py\"`:\n", - "\n", - "```\n", - "dbfs cp ./train-db-dbfs.py dbfs:/train-db-dbfs.py\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "python_script_path = \"dbfs:/train-db-dbfs.py\"\n", - "\n", - "dbPythonInDbfsStep = DatabricksStep(\n", - " name=\"DBPythonInDBFS\",\n", - " inputs=[step_1_input],\n", - " num_workers=1,\n", - " python_script_path=python_script_path,\n", - " python_script_params={'--input_data'},\n", - " run_name='DB_Python_demo',\n", - " compute_target=databricks_compute,\n", - " allow_reuse=False\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Build and submit the Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "steps = [dbPythonInDbfsStep]\n", - "pipeline = Pipeline(workspace=ws, steps=steps)\n", - "pipeline_run = Experiment(ws, 'DB_Python_demo').submit(pipeline)\n", - "pipeline_run.wait_for_completion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### View Run Details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. Running a Python script in Databricks that currenlty is in local computer\n", - "To run a Python script that is currently in your local computer, follow the instructions below. \n", - "\n", - "The commented out code below code assumes that you have `train-db-local.py` in the `scripts` subdirectory under the current working directory.\n", - "\n", - "In this case, the Python script will be uploaded first to DBFS, and then the script will be run in Databricks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "python_script_name = \"train-db-local.py\"\n", - "source_directory = \".\"\n", - "\n", - "dbPythonInLocalMachineStep = DatabricksStep(\n", - " name=\"DBPythonInLocalMachine\",\n", - " inputs=[step_1_input],\n", - " num_workers=1,\n", - " python_script_name=python_script_name,\n", - " source_directory=source_directory,\n", - " run_name='DB_Python_Local_demo',\n", - " compute_target=databricks_compute,\n", - " allow_reuse=False\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Build and submit the Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "steps = [dbPythonInLocalMachineStep]\n", - "pipeline = Pipeline(workspace=ws, steps=steps)\n", - "pipeline_run = Experiment(ws, 'DB_Python_Local_demo').submit(pipeline)\n", - "pipeline_run.wait_for_completion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### View Run Details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4. Running a JAR job that is alreay added in DBFS\n", - "To run a JAR job that is already uploaded to DBFS, follow the instructions below. You will first upload the JAR file to DBFS using the [CLI](https://docs.azuredatabricks.net/user-guide/dbfs-databricks-file-system.html).\n", - "\n", - "The commented out code in the below cell assumes that you have uploaded `train-db-dbfs.jar` to the root folder in DBFS. You can upload `train-db-dbfs.jar` to the root folder in DBFS using this commandline so you can use `jar_library_dbfs_path = \"dbfs:/train-db-dbfs.jar\"`:\n", - "\n", - "```\n", - "dbfs cp ./train-db-dbfs.jar dbfs:/train-db-dbfs.jar\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "main_jar_class_name = \"com.microsoft.aeva.Main\"\n", - "jar_library_dbfs_path = \"dbfs:/train-db-dbfs.jar\"\n", - "\n", - "dbJarInDbfsStep = DatabricksStep(\n", - " name=\"DBJarInDBFS\",\n", - " inputs=[step_1_input],\n", - " num_workers=1,\n", - " main_class_name=main_jar_class_name,\n", - " jar_params={'arg1', 'arg2'},\n", - " run_name='DB_JAR_demo',\n", - " jar_libraries=[JarLibrary(jar_library_dbfs_path)],\n", - " compute_target=databricks_compute,\n", - " allow_reuse=False\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Build and submit the Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "steps = [dbJarInDbfsStep]\n", - "pipeline = Pipeline(workspace=ws, steps=steps)\n", - "pipeline_run = Experiment(ws, 'DB_JAR_demo').submit(pipeline)\n", - "pipeline_run.wait_for_completion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### View Run Details" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Next: ADLA as a Compute Target\n", - "To use ADLA as a compute target from Azure Machine Learning Pipeline, a AdlaStep is used. This [notebook](./aml-pipelines-use-adla-as-compute-target.ipynb) demonstrates the use of AdlaStep in Azure Machine Learning Pipeline." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "diray" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/aml-pipelines-with-data-dependency-steps.ipynb b/pipeline/aml-pipelines-with-data-dependency-steps.ipynb deleted file mode 100644 index 4cd7142c..00000000 --- a/pipeline/aml-pipelines-with-data-dependency-steps.ipynb +++ /dev/null @@ -1,409 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Azure Machine Learning Pipelines with Data Dependency\n", - "In this notebook, we will see how we can build a pipeline with implicit data dependancy." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites and Azure Machine Learning Basics\n", - "Make sure you go through the configuration Notebook located at https://github.com/Azure/MachineLearningNotebooks first if you haven't. This sets you up with a working config file that has information on your workspace, subscription id, etc. \n", - "\n", - "### Azure Machine Learning and Pipeline SDK-specific Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import azureml.core\n", - "from azureml.core import Workspace, Run, Experiment, Datastore\n", - "from azureml.core.compute import AmlCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "from azureml.core.compute import DataFactoryCompute\n", - "from azureml.widgets import RunDetails\n", - "\n", - "# Check core SDK version number\n", - "print(\"SDK version:\", azureml.core.VERSION)\n", - "\n", - "from azureml.data.data_reference import DataReference\n", - "from azureml.pipeline.core import Pipeline, PipelineData, StepSequence\n", - "from azureml.pipeline.steps import PythonScriptStep\n", - "from azureml.pipeline.steps import DataTransferStep\n", - "from azureml.pipeline.core import PublishedPipeline\n", - "from azureml.pipeline.core.graph import PipelineParameter\n", - "\n", - "print(\"Pipeline SDK-specific imports completed\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialize Workspace\n", - "\n", - "Initialize a [workspace](https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.workspace(class%29) object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create workspace" - ] - }, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')\n", - "\n", - "# Default datastore (Azure file storage)\n", - "def_file_store = ws.get_default_datastore() \n", - "print(\"Default datastore's name: {}\".format(def_file_store.name))\n", - "\n", - "def_blob_store = Datastore(ws, \"workspaceblobstore\")\n", - "print(\"Blobstore's name: {}\".format(def_blob_store.name))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# project folder\n", - "project_folder = '.'\n", - " \n", - "print('Sample projects will be created in {}.'.format(project_folder))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Required data and script files for the the tutorial\n", - "Sample files required to finish this tutorial are already copied to the project folder specified above. Even though the .py provided in the samples don't have much \"ML work,\" as a data scientist, you will work on this extensively as part of your work. To complete this tutorial, the contents of these files are not very important. The one-line files are for demostration purpose only." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Compute Targets\n", - "See the list of Compute Targets on the workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cts = ws.compute_targets\n", - "for ct in cts:\n", - " print(ct)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Retrieve or create a Aml compute\n", - "Azure Machine Learning Compute is a service for provisioning and managing clusters of Azure virtual machines for running machine learning workloads. Let's create a new Aml Compute in the current workspace, if it doesn't already exist. We will then run the training script on this compute target." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "aml_compute_target = \"aml-compute\"\n", - "try:\n", - " aml_compute = AmlCompute(ws, aml_compute_target)\n", - " print(\"found existing compute target.\")\n", - "except:\n", - " print(\"creating new compute target\")\n", - " \n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = \"STANDARD_D2_V2\",\n", - " min_nodes = 1, \n", - " max_nodes = 4) \n", - " aml_compute = ComputeTarget.create(ws, aml_compute_target, provisioning_config)\n", - " aml_compute.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - "print(\"Aml Compute attached\")\n", - "# For a more detailed view of current AmlCompute status, use the 'status' property \n", - "print(aml_compute.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Wait for this call to finish before proceeding (you will see the asterisk turning to a number).**\n", - "\n", - "Now that you have created the compute target, let's see what the workspace's compute_targets() function returns. You should now see one entry named 'amlcompute' of type AmlCompute." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Building Pipeline Steps with Inputs and Outputs\n", - "As mentioned earlier, a step in the pipeline can take data as input. This data can be a data source that lives in one of the accessible data locations, or intermediate data produced by a previous step in the pipeline.\n", - "\n", - "### Datasources\n", - "Datasource is represented by **[DataReference](https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.data.data_reference.datareference?view=azure-ml-py)** object and points to data that lives in or is accessible from Datastore. DataReference could be a pointer to a file or a directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Reference the data uploaded to blob storage using DataReference\n", - "# Assign the datasource to blob_input_data variable\n", - "\n", - "# DataReference(datastore, \n", - "# data_reference_name=None, \n", - "# path_on_datastore=None, \n", - "# mode='mount', \n", - "# path_on_compute=None, \n", - "# overwrite=False)\n", - "\n", - "blob_input_data = DataReference(\n", - " datastore=def_blob_store,\n", - " data_reference_name=\"test_data\",\n", - " path_on_datastore=\"20newsgroups/20news.pkl\")\n", - "print(\"DataReference object created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Intermediate/Output Data\n", - "Intermediate data (or output of a Step) is represented by **[PipelineData](https://docs.microsoft.com/en-us/python/api/azureml-pipeline-core/azureml.pipeline.core.pipelinedata?view=azure-ml-py)** object. PipelineData can be produced by one step and consumed in another step by providing the PipelineData object as an output of one step and the input of one or more steps.\n", - "\n", - "#### Constructing PipelineData\n", - "- **name:** [*Required*] Name of the data item within the pipeline graph\n", - "- **datastore_name:** Name of the Datastore to write this output to\n", - "- **output_name:** Name of the output\n", - "- **output_mode:** Specifies \"upload\" or \"mount\" modes for producing output (default: mount)\n", - "- **output_path_on_compute:** For \"upload\" mode, the path to which the module writes this output during execution\n", - "- **output_overwrite:** Flag to overwrite pre-existing data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define intermediate data using PipelineData\n", - "# Syntax\n", - "\n", - "# PipelineData(name, \n", - "# datastore=None, \n", - "# output_name=None, \n", - "# output_mode='mount', \n", - "# output_path_on_compute=None, \n", - "# output_overwrite=None, \n", - "# data_type=None, \n", - "# is_directory=None)\n", - "\n", - "# Naming the intermediate data as processed_data1 and assigning it to the variable processed_data1.\n", - "processed_data1 = PipelineData(\"processed_data1\",datastore=def_blob_store)\n", - "print(\"PipelineData object created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pipelines steps using datasources and intermediate data\n", - "Machine learning pipelines have many steps and these steps could use or reuse datasources and intermediate data. Here's how we construct such a pipeline:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Define a Step that consumes a datasource and produces intermediate data.\n", - "In this step, we define a step that consumes a datasource and produces intermediate data.\n", - "\n", - "**Open `train.py` in the local machine and examine the arguments, inputs, and outputs for the script. That will give you a good sense of why the script argument names used below are important.** " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# step4 consumes the datasource (Datareference) in the previous step\n", - "# and produces processed_data1\n", - "trainStep = PythonScriptStep(\n", - " script_name=\"train.py\", \n", - " arguments=[\"--input_data\", blob_input_data, \"--output_train\", processed_data1],\n", - " inputs=[blob_input_data],\n", - " outputs=[processed_data1],\n", - " compute_target=aml_compute, \n", - " source_directory=project_folder\n", - ")\n", - "print(\"trainStep created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Define a Step that consumes intermediate data and produces intermediate data\n", - "In this step, we define a step that consumes an intermediate data and produces intermediate data.\n", - "\n", - "**Open `extract.py` in the local machine and examine the arguments, inputs, and outputs for the script. That will give you a good sense of why the script argument names used below are important.** " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# step5 to use the intermediate data produced by step4\n", - "# This step also produces an output processed_data2\n", - "processed_data2 = PipelineData(\"processed_data2\", datastore=def_blob_store)\n", - "\n", - "extractStep = PythonScriptStep(\n", - " script_name=\"extract.py\",\n", - " arguments=[\"--input_extract\", processed_data1, \"--output_extract\", processed_data2],\n", - " inputs=[processed_data1],\n", - " outputs=[processed_data2],\n", - " compute_target=aml_compute, \n", - " source_directory=project_folder)\n", - "print(\"extractStep created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Define a Step that consumes multiple intermediate data and produces intermediate data\n", - "In this step, we define a step that consumes multiple intermediate data and produces intermediate data.\n", - "\n", - "**Open `compare.py` in the local machine and examine the arguments, inputs, and outputs for the script. That will give you a good sense of why the script argument names used below are important.**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Now define step6 that takes two inputs (both intermediate data), and produce an output\n", - "processed_data3 = PipelineData(\"processed_data3\", datastore=def_blob_store)\n", - "\n", - "compareStep = PythonScriptStep(\n", - " script_name=\"compare.py\",\n", - " arguments=[\"--compare_data1\", processed_data1, \"--compare_data2\", processed_data2, \"--output_compare\", processed_data3],\n", - " inputs=[processed_data1, processed_data2],\n", - " outputs=[processed_data3], \n", - " compute_target=aml_compute, \n", - " source_directory=project_folder)\n", - "print(\"compareStep created\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Build the pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline1 = Pipeline(workspace=ws, steps=[compareStep])\n", - "print (\"Pipeline is built\")\n", - "\n", - "pipeline1.validate()\n", - "print(\"Simple validation complete\") " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline_run1 = Experiment(ws, 'Data_dependency').submit(pipeline1)\n", - "print(\"Pipeline is submitted for execution\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "RunDetails(pipeline_run1).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Next: Publishing the Pipeline and calling it from the REST endpoint\n", - "See this [notebook](./aml-pipelines-publish-and-run-using-rest-endpoint.ipynb) to understand how the pipeline is published and you can call the REST endpoint to run the pipeline." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "diray" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/batch_scoring.py b/pipeline/batch_scoring.py deleted file mode 100644 index dfd135bd..00000000 --- a/pipeline/batch_scoring.py +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import os -import argparse -import datetime -import time -import tensorflow as tf -from math import ceil -import numpy as np -import shutil -from tensorflow.contrib.slim.python.slim.nets import inception_v3 -from azureml.core.model import Model - -slim = tf.contrib.slim - -parser = argparse.ArgumentParser(description="Start a tensorflow model serving") -parser.add_argument('--model_name', dest="model_name", required=True) -parser.add_argument('--label_dir', dest="label_dir", required=True) -parser.add_argument('--dataset_path', dest="dataset_path", required=True) -parser.add_argument('--output_dir', dest="output_dir", required=True) -parser.add_argument('--batch_size', dest="batch_size", type=int, required=True) - -args = parser.parse_args() - -image_size = 299 -num_channel = 3 - -# create output directory if it does not exist -os.makedirs(args.output_dir, exist_ok=True) - - -def get_class_label_dict(label_file): - label = [] - proto_as_ascii_lines = tf.gfile.GFile(label_file).readlines() - for l in proto_as_ascii_lines: - label.append(l.rstrip()) - return label - - -class DataIterator: - def __init__(self, data_dir): - self.file_paths = [] - image_list = os.listdir(data_dir) - # total_size = len(image_list) - self.file_paths = [data_dir + '/' + file_name.rstrip() for file_name in image_list] - - self.labels = [1 for file_name in self.file_paths] - - @property - def size(self): - return len(self.labels) - - def input_pipeline(self, batch_size): - images_tensor = tf.convert_to_tensor(self.file_paths, dtype=tf.string) - labels_tensor = tf.convert_to_tensor(self.labels, dtype=tf.int64) - input_queue = tf.train.slice_input_producer([images_tensor, labels_tensor], shuffle=False) - labels = input_queue[1] - images_content = tf.read_file(input_queue[0]) - - image_reader = tf.image.decode_jpeg(images_content, channels=num_channel, name="jpeg_reader") - float_caster = tf.cast(image_reader, tf.float32) - new_size = tf.constant([image_size, image_size], dtype=tf.int32) - images = tf.image.resize_images(float_caster, new_size) - images = tf.divide(tf.subtract(images, [0]), [255]) - - image_batch, label_batch = tf.train.batch([images, labels], batch_size=batch_size, capacity=5 * batch_size) - return image_batch - - -def main(_): - # start_time = datetime.datetime.now() - label_file_name = os.path.join(args.label_dir, "labels.txt") - label_dict = get_class_label_dict(label_file_name) - classes_num = len(label_dict) - test_feeder = DataIterator(data_dir=args.dataset_path) - total_size = len(test_feeder.labels) - count = 0 - # get model from model registry - model_path = Model.get_model_path(args.model_name) - with tf.Session() as sess: - test_images = test_feeder.input_pipeline(batch_size=args.batch_size) - with slim.arg_scope(inception_v3.inception_v3_arg_scope()): - input_images = tf.placeholder(tf.float32, [args.batch_size, image_size, image_size, num_channel]) - logits, _ = inception_v3.inception_v3(input_images, - num_classes=classes_num, - is_training=False) - probabilities = tf.argmax(logits, 1) - - sess.run(tf.global_variables_initializer()) - sess.run(tf.local_variables_initializer()) - coord = tf.train.Coordinator() - threads = tf.train.start_queue_runners(sess=sess, coord=coord) - saver = tf.train.Saver() - saver.restore(sess, model_path) - out_filename = os.path.join(args.output_dir, "result-labels.txt") - with open(out_filename, "w") as result_file: - i = 0 - while count < total_size and not coord.should_stop(): - test_images_batch = sess.run(test_images) - file_names_batch = test_feeder.file_paths[i * args.batch_size: - min(test_feeder.size, (i + 1) * args.batch_size)] - results = sess.run(probabilities, feed_dict={input_images: test_images_batch}) - new_add = min(args.batch_size, total_size - count) - count += new_add - i += 1 - for j in range(new_add): - result_file.write(os.path.basename(file_names_batch[j]) + ": " + label_dict[results[j]] + "\n") - result_file.flush() - coord.request_stop() - coord.join(threads) - - # copy the file to artifacts - shutil.copy(out_filename, "./outputs/") - # Move the processed data out of the blob so that the next run can process the data. - - -if __name__ == "__main__": - tf.app.run() diff --git a/pipeline/compare.py b/pipeline/compare.py deleted file mode 100644 index 21054c0e..00000000 --- a/pipeline/compare.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import argparse -import os - -print("In compare.py") -print("As a data scientist, this is where I use my compare code.") -parser = argparse.ArgumentParser("compare") -parser.add_argument("--compare_data1", type=str, help="compare_data1 data") -parser.add_argument("--compare_data2", type=str, help="compare_data2 data") -parser.add_argument("--output_compare", type=str, help="output_compare directory") - -args = parser.parse_args() - -print("Argument 1: %s" % args.compare_data1) -print("Argument 2: %s" % args.compare_data2) -print("Argument 3: %s" % args.output_compare) - -if not (args.output_compare is None): - os.makedirs(args.output_compare, exist_ok=True) - print("%s created" % args.output_compare) diff --git a/pipeline/extract.py b/pipeline/extract.py deleted file mode 100644 index 0134a090..00000000 --- a/pipeline/extract.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import argparse -import os - -print("In extract.py") -print("As a data scientist, this is where I use my extract code.") - -parser = argparse.ArgumentParser("extract") -parser.add_argument("--input_extract", type=str, help="input_extract data") -parser.add_argument("--output_extract", type=str, help="output_extract directory") - -args = parser.parse_args() - -print("Argument 1: %s" % args.input_extract) -print("Argument 2: %s" % args.output_extract) - -if not (args.output_extract is None): - os.makedirs(args.output_extract, exist_ok=True) - print("%s created" % args.output_extract) diff --git a/pipeline/pipeline-batch-scoring.ipynb b/pipeline/pipeline-batch-scoring.ipynb deleted file mode 100644 index db73c513..00000000 --- a/pipeline/pipeline-batch-scoring.ipynb +++ /dev/null @@ -1,573 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using Azure Machine Learning Pipelines for batch prediction\n", - "\n", - "In this notebook we will demonstrate how to run a batch scoring job using Azure Machine Learning pipelines. Our example job will be to take an already-trained image classification model, and run that model on some unlabeled images. The image classification model that we'll use is the __[Inception-V3 model](https://arxiv.org/abs/1512.00567)__ and we'll run this model on unlabeled images from the __[ImageNet](http://image-net.org/)__ dataset. \n", - "\n", - "The outline of this notebook is as follows:\n", - "\n", - "- Register the pretrained inception model into the model registry. \n", - "- Store the dataset images in a blob container.\n", - "- Use the registered model to do batch scoring on the images in the data blob container." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the configuration Notebook located at https://github.com/Azure/MachineLearningNotebooks first if you haven't. This sets you up with a working config file that has information on your workspace, subscription id, etc. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Datastore\n", - "from azureml.core import Experiment\n", - "from azureml.core.compute import AmlCompute, ComputeTarget\n", - "from azureml.core.conda_dependencies import CondaDependencies\n", - "from azureml.core.datastore import Datastore\n", - "from azureml.core.runconfig import CondaDependencies, RunConfiguration\n", - "from azureml.data.data_reference import DataReference\n", - "from azureml.pipeline.core import Pipeline, PipelineData\n", - "from azureml.pipeline.steps import PythonScriptStep" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from azureml.core import Workspace, Run, Experiment\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set up machine learning resources" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up datastores\n", - "First, let’s access the datastore that has the model, labels, and images. \n", - "\n", - "### Create a datastore that points to a blob container containing sample images\n", - "\n", - "We have created a public blob container `sampledata` on an account named `pipelinedata`, containing images from the ImageNet evaluation set. In the next step, we create a datastore with the name `images_datastore`, which points to this container. In the call to `register_azure_blob_container` below, setting the `overwrite` flag to `True` overwrites any datastore that was created previously with that name. \n", - "\n", - "This step can be changed to point to your blob container by providing your own `datastore_name`, `container_name`, and `account_name`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "account_name = \"pipelinedata\"\n", - "datastore_name=\"images_datastore\"\n", - "container_name=\"sampledata\"\n", - "\n", - "batchscore_blob = Datastore.register_azure_blob_container(ws, \n", - " datastore_name=datastore_name, \n", - " container_name= container_name, \n", - " account_name=account_name, \n", - " overwrite=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, let’s specify the default datastore for the outputs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def_data_store = ws.get_default_datastore()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configure data references\n", - "Now you need to add references to the data, as inputs to the appropriate pipeline steps in your pipeline. A data source in a pipeline is represented by a DataReference object. The DataReference object points to data that lives in, or is accessible from, a datastore. We need DataReference objects corresponding to the following: the directory containing the input images, the directory in which the pretrained model is stored, the directory containing the labels, and the output directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "input_images = DataReference(datastore=batchscore_blob, \n", - " data_reference_name=\"input_images\",\n", - " path_on_datastore=\"batchscoring/images\",\n", - " mode=\"download\"\n", - " )\n", - "model_dir = DataReference(datastore=batchscore_blob, \n", - " data_reference_name=\"input_model\",\n", - " path_on_datastore=\"batchscoring/models\",\n", - " mode=\"download\" \n", - " )\n", - "label_dir = DataReference(datastore=batchscore_blob, \n", - " data_reference_name=\"input_labels\",\n", - " path_on_datastore=\"batchscoring/labels\",\n", - " mode=\"download\" \n", - " )\n", - "output_dir = PipelineData(name=\"scores\", \n", - " datastore=def_data_store, \n", - " output_path_on_compute=\"batchscoring/results\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create and attach Compute targets\n", - "Use the below code to create and attach Compute targets. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "# choose a name for your cluster\n", - "aml_compute_name = os.environ.get(\"AML_COMPUTE_NAME\", \"gpu-cluster\")\n", - "cluster_min_nodes = os.environ.get(\"AML_COMPUTE_MIN_NODES\", 0)\n", - "cluster_max_nodes = os.environ.get(\"AML_COMPUTE_MAX_NODES\", 1)\n", - "vm_size = os.environ.get(\"AML_COMPUTE_SKU\", \"STANDARD_NC6\")\n", - "\n", - "\n", - "if aml_compute_name in ws.compute_targets:\n", - " compute_target = ws.compute_targets[aml_compute_name]\n", - " if compute_target and type(compute_target) is AmlCompute:\n", - " print('found compute target. just use it. ' + aml_compute_name)\n", - "else:\n", - " print('creating a new compute target...')\n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = vm_size, # NC6 is GPU-enabled\n", - " vm_priority = 'lowpriority', # optional\n", - " min_nodes = cluster_min_nodes, \n", - " max_nodes = cluster_max_nodes)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, aml_compute_name, provisioning_config)\n", - " \n", - " # can poll for a minimum number of nodes and for a specific timeout. \n", - " # if no min node count is provided it will use the scale settings for the cluster\n", - " compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - " # For a more detailed view of current Azure Machine Learning Compute status, use the 'status' property \n", - " print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prepare the Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Download the Model\n", - "\n", - "Download and extract the model from http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz to `\"models\"`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# create directory for model\n", - "model_dir = 'models'\n", - "if not os.path.isdir(model_dir):\n", - " os.mkdir(model_dir)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import tarfile\n", - "import urllib.request\n", - "\n", - "url=\"http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz\"\n", - "response = urllib.request.urlretrieve(url, \"model.tar.gz\")\n", - "tar = tarfile.open(\"model.tar.gz\", \"r:gz\")\n", - "tar.extractall(model_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Register the model with Workspace" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "from azureml.core.model import Model\n", - "\n", - "# register downloaded model \n", - "model = Model.register(model_path = \"models/inception_v3.ckpt\",\n", - " model_name = \"inception\", # this is the name the model is registered as\n", - " tags = {'pretrained': \"inception\"},\n", - " description = \"Imagenet trained tensorflow inception\",\n", - " workspace = ws)\n", - "# remove the downloaded dir after registration if you wish\n", - "shutil.rmtree(\"models\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Write your scoring script" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do the scoring, we use a batch scoring script `batch_scoring.py`, which is located in the same directory that this notebook is in. You can take a look at this script to see how you might modify it for your custom batch scoring task.\n", - "\n", - "The python script `batch_scoring.py` takes input images, applies the image classification model to these images, and outputs a classification result to a results file.\n", - "\n", - "The script `batch_scoring.py` takes the following parameters:\n", - "\n", - "- `--model_name`: the name of the model being used, which is expected to be in the `model_dir` directory\n", - "- `--label_dir` : the directory holding the `labels.txt` file \n", - "- `--dataset_path`: the directory containing the input images\n", - "- `--output_dir` : the script will run the model on the data and output a `results-label.txt` to this directory\n", - "- `--batch_size` : the batch size used in running the model.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Build and run the batch scoring pipeline\n", - "You have everything you need to build the pipeline. Let’s put all these together." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Specify the environment to run the script\n", - "Specify the conda dependencies for your script. You will need this object when you create the pipeline step later on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import DEFAULT_GPU_IMAGE\n", - "\n", - "cd = CondaDependencies.create(pip_packages=[\"tensorflow-gpu==1.10.0\", \"azureml-defaults\"])\n", - "\n", - "# Runconfig\n", - "amlcompute_run_config = RunConfiguration(conda_dependencies=cd)\n", - "amlcompute_run_config.environment.docker.enabled = True\n", - "amlcompute_run_config.environment.docker.gpu_support = True\n", - "amlcompute_run_config.environment.docker.base_image = DEFAULT_GPU_IMAGE\n", - "amlcompute_run_config.environment.spark.precache_packages = False" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Specify the parameters for your pipeline\n", - "A subset of the parameters to the python script can be given as input when we re-run a `PublishedPipeline`. In the current example, we define `batch_size` taken by the script as such parameter." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.pipeline.core.graph import PipelineParameter\n", - "batch_size_param = PipelineParameter(name=\"param_batch_size\", default_value=20)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create the pipeline step\n", - "Create the pipeline step using the script, environment configuration, and parameters. Specify the compute target you already attached to your workspace as the target of execution of the script. We will use PythonScriptStep to create the pipeline step." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "inception_model_name = \"inception_v3.ckpt\"\n", - "\n", - "batch_score_step = PythonScriptStep(\n", - " name=\"batch_scoring\",\n", - " script_name=\"batch_scoring.py\",\n", - " arguments=[\"--dataset_path\", input_images, \n", - " \"--model_name\", \"inception\",\n", - " \"--label_dir\", label_dir, \n", - " \"--output_dir\", output_dir, \n", - " \"--batch_size\", batch_size_param],\n", - " compute_target=compute_target,\n", - " inputs=[input_images, label_dir],\n", - " outputs=[output_dir],\n", - " runconfig=amlcompute_run_config\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run the pipeline\n", - "At this point you can run the pipeline and examine the output it produced. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline = Pipeline(workspace=ws, steps=[batch_score_step])\n", - "pipeline_run = Experiment(ws, 'batch_scoring').submit(pipeline, pipeline_params={\"param_batch_size\": 20})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor the run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline_run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Download and review output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "step_run = list(pipeline_run.get_children())[0]\n", - "step_run.download_file(\"./outputs/result-labels.txt\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "df = pd.read_csv(\"result-labels.txt\", delimiter=\":\", header=None)\n", - "df.columns = [\"Filename\", \"Prediction\"]\n", - "df.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Publish a pipeline and rerun using a REST call" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a published pipeline\n", - "Once you are satisfied with the outcome of the run, you can publish the pipeline to run it with different input values later. When you publish a pipeline, you will get a REST endpoint that accepts invoking of the pipeline with the set of parameters you have already incorporated above using PipelineParameter." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "published_pipeline = pipeline_run.publish_pipeline(\n", - " name=\"Inception_v3_scoring\", description=\"Batch scoring using Inception v3 model\", version=\"1.0\")\n", - "\n", - "published_id = published_pipeline.id" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Rerun the pipeline using the REST endpoint" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Get AAD token" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.authentication import AzureCliAuthentication\n", - "import requests\n", - "\n", - "cli_auth = AzureCliAuthentication()\n", - "aad_token = cli_auth.get_authentication_header()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run published pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.pipeline.core import PublishedPipeline\n", - "\n", - "rest_endpoint = published_pipeline.endpoint\n", - "# specify batch size when running the pipeline\n", - "response = requests.post(rest_endpoint, \n", - " headers=aad_token, \n", - " json={\"ExperimentName\": \"batch_scoring\",\n", - " \"ParameterAssignments\": {\"param_batch_size\": 50}})\n", - "run_id = response.json()[\"Id\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor the new run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.pipeline.core.run import PipelineRun\n", - "published_pipeline_run = PipelineRun(ws.experiments[\"batch_scoring\"], run_id)\n", - "\n", - "RunDetails(published_pipeline_run).show()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "hichando" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/pipeline-style-transfer.ipynb b/pipeline/pipeline-style-transfer.ipynb deleted file mode 100644 index b1b6674c..00000000 --- a/pipeline/pipeline-style-transfer.ipynb +++ /dev/null @@ -1,610 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Neural style transfer on video\n", - "Using modified code from `pytorch`'s neural style [example](https://pytorch.org/tutorials/advanced/neural_style_tutorial.html), we show how to setup a pipeline for doing style transfer on video. The pipeline has following steps:\n", - "1. Split a video into images\n", - "2. Run neural style on each image using one of the provided models (from `pytorch` pretrained models for this example).\n", - "3. Stitch the image back into a video." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the configuration Notebook located at https://github.com/Azure/MachineLearningNotebooks first if you haven't. This sets you up with a working config file that has information on your workspace, subscription id, etc. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from azureml.core import Workspace, Run, Experiment\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')\n", - "\n", - "scripts_folder = \"scripts_folder\"\n", - "\n", - "if not os.path.isdir(scripts_folder):\n", - " os.mkdir(scripts_folder)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import AmlCompute, ComputeTarget\n", - "from azureml.core.datastore import Datastore\n", - "from azureml.data.data_reference import DataReference\n", - "from azureml.pipeline.core import Pipeline, PipelineData\n", - "from azureml.pipeline.steps import PythonScriptStep, MpiStep\n", - "from azureml.core.runconfig import CondaDependencies, RunConfiguration" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Create or use existing compute" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# AmlCompute\n", - "cpu_cluster_name = \"cpucluster\"\n", - "try:\n", - " cpu_cluster = AmlCompute(ws, cpu_cluster_name)\n", - " print(\"found existing cluster.\")\n", - "except:\n", - " print(\"creating new cluster\")\n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = \"STANDARD_D2_v2\",\n", - " max_nodes = 1)\n", - "\n", - " # create the cluster\n", - " cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, provisioning_config)\n", - " cpu_cluster.wait_for_completion(show_output=True)\n", - " \n", - "# AmlCompute\n", - "gpu_cluster_name = \"gpucluster\"\n", - "try:\n", - " gpu_cluster = AmlCompute(ws, gpu_cluster_name)\n", - " print(\"found existing cluster.\")\n", - "except:\n", - " print(\"creating new cluster\")\n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = \"STANDARD_NC6\",\n", - " max_nodes = 3)\n", - "\n", - " # create the cluster\n", - " gpu_cluster = ComputeTarget.create(ws, gpu_cluster_name, provisioning_config)\n", - " gpu_cluster.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Python Scripts\n", - "We use an edited version of `neural_style_mpi.py` (original is [here](https://github.com/pytorch/examples/blob/master/fast_neural_style/neural_style/neural_style_mpi.py)). Scripts to split and stitch the video are thin wrappers to calls to `ffmpeg`. \n", - "\n", - "We install `ffmpeg` through conda dependencies." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy(\"neural_style_mpi.py\", scripts_folder)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $scripts_folder/process_video.py\n", - "import argparse\n", - "import glob\n", - "import os\n", - "import subprocess\n", - "\n", - "parser = argparse.ArgumentParser(description=\"Process input video\")\n", - "parser.add_argument('--input_video', required=True)\n", - "parser.add_argument('--output_audio', required=True)\n", - "parser.add_argument('--output_images', required=True)\n", - "\n", - "args = parser.parse_args()\n", - "\n", - "os.makedirs(args.output_audio, exist_ok=True)\n", - "os.makedirs(args.output_images, exist_ok=True)\n", - "\n", - "subprocess.run(\"ffmpeg -i {} {}/video.aac\"\n", - " .format(args.input_video, args.output_audio),\n", - " shell=True, check=True\n", - " )\n", - "\n", - "subprocess.run(\"ffmpeg -i {} {}/%05d_video.jpg -hide_banner\"\n", - " .format(args.input_video, args.output_images),\n", - " shell=True, check=True\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $scripts_folder/stitch_video.py\n", - "import argparse\n", - "import os\n", - "import subprocess\n", - "\n", - "parser = argparse.ArgumentParser(description=\"Process input video\")\n", - "parser.add_argument('--images_dir', required=True)\n", - "parser.add_argument('--input_audio', required=True)\n", - "parser.add_argument('--output_dir', required=True)\n", - "\n", - "args = parser.parse_args()\n", - "\n", - "os.makedirs(args.output_dir, exist_ok=True)\n", - "\n", - "subprocess.run(\"ffmpeg -framerate 30 -i {}/%05d_video.jpg -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p \"\n", - " \"-y {}/video_without_audio.mp4\"\n", - " .format(args.images_dir, args.output_dir),\n", - " shell=True, check=True\n", - " )\n", - "\n", - "subprocess.run(\"ffmpeg -i {}/video_without_audio.mp4 -i {}/video.aac -map 0:0 -map 1:0 -vcodec \"\n", - " \"copy -acodec copy -y {}/video_with_audio.mp4\"\n", - " .format(args.output_dir, args.input_audio, args.output_dir),\n", - " shell=True, check=True\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# datastore for input video\n", - "account_name = \"happypathspublic\"\n", - "video_ds = Datastore.register_azure_blob_container(ws, \"videos\", \"videos\",\n", - " account_name=account_name, overwrite=True)\n", - "\n", - "# datastore for models\n", - "models_ds = Datastore.register_azure_blob_container(ws, \"models\", \"styletransfer\", \n", - " account_name=\"pipelinedata\", \n", - " overwrite=True)\n", - " \n", - "# downloaded models from https://pytorch.org/tutorials/advanced/neural_style_tutorial.html are kept here\n", - "models_dir = DataReference(data_reference_name=\"models\", datastore=models_ds, \n", - " path_on_datastore=\"saved_models\", mode=\"download\")\n", - "\n", - "# the default blob store attached to a workspace\n", - "default_datastore = ws.get_default_datastore()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Sample video" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "orangutan_video = DataReference(datastore=video_ds,\n", - " data_reference_name=\"video\",\n", - " path_on_datastore=\"orangutan.mp4\", mode=\"download\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cd = CondaDependencies()\n", - "\n", - "cd.add_channel(\"conda-forge\")\n", - "cd.add_conda_package(\"ffmpeg\")\n", - "\n", - "cd.add_channel(\"pytorch\")\n", - "cd.add_conda_package(\"pytorch\")\n", - "cd.add_conda_package(\"torchvision\")\n", - "\n", - "# Runconfig\n", - "amlcompute_run_config = RunConfiguration(conda_dependencies=cd)\n", - "amlcompute_run_config.environment.docker.enabled = True\n", - "amlcompute_run_config.environment.docker.gpu_support = True\n", - "amlcompute_run_config.environment.docker.base_image = \"pytorch/pytorch\"\n", - "amlcompute_run_config.environment.spark.precache_packages = False" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ffmpeg_audio = PipelineData(name=\"ffmpeg_audio\", datastore=default_datastore)\n", - "ffmpeg_images = PipelineData(name=\"ffmpeg_images\", datastore=default_datastore)\n", - "processed_images = PipelineData(name=\"processed_images\", datastore=default_datastore)\n", - "output_video = PipelineData(name=\"output_video\", datastore=default_datastore)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Define tweakable parameters to pipeline\n", - "These parameters can be changed when the pipeline is published and rerun from a REST call" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.pipeline.core.graph import PipelineParameter\n", - "# create a parameter for style (one of \"candy\", \"mosaic\", \"rain_princess\", \"udnie\") to transfer the images to\n", - "style_param = PipelineParameter(name=\"style\", default_value=\"mosaic\")\n", - "# create a parameter for the number of nodes to use in step no. 2 (style transfer)\n", - "nodecount_param = PipelineParameter(name=\"nodecount\", default_value=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "split_video_step = PythonScriptStep(\n", - " name=\"split video\",\n", - " script_name=\"process_video.py\",\n", - " arguments=[\"--input_video\", orangutan_video,\n", - " \"--output_audio\", ffmpeg_audio,\n", - " \"--output_images\", ffmpeg_images,\n", - " ],\n", - " compute_target=cpu_cluster,\n", - " inputs=[orangutan_video],\n", - " outputs=[ffmpeg_images, ffmpeg_audio],\n", - " runconfig=amlcompute_run_config,\n", - " source_directory=scripts_folder\n", - ")\n", - "\n", - "# create a MPI step for distributing style transfer step across multiple nodes in AmlCompute \n", - "# using 'nodecount_param' PipelineParameter\n", - "distributed_style_transfer_step = MpiStep(\n", - " name=\"mpi style transfer\",\n", - " script_name=\"neural_style_mpi.py\",\n", - " arguments=[\"--content-dir\", ffmpeg_images,\n", - " \"--output-dir\", processed_images,\n", - " \"--model-dir\", models_dir,\n", - " \"--style\", style_param,\n", - " \"--cuda\", 1\n", - " ],\n", - " compute_target=gpu_cluster,\n", - " node_count=nodecount_param, \n", - " process_count_per_node=1,\n", - " inputs=[models_dir, ffmpeg_images],\n", - " outputs=[processed_images],\n", - " pip_packages=[\"mpi4py\", \"torch\", \"torchvision\"],\n", - " runconfig=amlcompute_run_config,\n", - " use_gpu=True,\n", - " source_directory=scripts_folder\n", - ")\n", - "\n", - "stitch_video_step = PythonScriptStep(\n", - " name=\"stitch\",\n", - " script_name=\"stitch_video.py\",\n", - " arguments=[\"--images_dir\", processed_images, \n", - " \"--input_audio\", ffmpeg_audio, \n", - " \"--output_dir\", output_video],\n", - " compute_target=cpu_cluster,\n", - " inputs=[processed_images, ffmpeg_audio],\n", - " outputs=[output_video],\n", - " runconfig=amlcompute_run_config,\n", - " source_directory=scripts_folder\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Run the pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline = Pipeline(workspace=ws, steps=[stitch_video_step])\n", - "# submit the pipeline and provide values for the PipelineParameters used in the pipeline\n", - "pipeline_run = Experiment(ws, 'style_transfer').submit(pipeline, pipeline_params={\"style\": \"mosaic\", \"nodecount\": 3})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Monitor using widget" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(pipeline_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Downloads the video in `output_video` folder" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Download output video" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def download_video(run, target_dir=None):\n", - " stitch_run = run.find_step_run(\"stitch\")[0]\n", - " port_data = stitch_run.get_output_data(\"output_video\")\n", - " port_data.download(target_dir, show_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pipeline_run.wait_for_completion()\n", - "download_video(pipeline_run, \"output_video_mosaic\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Publish pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "published_pipeline = pipeline_run.publish_pipeline(\n", - " name=\"batch score style transfer\", description=\"style transfer\", version=\"1.0\")\n", - "\n", - "published_id = published_pipeline.id" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Re-run pipeline through REST calls for other styles" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get AAD token" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.authentication import AzureCliAuthentication\n", - "import requests\n", - "\n", - "cli_auth = AzureCliAuthentication()\n", - "aad_token = cli_auth.get_authentication_header()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get endpoint URL" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "rest_endpoint = published_pipeline.endpoint" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Send request and monitor" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# run the pipeline using PipelineParameter values style='candy' and nodecount=2\n", - "response = requests.post(rest_endpoint, \n", - " headers=aad_token,\n", - " json={\"ExperimentName\": \"style_transfer\",\n", - " \"ParameterAssignments\": {\"style\": \"candy\", \"nodecount\": 2}}) \n", - "run_id = response.json()[\"Id\"]\n", - "\n", - "from azureml.pipeline.core.run import PipelineRun\n", - "published_pipeline_run_candy = PipelineRun(ws.experiments[\"style_transfer\"], run_id)\n", - "\n", - "RunDetails(published_pipeline_run_candy).show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# run the pipeline using PipelineParameter values style='rain_princess' and nodecount=3\n", - "response = requests.post(rest_endpoint, \n", - " headers=aad_token,\n", - " json={\"ExperimentName\": \"style_transfer\",\n", - " \"ParameterAssignments\": {\"style\": \"rain_princess\", \"nodecount\": 3}}) \n", - "run_id = response.json()[\"Id\"]\n", - "\n", - "from azureml.pipeline.core.run import PipelineRun\n", - "published_pipeline_run_rain = PipelineRun(ws.experiments[\"style_transfer\"], run_id)\n", - "\n", - "RunDetails(published_pipeline_run_rain).show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# run the pipeline using PipelineParameter values style='udnie' and nodecount=4\n", - "response = requests.post(rest_endpoint, \n", - " headers=aad_token,\n", - " json={\"ExperimentName\": \"style_transfer\",\n", - " \"ParameterAssignments\": {\"style\": \"udnie\", \"nodecount\": 4}}) \n", - "run_id = response.json()[\"Id\"]\n", - "\n", - "from azureml.pipeline.core.run import PipelineRun\n", - "published_pipeline_run_udnie = PipelineRun(ws.experiments[\"style_transfer\"], run_id)\n", - "\n", - "RunDetails(published_pipeline_run_udnie).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Download output from re-run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "published_pipeline_run_candy.wait_for_completion()\n", - "published_pipeline_run_rain.wait_for_completion()\n", - "published_pipeline_run_udnie.wait_for_completion()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "download_video(published_pipeline_run_candy, target_dir=\"output_video_candy\")\n", - "download_video(published_pipeline_run_rain, target_dir=\"output_video_rain_princess\")\n", - "download_video(published_pipeline_run_udnie, target_dir=\"output_video_udnie\")" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "hichando" - } - ], - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pipeline/test_adla_script.usql b/pipeline/test_adla_script.usql deleted file mode 100644 index 9923ecba..00000000 --- a/pipeline/test_adla_script.usql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE DATABASE IF NOT EXISTS oneboxtest01; - - -@resourcereader = - EXTRACT query string - FROM "@@script_input@@" -USING Extractors.Csv(); - - -OUTPUT @resourcereader -TO "@@script_output@@" -USING Outputters.Csv(); \ No newline at end of file diff --git a/pipeline/testdata.txt b/pipeline/testdata.txt deleted file mode 100644 index e88ded96..00000000 --- a/pipeline/testdata.txt +++ /dev/null @@ -1 +0,0 @@ -Test1 \ No newline at end of file diff --git a/pipeline/train-db-dbfs.py b/pipeline/train-db-dbfs.py deleted file mode 100644 index 99b511af..00000000 --- a/pipeline/train-db-dbfs.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -print("In train.py") -print("As a data scientist, this is where I use my training code.") diff --git a/pipeline/train-db-local.py b/pipeline/train-db-local.py deleted file mode 100644 index 99b511af..00000000 --- a/pipeline/train-db-local.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -print("In train.py") -print("As a data scientist, this is where I use my training code.") diff --git a/pipeline/train.py b/pipeline/train.py deleted file mode 100644 index 961f5ebf..00000000 --- a/pipeline/train.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import argparse -import os - -print("In train.py") -print("As a data scientist, this is where I use my training code.") - -parser = argparse.ArgumentParser("train") - -parser.add_argument("--input_data", type=str, help="input data") -parser.add_argument("--output_train", type=str, help="output_train directory") - -args = parser.parse_args() - -print("Argument 1: %s" % args.input_data) -print("Argument 2: %s" % args.output_train) - -if not (args.output_train is None): - os.makedirs(args.output_train, exist_ok=True) - print("%s created" % args.output_train) diff --git a/project-brainwave/project-brainwave-custom-weights.ipynb b/project-brainwave/project-brainwave-custom-weights.ipynb deleted file mode 100644 index c5e44c36..00000000 --- a/project-brainwave/project-brainwave-custom-weights.ipynb +++ /dev/null @@ -1,625 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Model Development with Custom Weights" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This example shows how to retrain a model with custom weights and fine-tune the model with quantization, then deploy the model running on FPGA. Only Windows is supported. We use TensorFlow and Keras to build our model. We are going to use transfer learning, with ResNet50 as a featurizer. We don't use the last layer of ResNet50 in this case and instead add our own classification layer using Keras.\n", - "\n", - "The custom wegiths are trained with ImageNet on ResNet50. We will use the Kaggle Cats and Dogs dataset to retrain and fine-tune the model. The dataset can be downloaded [here](https://www.microsoft.com/en-us/download/details.aspx?id=54765). Download the zip and extract to a directory named 'catsanddogs' under your user directory (\"~/catsanddogs\"). \n", - "\n", - "Please set up your environment as described in the [quick start](project-brainwave-quickstart.ipynb)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import sys\n", - "import tensorflow as tf\n", - "import numpy as np\n", - "from keras import backend as K" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Environment\n", - "After you train your model in float32, you'll write the weights to a place on disk. We also need a location to store the models that get downloaded." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "custom_weights_dir = os.path.expanduser(\"~/custom-weights\")\n", - "saved_model_dir = os.path.expanduser(\"~/models\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prepare Data\n", - "Load the files we are going to use for training and testing. By default this notebook uses only a very small subset of the Cats and Dogs dataset. That makes it run relatively quickly." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import glob\n", - "import imghdr\n", - "datadir = os.path.expanduser(\"~/catsanddogs\")\n", - "\n", - "cat_files = glob.glob(os.path.join(datadir, 'PetImages', 'Cat', '*.jpg'))\n", - "dog_files = glob.glob(os.path.join(datadir, 'PetImages', 'Dog', '*.jpg'))\n", - "\n", - "# Limit the data set to make the notebook execute quickly.\n", - "cat_files = cat_files[:64]\n", - "dog_files = dog_files[:64]\n", - "\n", - "# The data set has a few images that are not jpeg. Remove them.\n", - "cat_files = [f for f in cat_files if imghdr.what(f) == 'jpeg']\n", - "dog_files = [f for f in dog_files if imghdr.what(f) == 'jpeg']\n", - "\n", - "if(not len(cat_files) or not len(dog_files)):\n", - " print(\"Please download the Kaggle Cats and Dogs dataset form https://www.microsoft.com/en-us/download/details.aspx?id=54765 and extract the zip to \" + datadir) \n", - " raise ValueError(\"Data not found\")\n", - "else:\n", - " print(cat_files[0])\n", - " print(dog_files[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Construct a numpy array as labels\n", - "image_paths = cat_files + dog_files\n", - "total_files = len(cat_files) + len(dog_files)\n", - "labels = np.zeros(total_files)\n", - "labels[len(cat_files):] = 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Split images data as training data and test data\n", - "from sklearn.model_selection import train_test_split\n", - "onehot_labels = np.array([[0,1] if i else [1,0] for i in labels])\n", - "img_train, img_test, label_train, label_test = train_test_split(image_paths, onehot_labels, random_state=42, shuffle=True)\n", - "\n", - "print(len(img_train), len(img_test), label_train.shape, label_test.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Construct Model\n", - "We use ResNet50 for the featuirzer and build our own classifier using Keras layers. We train the featurizer and the classifier as one model. The weights trained on ImageNet are used as the starting point for the retraining of our featurizer. The weights are loaded from tensorflow chkeckpoint files." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before passing image dataset to the ResNet50 featurizer, we need to preprocess the input file to get it into the form expected by ResNet50. ResNet50 expects float tensors representing the images in BGR, channel last order. We've provided a default implementation of the preprocessing that you can use." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import azureml.contrib.brainwave.models.utils as utils\n", - "\n", - "def preprocess_images():\n", - " # Convert images to 3D tensors [width,height,channel] - channels are in BGR order.\n", - " in_images = tf.placeholder(tf.string)\n", - " image_tensors = utils.preprocess_array(in_images)\n", - " return in_images, image_tensors" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use Keras layer APIs to construct the classifier. Because we're using the tensorflow backend, we can train this classifier in one session with our Resnet50 model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def construct_classifier(in_tensor):\n", - " from keras.layers import Dropout, Dense, Flatten\n", - " K.set_session(tf.get_default_session())\n", - " \n", - " FC_SIZE = 1024\n", - " NUM_CLASSES = 2\n", - "\n", - " x = Dropout(0.2, input_shape=(1, 1, 2048,))(in_tensor)\n", - " x = Dense(FC_SIZE, activation='relu', input_dim=(1, 1, 2048,))(x)\n", - " x = Flatten()(x)\n", - " preds = Dense(NUM_CLASSES, activation='softmax', input_dim=FC_SIZE, name='classifier_output')(x)\n", - " return preds" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now every component of the model is defined, we can construct the model. Constructing the model with the project brainwave models is two steps - first we import the graph definition, then we restore the weights of the model into a tensorflow session. Because the quantized graph defintion and the float32 graph defintion share the same node names in the graph definitions, we can initally train the weights in float32, and then reload them with the quantized operations (which take longer) to fine-tune the model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def construct_model(quantized, starting_weights_directory = None):\n", - " from azureml.contrib.brainwave.models import Resnet50, QuantizedResnet50\n", - " \n", - " # Convert images to 3D tensors [width,height,channel]\n", - " in_images, image_tensors = preprocess_images()\n", - "\n", - " # Construct featurizer using quantized or unquantized ResNet50 model\n", - " if not quantized:\n", - " featurizer = Resnet50(saved_model_dir)\n", - " else:\n", - " featurizer = QuantizedResnet50(saved_model_dir, custom_weights_directory = starting_weights_directory)\n", - "\n", - "\n", - " features = featurizer.import_graph_def(input_tensor=image_tensors)\n", - " # Construct classifier\n", - " preds = construct_classifier(features)\n", - " \n", - " # Initialize weights\n", - " sess = tf.get_default_session()\n", - " tf.global_variables_initializer().run()\n", - "\n", - " featurizer.restore_weights(sess)\n", - "\n", - " return in_images, image_tensors, features, preds, featurizer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train Model\n", - "First we train the model with custom weights but without quantization. Training is done with native float precision (32-bit floats). We load the traing data set and batch the training with 10 epochs. When the performance reaches desired level or starts decredation, we stop the training iteration and save the weights as tensorflow checkpoint files. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def read_files(files):\n", - " \"\"\" Read files to array\"\"\"\n", - " contents = []\n", - " for path in files:\n", - " with open(path, 'rb') as f:\n", - " contents.append(f.read())\n", - " return contents" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def train_model(preds, in_images, img_train, label_train, is_retrain = False, train_epoch = 10):\n", - " \"\"\" training model \"\"\"\n", - " from keras.objectives import binary_crossentropy\n", - " from tqdm import tqdm\n", - " \n", - " learning_rate = 0.001 if is_retrain else 0.01\n", - " \n", - " # Specify the loss function\n", - " in_labels = tf.placeholder(tf.float32, shape=(None, 2)) \n", - " cross_entropy = tf.reduce_mean(binary_crossentropy(in_labels, preds))\n", - " optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)\n", - "\n", - " def chunks(a, b, n):\n", - " \"\"\"Yield successive n-sized chunks from a and b.\"\"\"\n", - " if (len(a) != len(b)):\n", - " print(\"a and b are not equal in chunks(a,b,n)\")\n", - " raise ValueError(\"Parameter error\")\n", - "\n", - " for i in range(0, len(a), n):\n", - " yield a[i:i + n], b[i:i + n]\n", - "\n", - " chunk_size = 16\n", - " chunk_num = len(label_train) / chunk_size\n", - "\n", - " sess = tf.get_default_session()\n", - " for epoch in range(train_epoch):\n", - " avg_loss = 0\n", - " for img_chunk, label_chunk in tqdm(chunks(img_train, label_train, chunk_size)):\n", - " contents = read_files(img_chunk)\n", - " _, loss = sess.run([optimizer, cross_entropy],\n", - " feed_dict={in_images: contents,\n", - " in_labels: label_chunk,\n", - " K.learning_phase(): 1})\n", - " avg_loss += loss / chunk_num\n", - " print(\"Epoch:\", (epoch + 1), \"loss = \", \"{:.3f}\".format(avg_loss))\n", - " \n", - " # Reach desired performance\n", - " if (avg_loss < 0.001):\n", - " break" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def test_model(preds, in_images, img_test, label_test):\n", - " \"\"\"Test the model\"\"\"\n", - " from keras.metrics import categorical_accuracy\n", - "\n", - " in_labels = tf.placeholder(tf.float32, shape=(None, 2))\n", - " accuracy = tf.reduce_mean(categorical_accuracy(in_labels, preds))\n", - " contents = read_files(img_test)\n", - "\n", - " accuracy = accuracy.eval(feed_dict={in_images: contents,\n", - " in_labels: label_test,\n", - " K.learning_phase(): 0})\n", - " return accuracy" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Launch the training\n", - "tf.reset_default_graph()\n", - "sess = tf.Session(graph=tf.get_default_graph())\n", - "\n", - "with sess.as_default():\n", - " in_images, image_tensors, features, preds, featurizer = construct_model(quantized=False)\n", - " train_model(preds, in_images, img_train, label_train, is_retrain=False, train_epoch=10) \n", - " accuracy = test_model(preds, in_images, img_test, label_test) \n", - " print(\"Accuracy:\", accuracy)\n", - " featurizer.save_weights(custom_weights_dir + \"/rn50\", tf.get_default_session())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Test Model\n", - "After training, we evaluate the trained model's accuracy on test dataset with quantization. So that we know the model's performance if it is deployed on the FPGA." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tf.reset_default_graph()\n", - "sess = tf.Session(graph=tf.get_default_graph())\n", - "\n", - "with sess.as_default():\n", - " print(\"Testing trained model with quantization\")\n", - " in_images, image_tensors, features, preds, quantized_featurizer = construct_model(quantized=True, starting_weights_directory=custom_weights_dir)\n", - " accuracy = test_model(preds, in_images, img_test, label_test) \n", - " print(\"Accuracy:\", accuracy)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Fine-Tune Model\n", - "Sometimes, the model's accuracy can drop significantly after quantization. In those cases, we need to retrain the model enabled with quantization to get better model accuracy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if (accuracy < 0.93):\n", - " with sess.as_default():\n", - " print(\"Fine-tuning model with quantization\")\n", - " train_model(preds, in_images, img_train, label_train, is_retrain=True, train_epoch=10)\n", - " accuracy = test_model(preds, in_images, img_test, label_test) \n", - " print(\"Accuracy:\", accuracy)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Service Definition\n", - "Like in the QuickStart notebook our service definition pipeline consists of three stages. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.brainwave.pipeline import ModelDefinition, TensorflowStage, BrainWaveStage\n", - "\n", - "model_def_path = os.path.join(saved_model_dir, 'model_def.zip')\n", - "\n", - "model_def = ModelDefinition()\n", - "model_def.pipeline.append(TensorflowStage(sess, in_images, image_tensors))\n", - "model_def.pipeline.append(BrainWaveStage(sess, quantized_featurizer))\n", - "model_def.pipeline.append(TensorflowStage(sess, features, preds))\n", - "model_def.save(model_def_path)\n", - "print(model_def_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy\n", - "Go to our [GitHub repo](https://aka.ms/aml-real-time-ai) \"docs\" folder to learn how to create a Model Management Account and find the required information below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first time the code below runs it will create a new service running your model. If you want to change the model you can make changes above in this notebook and save a new service definition. Then this code will update the running service in place to run the new model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "from azureml.core.image import Image\n", - "from azureml.core.webservice import Webservice\n", - "from azureml.contrib.brainwave import BrainwaveWebservice, BrainwaveImage\n", - "from azureml.exceptions import WebserviceException\n", - "\n", - "model_name = \"catsanddogs-resnet50-model\"\n", - "image_name = \"catsanddogs-resnet50-image\"\n", - "service_name = \"modelbuild-service\"\n", - "\n", - "registered_model = Model.register(ws, model_def_path, model_name)\n", - "\n", - "image_config = BrainwaveImage.image_configuration()\n", - "deployment_config = BrainwaveWebservice.deploy_configuration()\n", - " \n", - "try:\n", - " service = Webservice(ws, service_name)\n", - " service.delete()\n", - " service = Webservice.deploy_from_model(ws, service_name, [registered_model], image_config, deployment_config)\n", - " service.wait_for_deployment(True)\n", - "except WebserviceException:\n", - " service = Webservice.deploy_from_model(ws, service_name, [registered_model], image_config, deployment_config)\n", - " service.wait_for_deployment(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The service is now running in Azure and ready to serve requests. We can check the address and port." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(service.ipAddress + ':' + str(service.port))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Client\n", - "There is a simple test client at amlrealtimeai.PredictionClient which can be used for testing. We'll use this client to score an image with our new service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.brainwave.client import PredictionClient\n", - "client = PredictionClient(service.ipAddress, service.port)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can adapt the client [code](../../pythonlib/amlrealtimeai/client.py) to meet your needs. There is also an example C# [client](../../sample-clients/csharp).\n", - "\n", - "The service provides an API that is compatible with TensorFlow Serving. There are instructions to download a sample client [here](https://www.tensorflow.org/serving/setup)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Request\n", - "Let's see how our service does on a few images. It may get a few wrong." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Specify an image to classify\n", - "print('CATS')\n", - "for image_file in cat_files[:8]:\n", - " results = client.score_image(image_file)\n", - " result = 'CORRECT ' if results[0] > results[1] else 'WRONG '\n", - " print(result + str(results))\n", - "print('DOGS')\n", - "for image_file in dog_files[:8]:\n", - " results = client.score_image(image_file)\n", - " result = 'CORRECT ' if results[1] > results[0] else 'WRONG '\n", - " print(result + str(results))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cleanup\n", - "Run the cell below to delete your service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "License for plot_confusion_matrix:\n", - "\n", - "New BSD License\n", - "\n", - "Copyright (c) 2007-2018 The scikit-learn developers.\n", - "All rights reserved.\n", - "\n", - "\n", - "Redistribution and use in source and binary forms, with or without\n", - "modification, are permitted provided that the following conditions are met:\n", - "\n", - " a. Redistributions of source code must retain the above copyright notice,\n", - " this list of conditions and the following disclaimer.\n", - " b. Redistributions in binary form must reproduce the above copyright\n", - " notice, this list of conditions and the following disclaimer in the\n", - " documentation and/or other materials provided with the distribution.\n", - " c. Neither the name of the Scikit-learn Developers nor the names of\n", - " its contributors may be used to endorse or promote products\n", - " derived from this software without specific prior written\n", - " permission. \n", - "\n", - "\n", - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n", - "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n", - "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n", - "ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR\n", - "ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n", - "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n", - "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n", - "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n", - "LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n", - "OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\n", - "DAMAGE.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "authors": [ - { - "name": "coverste" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/project-brainwave/project-brainwave-quickstart.ipynb b/project-brainwave/project-brainwave-quickstart.ipynb deleted file mode 100644 index 72a3c9da..00000000 --- a/project-brainwave/project-brainwave-quickstart.ipynb +++ /dev/null @@ -1,312 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Azure ML Hardware Accelerated Models Quickstart" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This tutorial will show you how to deploy an image recognition service based on the ResNet 50 classifier in just a few minutes using the Azure Machine Learning Accelerated AI service. Get more help from our [documentation](https://aka.ms/aml-real-time-ai) or [forum](https://aka.ms/aml-forum).\n", - "\n", - "We will use an accelerated ResNet50 featurizer running on an FPGA. This functionality is powered by Project Brainwave, which handles translating deep neural networks (DNN) into an FPGA program.\n", - "\n", - "## Request Quota\n", - "**IMPORTANT:** You must [request quota](https://aka.ms/aml-real-time-ai-request) and be approved before you can successfully run this notebook. Notebook 00 will show you how to create a workspace which you can use to request quota." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import tensorflow as tf" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Image preprocessing\n", - "We'd like our service to accept JPEG images as input. However the input to ResNet50 is a tensor. So we need code that decodes JPEG images and does the preprocessing required by ResNet50. The Accelerated AI service can execute TensorFlow graphs as part of the service and we'll use that ability to do the image preprocessing. This code defines a TensorFlow graph that preprocesses an array of JPEG images (as strings) and produces a tensor that is ready to be featurized by ResNet50." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Input images as a two-dimensional tensor containing an arbitrary number of images represented a strings\n", - "import azureml.contrib.brainwave.models.utils as utils\n", - "in_images = tf.placeholder(tf.string)\n", - "image_tensors = utils.preprocess_array(in_images)\n", - "print(image_tensors.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Featurizer\n", - "We use ResNet50 as a featurizer. In this step we initialize the model. This downloads a TensorFlow checkpoint of the quantized ResNet50." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.brainwave.models import QuantizedResnet50\n", - "model_path = os.path.expanduser('~/models')\n", - "model = QuantizedResnet50(model_path, is_frozen = True)\n", - "feature_tensor = model.import_graph_def(image_tensors)\n", - "print(model.version)\n", - "print(feature_tensor.name)\n", - "print(feature_tensor.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Classifier\n", - "The model we downloaded includes a classifier which takes the output of the ResNet50 and identifies an image. This classifier is trained on the ImageNet dataset. We are going to use this classifier for our service. The next [notebook](project-brainwave-trainsfer-learning.ipynb) shows how to train a classifier for a different data set. The input to the classifier is a tensor matching the output of our ResNet50 featurizer." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "classifier_output = model.get_default_classifier(feature_tensor)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Service Definition\n", - "Now that we've definied the image preprocessing, featurizer, and classifier that we will execute on our service we can create a service definition. The service definition is a set of files generated from the model that allow us to deploy to the FPGA service. The service definition consists of a pipeline. The pipeline is a series of stages that are executed in order. We support TensorFlow stages, Keras stages, and BrainWave stages. The stages will be executed in order on the service, with the output of each stage input into the subsequent stage.\n", - "\n", - "To create a TensorFlow stage we specify a session containing the graph (in this case we are using the default graph) and the input and output tensors to this stage. We use this information to save the graph so that we can execute it on the service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.brainwave.pipeline import ModelDefinition, TensorflowStage, BrainWaveStage\n", - "\n", - "save_path = os.path.expanduser('~/models/save')\n", - "model_def_path = os.path.join(save_path, 'model_def.zip')\n", - "\n", - "model_def = ModelDefinition()\n", - "with tf.Session() as sess:\n", - " model_def.pipeline.append(TensorflowStage(sess, in_images, image_tensors))\n", - " model_def.pipeline.append(BrainWaveStage(sess, model))\n", - " model_def.pipeline.append(TensorflowStage(sess, feature_tensor, classifier_output))\n", - " model_def.save(model_def_path)\n", - " print(model_def_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy\n", - "Time to create a service from the service definition. You need a Workspace in the **East US 2** location. In the previous notebooks, you've created this Workspace. The code below will load that Workspace from a configuration file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Upload the model to the workspace." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "model_name = \"resnet-50-rtai\"\n", - "registered_model = Model.register(ws, model_def_path, model_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create a service from the model that we registered. If this is a new service then we create it. If you already have a service with this name then the existing service will be updated to use this model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "from azureml.exceptions import WebserviceException\n", - "from azureml.contrib.brainwave import BrainwaveWebservice, BrainwaveImage\n", - "service_name = \"imagenet-infer\"\n", - "service = None\n", - "try:\n", - " service = Webservice(ws, service_name)\n", - "except WebserviceException:\n", - " image_config = BrainwaveImage.image_configuration()\n", - " deployment_config = BrainwaveWebservice.deploy_configuration()\n", - " service = Webservice.deploy_from_model(ws, service_name, [registered_model], image_config, deployment_config)\n", - " service.wait_for_deployment(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Client\n", - "The service supports gRPC and the TensorFlow Serving \"predict\" API. We provide a client that can call the service to get predictions on aka.ms/rtai. You can also invoke the service like any other web service." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To understand the results we need a mapping to the human readable imagenet classes" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "classes_entries = requests.get(\"https://raw.githubusercontent.com/Lasagne/Recipes/master/examples/resnet50/imagenet_classes.txt\").text.splitlines()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can now send an image to the service and get the predictions. Let's see if it can identify a snow leopard.\n", - "![title](snowleopardgaze.jpg)\n", - "Snow leopard in a zoo. Photo by Peter Bolliger.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "results = service.run('snowleopardgaze.jpg')\n", - "# map results [class_id] => [confidence]\n", - "results = enumerate(results)\n", - "# sort results by confidence\n", - "sorted_results = sorted(results, key=lambda x: x[1], reverse=True)\n", - "# print top 5 results\n", - "for top in sorted_results[:5]:\n", - " print(classes_entries[top[0]], 'confidence:', top[1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cleanup\n", - "Run the cell below to delete your service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Congratulations! You've just created a service that does predictions using an FPGA. The next [notebook](project-brainwave-trainsfer-learning.ipynb) shows how to customize the service using transfer learning to classify different types of images." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "authors": [ - { - "name": "coverste" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/project-brainwave/project-brainwave-transfer-learning.ipynb b/project-brainwave/project-brainwave-transfer-learning.ipynb deleted file mode 100644 index d589e30d..00000000 --- a/project-brainwave/project-brainwave-transfer-learning.ipynb +++ /dev/null @@ -1,572 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Model Development" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This example shows how to build, train, evaluate and deploy a model running on FPGA. Only Windows is supported. We use TensorFlow and Keras to build our model. We are going to use transfer learning, with ResNet152 as a featurizer. We don't use the last layer of ResNet152 in this case and instead add and train our own classification layer.\n", - "\n", - "We will use the Kaggle Cats and Dogs dataset to train the classifier. The dataset can be downloaded [here](https://www.microsoft.com/en-us/download/details.aspx?id=54765). Download the zip and extract to a directory named 'catsanddogs' under your user directory (\"~/catsanddogs\").\n", - "\n", - "Please set up your environment as described in the [quick start](project-brainwave-quickstart.ipynb)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import tensorflow as tf\n", - "import numpy as np" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model Construction\n", - "Load the files we are going to use for training and testing. By default this notebook uses only a very small subset of the Cats and Dogs dataset. That makes it run quickly, but doesn't create a very accurate classifier. You can improve the classifier by using more of the dataset." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import glob\n", - "import imghdr\n", - "datadir = os.path.expanduser(\"~/catsanddogs\")\n", - "\n", - "cat_files = glob.glob(os.path.join(datadir, 'PetImages', 'Cat', '*.jpg'))\n", - "dog_files = glob.glob(os.path.join(datadir, 'PetImages', 'Dog', '*.jpg'))\n", - "\n", - "# Limit the data set to make the notebook execute quickly.\n", - "cat_files = cat_files[:64]\n", - "dog_files = dog_files[:64]\n", - "\n", - "# The data set has a few images that are not jpeg. Remove them.\n", - "cat_files = [f for f in cat_files if imghdr.what(f) == 'jpeg']\n", - "dog_files = [f for f in dog_files if imghdr.what(f) == 'jpeg']\n", - "\n", - "if(not len(cat_files) or not len(dog_files)):\n", - " print(\"Please download the Kaggle Cats and Dogs dataset form https://www.microsoft.com/en-us/download/details.aspx?id=54765 and extract the zip to \" + datadir) \n", - " raise ValueError(\"Data not found\")\n", - "else:\n", - " print(cat_files[0])\n", - " print(dog_files[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# constructing a numpy array as labels\n", - "image_paths = cat_files + dog_files\n", - "total_files = len(cat_files) + len(dog_files)\n", - "labels = np.zeros(total_files)\n", - "labels[len(cat_files):] = 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We need to preprocess the input file to get it into the form expected by ResNet152. We've provided a default implementation of the preprocessing that you can use." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Input images as a two-dimensional tensor containing an arbitrary number of images represented a strings\n", - "import azureml.contrib.brainwave.models.utils as utils\n", - "in_images = tf.placeholder(tf.string)\n", - "image_tensors = utils.preprocess_array(in_images)\n", - "print(image_tensors.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, if you would like to customize the preprocessing, you can write your own preprocessor using TensorFlow operations.\n", - "\n", - "The input to the classifier we are training is the set of features produced by ResNet50. To train the classifier we need to \n", - "featurize the images using ResNet50. You can also run the featurizer locally on CPU or GPU. We import the featurizer as frozen, so that we are only training the classifier." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.brainwave.models import QuantizedResnet152\n", - "model_path = os.path.expanduser('~/models')\n", - "bwmodel = QuantizedResnet152(model_path, is_frozen = True)\n", - "print(bwmodel.version)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Calling import_graph_def on the featurizer will create a service that runs the featurizer on FPGA." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "features = bwmodel.import_graph_def(input_tensor=image_tensors)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Pre-compute features\n", - "Load the data set and compute the features. These can be precomputed because they don't change during training. This can take a while to run on CPU." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm\n", - "\n", - "def chunks(l, n):\n", - " \"\"\"Yield successive n-sized chunks from l.\"\"\"\n", - " for i in range(0, len(l), n):\n", - " yield l[i:i + n]\n", - "\n", - "def read_files(files):\n", - " contents = []\n", - " for path in files:\n", - " with open(path, 'rb') as f:\n", - " contents.append(f.read())\n", - " return contents\n", - " \n", - "feature_list = []\n", - "with tf.Session() as sess:\n", - " for chunk in tqdm(chunks(image_paths, 5)):\n", - " contents = read_files(chunk)\n", - " result = sess.run([features], feed_dict={in_images: contents})\n", - " feature_list.extend(result[0])\n", - "\n", - "feature_results = np.array(feature_list)\n", - "print(feature_results.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Add and Train the classifier\n", - "We use Keras to define and train a simple classifier." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from keras.models import Sequential\n", - "from keras.layers import Dropout, Dense, Flatten\n", - "from keras import optimizers\n", - "\n", - "FC_SIZE = 1024\n", - "NUM_CLASSES = 2\n", - "\n", - "model = Sequential()\n", - "model.add(Dropout(0.2, input_shape=(1, 1, 2048,)))\n", - "model.add(Dense(FC_SIZE, activation='relu', input_dim=(1, 1, 2048,)))\n", - "model.add(Flatten())\n", - "model.add(Dense(NUM_CLASSES, activation='sigmoid', input_dim=FC_SIZE))\n", - "\n", - "model.compile(optimizer=optimizers.SGD(lr=1e-4,momentum=0.9), loss='binary_crossentropy', metrics=['accuracy'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Prepare the train and test data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "onehot_labels = np.array([[0,1] if i else [1,0] for i in labels])\n", - "X_train, X_test, y_train, y_test = train_test_split(feature_results, onehot_labels, random_state=42, shuffle=True)\n", - "print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Train the classifier." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.fit(X_train, y_train, epochs=16, batch_size=32)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Test the Classifier\n", - "Let's test the classifier and see how well it does. Since we only trained on a few images, we are not expecting to win a Kaggle competition, but it will likely get most of the images correct. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from numpy import argmax\n", - "\n", - "y_probs = model.predict(X_test)\n", - "y_prob_max = np.argmax(y_probs, 1)\n", - "y_test_max = np.argmax(y_test, 1)\n", - "print(y_prob_max)\n", - "print(y_test_max)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import confusion_matrix, roc_auc_score, accuracy_score, precision_score, recall_score, f1_score\n", - "import itertools\n", - "import matplotlib\n", - "from matplotlib import pyplot as plt\n", - "\n", - "# compute a bunch of classification metrics \n", - "def classification_metrics(y_true, y_pred, y_prob):\n", - " cm_dict = {}\n", - " cm_dict['Accuracy'] = accuracy_score(y_true, y_pred)\n", - " cm_dict['Precision'] = precision_score(y_true, y_pred)\n", - " cm_dict['Recall'] = recall_score(y_true, y_pred)\n", - " cm_dict['F1'] = f1_score(y_true, y_pred) \n", - " cm_dict['AUC'] = roc_auc_score(y_true, y_prob[:,0])\n", - " cm_dict['Confusion Matrix'] = confusion_matrix(y_true, y_pred).tolist()\n", - " return cm_dict\n", - "\n", - "def plot_confusion_matrix(cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues):\n", - " \"\"\"Plots a confusion matrix.\n", - " Source: http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html\n", - " New BSD License - see appendix\n", - " \"\"\"\n", - " cm_max = cm.max()\n", - " cm_min = cm.min()\n", - " if cm_min > 0: cm_min = 0\n", - " if normalize:\n", - " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", - " cm_max = 1\n", - " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", - " plt.title(title)\n", - " plt.colorbar()\n", - " tick_marks = np.arange(len(classes))\n", - " plt.xticks(tick_marks, classes, rotation=45)\n", - " plt.yticks(tick_marks, classes)\n", - " thresh = cm_max / 2.\n", - " plt.clim(cm_min, cm_max)\n", - "\n", - " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", - " plt.text(j, i,\n", - " round(cm[i, j], 3), # round to 3 decimals if they are float\n", - " horizontalalignment=\"center\",\n", - " color=\"white\" if cm[i, j] > thresh else \"black\")\n", - " plt.ylabel('True label')\n", - " plt.xlabel('Predicted label')\n", - " plt.show()\n", - " \n", - "cm_dict = classification_metrics(y_test_max, y_prob_max, y_probs)\n", - "for m in cm_dict:\n", - " print(m, cm_dict[m])\n", - "cm = np.asarray(cm_dict['Confusion Matrix'])\n", - "plot_confusion_matrix(cm, ['fail','pass'], normalize=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Service Definition\n", - "Like in the QuickStart notebook our service definition pipeline consists of three stages. Because the preprocessing and featurizing stage don't contain any variables, we can use a default session.\n", - "Here we use the Keras classifier as the final stage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.brainwave.pipeline import ModelDefinition, TensorflowStage, BrainWaveStage, KerasStage\n", - "\n", - "model_def = ModelDefinition()\n", - "model_def.pipeline.append(TensorflowStage(tf.Session(), in_images, image_tensors))\n", - "model_def.pipeline.append(BrainWaveStage(tf.Session(), bwmodel))\n", - "model_def.pipeline.append(KerasStage(model))\n", - "\n", - "model_def_path = os.path.join(datadir, 'save', 'model_def')\n", - "model_def.save(model_def_path)\n", - "print(model_def_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.model import Model\n", - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')\n", - "model_name = \"catsanddogs-model\"\n", - "service_name = \"modelbuild-service\"\n", - "\n", - "registered_model = Model.register(ws, model_def_path, model_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first time the code below runs it will create a new service running your model. If you want to change the model you can make changes above in this notebook and save a new service definition. Then this code will update the running service in place to run the new model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import Webservice\n", - "from azureml.exceptions import WebserviceException\n", - "from azureml.contrib.brainwave import BrainwaveWebservice, BrainwaveImage\n", - "try:\n", - " service = Webservice(ws, service_name)\n", - "except WebserviceException:\n", - " image_config = BrainwaveImage.image_configuration()\n", - " deployment_config = BrainwaveWebservice.deploy_configuration()\n", - " service = Webservice.deploy_from_model(ws, service_name, [registered_model], image_config, deployment_config)\n", - " service.wait_for_deployment(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The service is now running in Azure and ready to serve requests. We can check the address and port." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(service.ipAddress + ':' + str(service.port))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Client\n", - "There is a simple test client at amlrealtimeai.PredictionClient which can be used for testing. We'll use this client to score an image with our new service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.brainwave.client import PredictionClient\n", - "client = PredictionClient(service.ipAddress, service.port)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can adapt the client [code](../../pythonlib/amlrealtimeai/client.py) to meet your needs. There is also an example C# [client](../../sample-clients/csharp).\n", - "\n", - "The service provides an API that is compatible with TensorFlow Serving. There are instructions to download a sample client [here](https://www.tensorflow.org/serving/setup)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Request\n", - "Let's see how our service does on a few images. It may get a few wrong." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Specify an image to classify\n", - "print('CATS')\n", - "for image_file in cat_files[:8]:\n", - " results = client.score_image(image_file)\n", - " result = 'CORRECT ' if results[0] > results[1] else 'WRONG '\n", - " print(result + str(results))\n", - "print('DOGS')\n", - "for image_file in dog_files[:8]:\n", - " results = client.score_image(image_file)\n", - " result = 'CORRECT ' if results[1] > results[0] else 'WRONG '\n", - " print(result + str(results))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cleanup\n", - "Run the cell below to delete your service. In the [next notebook](project-brainwave-custom-weights.ipynb) you will learn how to retrain all the weights of one of the models" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "service.delete()\n", - " \n", - "registered_model.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "License for plot_confusion_matrix:\n", - "\n", - "New BSD License\n", - "\n", - "Copyright (c) 2007–2018 The scikit-learn developers.\n", - "All rights reserved.\n", - "\n", - "\n", - "Redistribution and use in source and binary forms, with or without\n", - "modification, are permitted provided that the following conditions are met:\n", - "\n", - " a. Redistributions of source code must retain the above copyright notice,\n", - " this list of conditions and the following disclaimer.\n", - " b. Redistributions in binary form must reproduce the above copyright\n", - " notice, this list of conditions and the following disclaimer in the\n", - " documentation and/or other materials provided with the distribution.\n", - " c. Neither the name of the Scikit-learn Developers nor the names of\n", - " its contributors may be used to endorse or promote products\n", - " derived from this software without specific prior written\n", - " permission. \n", - "\n", - "\n", - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n", - "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n", - "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n", - "ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR\n", - "ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n", - "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n", - "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n", - "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n", - "LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n", - "OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\n", - "DAMAGE.\n" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "coverste" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/01.train-hyperparameter-tune-deploy-with-pytorch/01.train-hyperparameter-tune-deploy-with-pytorch.ipynb b/training/01.train-hyperparameter-tune-deploy-with-pytorch/01.train-hyperparameter-tune-deploy-with-pytorch.ipynb deleted file mode 100644 index 4ea25878..00000000 --- a/training/01.train-hyperparameter-tune-deploy-with-pytorch/01.train-hyperparameter-tune-deploy-with-pytorch.ipynb +++ /dev/null @@ -1,812 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved. \n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 01. Train, hyperparameter tune, and deploy with PyTorch\n", - "\n", - "In this tutorial, you will train, hyperparameter tune, and deploy a PyTorch model using the Azure Machine Learning (AML) Python SDK.\n", - "\n", - "This tutorial will train an image classification model using transfer learning, based on PyTorch's [Transfer Learning tutorial](https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html). The model is trained to classify ants and bees by first using a pretrained ResNet18 model that has been trained on the [ImageNet](http://image-net.org/index) dataset." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", - "* Go through the [00.configuration.ipynb](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "Diagnostics" - ] - }, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize workspace\n", - "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a remote compute target\n", - "You will need to create a [compute target](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#compute-target) to execute your training script on. In this tutorial, you create an [Azure Batch AI](https://docs.microsoft.com/azure/batch-ai/overview) cluster as your training compute resource. This code creates a cluster for you if it does not already exist in your workspace.\n", - "\n", - "**Creation of the cluster takes approximately 5 minutes.** If the cluster is already in your workspace this code will skip the cluster creation process." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# choose a name for your cluster\n", - "cluster_name = \"gpucluster\"\n", - "\n", - "try:\n", - " compute_target = ComputeTarget(workspace=ws, name=cluster_name)\n", - " print('Found existing compute target.')\n", - "except ComputeTargetException:\n", - " print('Creating a new compute target...')\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', \n", - " max_nodes=6)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, cluster_name, compute_config)\n", - "\n", - "compute_target.wait_for_completion(show_output=True)\n", - "\n", - "# Use the 'status' property to get a detailed status for the current cluster. \n", - "print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above code creates a GPU cluster. If you instead want to create a CPU cluster, provide a different VM size to the `vm_size` parameter, such as `STANDARD_D2_V2`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upload training data\n", - "The dataset we will use consists of about 120 training images each for ants and bees, with 75 validation images for each class.\n", - "\n", - "First, download the dataset (located [here](https://download.pytorch.org/tutorial/hymenoptera_data.zip) as a zip file) locally to your current directory and extract the files. This will create a folder called `hymenoptera_data` with two subfolders `train` and `val` that contain the training and validation images, respectively. [Hymenoptera](https://en.wikipedia.org/wiki/Hymenoptera) is the order of insects that includes ants and bees." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import urllib\n", - "from zipfile import ZipFile\n", - "\n", - "# download data\n", - "download_url = 'https://download.pytorch.org/tutorial/hymenoptera_data.zip'\n", - "data_file = './hymenoptera_data.zip'\n", - "urllib.request.urlretrieve(download_url, filename=data_file)\n", - "\n", - "# extract files\n", - "with ZipFile(data_file, 'r') as zip:\n", - " print('extracting files...')\n", - " zip.extractall()\n", - " print('done')\n", - " \n", - "# delete zip file\n", - "os.remove(data_file)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To make the data accessible for remote training, you will need to upload the data from your local machine to the cloud. AML provides a convenient way to do so via a [Datastore](https://docs.microsoft.com/azure/machine-learning/service/how-to-access-data). The datastore provides a mechanism for you to upload/download data, and interact with it from your remote compute targets. \n", - "\n", - "**Note: If your data is already stored in Azure, or you download the data as part of your training script, you will not need to do this step.**\n", - "\n", - "Each workspace is associated with a default datastore. In this tutorial, we will upload the training data to this default datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds = ws.get_default_datastore()\n", - "print(ds.datastore_type, ds.account_name, ds.container_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following code will upload the training data to the path `./hymenoptera_data` on the default datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds.upload(src_dir='./hymenoptera_data', target_path='hymenoptera_data')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's get a reference to the path on the datastore with the training data. We can do so using the `path` method. In the next section, we can then pass this reference to our training script's `--data_dir` argument. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "path_on_datastore = 'hymenoptera_data'\n", - "ds_data = ds.path(path_on_datastore)\n", - "print(ds_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train model on the remote compute\n", - "Now that you have your data and training script prepared, you are ready to train on your remote compute cluster. You can take advantage of Azure compute to leverage GPUs to cut down your training time. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a project directory\n", - "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script and any additional files your training script depends on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "project_folder = './pytorch-hymenoptera'\n", - "os.makedirs(project_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Prepare training script\n", - "Now you will need to create your training script. In this tutorial, the training script is already provided for you at `pytorch_train.py`. In practice, you should be able to take any custom training script as is and run it with AML without having to modify your code.\n", - "\n", - "However, if you would like to use AML's [tracking and metrics](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#metrics) capabilities, you will have to add a small amount of AML code inside your training script. \n", - "\n", - "In `pytorch_train.py`, we will log some metrics to our AML run. To do so, we will access the AML run object within the script:\n", - "```Python\n", - "from azureml.core.run import Run\n", - "run = Run.get_context()\n", - "```\n", - "Further within `pytorch_train.py`, we log the learning rate and momentum parameters, and the best validation accuracy the model achieves:\n", - "```Python\n", - "run.log('lr', np.float(learning_rate))\n", - "run.log('momentum', np.float(momentum))\n", - "\n", - "run.log('best_val_acc', np.float(best_acc))\n", - "```\n", - "These run metrics will become particularly important when we begin hyperparameter tuning our model in the \"Tune model hyperparameters\" section." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once your script is ready, copy the training script `pytorch_train.py` into your project directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy('pytorch_train.py', project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an experiment\n", - "Create an [Experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this transfer learning PyTorch tutorial. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "\n", - "experiment_name = 'pytorch-hymenoptera'\n", - "experiment = Experiment(ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a PyTorch estimator\n", - "The AML SDK's PyTorch estimator enables you to easily submit PyTorch training jobs for both single-node and distributed runs. For more information on the PyTorch estimator, refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-train-pytorch). The following code will define a single-node PyTorch job." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.dnn import PyTorch\n", - "\n", - "script_params = {\n", - " '--data_dir': ds_data,\n", - " '--num_epochs': 10,\n", - " '--output_dir': './outputs'\n", - "}\n", - "\n", - "estimator = PyTorch(source_directory=project_folder, \n", - " script_params=script_params,\n", - " compute_target=compute_target,\n", - " entry_script='pytorch_train.py',\n", - " use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `script_params` parameter is a dictionary containing the command-line arguments to your training script `entry_script`. Please note the following:\n", - "- We passed our training data reference `ds_data` to our script's `--data_dir` argument. This will 1) mount our datastore on the remote compute and 2) provide the path to the training data `hymenoptera_data` on our datastore.\n", - "- We specified the output directory as `./outputs`. The `outputs` directory is specially treated by AML in that all the content in this directory gets uploaded to your workspace as part of your run history. The files written to this directory are therefore accessible even once your remote run is over. In this tutorial, we will save our trained model to this output directory.\n", - "\n", - "To leverage the Azure VM's GPU for training, we set `use_gpu=True`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit job\n", - "Run your experiment by submitting your estimator object. Note that this call is asynchronous." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run = experiment.submit(estimator)\n", - "print(run.get_details())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor your run\n", - "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you can block until the script has completed training before running more code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Tune model hyperparameters\n", - "Now that we've seen how to do a simple PyTorch training run using the SDK, let's see if we can further improve the accuracy of our model. We can optimize our model's hyperparameters using Azure Machine Learning's hyperparameter tuning capabilities." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Start a hyperparameter sweep\n", - "First, we will define the hyperparameter space to sweep over. Since our training script uses a learning rate schedule to decay the learning rate every several epochs, let's tune the initial learning rate and the momentum parameters. In this example we will use random sampling to try different configuration sets of hyperparameters to maximize our primary metric, the best validation accuracy (`best_val_acc`).\n", - "\n", - "Then, we specify the early termination policy to use to early terminate poorly performing runs. Here we use the `BanditPolicy`, which will terminate any run that doesn't fall within the slack factor of our primary evaluation metric. In this tutorial, we will apply this policy every epoch (since we report our `best_val_acc` metric every epoch and `evaluation_interval=1`). Notice we will delay the first policy evaluation until after the first `10` epochs (`delay_evaluation=10`).\n", - "Refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-tune-hyperparameters#specify-an-early-termination-policy) for more information on the BanditPolicy and other policies available." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.hyperdrive import *\n", - "\n", - "param_sampling = RandomParameterSampling( {\n", - " 'learning_rate': uniform(0.0005, 0.005),\n", - " 'momentum': uniform(0.9, 0.99)\n", - " }\n", - ")\n", - "\n", - "early_termination_policy = BanditPolicy(slack_factor=0.15, evaluation_interval=1, delay_evaluation=10)\n", - "\n", - "hyperdrive_run_config = HyperDriveRunConfig(estimator=estimator,\n", - " hyperparameter_sampling=param_sampling, \n", - " policy=early_termination_policy,\n", - " primary_metric_name='best_val_acc',\n", - " primary_metric_goal=PrimaryMetricGoal.MAXIMIZE,\n", - " max_total_runs=8,\n", - " max_concurrent_runs=4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, lauch the hyperparameter tuning job." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# start the HyperDrive run\n", - "hyperdrive_run = experiment.submit(hyperdrive_run_config)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor HyperDrive runs\n", - "You can monitor the progress of the runs with the following Jupyter widget. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "\n", - "RunDetails(hyperdrive_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Or block until the HyperDrive sweep has completed:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "hyperdrive_run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Find and register the best model\n", - "Once all the runs complete, we can find the run that produced the model with the highest accuracy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run = hyperdrive_run.get_best_run_by_primary_metric()\n", - "best_run_metrics = best_run.get_metrics()\n", - "print(best_run)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print('Best Run is:\\n Validation accuracy: {0:.5f} \\n Learning rate: {1:.5f} \\n Momentum: {2:.5f}'.format(\n", - " best_run_metrics['best_val_acc'][-1],\n", - " best_run_metrics['lr'],\n", - " best_run_metrics['momentum'])\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, register the model from your best-performing run to your workspace. The `model_path` parameter takes in the relative path on the remote VM to the model file in your `outputs` directory. In the next section, we will deploy this registered model as a web service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = best_run.register_model(model_name = 'pytorch-hymenoptera', model_path = 'outputs/model.pt')\n", - "print(model.name, model.id, model.version, sep = '\\t')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy model as web service\n", - "Once you have your trained model, you can deploy the model on Azure. In this tutorial, we will deploy the model as a web service in [Azure Container Instances](https://docs.microsoft.com/en-us/azure/container-instances/) (ACI). For more information on deploying models using Azure ML, refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-deploy-and-where)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create scoring script\n", - "\n", - "First, we will create a scoring script that will be invoked by the web service call. Note that the scoring script must have two required functions:\n", - "* `init()`: In this function, you typically load the model into a `global` object. This function is executed only once when the Docker container is started. \n", - "* `run(input_data)`: In this function, the model is used to predict a value based on the input data. The input and output typically use JSON as serialization and deserialization format, but you are not limited to that.\n", - "\n", - "Refer to the scoring script `pytorch_score.py` for this tutorial. Our web service will use this file to predict whether an image is an ant or a bee. When writing your own scoring script, don't forget to test it locally first before you go and deploy the web service." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create environment file\n", - "Then, we will need to create an environment file (`myenv.yml`) that specifies all of the scoring script's package dependencies. This file is used to ensure that all of those dependencies are installed in the Docker image by AML. In this case, we need to specify `azureml-core`, `torch` and `torchvision`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies.create(pip_packages=['azureml-core', 'torch', 'torchvision'])\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())\n", - " \n", - "print(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configure the container image\n", - "Now configure the Docker image that you will use to build your ACI container." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "\n", - "image_config = ContainerImage.image_configuration(execution_script='pytorch_score.py', \n", - " runtime='python', \n", - " conda_file='myenv.yml',\n", - " description='Image with hymenoptera model')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configure the ACI container\n", - "We are almost ready to deploy. Create a deployment configuration file to specify the number of CPUs and gigabytes of RAM needed for your ACI container. While it depends on your model, the default of `1` core and `1` gigabyte of RAM is usually sufficient for many models." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores=1, \n", - " memory_gb=1, \n", - " tags={'data': 'hymenoptera', 'method':'transfer learning', 'framework':'pytorch'},\n", - " description='Classify ants/bees using transfer learning with PyTorch')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Deploy the registered model\n", - "Finally, let's deploy a web service from our registered model. Deploy the web service using the ACI config and image config files created in the previous steps. We pass the `model` object in a list to the `models` parameter. If you would like to deploy more than one registered model, append the additional models to this list." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "from azureml.core.webservice import Webservice\n", - "\n", - "service_name = 'aci-hymenoptera'\n", - "service = Webservice.deploy_from_model(workspace=ws,\n", - " name=service_name,\n", - " models=[model],\n", - " image_config=image_config,\n", - " deployment_config=aciconfig,)\n", - "\n", - "service.wait_for_deployment(show_output=True)\n", - "print(service.state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If your deployment fails for any reason and you need to redeploy, make sure to delete the service before you do so: `service.delete()`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Tip: If something goes wrong with the deployment, the first thing to look at is the logs from the service by running the following command:**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "service.get_logs()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Get the web service's HTTP endpoint, which accepts REST client calls. This endpoint can be shared with anyone who wants to test the web service or integrate it into an application." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(service.scoring_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the web service\n", - "Finally, let's test our deployed web service. We will send the data as a JSON string to the web service hosted in ACI and use the SDK's `run` API to invoke the service. Here we will take an arbitrary image from our validation data to predict on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os, json\n", - "from PIL import Image\n", - "import matplotlib.pyplot as plt\n", - "\n", - "test_img = os.path.join('hymenoptera_data', 'val', 'bees', '10870992_eebeeb3a12.jpg') #arbitary image from val dataset\n", - "plt.imshow(Image.open(test_img))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "from torchvision import transforms\n", - " \n", - "def preprocess(image_file):\n", - " \"\"\"Preprocess the input image.\"\"\"\n", - " data_transforms = transforms.Compose([\n", - " transforms.Resize(256),\n", - " transforms.CenterCrop(224),\n", - " transforms.ToTensor(),\n", - " transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])\n", - " ])\n", - "\n", - " image = Image.open(image_file)\n", - " image = data_transforms(image).float()\n", - " image = torch.tensor(image)\n", - " image = image.unsqueeze(0)\n", - " return image.numpy()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "input_data = preprocess(test_img)\n", - "result = service.run(input_data=json.dumps({'data': input_data.tolist()}))\n", - "print(result)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Clean up\n", - "Once you no longer need the web service, you can delete it with a simple API call." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "service.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "minxia" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.2" - }, - "msauthor": "minxia" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_score.py b/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_score.py deleted file mode 100644 index 68512625..00000000 --- a/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_score.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. - -import torch -import torch.nn as nn -from torchvision import transforms -import json - -from azureml.core.model import Model - - -def init(): - global model - model_path = Model.get_model_path('pytorch-hymenoptera') - model = torch.load(model_path, map_location=lambda storage, loc: storage) - model.eval() - - -def run(input_data): - input_data = torch.tensor(json.loads(input_data)['data']) - - # get prediction - with torch.no_grad(): - output = model(input_data) - classes = ['ants', 'bees'] - softmax = nn.Softmax(dim=1) - pred_probs = softmax(output).numpy()[0] - index = torch.argmax(output, 1) - - result = {"label": classes[index], "probability": str(pred_probs[index])} - return result diff --git a/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_train.py b/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_train.py deleted file mode 100644 index ebc82591..00000000 --- a/training/01.train-hyperparameter-tune-deploy-with-pytorch/pytorch_train.py +++ /dev/null @@ -1,184 +0,0 @@ -# Copyright (c) 2017, PyTorch contributors -# Modifications copyright (C) Microsoft Corporation -# Licensed under the BSD license -# Adapted from https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html - -from __future__ import print_function, division -import torch -import torch.nn as nn -import torch.optim as optim -from torch.optim import lr_scheduler -from torchvision import datasets, models, transforms -import numpy as np -import time -import os -import copy -import argparse - -from azureml.core.run import Run -# get the Azure ML run object -run = Run.get_context() - - -def load_data(data_dir): - """Load the train/val data.""" - - # Data augmentation and normalization for training - # Just normalization for validation - data_transforms = { - 'train': transforms.Compose([ - transforms.RandomResizedCrop(224), - transforms.RandomHorizontalFlip(), - transforms.ToTensor(), - transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) - ]), - 'val': transforms.Compose([ - transforms.Resize(256), - transforms.CenterCrop(224), - transforms.ToTensor(), - transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) - ]), - } - - image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), - data_transforms[x]) - for x in ['train', 'val']} - dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=4, - shuffle=True, num_workers=0) - for x in ['train', 'val']} - dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']} - class_names = image_datasets['train'].classes - - return dataloaders, dataset_sizes, class_names - - -def train_model(model, criterion, optimizer, scheduler, num_epochs, data_dir): - """Train the model.""" - - # load training/validation data - dataloaders, dataset_sizes, class_names = load_data(data_dir) - - device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') - - since = time.time() - - best_model_wts = copy.deepcopy(model.state_dict()) - best_acc = 0.0 - - for epoch in range(num_epochs): - print('Epoch {}/{}'.format(epoch, num_epochs - 1)) - print('-' * 10) - - # Each epoch has a training and validation phase - for phase in ['train', 'val']: - if phase == 'train': - scheduler.step() - model.train() # Set model to training mode - else: - model.eval() # Set model to evaluate mode - - running_loss = 0.0 - running_corrects = 0 - - # Iterate over data. - for inputs, labels in dataloaders[phase]: - inputs = inputs.to(device) - labels = labels.to(device) - - # zero the parameter gradients - optimizer.zero_grad() - - # forward - # track history if only in train - with torch.set_grad_enabled(phase == 'train'): - outputs = model(inputs) - _, preds = torch.max(outputs, 1) - loss = criterion(outputs, labels) - - # backward + optimize only if in training phase - if phase == 'train': - loss.backward() - optimizer.step() - - # statistics - running_loss += loss.item() * inputs.size(0) - running_corrects += torch.sum(preds == labels.data) - - epoch_loss = running_loss / dataset_sizes[phase] - epoch_acc = running_corrects.double() / dataset_sizes[phase] - - print('{} Loss: {:.4f} Acc: {:.4f}'.format( - phase, epoch_loss, epoch_acc)) - - # deep copy the model - if phase == 'val' and epoch_acc > best_acc: - best_acc = epoch_acc - best_model_wts = copy.deepcopy(model.state_dict()) - - # log the best val accuracy to AML run - run.log('best_val_acc', np.float(best_acc)) - - print() - - time_elapsed = time.time() - since - print('Training complete in {:.0f}m {:.0f}s'.format( - time_elapsed // 60, time_elapsed % 60)) - print('Best val Acc: {:4f}'.format(best_acc)) - - # load best model weights - model.load_state_dict(best_model_wts) - return model - - -def fine_tune_model(num_epochs, data_dir, learning_rate, momentum): - """Load a pretrained model and reset the final fully connected layer.""" - - # log the hyperparameter metrics to the AML run - run.log('lr', np.float(learning_rate)) - run.log('momentum', np.float(momentum)) - - model_ft = models.resnet18(pretrained=True) - num_ftrs = model_ft.fc.in_features - model_ft.fc = nn.Linear(num_ftrs, 2) # only 2 classes to predict - - device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') - model_ft = model_ft.to(device) - - criterion = nn.CrossEntropyLoss() - - # Observe that all parameters are being optimized - optimizer_ft = optim.SGD(model_ft.parameters(), - lr=learning_rate, momentum=momentum) - - # Decay LR by a factor of 0.1 every 7 epochs - exp_lr_scheduler = lr_scheduler.StepLR( - optimizer_ft, step_size=7, gamma=0.1) - - model = train_model(model_ft, criterion, optimizer_ft, - exp_lr_scheduler, num_epochs, data_dir) - - return model - - -def main(): - # get command-line arguments - parser = argparse.ArgumentParser() - parser.add_argument('--data_dir', type=str, - help='directory of training data') - parser.add_argument('--num_epochs', type=int, default=25, - help='number of epochs to train') - parser.add_argument('--output_dir', type=str, help='output directory') - parser.add_argument('--learning_rate', type=float, - default=0.001, help='learning rate') - parser.add_argument('--momentum', type=float, default=0.9, help='momentum') - args = parser.parse_args() - - print("data directory is: " + args.data_dir) - model = fine_tune_model(args.num_epochs, args.data_dir, - args.learning_rate, args.momentum) - os.makedirs(args.output_dir, exist_ok=True) - torch.save(model, os.path.join(args.output_dir, 'model.pt')) - - -if __name__ == "__main__": - main() diff --git a/training/02.distributed-pytorch-with-horovod/02.distributed-pytorch-with-horovod.ipynb b/training/02.distributed-pytorch-with-horovod/02.distributed-pytorch-with-horovod.ipynb deleted file mode 100644 index 780327b4..00000000 --- a/training/02.distributed-pytorch-with-horovod/02.distributed-pytorch-with-horovod.ipynb +++ /dev/null @@ -1,313 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 02. Distributed PyTorch with Horovod\n", - "In this tutorial, you will train a PyTorch model on the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset using distributed training via [Horovod](https://github.com/uber/horovod)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning (AML)\n", - "* Go through the [00.configuration.ipynb](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)\n", - "* Review the [tutorial](https://aka.ms/aml-notebook-pytorch) on single-node PyTorch training using the SDK" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "Diagnostics" - ] - }, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize workspace\n", - "\n", - "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a remote compute target\n", - "You will need to create a [compute target](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#compute-target) to execute your training script on. In this tutorial, you create an [Azure Batch AI](https://docs.microsoft.com/azure/batch-ai/overview) cluster as your training compute resource. This code creates a cluster for you if it does not already exist in your workspace.\n", - "\n", - "**Creation of the cluster takes approximately 5 minutes.** If the cluster is already in your workspace this code will skip the cluster creation process." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# choose a name for your cluster\n", - "cluster_name = \"gpucluster\"\n", - "\n", - "try:\n", - " compute_target = ComputeTarget(workspace=ws, name=cluster_name)\n", - " print('Found existing compute target.')\n", - "except ComputeTargetException:\n", - " print('Creating a new compute target...')\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', \n", - " max_nodes=6)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, cluster_name, compute_config)\n", - "\n", - "compute_target.wait_for_completion(show_output=True)\n", - "\n", - "# Use the 'status' property to get a detailed status for the current cluster. \n", - "print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above code creates a GPU cluster. If you instead want to create a CPU cluster, provide a different VM size to the `vm_size` parameter, such as `STANDARD_D2_V2`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train model on the remote compute\n", - "Now that we have the cluster ready to go, let's run our distributed training job." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a project directory\n", - "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script and any additional files your training script depends on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "project_folder = './pytorch-distr-hvd'\n", - "os.makedirs(project_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copy the training script `pytorch_horovod_mnist.py` into this project directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy('pytorch_horovod_mnist.py', project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an experiment\n", - "Create an [Experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this distributed PyTorch tutorial. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "\n", - "experiment_name = 'pytorch-distr-hvd'\n", - "experiment = Experiment(ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a PyTorch estimator\n", - "The AML SDK's PyTorch estimator enables you to easily submit PyTorch training jobs for both single-node and distributed runs. For more information on the PyTorch estimator, refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-train-pytorch)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.dnn import PyTorch\n", - "\n", - "estimator = PyTorch(source_directory=project_folder,\n", - " compute_target=compute_target,\n", - " entry_script='pytorch_horovod_mnist.py',\n", - " node_count=2,\n", - " process_count_per_node=1,\n", - " distributed_backend='mpi',\n", - " use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above code specifies that we will run our training script on `2` nodes, with one worker per node. In order to execute a distributed run using MPI/Horovod, you must provide the argument `distributed_backend='mpi'`. Using this estimator with these settings, PyTorch, Horovod and their dependencies will be installed for you. However, if your script also uses other packages, make sure to install them via the `PyTorch` constructor's `pip_packages` or `conda_packages` parameters." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit job\n", - "Run your experiment by submitting your estimator object. Note that this call is asynchronous." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run = experiment.submit(estimator)\n", - "print(run.get_details())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor your run\n", - "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you can block until the script has completed training before running more code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True) # this provides a verbose log" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "minxia" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "minxia" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/02.distributed-pytorch-with-horovod/pytorch_horovod_mnist.py b/training/02.distributed-pytorch-with-horovod/pytorch_horovod_mnist.py deleted file mode 100644 index a513cff9..00000000 --- a/training/02.distributed-pytorch-with-horovod/pytorch_horovod_mnist.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright 2017 Uber Technologies, Inc. -# Licensed under the Apache License, Version 2.0 -# Script from horovod/examples: https://github.com/uber/horovod/blob/master/examples/pytorch_mnist.py - -from __future__ import print_function -import argparse -import torch.nn as nn -import torch.nn.functional as F -import torch.optim as optim -from torchvision import datasets, transforms -from torch.autograd import Variable -import torch.utils.data.distributed -import horovod.torch as hvd - -# Training settings -parser = argparse.ArgumentParser(description='PyTorch MNIST Example') -parser.add_argument('--batch-size', type=int, default=64, metavar='N', - help='input batch size for training (default: 64)') -parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N', - help='input batch size for testing (default: 1000)') -parser.add_argument('--epochs', type=int, default=10, metavar='N', - help='number of epochs to train (default: 10)') -parser.add_argument('--lr', type=float, default=0.01, metavar='LR', - help='learning rate (default: 0.01)') -parser.add_argument('--momentum', type=float, default=0.5, metavar='M', - help='SGD momentum (default: 0.5)') -parser.add_argument('--no-cuda', action='store_true', default=False, - help='disables CUDA training') -parser.add_argument('--seed', type=int, default=42, metavar='S', - help='random seed (default: 42)') -parser.add_argument('--log-interval', type=int, default=10, metavar='N', - help='how many batches to wait before logging training status') -args = parser.parse_args() -args.cuda = not args.no_cuda and torch.cuda.is_available() - -hvd.init() -torch.manual_seed(args.seed) - -if args.cuda: - # Horovod: pin GPU to local rank. - torch.cuda.set_device(hvd.local_rank()) - torch.cuda.manual_seed(args.seed) - - -kwargs = {'num_workers': 1, 'pin_memory': True} if args.cuda else {} -train_dataset = \ - datasets.MNIST('data-%d' % hvd.rank(), train=True, download=True, - transform=transforms.Compose([ - transforms.ToTensor(), - transforms.Normalize((0.1307,), (0.3081,)) - ])) -train_sampler = torch.utils.data.distributed.DistributedSampler( - train_dataset, num_replicas=hvd.size(), rank=hvd.rank()) -train_loader = torch.utils.data.DataLoader( - train_dataset, batch_size=args.batch_size, sampler=train_sampler, **kwargs) - -test_dataset = \ - datasets.MNIST('data-%d' % hvd.rank(), train=False, transform=transforms.Compose([ - transforms.ToTensor(), - transforms.Normalize((0.1307,), (0.3081,)) - ])) -test_sampler = torch.utils.data.distributed.DistributedSampler( - test_dataset, num_replicas=hvd.size(), rank=hvd.rank()) -test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=args.test_batch_size, - sampler=test_sampler, **kwargs) - - -class Net(nn.Module): - def __init__(self): - super(Net, self).__init__() - self.conv1 = nn.Conv2d(1, 10, kernel_size=5) - self.conv2 = nn.Conv2d(10, 20, kernel_size=5) - self.conv2_drop = nn.Dropout2d() - self.fc1 = nn.Linear(320, 50) - self.fc2 = nn.Linear(50, 10) - - def forward(self, x): - x = F.relu(F.max_pool2d(self.conv1(x), 2)) - x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2)) - x = x.view(-1, 320) - x = F.relu(self.fc1(x)) - x = F.dropout(x, training=self.training) - x = self.fc2(x) - return F.log_softmax(x) - - -model = Net() - -if args.cuda: - # Move model to GPU. - model.cuda() - -# Horovod: broadcast parameters. -hvd.broadcast_parameters(model.state_dict(), root_rank=0) - -# Horovod: scale learning rate by the number of GPUs. -optimizer = optim.SGD(model.parameters(), lr=args.lr * hvd.size(), - momentum=args.momentum) - -# Horovod: wrap optimizer with DistributedOptimizer. -optimizer = hvd.DistributedOptimizer( - optimizer, named_parameters=model.named_parameters()) - - -def train(epoch): - model.train() - train_sampler.set_epoch(epoch) - for batch_idx, (data, target) in enumerate(train_loader): - if args.cuda: - data, target = data.cuda(), target.cuda() - data, target = Variable(data), Variable(target) - optimizer.zero_grad() - output = model(data) - loss = F.nll_loss(output, target) - loss.backward() - optimizer.step() - if batch_idx % args.log_interval == 0: - print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( - epoch, batch_idx * len(data), len(train_sampler), - 100. * batch_idx / len(train_loader), loss.data[0])) - - -def metric_average(val, name): - tensor = torch.FloatTensor([val]) - avg_tensor = hvd.allreduce(tensor, name=name) - return avg_tensor[0] - - -def test(): - model.eval() - test_loss = 0. - test_accuracy = 0. - for data, target in test_loader: - if args.cuda: - data, target = data.cuda(), target.cuda() - data, target = Variable(data, volatile=True), Variable(target) - output = model(data) - # sum up batch loss - test_loss += F.nll_loss(output, target, size_average=False).data[0] - # get the index of the max log-probability - pred = output.data.max(1, keepdim=True)[1] - test_accuracy += pred.eq(target.data.view_as(pred)).cpu().float().sum() - - test_loss /= len(test_sampler) - test_accuracy /= len(test_sampler) - - test_loss = metric_average(test_loss, 'avg_loss') - test_accuracy = metric_average(test_accuracy, 'avg_accuracy') - - if hvd.rank() == 0: - print('\nTest set: Average loss: {:.4f}, Accuracy: {:.2f}%\n'.format( - test_loss, 100. * test_accuracy)) - - -for epoch in range(1, args.epochs + 1): - train(epoch) - test() diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/.gitignore b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/.gitignore deleted file mode 100644 index 82f0c3ac..00000000 --- a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/data/ diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/03.train-hyperparameter-tune-deploy-with-tensorflow.ipynb b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/03.train-hyperparameter-tune-deploy-with-tensorflow.ipynb deleted file mode 100644 index f54f40fd..00000000 --- a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/03.train-hyperparameter-tune-deploy-with-tensorflow.ipynb +++ /dev/null @@ -1,1170 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "bf74d2e9-2708-49b1-934b-e0ede342f475" - } - }, - "source": [ - "# 03. Training, hyperparameter tune, and deploy with TensorFlow\n", - "\n", - "## Introduction\n", - "This tutorial shows how to train a simple deep neural network using the MNIST dataset and TensorFlow on Azure Machine Learning. MNIST is a popular dataset consisting of 70,000 grayscale images. Each image is a handwritten digit of `28x28` pixels, representing number from 0 to 9. The goal is to create a multi-class classifier to identify the digit each image represents, and deploy it as a web service in Azure.\n", - "\n", - "For more information about the MNIST dataset, please visit [Yan LeCun's website](http://yann.lecun.com/exdb/mnist/).\n", - "\n", - "## Prerequisite:\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", - "* Go through the [00.configuration.ipynb](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's get started. First let's import some Python libraries." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbpresent": { - "id": "c377ea0c-0cd9-4345-9be2-e20fb29c94c3" - } - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import numpy as np\n", - "import os\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbpresent": { - "id": "edaa7f2f-2439-4148-b57a-8c794c0945ec" - } - }, - "outputs": [], - "source": [ - "import azureml\n", - "from azureml.core import Workspace, Run\n", - "\n", - "# check core SDK version number\n", - "print(\"Azure ML SDK Version: \", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "Diagnostics" - ] - }, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize workspace\n", - "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "59f52294-4a25-4c92-bab8-3b07f0f44d15" - } - }, - "source": [ - "## Create an Azure ML experiment\n", - "Let's create an experiment named \"tf-mnist\" and a folder to hold the training scripts. The script runs will be recorded under the experiment in Azure." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbpresent": { - "id": "bc70f780-c240-4779-96f3-bc5ef9a37d59" - } - }, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "\n", - "script_folder = './tf-mnist'\n", - "os.makedirs(script_folder, exist_ok=True)\n", - "\n", - "exp = Experiment(workspace=ws, name='tf-mnist')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "defe921f-8097-44c3-8336-8af6700804a7" - } - }, - "source": [ - "## Download MNIST dataset\n", - "In order to train on the MNIST dataset we will first need to download it from Yan LeCun's web site directly and save them in a `data` folder locally." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import urllib\n", - "\n", - "os.makedirs('./data/mnist', exist_ok=True)\n", - "\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz', filename = './data/mnist/train-images.gz')\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz', filename = './data/mnist/train-labels.gz')\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', filename = './data/mnist/test-images.gz')\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', filename = './data/mnist/test-labels.gz')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "c3f2f57c-7454-4d3e-b38d-b0946cf066ea" - } - }, - "source": [ - "## Show some sample images\n", - "Let's load the downloaded compressed file into numpy arrays using some utility functions included in the `utils.py` library file from the current folder. Then we use `matplotlib` to plot 30 random images from the dataset along with their labels." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbpresent": { - "id": "396d478b-34aa-4afa-9898-cdce8222a516" - } - }, - "outputs": [], - "source": [ - "from utils import load_data\n", - "\n", - "# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the neural network converge faster.\n", - "X_train = load_data('./data/mnist/train-images.gz', False) / 255.0\n", - "y_train = load_data('./data/mnist/train-labels.gz', True).reshape(-1)\n", - "\n", - "X_test = load_data('./data/mnist/test-images.gz', False) / 255.0\n", - "y_test = load_data('./data/mnist/test-labels.gz', True).reshape(-1)\n", - "\n", - "count = 0\n", - "sample_size = 30\n", - "plt.figure(figsize = (16, 6))\n", - "for i in np.random.permutation(X_train.shape[0])[:sample_size]:\n", - " count = count + 1\n", - " plt.subplot(1, sample_size, count)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " plt.text(x = 10, y = -10, s = y_train[i], fontsize = 18)\n", - " plt.imshow(X_train[i].reshape(28, 28), cmap = plt.cm.Greys)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upload MNIST dataset to default datastore \n", - "A [datastore](https://docs.microsoft.com/azure/machine-learning/service/how-to-access-data) is a place where data can be stored that is then made accessible to a Run either by means of mounting or copying the data to the compute target. A datastore can either be backed by an Azure Blob Storage or and Azure File Share (ADLS will be supported in the future). For simple data handling, each workspace provides a default datastore that can be used, in case the data is not already in Blob Storage or File Share." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds = ws.get_default_datastore()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this next step, we will upload the training and test set into the workspace's default datastore, which we will then later be mount on a Batch AI cluster for training." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds.upload(src_dir='./data/mnist', target_path='mnist', overwrite=True, show_progress=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Batch AI cluster as compute target\n", - "[Batch AI](https://docs.microsoft.com/en-us/azure/batch-ai/overview) is a service for provisioning and managing clusters of Azure virtual machines for running machine learning workloads. Let's create a new Batch AI cluster in the current workspace, if it doesn't already exist. We will then run the training script on this compute target." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we could not find the cluster with the given name in the previous cell, then we will create a new cluster here. We will create a Batch AI Cluster of `STANDARD_NC6` GPU VMs. This process is broken down into 3 steps:\n", - "1. create the configuration (this step is local and only takes a second)\n", - "2. create the Batch AI cluster (this step will take about **20 seconds**)\n", - "3. provision the VMs to bring the cluster to the initial size (of 1 in this case). This step will take about **3-5 minutes** and is providing only sparse output in the process. Please make sure to wait until the call returns before moving to the next cell" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# choose a name for your cluster\n", - "cluster_name = \"gpucluster\"\n", - "\n", - "try:\n", - " # look for the existing cluster by name\n", - " compute_target = ComputeTarget(workspace=ws, name=cluster_name)\n", - " if type(compute_target) is AmlCompute:\n", - " print('Found existing compute target {}.'.format(cluster_name))\n", - " else:\n", - " print('{} exists but it is not a Batch AI cluster. Please choose a different name.'.format(cluster_name))\n", - "except ComputeTargetException:\n", - " print('Creating a new compute target...')\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size=\"STANDARD_NC6\", # GPU-based VM\n", - " #vm_priority='lowpriority', # optional\n", - " max_nodes=6)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, cluster_name, compute_config)\n", - " \n", - " # can poll for a minimum number of nodes and for a specific timeout. \n", - " # if no min node count is provided it uses the scale settings for the cluster\n", - "compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - "\n", - "# Use the 'status' property to get a detailed status for the current cluster. \n", - "print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that you have created the compute target, let's see what the workspace's `compute_targets` property returns. You should now see one entry named 'gpucluster' of type BatchAI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compute_targets = ws.compute_targets\n", - "for name, ct in compute_targets.items():\n", - " print(name, ct.type, ct.provisioning_state)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Copy the training files into the script folder\n", - "The TensorFlow training script is already created for you. You can simply copy it into the script folder, together with the utility library used to load compressed data file into numpy array." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "# the training logic is in the tf_mnist.py file.\n", - "shutil.copy('./tf_mnist.py', script_folder)\n", - "\n", - "# the utils.py just helps loading data from the downloaded MNIST dataset into numpy arrays.\n", - "shutil.copy('./utils.py', script_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "nbpresent": { - "id": "2039d2d5-aca6-4f25-a12f-df9ae6529cae" - } - }, - "source": [ - "## Construct neural network in TensorFlow\n", - "In the training script `tf_mnist.py`, it creates a very simple DNN (deep neural network), with just 2 hidden layers. The input layer has 28 * 28 = 784 neurons, each representing a pixel in an image. The first hidden layer has 300 neurons, and the second hidden layer has 100 neurons. The output layer has 10 neurons, each representing a targeted label from 0 to 9.\n", - "\n", - "![DNN](nn.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Azure ML concepts \n", - "Please note the following three things in the code below:\n", - "1. The script accepts arguments using the argparse package. In this case there is one argument `--data_folder` which specifies the file system folder in which the script can find the MNIST data\n", - "```\n", - " parser = argparse.ArgumentParser()\n", - " parser.add_argument('--data_folder')\n", - "```\n", - "2. The script is accessing the Azure ML `Run` object by executing `run = Run.get_context()`. Further down the script is using the `run` to report the training accuracy and the validation accuracy as training progresses.\n", - "```\n", - " run.log('training_acc', np.float(acc_train))\n", - " run.log('validation_acc', np.float(acc_val))\n", - "```\n", - "3. When running the script on Azure ML, you can write files out to a folder `./outputs` that is relative to the root directory. This folder is specially tracked by Azure ML in the sense that any files written to that folder during script execution on the remote target will be picked up by Run History; these files (known as artifacts) will be available as part of the run history record." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next cell will print out the training code for you to inspect it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open(os.path.join(script_folder, './tf_mnist.py'), 'r') as f:\n", - " print(f.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create TensorFlow estimator\n", - "Next, we construct an `azureml.train.dnn.TensorFlow` estimator object, use the Batch AI cluster as compute target, and pass the mount-point of the datastore to the training code as a parameter.\n", - "The TensorFlow estimator is providing a simple way of launching a TensorFlow training job on a compute target. It will automatically provide a docker image that has TensorFlow installed -- if additional pip or conda packages are required, their names can be passed in via the `pip_packages` and `conda_packages` arguments and they will be included in the resulting docker." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.dnn import TensorFlow\n", - "\n", - "script_params = {\n", - " '--data-folder': ws.get_default_datastore().as_mount(),\n", - " '--batch-size': 50,\n", - " '--first-layer-neurons': 300,\n", - " '--second-layer-neurons': 100,\n", - " '--learning-rate': 0.01\n", - "}\n", - "\n", - "est = TensorFlow(source_directory=script_folder,\n", - " script_params=script_params,\n", - " compute_target=compute_target,\n", - " entry_script='tf_mnist.py', \n", - " use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Submit job to run\n", - "Calling the `fit` function on the estimator submits the job to Azure ML for execution. Submitting the job should only take a few seconds." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run = exp.submit(est)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor the Run\n", - "As the Run is executed, it will go through the following stages:\n", - "1. Preparing: A docker image is created matching the Python environment specified by the TensorFlow estimator and it will be uploaded to the workspace's Azure Container Registry. This step will only happen once for each Python environment -- the container will then be cached for subsequent runs. Creating and uploading the image takes about **5 minutes**. While the job is preparing, logs are streamed to the run history and can be viewed to monitor the progress of the image creation.\n", - "\n", - "2. Scaling: If the compute needs to be scaled up (i.e. the Batch AI cluster requires more nodes to execute the run than currently available), the Batch AI cluster will attempt to scale up in order to make the required amount of nodes available. Scaling typically takes about **5 minutes**.\n", - "\n", - "3. Running: All scripts in the script folder are uploaded to the compute target, data stores are mounted/copied and the `entry_script` is executed. While the job is running, stdout and the `./logs` folder are streamed to the run history and can be viewed to monitor the progress of the run.\n", - "\n", - "4. Post-Processing: The `./outputs` folder of the run is copied over to the run history\n", - "\n", - "There are multiple ways to check the progress of a running job. We can use a Jupyter notebook widget. \n", - "\n", - "**Note: The widget will automatically update ever 10-15 seconds, always showing you the most up-to-date information about the run**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also periodically check the status of the run object, and navigate to Azure portal to monitor the run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The Run object\n", - "The Run object provides the interface to the run history -- both to the job and to the control plane (this notebook), and both while the job is running and after it has completed. It provides a number of interesting features for instance:\n", - "* `run.get_details()`: Provides a rich set of properties of the run\n", - "* `run.get_metrics()`: Provides a dictionary with all the metrics that were reported for the Run\n", - "* `run.get_file_names()`: List all the files that were uploaded to the run history for this Run. This will include the `outputs` and `logs` folder, azureml-logs and other logs, as well as files that were explicitly uploaded to the run using `run.upload_file()`\n", - "\n", - "Below are some examples -- please run through them and inspect their output. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.get_details()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.get_metrics()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.get_file_names()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Plot accuracy over epochs\n", - "Since we can retrieve the metrics from the run, we can easily make plots using `matplotlib` in the notebook. Then we can add the plotted image to the run using `run.log_image()`, so all information about the run is kept together." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "os.makedirs('./imgs', exist_ok=True)\n", - "metrics = run.get_metrics()\n", - "\n", - "plt.figure(figsize = (13,5))\n", - "plt.plot(metrics['validation_acc'], 'r-', lw=4, alpha=.6)\n", - "plt.plot(metrics['training_acc'], 'b--', alpha=0.5)\n", - "plt.legend(['Full evaluation set', 'Training set mini-batch'])\n", - "plt.xlabel('epochs', fontsize=14)\n", - "plt.ylabel('accuracy', fontsize=14)\n", - "plt.title('Accuracy over Epochs', fontsize=16)\n", - "run.log_image(name='acc_over_epochs.png', plot=plt)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Download the saved model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the training script, a TensorFlow `saver` object is used to persist the model in a local folder (local to the compute target). The model was saved to the `./outputs` folder on the disk of the Batch AI cluster node where the job is run. Azure ML automatically uploaded anything written in the `./outputs` folder into run history file store. Subsequently, we can use the `Run` object to download the model files the `saver` object saved. They are under the the `outputs/model` folder in the run history file store, and are downloaded into a local folder named `model`. Note the TensorFlow model consists of four files in binary format and they are not human-readable." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# create a model folder in the current directory\n", - "os.makedirs('./model', exist_ok = True)\n", - "\n", - "for f in run.get_file_names():\n", - " if f.startswith('outputs/model'):\n", - " output_file_path = os.path.join('./model', f.split('/')[-1])\n", - " print('Downloading from {} to {} ...'.format(f, output_file_path))\n", - " run.download_file(name=f, output_file_path=output_file_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Predict on the test set\n", - "Now load the saved TensorFlow graph, and list all operations under the `network` scope. This way we can discover the input tensor `network/X:0` and the output tensor `network/output/MatMul:0`, and use them in the scoring script in the next step.\n", - "\n", - "Note: if your local TensorFlow version is different than the version running in the cluster where the model is trained, you might see a \"compiletime version mismatch\" warning. You can ignore it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "tf.reset_default_graph()\n", - "\n", - "saver = tf.train.import_meta_graph(\"./model/mnist-tf.model.meta\")\n", - "graph = tf.get_default_graph()\n", - "\n", - "for op in graph.get_operations():\n", - " if op.name.startswith('network'):\n", - " print(op.name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Feed test dataset to the persisted model to get predictions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# input tensor. this is an array of 784 elements, each representing the intensity of a pixel in the digit image.\n", - "X = tf.get_default_graph().get_tensor_by_name(\"network/X:0\")\n", - "# output tensor. this is an array of 10 elements, each representing the probability of predicted value of the digit.\n", - "output = tf.get_default_graph().get_tensor_by_name(\"network/output/MatMul:0\")\n", - "\n", - "with tf.Session() as sess:\n", - " saver.restore(sess, './model/mnist-tf.model')\n", - " k = output.eval(feed_dict={X : X_test})\n", - "# get the prediction, which is the index of the element that has the largest probability value.\n", - "y_hat = np.argmax(k, axis=1)\n", - "\n", - "# print the first 30 labels and predictions\n", - "print('labels: \\t', y_test[:30])\n", - "print('predictions:\\t', y_hat[:30])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Calculate the overall accuracy by comparing the predicted value against the test set." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"Accuracy on the test set:\", np.average(y_hat == y_test))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Intelligent hyperparameter tuning\n", - "We have trained the model with one set of hyperparameters, now let's how we can do hyperparameter tuning by launching multiple runs on the cluster. First let's define the parameter space using random sampling." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.hyperdrive import *\n", - "\n", - "ps = RandomParameterSampling(\n", - " {\n", - " '--batch-size': choice(25, 50, 100),\n", - " '--first-layer-neurons': choice(10, 50, 200, 300, 500),\n", - " '--second-layer-neurons': choice(10, 50, 200, 500),\n", - " '--learning-rate': loguniform(-6, -1)\n", - " }\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, we will create a new estimator without the above parameters since they will be passed in later. Note we still need to keep the `data-folder` parameter since that's not a hyperparamter we will sweep." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "est = TensorFlow(source_directory=script_folder,\n", - " script_params={'--data-folder': ws.get_default_datastore().as_mount()},\n", - " compute_target=compute_target,\n", - " entry_script='tf_mnist.py', \n", - " use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we will define an early termnination policy. The `BanditPolicy` basically states to check the job every 2 iterations. If the primary metric (defined later) falls outside of the top 10% range, Azure ML terminate the job. This saves us from continuing to explore hyperparameters that don't show promise of helping reach our target metric." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "policy = BanditPolicy(evaluation_interval=2, slack_factor=0.1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we are ready to configure a run configuration object, and specify the primary metric `validation_acc` that's recorded in your training runs. If you go back to visit the training script, you will notice that this value is being logged after every epoch (a full batch set). We also want to tell the service that we are looking to maximizing this value. We also set the number of samples to 20, and maximal concurrent job to 4, which is the same as the number of nodes in our computer cluster." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "htc = HyperDriveRunConfig(estimator=est, \n", - " hyperparameter_sampling=ps, \n", - " policy=policy, \n", - " primary_metric_name='validation_acc', \n", - " primary_metric_goal=PrimaryMetricGoal.MAXIMIZE, \n", - " max_total_runs=8,\n", - " max_concurrent_runs=4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, let's launch the hyperparameter tuning job." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "htr = exp.submit(config=htc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can use a run history widget to show the progress. Be patient as this might take a while to complete." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "RunDetails(htr).show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "htr.wait_for_completion(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Find and register best model\n", - "When all the jobs finish, we can find out the one that has the highest accuracy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_run = htr.get_best_run_by_primary_metric()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's list the model files uploaded during the run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(best_run.get_file_names())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can then register the folder (and all files in it) as a model named `tf-dnn-mnist` under the workspace for deployment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = best_run.register_model(model_name='tf-dnn-mnist', model_path='outputs/model')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy the model in ACI\n", - "Now we are ready to deploy the model as a web service running in Azure Container Instance [ACI](https://azure.microsoft.com/en-us/services/container-instances/). Azure Machine Learning accomplishes this by constructing a Docker image with the scoring logic and model baked in.\n", - "### Create score.py\n", - "First, we will create a scoring script that will be invoked by the web service call. \n", - "\n", - "* Note that the scoring script must have two required functions, `init()` and `run(input_data)`. \n", - " * In `init()` function, you typically load the model into a global object. This function is executed only once when the Docker container is started. \n", - " * In `run(input_data)` function, the model is used to predict a value based on the input data. The input and output to `run` typically use JSON as serialization and de-serialization format but you are not limited to that." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import json\n", - "import numpy as np\n", - "import os\n", - "import tensorflow as tf\n", - "\n", - "from azureml.core.model import Model\n", - "\n", - "def init():\n", - " global X, output, sess\n", - " tf.reset_default_graph()\n", - " model_root = Model.get_model_path('tf-dnn-mnist')\n", - " saver = tf.train.import_meta_graph(os.path.join(model_root, 'mnist-tf.model.meta'))\n", - " X = tf.get_default_graph().get_tensor_by_name(\"network/X:0\")\n", - " output = tf.get_default_graph().get_tensor_by_name(\"network/output/MatMul:0\")\n", - " \n", - " sess = tf.Session()\n", - " saver.restore(sess, os.path.join(model_root, 'mnist-tf.model'))\n", - "\n", - "def run(raw_data):\n", - " data = np.array(json.loads(raw_data)['data'])\n", - " # make prediction\n", - " out = output.eval(session=sess, feed_dict={X: data})\n", - " y_hat = np.argmax(out, axis=1)\n", - " return y_hat.tolist()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create myenv.yml\n", - "We also need to create an environment file so that Azure Machine Learning can install the necessary packages in the Docker image which are required by your scoring script. In this case, we need to specify packages `numpy`, `tensorflow`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import CondaDependencies\n", - "cd = CondaDependencies.create()\n", - "cd.add_conda_package('numpy')\n", - "cd.add_tensorflow_conda_package()\n", - "cd.save_to_file(base_directory='./', conda_file_path='myenv.yml')\n", - "\n", - "print(cd.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Deploy to ACI\n", - "We are almost ready to deploy. Create a deployment configuration and specify the number of CPUs and gigbyte of RAM needed for your ACI container. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores=1, \n", - " memory_gb=1, \n", - " tags={'name':'mnist', 'framework': 'TensorFlow DNN'},\n", - " description='Tensorflow DNN on MNIST')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Deployment Process\n", - "Now we can deploy. **This cell will run for about 7-8 minutes**. Behind the scene, it will do the following:\n", - "1. **Register model** \n", - "Take the local `model` folder (which contains our previously downloaded trained model files) and register it (and the files inside that folder) as a model named `model` under the workspace. Azure ML will register the model directory or model file(s) we specify to the `model_paths` parameter of the `Webservice.deploy` call.\n", - "2. **Build Docker image** \n", - "Build a Docker image using the scoring file (`score.py`), the environment file (`myenv.yml`), and the `model` folder containing the TensorFlow model files. \n", - "3. **Register image** \n", - "Register that image under the workspace. \n", - "4. **Ship to ACI** \n", - "And finally ship the image to the ACI infrastructure, start up a container in ACI using that image, and expose an HTTP endpoint to accept REST client calls." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.image import ContainerImage\n", - "imgconfig = ContainerImage.image_configuration(execution_script=\"score.py\", \n", - " runtime=\"python\", \n", - " conda_file=\"myenv.yml\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "from azureml.core.webservice import Webservice\n", - "\n", - "service = Webservice.deploy_from_model(workspace=ws,\n", - " name='tf-mnist-svc',\n", - " deployment_config=aciconfig,\n", - " models=[model],\n", - " image_config=imgconfig)\n", - "\n", - "service.wait_for_deployment(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Tip: If something goes wrong with the deployment, the first thing to look at is the logs from the service by running the following command:**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(service.get_logs())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the scoring web service endpoint:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(service.scoring_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Test the deployed model\n", - "Let's test the deployed model. Pick 30 random samples from the test set, and send it to the web service hosted in ACI. Note here we are using the `run` API in the SDK to invoke the service. You can also make raw HTTP calls using any HTTP tool such as curl.\n", - "\n", - "After the invocation, we print the returned predictions and plot them along with the input images. Use red font color and inversed image (white on black) to highlight the misclassified samples. Note since the model accuracy is pretty high, you might have to run the below cell a few times before you can see a misclassified sample." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "\n", - "# find 30 random samples from test set\n", - "n = 30\n", - "sample_indices = np.random.permutation(X_test.shape[0])[0:n]\n", - "\n", - "test_samples = json.dumps({\"data\": X_test[sample_indices].tolist()})\n", - "test_samples = bytes(test_samples, encoding='utf8')\n", - "\n", - "# predict using the deployed model\n", - "result = service.run(input_data=test_samples)\n", - "\n", - "# compare actual value vs. the predicted values:\n", - "i = 0\n", - "plt.figure(figsize = (20, 1))\n", - "\n", - "for s in sample_indices:\n", - " plt.subplot(1, n, i + 1)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " \n", - " # use different color for misclassified sample\n", - " font_color = 'red' if y_test[s] != result[i] else 'black'\n", - " clr_map = plt.cm.gray if y_test[s] != result[i] else plt.cm.Greys\n", - " \n", - " plt.text(x=10, y=-10, s=y_hat[s], fontsize=18, color=font_color)\n", - " plt.imshow(X_test[s].reshape(28, 28), cmap=clr_map)\n", - " \n", - " i = i + 1\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also send raw HTTP request to the service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "import json\n", - "\n", - "# send a random row from the test set to score\n", - "random_index = np.random.randint(0, len(X_test)-1)\n", - "input_data = \"{\\\"data\\\": [\" + str(list(X_test[random_index])) + \"]}\"\n", - "\n", - "headers = {'Content-Type':'application/json'}\n", - "\n", - "resp = requests.post(service.scoring_uri, input_data, headers=headers)\n", - "\n", - "print(\"POST to url\", service.scoring_uri)\n", - "#print(\"input data:\", input_data)\n", - "print(\"label:\", y_test[random_index])\n", - "print(\"prediction:\", resp.text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's look at the workspace after the web service was deployed. You should see \n", - "* a registered model named 'model' and with the id 'model:1'\n", - "* an image called 'tf-mnist' and with a docker image location pointing to your workspace's Azure Container Registry (ACR) \n", - "* a webservice called 'tf-mnist' with some scoring URL" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "models = ws.models\n", - "for name, model in models.items():\n", - " print(\"Model: {}, ID: {}\".format(name, model.id))\n", - " \n", - "images = ws.images\n", - "for name, image in images.items():\n", - " print(\"Image: {}, location: {}\".format(name, image.image_location))\n", - " \n", - "webservices = ws.webservices\n", - "for name, webservice in webservices.items():\n", - " print(\"Webservice: {}, scoring URI: {}\".format(name, webservice.scoring_uri))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Clean up\n", - "You can delete the ACI deployment with a simple delete API call." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "service.delete()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "minxia" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "minxia" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/nn.png b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/nn.png deleted file mode 100644 index 8910281eafd45cecfac2a5708abbffa82717a70b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121768 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 IyL%FDJxN8SMf+-FEbHCHyqKasLB^ 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�qmh&cP>Q$zWVL(hSx~vQEge;E99~LTvxSIV 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

rKk(8jHnrD@os5(rLYO%Sz6@Ebg1vxO&@}Kv$fl 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 diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/tf_mnist.py b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/tf_mnist.py deleted file mode 100644 index f5ab7099..00000000 --- a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/tf_mnist.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import numpy as np -import argparse -import os -import tensorflow as tf - -from azureml.core import Run -from utils import load_data - -print("TensorFlow version:", tf.VERSION) - -parser = argparse.ArgumentParser() -parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point') -parser.add_argument('--batch-size', type=int, dest='batch_size', default=50, help='mini batch size for training') -parser.add_argument('--first-layer-neurons', type=int, dest='n_hidden_1', default=100, - help='# of neurons in the first layer') -parser.add_argument('--second-layer-neurons', type=int, dest='n_hidden_2', default=100, - help='# of neurons in the second layer') -parser.add_argument('--learning-rate', type=float, dest='learning_rate', default=0.01, help='learning rate') -args = parser.parse_args() - -data_folder = os.path.join(args.data_folder, 'mnist') - -print('training dataset is stored here:', data_folder) - -X_train = load_data(os.path.join(data_folder, 'train-images.gz'), False) / 255.0 -X_test = load_data(os.path.join(data_folder, 'test-images.gz'), False) / 255.0 - -y_train = load_data(os.path.join(data_folder, 'train-labels.gz'), True).reshape(-1) -y_test = load_data(os.path.join(data_folder, 'test-labels.gz'), True).reshape(-1) - -print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep='\n') -training_set_size = X_train.shape[0] - -n_inputs = 28 * 28 -n_h1 = args.n_hidden_1 -n_h2 = args.n_hidden_2 -n_outputs = 10 -learning_rate = args.learning_rate -n_epochs = 20 -batch_size = args.batch_size - -with tf.name_scope('network'): - # construct the DNN - X = tf.placeholder(tf.float32, shape=(None, n_inputs), name='X') - y = tf.placeholder(tf.int64, shape=(None), name='y') - h1 = tf.layers.dense(X, n_h1, activation=tf.nn.relu, name='h1') - h2 = tf.layers.dense(h1, n_h2, activation=tf.nn.relu, name='h2') - output = tf.layers.dense(h2, n_outputs, name='output') - -with tf.name_scope('train'): - cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=output) - loss = tf.reduce_mean(cross_entropy, name='loss') - optimizer = tf.train.GradientDescentOptimizer(learning_rate) - train_op = optimizer.minimize(loss) - -with tf.name_scope('eval'): - correct = tf.nn.in_top_k(output, y, 1) - acc_op = tf.reduce_mean(tf.cast(correct, tf.float32)) - -init = tf.global_variables_initializer() -saver = tf.train.Saver() - -# start an Azure ML run -run = Run.get_context() - -with tf.Session() as sess: - init.run() - for epoch in range(n_epochs): - - # randomly shuffle training set - indices = np.random.permutation(training_set_size) - X_train = X_train[indices] - y_train = y_train[indices] - - # batch index - b_start = 0 - b_end = b_start + batch_size - for _ in range(training_set_size // batch_size): - # get a batch - X_batch, y_batch = X_train[b_start: b_end], y_train[b_start: b_end] - - # update batch index for the next batch - b_start = b_start + batch_size - b_end = min(b_start + batch_size, training_set_size) - - # train - sess.run(train_op, feed_dict={X: X_batch, y: y_batch}) - # evaluate training set - acc_train = acc_op.eval(feed_dict={X: X_batch, y: y_batch}) - # evaluate validation set - acc_val = acc_op.eval(feed_dict={X: X_test, y: y_test}) - - # log accuracies - run.log('training_acc', np.float(acc_train)) - run.log('validation_acc', np.float(acc_val)) - print(epoch, '-- Training accuracy:', acc_train, '\b Validation accuracy:', acc_val) - y_hat = np.argmax(output.eval(feed_dict={X: X_test}), axis=1) - - run.log('final_acc', np.float(acc_val)) - - os.makedirs('./outputs/model', exist_ok=True) - # files saved in the "./outputs" folder are automatically uploaded into run history - saver.save(sess, './outputs/model/mnist-tf.model') diff --git a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/utils.py b/training/03.train-hyperparameter-tune-deploy-with-tensorflow/utils.py deleted file mode 100644 index 98170ada..00000000 --- a/training/03.train-hyperparameter-tune-deploy-with-tensorflow/utils.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import gzip -import numpy as np -import struct - - -# load compressed MNIST gz files and return numpy arrays -def load_data(filename, label=False): - with gzip.open(filename) as gz: - struct.unpack('I', gz.read(4)) - n_items = struct.unpack('>I', gz.read(4)) - if not label: - n_rows = struct.unpack('>I', gz.read(4))[0] - n_cols = struct.unpack('>I', gz.read(4))[0] - res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8) - res = res.reshape(n_items[0], n_rows * n_cols) - else: - res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8) - res = res.reshape(n_items[0], 1) - return res - - -# one-hot encode a 1-D array -def one_hot_encode(array, num_of_classes): - return np.eye(num_of_classes)[array.reshape(-1)] diff --git a/training/04.distributed-tensorflow-with-horovod/.gitignore b/training/04.distributed-tensorflow-with-horovod/.gitignore deleted file mode 100644 index 9795c1f1..00000000 --- a/training/04.distributed-tensorflow-with-horovod/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/data/ -/tf-distr-hvd/ diff --git a/training/04.distributed-tensorflow-with-horovod/04.distributed-tensorflow-with-horovod.ipynb b/training/04.distributed-tensorflow-with-horovod/04.distributed-tensorflow-with-horovod.ipynb deleted file mode 100644 index 51d05b20..00000000 --- a/training/04.distributed-tensorflow-with-horovod/04.distributed-tensorflow-with-horovod.ipynb +++ /dev/null @@ -1,400 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 04. Distributed Tensorflow with Horovod\n", - "In this tutorial, you will train a word2vec model in TensorFlow using distributed training via [Horovod](https://github.com/uber/horovod)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning (AML)\n", - "* Go through the [00.configuration.ipynb](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)\n", - "* Review the [tutorial](https://aka.ms/aml-notebook-hyperdrive) on single-node TensorFlow training using the SDK" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "Diagnostics" - ] - }, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize workspace\n", - "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a remote compute target\n", - "You will need to create a [compute target](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#compute-target) to execute your training script on. In this tutorial, you create an [Azure Batch AI](https://docs.microsoft.com/azure/batch-ai/overview) cluster as your training compute resource. This code creates a cluster for you if it does not already exist in your workspace.\n", - "\n", - "**Creation of the cluster takes approximately 5 minutes.** If the cluster is already in your workspace this code will skip the cluster creation process." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# choose a name for your cluster\n", - "cluster_name = \"gpucluster\"\n", - "\n", - "try:\n", - " compute_target = ComputeTarget(workspace=ws, name=cluster_name)\n", - " print('Found existing compute target')\n", - "except ComputeTargetException:\n", - " print('Creating a new compute target...')\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', \n", - " max_nodes=6)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, cluster_name, compute_config)\n", - "\n", - "compute_target.wait_for_completion(show_output=True)\n", - "\n", - "# Use the 'status' property to get a detailed status for the current cluster. \n", - "print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above code creates a GPU cluster. If you instead want to create a CPU cluster, provide a different VM size to the `vm_size` parameter, such as `STANDARD_D2_V2`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upload data to datastore\n", - "To make data accessible for remote training, AML provides a convenient way to do so via a [Datastore](https://docs.microsoft.com/azure/machine-learning/service/how-to-access-data). The datastore provides a mechanism for you to upload/download data to Azure Storage, and interact with it from your remote compute targets. \n", - "\n", - "If your data is already stored in Azure, or you download the data as part of your training script, you will not need to do this step. For this tutorial, although you can download the data in your training script, we will demonstrate how to upload the training data to a datastore and access it during training to illustrate the datastore functionality." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First, download the training data from [here](http://mattmahoney.net/dc/text8.zip) to your local machine:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import urllib\n", - "\n", - "os.makedirs('./data', exist_ok=True)\n", - "download_url = 'http://mattmahoney.net/dc/text8.zip'\n", - "urllib.request.urlretrieve(download_url, filename='./data/text8.zip')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Each workspace is associated with a default datastore. In this tutorial, we will upload the training data to this default datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds = ws.get_default_datastore()\n", - "print(ds.datastore_type, ds.account_name, ds.container_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Upload the contents of the data directory to the path `./data` on the default datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds.upload(src_dir='data', target_path='data', overwrite=True, show_progress=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For convenience, let's get a reference to the path on the datastore with the zip file of training data. We can do so using the `path` method. In the next section, we can then pass this reference to our training script's `--input_data` argument. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "path_on_datastore = 'data/text8.zip'\n", - "ds_data = ds.path(path_on_datastore)\n", - "print(ds_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train model on the remote compute" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a project directory\n", - "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script, and any additional files your training script depends on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "project_folder = './tf-distr-hvd'\n", - "os.makedirs(project_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copy the training script `tf_horovod_word2vec.py` into this project directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy('tf_horovod_word2vec.py', project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an experiment\n", - "Create an [Experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this distributed TensorFlow tutorial. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "\n", - "experiment_name = 'tf-distr-hvd'\n", - "experiment = Experiment(ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a TensorFlow estimator\n", - "The AML SDK's TensorFlow estimator enables you to easily submit TensorFlow training jobs for both single-node and distributed runs. For more information on the TensorFlow estimator, refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-train-tensorflow)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.dnn import TensorFlow\n", - "\n", - "script_params={\n", - " '--input_data': ds_data\n", - "}\n", - "\n", - "estimator= TensorFlow(source_directory=project_folder,\n", - " compute_target=compute_target,\n", - " script_params=script_params,\n", - " entry_script='tf_horovod_word2vec.py',\n", - " node_count=2,\n", - " process_count_per_node=1,\n", - " distributed_backend='mpi',\n", - " use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above code specifies that we will run our training script on `2` nodes, with one worker per node. In order to execute a distributed run using MPI/Horovod, you must provide the argument `distributed_backend='mpi'`. Using this estimator with these settings, TensorFlow, Horovod and their dependencies will be installed for you. However, if your script also uses other packages, make sure to install them via the `TensorFlow` constructor's `pip_packages` or `conda_packages` parameters.\n", - "\n", - "Note that we passed our training data reference `ds_data` to our script's `--input_data` argument. This will 1) mount our datastore on the remote compute and 2) provide the path to the data zip file on our datastore." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit job\n", - "Run your experiment by submitting your estimator object. Note that this call is asynchronous." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run = experiment.submit(estimator)\n", - "print(run)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor your run\n", - "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you can block until the script has completed training before running more code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "minxia" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/04.distributed-tensorflow-with-horovod/tf_horovod_word2vec.py b/training/04.distributed-tensorflow-with-horovod/tf_horovod_word2vec.py deleted file mode 100644 index f29fb278..00000000 --- a/training/04.distributed-tensorflow-with-horovod/tf_horovod_word2vec.py +++ /dev/null @@ -1,259 +0,0 @@ -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# Modifications copyright (C) 2017 Uber Technologies, Inc. -# Additional modifications copyright (C) Microsoft Corporation -# Licensed under the Apache License, Version 2.0 -# Script adapted from: https://github.com/uber/horovod/blob/master/examples/tensorflow_word2vec.py -# ====================================== -"""Basic word2vec example.""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import collections -import math -import os -import random -import zipfile -import argparse - -import numpy as np -from six.moves import urllib -from six.moves import xrange # pylint: disable=redefined-builtin -import tensorflow as tf -import horovod.tensorflow as hvd -from azureml.core.run import Run - -# Horovod: initialize Horovod. -hvd.init() - -parser = argparse.ArgumentParser() -parser.add_argument('--input_data', type=str, help='training data') - -args = parser.parse_args() - -input_data = args.input_data -print("the input data is at %s" % input_data) - -# Step 1: Download the data. -url = 'http://mattmahoney.net/dc/text8.zip' - - -def maybe_download(filename, expected_bytes): - """Download a file if not present, and make sure it's the right size.""" - if not filename: - filename = "text8.zip" - if not os.path.exists(filename): - print("Downloading the data from http://mattmahoney.net/dc/text8.zip") - filename, _ = urllib.request.urlretrieve(url, filename) - else: - print("Use the data from %s" % input_data) - statinfo = os.stat(filename) - if statinfo.st_size == expected_bytes: - print('Found and verified', filename) - else: - print(statinfo.st_size) - raise Exception( - 'Failed to verify ' + url + '. Can you get to it with a browser?') - return filename - - -filename = maybe_download(input_data, 31344016) - - -# Read the data into a list of strings. -def read_data(filename): - """Extract the first file enclosed in a zip file as a list of words.""" - with zipfile.ZipFile(filename) as f: - data = tf.compat.as_str(f.read(f.namelist()[0])).split() - return data - - -vocabulary = read_data(filename) -print('Data size', len(vocabulary)) - -# Step 2: Build the dictionary and replace rare words with UNK token. -vocabulary_size = 50000 - - -def build_dataset(words, n_words): - """Process raw inputs into a dataset.""" - count = [['UNK', -1]] - count.extend(collections.Counter(words).most_common(n_words - 1)) - dictionary = dict() - for word, _ in count: - dictionary[word] = len(dictionary) - data = list() - unk_count = 0 - for word in words: - if word in dictionary: - index = dictionary[word] - else: - index = 0 # dictionary['UNK'] - unk_count += 1 - data.append(index) - count[0][1] = unk_count - reversed_dictionary = dict(zip(dictionary.values(), dictionary.keys())) - return data, count, dictionary, reversed_dictionary - - -data, count, dictionary, reverse_dictionary = build_dataset(vocabulary, - vocabulary_size) -del vocabulary # Hint to reduce memory. -print('Most common words (+UNK)', count[:5]) -print('Sample data', data[:10], [reverse_dictionary[i] for i in data[:10]]) - - -# Step 3: Function to generate a training batch for the skip-gram model. -def generate_batch(batch_size, num_skips, skip_window): - assert num_skips <= 2 * skip_window - # Adjust batch_size to match num_skips - batch_size = batch_size // num_skips * num_skips - span = 2 * skip_window + 1 # [ skip_window target skip_window ] - # Backtrack a little bit to avoid skipping words in the end of a batch - data_index = random.randint(0, len(data) - span - 1) - batch = np.ndarray(shape=(batch_size), dtype=np.int32) - labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32) - buffer = collections.deque(maxlen=span) - for _ in range(span): - buffer.append(data[data_index]) - data_index = (data_index + 1) % len(data) - for i in range(batch_size // num_skips): - target = skip_window # target label at the center of the buffer - targets_to_avoid = [skip_window] - for j in range(num_skips): - while target in targets_to_avoid: - target = random.randint(0, span - 1) - targets_to_avoid.append(target) - batch[i * num_skips + j] = buffer[skip_window] - labels[i * num_skips + j, 0] = buffer[target] - buffer.append(data[data_index]) - data_index = (data_index + 1) % len(data) - return batch, labels - - -batch, labels = generate_batch(batch_size=8, num_skips=2, skip_window=1) -for i in range(8): - print(batch[i], reverse_dictionary[batch[i]], - '->', labels[i, 0], reverse_dictionary[labels[i, 0]]) - -# Step 4: Build and train a skip-gram model. - -max_batch_size = 128 -embedding_size = 128 # Dimension of the embedding vector. -skip_window = 1 # How many words to consider left and right. -num_skips = 2 # How many times to reuse an input to generate a label. - -# We pick a random validation set to sample nearest neighbors. Here we limit the -# validation samples to the words that have a low numeric ID, which by -# construction are also the most frequent. -valid_size = 16 # Random set of words to evaluate similarity on. -valid_window = 100 # Only pick dev samples in the head of the distribution. -valid_examples = np.random.choice(valid_window, valid_size, replace=False) -num_sampled = 64 # Number of negative examples to sample. - -graph = tf.Graph() - -with graph.as_default(): - - # Input data. - train_inputs = tf.placeholder(tf.int32, shape=[None]) - train_labels = tf.placeholder(tf.int32, shape=[None, 1]) - valid_dataset = tf.constant(valid_examples, dtype=tf.int32) - - # Look up embeddings for inputs. - embeddings = tf.Variable( - tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0)) - embed = tf.nn.embedding_lookup(embeddings, train_inputs) - - # Construct the variables for the NCE loss - nce_weights = tf.Variable( - tf.truncated_normal([vocabulary_size, embedding_size], - stddev=1.0 / math.sqrt(embedding_size))) - nce_biases = tf.Variable(tf.zeros([vocabulary_size])) - - # Compute the average NCE loss for the batch. - # tf.nce_loss automatically draws a new sample of the negative labels each - # time we evaluate the loss. - loss = tf.reduce_mean( - tf.nn.nce_loss(weights=nce_weights, - biases=nce_biases, - labels=train_labels, - inputs=embed, - num_sampled=num_sampled, - num_classes=vocabulary_size)) - - # Horovod: adjust learning rate based on number of GPUs. - optimizer = tf.train.GradientDescentOptimizer(1.0 * hvd.size()) - - # Horovod: add Horovod Distributed Optimizer. - optimizer = hvd.DistributedOptimizer(optimizer) - - train_op = optimizer.minimize(loss) - - # Compute the cosine similarity between minibatch examples and all embeddings. - norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True)) - normalized_embeddings = embeddings / norm - valid_embeddings = tf.nn.embedding_lookup( - normalized_embeddings, valid_dataset) - similarity = tf.matmul( - valid_embeddings, normalized_embeddings, transpose_b=True) - - # Add variable initializer. - init = tf.global_variables_initializer() - - # Horovod: broadcast initial variable states from rank 0 to all other processes. - # This is necessary to ensure consistent initialization of all workers when - # training is started with random weights or restored from a checkpoint. - bcast = hvd.broadcast_global_variables(0) - -# Step 5: Begin training. - -# Horovod: adjust number of steps based on number of GPUs. -num_steps = 4000 // hvd.size() + 1 - -# Horovod: pin GPU to be used to process local rank (one GPU per process) -config = tf.ConfigProto() -config.gpu_options.allow_growth = True -config.gpu_options.visible_device_list = str(hvd.local_rank()) - -with tf.Session(graph=graph, config=config) as session: - # We must initialize all variables before we use them. - init.run() - bcast.run() - print('Initialized') - run = Run.get_context() - average_loss = 0 - for step in xrange(num_steps): - # simulate various sentence length by randomization - batch_size = random.randint(max_batch_size // 2, max_batch_size) - batch_inputs, batch_labels = generate_batch( - batch_size, num_skips, skip_window) - feed_dict = {train_inputs: batch_inputs, train_labels: batch_labels} - - # We perform one update step by evaluating the optimizer op (including it - # in the list of returned values for session.run() - _, loss_val = session.run([train_op, loss], feed_dict=feed_dict) - average_loss += loss_val - - if step % 2000 == 0: - if step > 0: - average_loss /= 2000 - # The average loss is an estimate of the loss over the last 2000 batches. - print('Average loss at step ', step, ': ', average_loss) - run.log("Loss", average_loss) - average_loss = 0 - final_embeddings = normalized_embeddings.eval() - - # Evaluate similarity in the end on worker 0. - if hvd.rank() == 0: - sim = similarity.eval() - for i in xrange(valid_size): - valid_word = reverse_dictionary[valid_examples[i]] - top_k = 8 # number of nearest neighbors - nearest = (-sim[i, :]).argsort()[1:top_k + 1] - log_str = 'Nearest to %s:' % valid_word - for k in xrange(top_k): - close_word = reverse_dictionary[nearest[k]] - log_str = '%s %s,' % (log_str, close_word) - print(log_str) diff --git a/training/05.distributed-tensorflow-with-parameter-server/.gitignore b/training/05.distributed-tensorflow-with-parameter-server/.gitignore deleted file mode 100644 index 7d49cdc5..00000000 --- a/training/05.distributed-tensorflow-with-parameter-server/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/tf-distr-ps/ diff --git a/training/05.distributed-tensorflow-with-parameter-server/05.distributed-tensorflow-with-parameter-server.ipynb b/training/05.distributed-tensorflow-with-parameter-server/05.distributed-tensorflow-with-parameter-server.ipynb deleted file mode 100644 index c7df4a0f..00000000 --- a/training/05.distributed-tensorflow-with-parameter-server/05.distributed-tensorflow-with-parameter-server.ipynb +++ /dev/null @@ -1,312 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 05. Distributed TensorFlow with parameter server\n", - "In this tutorial, you will train a TensorFlow model on the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset using native [distributed TensorFlow](https://www.tensorflow.org/deploy/distributed)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning (AML)\n", - "* Go through the [00.configuration.ipynb](https://github.com/Azure/MachineLearningNotebooks/blob/master/00.configuration.ipynb) notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)\n", - "* Review the [tutorial](https://aka.ms/aml-notebook-hyperdrive) on single-node TensorFlow training using the SDK" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "Diagnostics" - ] - }, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize workspace\n", - "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a remote compute target\n", - "You will need to create a [compute target](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#compute-target) to execute your training script on. In this tutorial, you create an [Azure Batch AI](https://docs.microsoft.com/azure/batch-ai/overview) cluster as your training compute resource. This code creates a cluster for you if it does not already exist in your workspace.\n", - "\n", - "**Creation of the cluster takes approximately 5 minutes.** If the cluster is already in your workspace this code will skip the cluster creation process." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# choose a name for your cluster\n", - "cluster_name = \"gpucluster\"\n", - "\n", - "try:\n", - " compute_target = ComputeTarget(workspace=ws, name=cluster_name)\n", - " print('Found existing compute target.')\n", - "except ComputeTargetException:\n", - " print('Creating a new compute target...')\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', \n", - " max_nodes=6)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, cluster_name, compute_config)\n", - "\n", - "compute_target.wait_for_completion(show_output=True)\n", - "\n", - "# Use the 'status' property to get a detailed status for the current cluster. \n", - "print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train model on the remote compute\n", - "Now that we have the cluster ready to go, let's run our distributed training job." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a project directory\n", - "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script, and any additional files your training script depends on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "project_folder = './tf-distr-ps'\n", - "os.makedirs(project_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copy the training script `tf_mnist_replica.py` into this project directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy('tf_mnist_replica.py', project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an experiment\n", - "Create an [Experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this distributed TensorFlow tutorial. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "\n", - "experiment_name = 'tf-distr-ps'\n", - "experiment = Experiment(ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a TensorFlow estimator\n", - "The AML SDK's TensorFlow estimator enables you to easily submit TensorFlow training jobs for both single-node and distributed runs. For more information on the TensorFlow estimator, refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-train-tensorflow)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.dnn import TensorFlow\n", - "\n", - "script_params={\n", - " '--num_gpus': 1,\n", - " '--train_steps': 500\n", - "}\n", - "\n", - "estimator = TensorFlow(source_directory=project_folder,\n", - " compute_target=compute_target,\n", - " script_params=script_params,\n", - " entry_script='tf_mnist_replica.py',\n", - " node_count=2,\n", - " worker_count=2,\n", - " parameter_server_count=1, \n", - " distributed_backend='ps',\n", - " use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above code specifies that we will run our training script on `2` nodes, with two workers and one parameter server. In order to execute a native distributed TensorFlow run, you must provide the argument `distributed_backend='ps'`. Using this estimator with these settings, TensorFlow and its dependencies will be installed for you. However, if your script also uses other packages, make sure to install them via the `TensorFlow` constructor's `pip_packages` or `conda_packages` parameters." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit job\n", - "Run your experiment by submitting your estimator object. Note that this call is asynchronous." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run = experiment.submit(estimator)\n", - "print(run)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor your run\n", - "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you can block until the script has completed training before running more code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True) # this provides a verbose log" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "minxia" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "minxia" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/05.distributed-tensorflow-with-parameter-server/tf_mnist_replica.py b/training/05.distributed-tensorflow-with-parameter-server/tf_mnist_replica.py deleted file mode 100644 index 96d40fed..00000000 --- a/training/05.distributed-tensorflow-with-parameter-server/tf_mnist_replica.py +++ /dev/null @@ -1,271 +0,0 @@ -# Copyright 2016 The TensorFlow Authors. All Rights Reserved. -# Licensed under the Apache License, Version 2.0 -# Script adapted from: -# https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/dist_test/python/mnist_replica.py -# ============================================================================== -"""Distributed MNIST training and validation, with model replicas. -A simple softmax model with one hidden layer is defined. The parameters -(weights and biases) are located on one parameter server (ps), while the ops -are executed on two worker nodes by default. The TF sessions also run on the -worker node. -Multiple invocations of this script can be done in parallel, with different -values for --task_index. There should be exactly one invocation with ---task_index, which will create a master session that carries out variable -initialization. The other, non-master, sessions will wait for the master -session to finish the initialization before proceeding to the training stage. -The coordination between the multiple worker invocations occurs due to -the definition of the parameters on the same ps devices. The parameter updates -from one worker is visible to all other workers. As such, the workers can -perform forward computation and gradient calculation in parallel, which -should lead to increased training speed for the simple model. -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import os -import math -import sys -import tempfile -import time -import json - -import tensorflow as tf -from tensorflow.examples.tutorials.mnist import input_data -from azureml.core.run import Run - -flags = tf.app.flags -flags.DEFINE_string("data_dir", "/tmp/mnist-data", - "Directory for storing mnist data") -flags.DEFINE_boolean("download_only", False, - "Only perform downloading of data; Do not proceed to " - "session preparation, model definition or training") -flags.DEFINE_integer("num_gpus", 0, "Total number of gpus for each machine." - "If you don't use GPU, please set it to '0'") -flags.DEFINE_integer("replicas_to_aggregate", None, - "Number of replicas to aggregate before parameter update " - "is applied (For sync_replicas mode only; default: " - "num_workers)") -flags.DEFINE_integer("hidden_units", 100, - "Number of units in the hidden layer of the NN") -flags.DEFINE_integer("train_steps", 200, - "Number of (global) training steps to perform") -flags.DEFINE_integer("batch_size", 100, "Training batch size") -flags.DEFINE_float("learning_rate", 0.01, "Learning rate") -flags.DEFINE_boolean( - "sync_replicas", False, - "Use the sync_replicas (synchronized replicas) mode, " - "wherein the parameter updates from workers are aggregated " - "before applied to avoid stale gradients") -flags.DEFINE_boolean( - "existing_servers", False, "Whether servers already exists. If True, " - "will use the worker hosts via their GRPC URLs (one client process " - "per worker host). Otherwise, will create an in-process TensorFlow " - "server.") - -FLAGS = flags.FLAGS - -IMAGE_PIXELS = 28 - - -def main(unused_argv): - data_root = os.path.join("outputs", "MNIST") - mnist = None - tf_config = os.environ.get("TF_CONFIG") - if not tf_config or tf_config == "": - raise ValueError("TF_CONFIG not found.") - tf_config_json = json.loads(tf_config) - cluster = tf_config_json.get('cluster') - job_name = tf_config_json.get('task', {}).get('type') - task_index = tf_config_json.get('task', {}).get('index') - job_name = "worker" if job_name == "master" else job_name - sentinel_path = os.path.join(data_root, "complete.txt") - if job_name == "worker" and task_index == 0: - mnist = input_data.read_data_sets(data_root, one_hot=True) - with open(sentinel_path, 'w+') as f: - f.write("download complete") - else: - while not os.path.exists(sentinel_path): - time.sleep(0.01) - mnist = input_data.read_data_sets(data_root, one_hot=True) - - if FLAGS.download_only: - sys.exit(0) - - print("job name = %s" % job_name) - print("task index = %d" % task_index) - print("number of GPUs = %d" % FLAGS.num_gpus) - - # Construct the cluster and start the server - cluster_spec = tf.train.ClusterSpec(cluster) - - # Get the number of workers. - num_workers = len(cluster_spec.task_indices("worker")) - - if not FLAGS.existing_servers: - # Not using existing servers. Create an in-process server. - server = tf.train.Server( - cluster_spec, job_name=job_name, task_index=task_index) - if job_name == "ps": - server.join() - - is_chief = (task_index == 0) - if FLAGS.num_gpus > 0: - # Avoid gpu allocation conflict: now allocate task_num -> #gpu - # for each worker in the corresponding machine - gpu = (task_index % FLAGS.num_gpus) - worker_device = "/job:worker/task:%d/gpu:%d" % (task_index, gpu) - elif FLAGS.num_gpus == 0: - # Just allocate the CPU to worker server - cpu = 0 - worker_device = "/job:worker/task:%d/cpu:%d" % (task_index, cpu) - # The device setter will automatically place Variables ops on separate - # parameter servers (ps). The non-Variable ops will be placed on the workers. - # The ps use CPU and workers use corresponding GPU - with tf.device( - tf.train.replica_device_setter( - worker_device=worker_device, - ps_device="/job:ps/cpu:0", - cluster=cluster)): - global_step = tf.Variable(0, name="global_step", trainable=False) - - # Variables of the hidden layer - hid_w = tf.Variable( - tf.truncated_normal( - [IMAGE_PIXELS * IMAGE_PIXELS, FLAGS.hidden_units], - stddev=1.0 / IMAGE_PIXELS), - name="hid_w") - hid_b = tf.Variable(tf.zeros([FLAGS.hidden_units]), name="hid_b") - - # Variables of the softmax layer - sm_w = tf.Variable( - tf.truncated_normal( - [FLAGS.hidden_units, 10], - stddev=1.0 / math.sqrt(FLAGS.hidden_units)), - name="sm_w") - sm_b = tf.Variable(tf.zeros([10]), name="sm_b") - - # Ops: located on the worker specified with task_index - x = tf.placeholder(tf.float32, [None, IMAGE_PIXELS * IMAGE_PIXELS]) - y_ = tf.placeholder(tf.float32, [None, 10]) - - hid_lin = tf.nn.xw_plus_b(x, hid_w, hid_b) - hid = tf.nn.relu(hid_lin) - - y = tf.nn.softmax(tf.nn.xw_plus_b(hid, sm_w, sm_b)) - cross_entropy = -tf.reduce_sum(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))) - - opt = tf.train.AdamOptimizer(FLAGS.learning_rate) - - if FLAGS.sync_replicas: - if FLAGS.replicas_to_aggregate is None: - replicas_to_aggregate = num_workers - else: - replicas_to_aggregate = FLAGS.replicas_to_aggregate - - opt = tf.train.SyncReplicasOptimizer( - opt, - replicas_to_aggregate=replicas_to_aggregate, - total_num_replicas=num_workers, - name="mnist_sync_replicas") - - train_step = opt.minimize(cross_entropy, global_step=global_step) - - if FLAGS.sync_replicas: - local_init_op = opt.local_step_init_op - if is_chief: - local_init_op = opt.chief_init_op - - ready_for_local_init_op = opt.ready_for_local_init_op - - # Initial token and chief queue runners required by the sync_replicas mode - chief_queue_runner = opt.get_chief_queue_runner() - sync_init_op = opt.get_init_tokens_op() - - init_op = tf.global_variables_initializer() - train_dir = tempfile.mkdtemp() - - if FLAGS.sync_replicas: - sv = tf.train.Supervisor( - is_chief=is_chief, - logdir=train_dir, - init_op=init_op, - local_init_op=local_init_op, - ready_for_local_init_op=ready_for_local_init_op, - recovery_wait_secs=1, - global_step=global_step) - else: - sv = tf.train.Supervisor( - is_chief=is_chief, - logdir=train_dir, - init_op=init_op, - recovery_wait_secs=1, - global_step=global_step) - - sess_config = tf.ConfigProto( - allow_soft_placement=True, - log_device_placement=False, - device_filters=["/job:ps", - "/job:worker/task:%d" % task_index]) - - # The chief worker (task_index==0) session will prepare the session, - # while the remaining workers will wait for the preparation to complete. - if is_chief: - print("Worker %d: Initializing session..." % task_index) - else: - print("Worker %d: Waiting for session to be initialized..." % - task_index) - - if FLAGS.existing_servers: - server_grpc_url = "grpc://" + task_index - print("Using existing server at: %s" % server_grpc_url) - - sess = sv.prepare_or_wait_for_session(server_grpc_url, config=sess_config) - else: - sess = sv.prepare_or_wait_for_session(server.target, config=sess_config) - - print("Worker %d: Session initialization complete." % task_index) - - if FLAGS.sync_replicas and is_chief: - # Chief worker will start the chief queue runner and call the init op. - sess.run(sync_init_op) - sv.start_queue_runners(sess, [chief_queue_runner]) - - # Perform training - time_begin = time.time() - print("Training begins @ %f" % time_begin) - - local_step = 0 - while True: - # Training feed - batch_xs, batch_ys = mnist.train.next_batch(FLAGS.batch_size) - train_feed = {x: batch_xs, y_: batch_ys} - - _, step = sess.run([train_step, global_step], feed_dict=train_feed) - local_step += 1 - - now = time.time() - print("%f: Worker %d: training step %d done (global step: %d)" % - (now, task_index, local_step, step)) - - if step >= FLAGS.train_steps: - break - - time_end = time.time() - print("Training ends @ %f" % time_end) - training_time = time_end - time_begin - print("Training elapsed time: %f s" % training_time) - - # Validation feed - val_feed = {x: mnist.validation.images, y_: mnist.validation.labels} - val_xent = sess.run(cross_entropy, feed_dict=val_feed) - print("After %d training step(s), validation cross entropy = %g" % - (FLAGS.train_steps, val_xent)) - if job_name == "worker" and task_index == 0: - run = Run.get_context() - run.log("CrossEntropy", val_xent) - - -if __name__ == "__main__": - tf.app.run() diff --git a/training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb b/training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb deleted file mode 100644 index cb6a6f42..00000000 --- a/training/06.distributed-cntk-with-custom-docker/06.distributed-cntk-with-custom-docker.ipynb +++ /dev/null @@ -1,389 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 06. Distributed CNTK using custom docker images\n", - "In this tutorial, you will train a CNTK model on the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset using a custom docker image and distributed training." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning\n", - "* Go through the [00.configuration.ipynb]() notebook to:\n", - " * install the AML SDK\n", - " * create a workspace and its configuration file (`config.json`)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "Diagnostics" - ] - }, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize workspace\n", - "\n", - "Initialize a [Workspace](https://review.docs.microsoft.com/en-us/azure/machine-learning/service/concept-azure-machine-learning-architecture?branch=release-ignite-aml#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.workspace import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create a remote compute target\n", - "You will need to create a [compute target](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#compute-target) to execute your training script on. In this tutorial, you create an [Azure Batch AI](https://docs.microsoft.com/azure/batch-ai/overview) cluster as your training compute resource. This code creates a cluster for you if it does not already exist in your workspace.\n", - "\n", - "**Creation of the cluster takes approximately 5 minutes.** If the cluster is already in your workspace this code will skip the cluster creation process." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import ComputeTarget, AmlCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "# choose a name for your cluster\n", - "cluster_name = \"gpucluster\"\n", - "\n", - "try:\n", - " compute_target = ComputeTarget(workspace=ws, name=cluster_name)\n", - " print('Found existing compute target.')\n", - "except ComputeTargetException:\n", - " print('Creating a new compute target...')\n", - " compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', \n", - " max_nodes=6)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, cluster_name, compute_config)\n", - "\n", - "compute_target.wait_for_completion(show_output=True)\n", - "\n", - "# Use the 'status' property to get a detailed status for the current cluster. \n", - "print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upload training data\n", - "For this tutorial, we will be using the MNIST dataset.\n", - "\n", - "First, let's download the dataset. We've included the `install_mnist.py` script to download the data and convert it to a CNTK-supported format. Our data files will get written to a directory named `'mnist'`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import install_mnist\n", - "\n", - "install_mnist.main('mnist')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To make the data accessible for remote training, you will need to upload the data from your local machine to the cloud. AML provides a convenient way to do so via a [Datastore](https://docs.microsoft.com/azure/machine-learning/service/how-to-access-data). The datastore provides a mechanism for you to upload/download data, and interact with it from your remote compute targets. \n", - "\n", - "Each workspace is associated with a default datastore. In this tutorial, we will upload the training data to this default datastore, which we will then mount on the remote compute for training in the next section." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds = ws.get_default_datastore()\n", - "print(ds.datastore_type, ds.account_name, ds.container_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following code will upload the training data to the path `./mnist` on the default datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds.upload(src_dir='./mnist', target_path='./mnist')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's get a reference to the path on the datastore with the training data. We can do so using the `path` method. In the next section, we can then pass this reference to our training script's `--data_dir` argument. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "path_on_datastore = 'mnist'\n", - "ds_data = ds.path(path_on_datastore)\n", - "print(ds_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train model on the remote compute\n", - "Now that we have the cluster ready to go, let's run our distributed training job." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a project directory\n", - "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script, and any additional files your training script depends on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "project_folder = './cntk-distr'\n", - "os.makedirs(project_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copy the training script `cntk_distr_mnist.py` into this project directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy('cntk_distr_mnist.py', project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an experiment\n", - "Create an [experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this distributed CNTK tutorial. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment\n", - "\n", - "experiment_name = 'cntk-distr'\n", - "experiment = Experiment(ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an Estimator\n", - "The AML SDK's base Estimator enables you to easily submit custom scripts for both single-node and distributed runs. You should this generic estimator for training code using frameworks such as sklearn or CNTK that don't have corresponding custom estimators. For more information on using the generic estimator, refer [here](https://docs.microsoft.com/azure/machine-learning/service/how-to-train-ml-models)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.estimator import *\n", - "\n", - "script_params = {\n", - " '--num_epochs': 20,\n", - " '--data_dir': ds_data.as_mount(),\n", - " '--output_dir': './outputs'\n", - "}\n", - "\n", - "estimator = Estimator(source_directory=project_folder,\n", - " compute_target=compute_target,\n", - " entry_script='cntk_distr_mnist.py',\n", - " script_params=script_params,\n", - " node_count=2,\n", - " process_count_per_node=1,\n", - " distributed_backend='mpi', \n", - " pip_packages=['cntk-gpu==2.6'],\n", - " custom_docker_base_image='microsoft/mmlspark:gpu-0.12',\n", - " use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We would like to train our model using a [pre-built Docker container](https://hub.docker.com/r/microsoft/mmlspark/). To do so, specify the name of the docker image to the argument `custom_docker_base_image`. You can only provide images available in public docker repositories such as Docker Hub using this argument. To use an image from a private docker repository, use the constructor's `environment_definition` parameter instead. Finally, we provide the `cntk` package to `pip_packages` to install CNTK 2.6 on our custom image.\n", - "\n", - "The above code specifies that we will run our training script on `2` nodes, with one worker per node. In order to run distributed CNTK, which uses MPI, you must provide the argument `distributed_backend='mpi'`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit job\n", - "Run your experiment by submitting your estimator object. Note that this call is asynchronous." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run = experiment.submit(estimator)\n", - "print(run.get_details())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monitor your run\n", - "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, you can block until the script has completed training before running more code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=True)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "minxia" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/06.distributed-cntk-with-custom-docker/cntk_distr_mnist.py b/training/06.distributed-cntk-with-custom-docker/cntk_distr_mnist.py deleted file mode 100644 index 9d263e07..00000000 --- a/training/06.distributed-cntk-with-custom-docker/cntk_distr_mnist.py +++ /dev/null @@ -1,117 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. -# Adapted from: -# https://github.com/Microsoft/CNTK/blob/master/Examples/Image/Classification/ConvNet/Python/ConvNet_MNIST.py -# ==================================================================== -"""Train a CNN model on the MNIST dataset via distributed training.""" - -from __future__ import print_function -import numpy as np -import os -import cntk as C -import argparse -from cntk.train.training_session import CheckpointConfig, TestConfig - - -def create_reader(path, is_training, input_dim, label_dim, total_number_of_samples): - """Define the reader for both training and evaluation action.""" - return C.io.MinibatchSource(C.io.CTFDeserializer(path, C.io.StreamDefs( - features=C.io.StreamDef(field='features', shape=input_dim), - labels=C.io.StreamDef(field='labels', shape=label_dim) - )), randomize=is_training, max_samples=total_number_of_samples) - - -def convnet_mnist(max_epochs, output_dir, data_dir, debug_output=False, epoch_size=60000, minibatch_size=64): - """Creates and trains a feedforward classification model for MNIST images.""" - image_height = 28 - image_width = 28 - num_channels = 1 - input_dim = image_height * image_width * num_channels - num_output_classes = 10 - - # Input variables denoting the features and label data - input_var = C.ops.input_variable((num_channels, image_height, image_width), np.float32) - label_var = C.ops.input_variable(num_output_classes, np.float32) - - # Instantiate the feedforward classification model - scaled_input = C.ops.element_times(C.ops.constant(0.00390625), input_var) - - with C.layers.default_options(activation=C.ops.relu, pad=False): - conv1 = C.layers.Convolution2D((5, 5), 32, pad=True)(scaled_input) - pool1 = C.layers.MaxPooling((3, 3), (2, 2))(conv1) - conv2 = C.layers.Convolution2D((3, 3), 48)(pool1) - pool2 = C.layers.MaxPooling((3, 3), (2, 2))(conv2) - conv3 = C.layers.Convolution2D((3, 3), 64)(pool2) - f4 = C.layers.Dense(96)(conv3) - drop4 = C.layers.Dropout(0.5)(f4) - z = C.layers.Dense(num_output_classes, activation=None)(drop4) - - ce = C.losses.cross_entropy_with_softmax(z, label_var) - pe = C.metrics.classification_error(z, label_var) - - # Load train data - reader_train = create_reader(os.path.join(data_dir, 'Train-28x28_cntk_text.txt'), True, - input_dim, num_output_classes, max_epochs * epoch_size) - # Load test data - reader_test = create_reader(os.path.join(data_dir, 'Test-28x28_cntk_text.txt'), False, - input_dim, num_output_classes, C.io.FULL_DATA_SWEEP) - - # Set learning parameters - lr_per_sample = [0.001] * 10 + [0.0005] * 10 + [0.0001] - lr_schedule = C.learning_parameter_schedule_per_sample(lr_per_sample, epoch_size=epoch_size) - mms = [0] * 5 + [0.9990239141819757] - mm_schedule = C.learners.momentum_schedule_per_sample(mms, epoch_size=epoch_size) - - # Instantiate the trainer object to drive the model training - local_learner = C.learners.momentum_sgd(z.parameters, lr_schedule, mm_schedule) - progress_printer = C.logging.ProgressPrinter( - tag='Training', - rank=C.train.distributed.Communicator.rank(), - num_epochs=max_epochs, - ) - - learner = C.train.distributed.data_parallel_distributed_learner(local_learner) - trainer = C.Trainer(z, (ce, pe), learner, progress_printer) - - # define mapping from reader streams to network inputs - input_map_train = { - input_var: reader_train.streams.features, - label_var: reader_train.streams.labels - } - - input_map_test = { - input_var: reader_test.streams.features, - label_var: reader_test.streams.labels - } - - C.logging.log_number_of_parameters(z) - print() - - C.train.training_session( - trainer=trainer, - mb_source=reader_train, - model_inputs_to_streams=input_map_train, - mb_size=minibatch_size, - progress_frequency=epoch_size, - checkpoint_config=CheckpointConfig(frequency=epoch_size, - filename=os.path.join(output_dir, "ConvNet_MNIST")), - test_config=TestConfig(reader_test, minibatch_size=minibatch_size, - model_inputs_to_streams=input_map_test) - ).train() - - return - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--num_epochs', help='Total number of epochs to train', type=int, default='40') - parser.add_argument('--output_dir', help='Output directory', required=False, default='outputs') - parser.add_argument('--data_dir', help='Directory with training data') - args = parser.parse_args() - - os.makedirs(args.output_dir, exist_ok=True) - - convnet_mnist(args.num_epochs, args.output_dir, args.data_dir) - - # Must call MPI finalize when process exit without exceptions - C.train.distributed.Communicator.finalize() diff --git a/training/06.distributed-cntk-with-custom-docker/install_mnist.py b/training/06.distributed-cntk-with-custom-docker/install_mnist.py deleted file mode 100644 index f0fe108f..00000000 --- a/training/06.distributed-cntk-with-custom-docker/install_mnist.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. -# Script from: -# https://github.com/Microsoft/CNTK/blob/master/Examples/Image/DataSets/MNIST/install_mnist.py - -from __future__ import print_function -try: - from urllib.request import urlretrieve -except ImportError: - from urllib import urlretrieve -import gzip -import os -import struct -import numpy as np - - -def loadData(src, cimg): - print('Downloading ' + src) - gzfname, h = urlretrieve(src, './delete.me') - print('Done.') - try: - with gzip.open(gzfname) as gz: - n = struct.unpack('I', gz.read(4)) - # Read magic number. - if n[0] != 0x3080000: - raise Exception('Invalid file: unexpected magic number.') - # Read number of entries. - n = struct.unpack('>I', gz.read(4))[0] - if n != cimg: - raise Exception('Invalid file: expected {0} entries.'.format(cimg)) - crow = struct.unpack('>I', gz.read(4))[0] - ccol = struct.unpack('>I', gz.read(4))[0] - if crow != 28 or ccol != 28: - raise Exception('Invalid file: expected 28 rows/cols per image.') - # Read data. - res = np.fromstring(gz.read(cimg * crow * ccol), dtype=np.uint8) - finally: - os.remove(gzfname) - return res.reshape((cimg, crow * ccol)) - - -def loadLabels(src, cimg): - print('Downloading ' + src) - gzfname, h = urlretrieve(src, './delete.me') - print('Done.') - try: - with gzip.open(gzfname) as gz: - n = struct.unpack('I', gz.read(4)) - # Read magic number. - if n[0] != 0x1080000: - raise Exception('Invalid file: unexpected magic number.') - # Read number of entries. - n = struct.unpack('>I', gz.read(4)) - if n[0] != cimg: - raise Exception('Invalid file: expected {0} rows.'.format(cimg)) - # Read labels. - res = np.fromstring(gz.read(cimg), dtype=np.uint8) - finally: - os.remove(gzfname) - return res.reshape((cimg, 1)) - - -def load(dataSrc, labelsSrc, cimg): - data = loadData(dataSrc, cimg) - labels = loadLabels(labelsSrc, cimg) - return np.hstack((data, labels)) - - -def savetxt(filename, ndarray): - with open(filename, 'w') as f: - labels = list(map(' '.join, np.eye(10, dtype=np.uint).astype(str))) - for row in ndarray: - row_str = row.astype(str) - label_str = labels[row[-1]] - feature_str = ' '.join(row_str[:-1]) - f.write('|labels {} |features {}\n'.format(label_str, feature_str)) - - -def main(data_dir): - os.makedirs(data_dir, exist_ok=True) - train = load('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz', - 'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz', 60000) - print('Writing train text file...') - train_txt = os.path.join(data_dir, 'Train-28x28_cntk_text.txt') - savetxt(train_txt, train) - print('Done.') - test = load('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', - 'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', 10000) - print('Writing test text file...') - test_txt = os.path.join(data_dir, 'Test-28x28_cntk_text.txt') - savetxt(test_txt, test) - print('Done.') - - -if __name__ == "__main__": - main('mnist') diff --git a/training/07.tensorboard/07.tensorboard.ipynb b/training/07.tensorboard/07.tensorboard.ipynb deleted file mode 100644 index 88303b4c..00000000 --- a/training/07.tensorboard/07.tensorboard.ipynb +++ /dev/null @@ -1,529 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 40. Tensorboard Integration with Run History\n", - "\n", - "1. Run a Tensorflow job locally and view its TB output live.\n", - "2. The same, for a DSVM.\n", - "3. And once more, with Batch AI.\n", - "4. Finally, we'll collect all of these historical runs together into a single Tensorboard graph." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagnostics\n", - "Opt-in diagnostics for better experience, quality, and security of future releases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "Diagnostics" - ] - }, - "outputs": [], - "source": [ - "from azureml.telemetry import set_diagnostics_collection\n", - "set_diagnostics_collection(send_diagnostics = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set experiment name and create project\n", - "Choose a name for your run history container in the workspace, and create a folder for the project." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from os import path, makedirs\n", - "experiment_name = 'tensorboard-demo'\n", - "\n", - "# experiment folder\n", - "exp_dir = './sample_projects/' + experiment_name\n", - "\n", - "if not path.exists(exp_dir):\n", - " makedirs(exp_dir)\n", - "\n", - "# runs we started in this session, for the finale\n", - "runs = []" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Download Tensorflow Tensorboard demo code\n", - "\n", - "Tensorflow's repository has an MNIST demo with extensive Tensorboard instrumentation. We'll use it here for our purposes.\n", - "\n", - "Note that we don't need to make any code changes at all - the code works without modification from the Tensorflow repository." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import requests\n", - "import os\n", - "import tempfile\n", - "tf_code = requests.get(\"https://raw.githubusercontent.com/tensorflow/tensorflow/r1.8/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py\")\n", - "with open(os.path.join(exp_dir, \"mnist_with_summaries.py\"), \"w\") as file:\n", - " file.write(tf_code.text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure and run locally\n", - "\n", - "We'll start by running this locally. While it might not initially seem that useful to use this for a local run - why not just run TB against the files generated locally? - even in this case there is some value to using this feature. Your local run will be registered in the run history, and your Tensorboard logs will be uploaded to the artifact store associated with this run. Later, you'll be able to restore the logs from any run, regardless of where it happened.\n", - "\n", - "Note that for this run, you will need to install Tensorflow on your local machine by yourself. Further, the Tensorboard module (that is, the one included with Tensorflow) must be accessible to this notebook's kernel, as the local machine is what runs Tensorboard." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.runconfig import RunConfiguration\n", - "\n", - "# Create a run configuration.\n", - "run_config = RunConfiguration()\n", - "run_config.environment.python.user_managed_dependencies = True\n", - "\n", - "# You can choose a specific Python environment by pointing to a Python path \n", - "#run_config.environment.python.interpreter_path = '/home/ninghai/miniconda3/envs/sdk2/bin/python'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Experiment, Run\n", - "from azureml.core.script_run_config import ScriptRunConfig\n", - "import tensorflow as tf\n", - "\n", - "logs_dir = os.path.join(os.curdir, \"logs\")\n", - "data_dir = os.path.abspath(os.path.join(os.curdir, \"mnist_data\"))\n", - "\n", - "if not path.exists(data_dir):\n", - " makedirs(data_dir)\n", - "\n", - "os.environ[\"TEST_TMPDIR\"] = data_dir\n", - "\n", - "# Writing logs to ./logs results in their being uploaded to Artifact Service,\n", - "# and thus, made accessible to our Tensorboard instance.\n", - "arguments_list = [\"--log_dir\", logs_dir]\n", - "\n", - "# Create an experiment\n", - "exp = Experiment(ws, experiment_name)\n", - "\n", - "# If you would like the run to go for longer, add --max_steps 5000 to the arguments list:\n", - "# arguments_list += [\"--max_steps\", \"5000\"]\n", - "\n", - "script = ScriptRunConfig(exp_dir,\n", - " script=\"mnist_with_summaries.py\",\n", - " run_config=run_config,\n", - " arguments=arguments_list)\n", - "\n", - "run = exp.submit(script)\n", - "# You can also wait for the run to complete\n", - "# run.wait_for_completion(show_output=True)\n", - "runs.append(run)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start Tensorboard\n", - "\n", - "Now, while the run is in progress, we just need to start Tensorboard with the run as its target, and it will begin streaming logs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.tensorboard import Tensorboard\n", - "\n", - "# The Tensorboard constructor takes an array of runs, so be sure and pass it in as a single-element array here\n", - "tb = Tensorboard([run])\n", - "\n", - "# If successful, start() returns a string with the URI of the instance.\n", - "tb.start()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Stop Tensorboard\n", - "\n", - "When you're done, make sure to call the `stop()` method of the Tensorboard object, or it will stay running even after your job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tb.stop()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Now, with a DSVM\n", - "\n", - "Tensorboard uploading works with all compute targets. Here we demonstrate it from a DSVM.\n", - "Note that the Tensorboard instance itself will be run by the notebook kernel. Again, this means this notebook's kernel must have access to the Tensorboard module.\n", - "\n", - "If you are unfamiliar with DSVM configuration, check [04. Train in a remote VM (Ubuntu DSVM)](04.train-on-remote-vm.ipynb) for a more detailed breakdown." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import DsvmCompute\n", - "from azureml.core.compute_target import ComputeTargetException\n", - "\n", - "compute_target_name = 'cpu-dsvm'\n", - "\n", - "try:\n", - " compute_target = DsvmCompute(workspace = ws, name = compute_target_name)\n", - " print('found existing:', compute_target.name)\n", - "except ComputeTargetException:\n", - " print('creating new.')\n", - " dsvm_config = DsvmCompute.provisioning_configuration(vm_size = \"Standard_D2_v2\")\n", - " compute_target = DsvmCompute.create(ws, name = compute_target_name, provisioning_configuration = dsvm_config)\n", - "compute_target.wait_for_completion(show_output = True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Submit run using TensorFlow estimator\n", - "\n", - "Instead of manually configuring the DSVM environment, we can use the TensorFlow estimator and everything is set up automatically." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.train.dnn import TensorFlow\n", - "\n", - "script_params = {\"--log_dir\": \"./logs\"}\n", - "\n", - "# If you want the run to go longer, set --max-steps to a higher number.\n", - "# script_params[\"--max_steps\"] = \"5000\"\n", - "\n", - "tf_estimator = TensorFlow(source_directory=exp_dir,\n", - " compute_target=compute_target,\n", - " entry_script='mnist_with_summaries.py',\n", - " script_params=script_params)\n", - "\n", - "run = exp.submit(tf_estimator)\n", - "\n", - "runs.append(run)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start Tensorboard with this run\n", - "\n", - "Just like before." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# The Tensorboard constructor takes an array of runs, so be sure and pass it in as a single-element array here\n", - "tb = Tensorboard([run])\n", - "\n", - "# If successful, start() returns a string with the URI of the instance.\n", - "tb.start()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Stop Tensorboard\n", - "\n", - "When you're done, make sure to call the `stop()` method of the Tensorboard object, or it will stay running even after your job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tb.stop()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Once more, with a Batch AI cluster\n", - "\n", - "Just to prove we can, let's create a Batch AI cluster using MLC, and run our demo there, as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core.compute import AmlCompute\n", - "\n", - "clust_name = \"cpucluster\"\n", - "\n", - "try:\n", - " # If you already have a cluster named this, we don't need to make a new one.\n", - " cts = ws.compute_targets \n", - " compute_target = cts[clust_name]\n", - " assert compute_target.type == 'BatchAI'\n", - "except:\n", - " # Let's make a new one here.\n", - " provisioning_config = AmlCompute.provisioning_configuration(max_nodes=6, \n", - " vm_size='STANDARD_D2_V2')\n", - " \n", - " compute_target = AmlCompute.create(ws, clust_name, provisioning_config)\n", - "compute_target.wait_for_completion(show_output=True, min_node_count=1, timeout_in_minutes=20)\n", - "print(compute_target.name)\n", - "# For a more detailed view of current BatchAI cluster status, use the 'status' property \n", - "# print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Submit run using TensorFlow estimator\n", - "\n", - "Again, we can use the TensorFlow estimator and everything is set up automatically." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "script_params = {\"--log_dir\": \"./logs\"}\n", - "\n", - "# If you want the run to go longer, set --max-steps to a higher number.\n", - "# script_params[\"--max_steps\"] = \"5000\"\n", - "\n", - "tf_estimator = TensorFlow(source_directory=exp_dir,\n", - " compute_target=compute_target,\n", - " entry_script='mnist_with_summaries.py',\n", - " script_params=script_params)\n", - "\n", - "run = exp.submit(tf_estimator)\n", - "\n", - "runs.append(run)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start Tensorboard with this run\n", - "\n", - "Once more..." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# The Tensorboard constructor takes an array of runs, so be sure and pass it in as a single-element array here\n", - "tb = Tensorboard([run])\n", - "\n", - "# If successful, start() returns a string with the URI of the instance.\n", - "tb.start()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Stop Tensorboard\n", - "\n", - "When you're done, make sure to call the `stop()` method of the Tensorboard object, or it will stay running even after your job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tb.stop()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Finale\n", - "\n", - "If you've paid close attention, you'll have noticed that we've been saving the run objects in an array as we went along. We can start a Tensorboard instance that combines all of these run objects into a single process. This way, you can compare historical runs. You can even do this with live runs; if you made some of those previous runs longer via the `--max_steps` parameter, they might still be running, and you'll see them live in this instance as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# The Tensorboard constructor takes an array of runs...\n", - "# and it turns out that we have been building one of those all along.\n", - "tb = Tensorboard(runs)\n", - "\n", - "# If successful, start() returns a string with the URI of the instance.\n", - "tb.start()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Stop Tensorboard\n", - "\n", - "As you might already know, make sure to call the `stop()` method of the Tensorboard object, or it will stay running (until you kill the kernel associated with this notebook, at least)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tb.stop()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/training/08.export-run-history-to-tensorboard/08.export-run-history-to-tensorboard.ipynb b/training/08.export-run-history-to-tensorboard/08.export-run-history-to-tensorboard.ipynb deleted file mode 100644 index c94b6ce2..00000000 --- a/training/08.export-run-history-to-tensorboard/08.export-run-history-to-tensorboard.ipynb +++ /dev/null @@ -1,248 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 41. Export Run History as Tensorboard logs\n", - "\n", - "1. Run some training and log some metrics into Run History\n", - "2. Export the run history to some directory as Tensorboard logs\n", - "3. Launch a local Tensorboard to view the run history" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prerequisites\n", - "Make sure you go through the [00. Installation and Configuration](00.configuration.ipynb) Notebook first if you haven't." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check core SDK version number\n", - "import azureml.core\n", - "\n", - "print(\"SDK version:\", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Workspace\n", - "\n", - "Initialize a workspace object from persisted configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.core import Workspace, Run, Experiment\n", - "\n", - "\n", - "ws = Workspace.from_config()\n", - "print('Workspace name: ' + ws.name, \n", - " 'Azure region: ' + ws.location, \n", - " 'Subscription id: ' + ws.subscription_id, \n", - " 'Resource group: ' + ws.resource_group, sep = '\\n')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set experiment name and start the run" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "experiment_name = 'export-to-tensorboard'\n", - "exp = Experiment(ws, experiment_name)\n", - "root_run = exp.start_logging()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# load diabetes dataset, a well-known built-in small dataset that comes with scikit-learn\n", - "from sklearn.datasets import load_diabetes\n", - "from sklearn.linear_model import Ridge\n", - "from sklearn.metrics import mean_squared_error\n", - "from sklearn.model_selection import train_test_split\n", - "\n", - "X, y = load_diabetes(return_X_y=True)\n", - "\n", - "columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']\n", - "\n", - "x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", - "data = {\n", - " \"train\":{\"x\":x_train, \"y\":y_train}, \n", - " \"test\":{\"x\":x_test, \"y\":y_test}\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Example experiment\n", - "from tqdm import tqdm\n", - "\n", - "alphas = [.1, .2, .3, .4, .5, .6 , .7]\n", - "\n", - "# try a bunch of alpha values in a Linear Regression (Ridge) model\n", - "for alpha in tqdm(alphas):\n", - " # create a bunch of child runs\n", - " with root_run.child_run(\"alpha\" + str(alpha)) as run:\n", - " # More data science stuff\n", - " reg = Ridge(alpha=alpha)\n", - " reg.fit(data[\"train\"][\"x\"], data[\"train\"][\"y\"])\n", - " # TODO save model\n", - " preds = reg.predict(data[\"test\"][\"x\"])\n", - " mse = mean_squared_error(preds, data[\"test\"][\"y\"])\n", - " # End train and eval\n", - "\n", - " # log alpha, mean_squared_error and feature names in run history\n", - " root_run.log(\"alpha\", alpha)\n", - " root_run.log(\"mse\", mse)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Export Run History to Tensorboard logs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Export Run History to Tensorboard logs\n", - "from azureml.contrib.tensorboard.export import export_to_tensorboard\n", - "import os\n", - "import tensorflow as tf\n", - "\n", - "logdir = 'exportedTBlogs'\n", - "log_path = os.path.join(os.getcwd(), logdir)\n", - "try:\n", - " os.stat(log_path)\n", - "except os.error:\n", - " os.mkdir(log_path)\n", - "print(logdir)\n", - "\n", - "# export run history for the project\n", - "export_to_tensorboard(root_run, logdir)\n", - "\n", - "# or export a particular run\n", - "# export_to_tensorboard(run, logdir)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "root_run.complete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start Tensorboard\n", - "\n", - "Or you can start the Tensorboard outside this notebook to view the result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from azureml.contrib.tensorboard import Tensorboard\n", - "\n", - "# The Tensorboard constructor takes an array of runs, so be sure and pass it in as a single-element array here\n", - "tb = Tensorboard([], local_root=logdir, port=6006)\n", - "\n", - "# If successful, start() returns a string with the URI of the instance.\n", - "tb.start()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Stop Tensorboard\n", - "\n", - "When you're done, make sure to call the `stop()` method of the Tensorboard object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tb.stop()" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/01.train-models.ipynb b/tutorials/01.train-models.ipynb deleted file mode 100644 index d6908ffa..00000000 --- a/tutorials/01.train-models.ipynb +++ /dev/null @@ -1,718 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Tutorial #1: Train an image classification model with Azure Machine Learning\n", - "\n", - "In this tutorial, you train a machine learning model both locally and on remote compute resources. You'll use the training and deployment workflow for Azure Machine Learning service (preview) in a Python Jupyter notebook. You can then use the notebook as a template to train your own machine learning model with your own data. This tutorial is **part one of a two-part tutorial series**. \n", - "\n", - "This tutorial trains a simple logistic regression using the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset and [scikit-learn](http://scikit-learn.org) with Azure Machine Learning. MNIST is a popular dataset consisting of 70,000 grayscale images. Each image is a handwritten digit of 28x28 pixels, representing a number from 0 to 9. The goal is to create a multi-class classifier to identify the digit a given image represents. \n", - "\n", - "Learn how to:\n", - "\n", - "> * Set up your development environment\n", - "> * Access and examine the data\n", - "> * Train a simple logistic regression model locally using the popular scikit-learn machine learning library \n", - "> * Train multiple models on a remote cluster\n", - "> * Review training results, find and register the best model\n", - "\n", - "You'll learn how to select a model and deploy it in [part two of this tutorial](deploy-models.ipynb) later. \n", - "\n", - "## Prerequisites\n", - "\n", - "Use [these instructions](https://aka.ms/aml-how-to-configure-environment) to: \n", - "* Create a workspace and its configuration file (**config.json**) \n", - "* Save your **config.json** to the same folder as this notebook" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set up your development environment\n", - "\n", - "All the setup for your development work can be accomplished in a Python notebook. Setup includes:\n", - "\n", - "* Importing Python packages\n", - "* Connecting to a workspace to enable communication between your local computer and remote resources\n", - "* Creating an experiment to track all your runs\n", - "* Creating a remote compute target to use for training\n", - "\n", - "### Import packages\n", - "\n", - "Import Python packages you need in this session. Also display the Azure Machine Learning SDK version." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "check version" - ] - }, - "outputs": [], - "source": [ - "%matplotlib notebook\n", - "import numpy as np\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "\n", - "import azureml\n", - "from azureml.core import Workspace, Run\n", - "\n", - "# check core SDK version number\n", - "print(\"Azure ML SDK Version: \", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Connect to workspace\n", - "\n", - "Create a workspace object from the existing workspace. `Workspace.from_config()` reads the file **config.json** and loads the details into an object named `ws`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "load workspace" - ] - }, - "outputs": [], - "source": [ - "# load workspace configuration from the config.json file in the current folder.\n", - "ws = Workspace.from_config()\n", - "print(ws.name, ws.location, ws.resource_group, ws.location, sep = '\\t')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create experiment\n", - "\n", - "Create an experiment to track the runs in your workspace. A workspace can have muliple experiments. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create experiment" - ] - }, - "outputs": [], - "source": [ - "experiment_name = 'sklearn-mnist'\n", - "\n", - "from azureml.core import Experiment\n", - "exp = Experiment(workspace=ws, name=experiment_name)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create remote compute target\n", - "\n", - "Azure Machine Learning Managed Compute(AmlCompute) is a managed service that enables data scientists to train machine learning models on clusters of Azure virtual machines, including VMs with GPU support. In this tutorial, you create AmlCompute as your training environment. This code creates compute for you if it does not already exist in your workspace. \n", - "\n", - " **Creation of the compute takes approximately 5 minutes.** If the compute is already in the workspace this code uses it and skips the creation process." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "create mlc", - "batchai" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.compute import AmlCompute\n", - "from azureml.core.compute import ComputeTarget\n", - "import os\n", - "\n", - "# choose a name for your cluster\n", - "compute_name = os.environ.get(\"BATCHAI_CLUSTER_NAME\", \"cpucluster\")\n", - "compute_min_nodes = os.environ.get(\"BATCHAI_CLUSTER_MIN_NODES\", 0)\n", - "compute_max_nodes = os.environ.get(\"BATCHAI_CLUSTER_MAX_NODES\", 4)\n", - "\n", - "# This example uses CPU VM. For using GPU VM, set SKU to STANDARD_NC6\n", - "vm_size = os.environ.get(\"BATCHAI_CLUSTER_SKU\", \"STANDARD_D2_V2\")\n", - "\n", - "\n", - "if compute_name in ws.compute_targets:\n", - " compute_target = ws.compute_targets[compute_name]\n", - " if compute_target and type(compute_target) is AmlCompute:\n", - " print('found compute target. just use it. ' + compute_name)\n", - "else:\n", - " print('creating a new compute target...')\n", - " provisioning_config = AmlCompute.provisioning_configuration(vm_size = vm_size,\n", - " min_nodes = compute_min_nodes, \n", - " max_nodes = compute_max_nodes)\n", - "\n", - " # create the cluster\n", - " compute_target = ComputeTarget.create(ws, compute_name, provisioning_config)\n", - " \n", - " # can poll for a minimum number of nodes and for a specific timeout. \n", - " # if no min node count is provided it will use the scale settings for the cluster\n", - " compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)\n", - " \n", - " # For a more detailed view of current BatchAI cluster status, use the 'status' property \n", - " print(compute_target.status.serialize())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You now have the necessary packages and compute resources to train a model in the cloud. \n", - "\n", - "## Explore data\n", - "\n", - "Before you train a model, you need to understand the data that you are using to train it. You also need to copy the data into the cloud so it can be accessed by your cloud training environment. In this section you learn how to:\n", - "\n", - "* Download the MNIST dataset\n", - "* Display some sample images\n", - "* Upload data to the cloud\n", - "\n", - "### Download the MNIST dataset\n", - "\n", - "Download the MNIST dataset and save the files into a `data` directory locally. Images and labels for both training and testing are downloaded." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import urllib.request\n", - "\n", - "os.makedirs('./data', exist_ok = True)\n", - "\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz', filename='./data/train-images.gz')\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz', filename='./data/train-labels.gz')\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', filename='./data/test-images.gz')\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', filename='./data/test-labels.gz')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Display some sample images\n", - "\n", - "Load the compressed files into `numpy` arrays. Then use `matplotlib` to plot 30 random images from the dataset with their labels above them. Note this step requires a `load_data` function that's included in an `util.py` file. This file is included in the sample folder. Please make sure it is placed in the same folder as this notebook. The `load_data` function simply parses the compresse files into numpy arrays." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# make sure utils.py is in the same directory as this code\n", - "from utils import load_data\n", - "\n", - "# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the model converge faster.\n", - "X_train = load_data('./data/train-images.gz', False) / 255.0\n", - "y_train = load_data('./data/train-labels.gz', True).reshape(-1)\n", - "\n", - "X_test = load_data('./data/test-images.gz', False) / 255.0\n", - "y_test = load_data('./data/test-labels.gz', True).reshape(-1)\n", - "\n", - "# now let's show some randomly chosen images from the traininng set.\n", - "count = 0\n", - "sample_size = 30\n", - "plt.figure(figsize = (16, 6))\n", - "for i in np.random.permutation(X_train.shape[0])[:sample_size]:\n", - " count = count + 1\n", - " plt.subplot(1, sample_size, count)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " plt.text(x=10, y=-10, s=y_train[i], fontsize=18)\n", - " plt.imshow(X_train[i].reshape(28, 28), cmap=plt.cm.Greys)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now you have an idea of what these images look like and the expected prediction outcome.\n", - "\n", - "### Upload data to the cloud\n", - "\n", - "Now make the data accessible remotely by uploading that data from your local machine into Azure so it can be accessed for remote training. The datastore is a convenient construct associated with your workspace for you to upload/download data, and interact with it from your remote compute targets. It is backed by Azure blob storage account.\n", - "\n", - "The MNIST files are uploaded into a directory named `mnist` at the root of the datastore." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use datastore" - ] - }, - "outputs": [], - "source": [ - "ds = ws.get_default_datastore()\n", - "print(ds.datastore_type, ds.account_name, ds.container_name)\n", - "\n", - "ds.upload(src_dir='./data', target_path='mnist', overwrite=True, show_progress=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You now have everything you need to start training a model. \n", - "\n", - "## Train a local model\n", - "\n", - "Train a simple logistic regression model using scikit-learn locally.\n", - "\n", - "**Training locally can take a minute or two** depending on your computer configuration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "from sklearn.linear_model import LogisticRegression\n", - "\n", - "clf = LogisticRegression()\n", - "clf.fit(X_train, y_train)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, make predictions using the test set and calculate the accuracy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "y_hat = clf.predict(X_test)\n", - "print(np.average(y_hat == y_test))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With just a few lines of code, you have a 92% accuracy.\n", - "\n", - "## Train on a remote cluster\n", - "\n", - "Now you can expand on this simple model by building a model with a different regularization rate. This time you'll train the model on a remote resource. \n", - "\n", - "For this task, submit the job to the remote training cluster you set up earlier. To submit a job you:\n", - "* Create a directory\n", - "* Create a training script\n", - "* Create an estimator object\n", - "* Submit the job \n", - "\n", - "### Create a directory\n", - "\n", - "Create a directory to deliver the necessary code from your computer to the remote resource." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "script_folder = './sklearn-mnist'\n", - "os.makedirs(script_folder, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a training script\n", - "\n", - "To submit the job to the cluster, first create a training script. Run the following code to create the training script called `train.py` in the directory you just created. This training adds a regularization rate to the training algorithm, so produces a slightly different model than the local version." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile $script_folder/train.py\n", - "\n", - "import argparse\n", - "import os\n", - "import numpy as np\n", - "\n", - "from sklearn.linear_model import LogisticRegression\n", - "from sklearn.externals import joblib\n", - "\n", - "from azureml.core import Run\n", - "from utils import load_data\n", - "\n", - "# let user feed in 2 parameters, the location of the data files (from datastore), and the regularization rate of the logistic regression model\n", - "parser = argparse.ArgumentParser()\n", - "parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')\n", - "parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')\n", - "args = parser.parse_args()\n", - "\n", - "data_folder = os.path.join(args.data_folder, 'mnist')\n", - "print('Data folder:', data_folder)\n", - "\n", - "# load train and test set into numpy arrays\n", - "# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.\n", - "X_train = load_data(os.path.join(data_folder, 'train-images.gz'), False) / 255.0\n", - "X_test = load_data(os.path.join(data_folder, 'test-images.gz'), False) / 255.0\n", - "y_train = load_data(os.path.join(data_folder, 'train-labels.gz'), True).reshape(-1)\n", - "y_test = load_data(os.path.join(data_folder, 'test-labels.gz'), True).reshape(-1)\n", - "print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\\n')\n", - "\n", - "# get hold of the current run\n", - "run = Run.get_context()\n", - "\n", - "print('Train a logistic regression model with regularizaion rate of', args.reg)\n", - "clf = LogisticRegression(C=1.0/args.reg, random_state=42)\n", - "clf.fit(X_train, y_train)\n", - "\n", - "print('Predict the test set')\n", - "y_hat = clf.predict(X_test)\n", - "\n", - "# calculate accuracy on the prediction\n", - "acc = np.average(y_hat == y_test)\n", - "print('Accuracy is', acc)\n", - "\n", - "run.log('regularization rate', np.float(args.reg))\n", - "run.log('accuracy', np.float(acc))\n", - "\n", - "os.makedirs('outputs', exist_ok=True)\n", - "# note file saved in the outputs folder is automatically uploaded into experiment record\n", - "joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice how the script gets data and saves models:\n", - "\n", - "+ The training script reads an argument to find the directory containing the data. When you submit the job later, you point to the datastore for this argument:\n", - "`parser.add_argument('--data-folder', type=str, dest='data_folder', help='data directory mounting point')`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "+ The training script saves your model into a directory named outputs.
\n", - "`joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')`
\n", - "Anything written in this directory is automatically uploaded into your workspace. You'll access your model from this directory later in the tutorial." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The file `utils.py` is referenced from the training script to load the dataset correctly. Copy this script into the script folder so that it can be accessed along with the training script on the remote resource." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "shutil.copy('utils.py', script_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an estimator\n", - "\n", - "An estimator object is used to submit the run. Create your estimator by running the following code to define:\n", - "\n", - "* The name of the estimator object, `est`\n", - "* The directory that contains your scripts. All the files in this directory are uploaded into the cluster nodes for execution. \n", - "* The compute target. In this case you will use the Batch AI cluster you created\n", - "* The training script name, train.py\n", - "* Parameters required from the training script \n", - "* Python packages needed for training\n", - "\n", - "In this tutorial, this target is the Batch AI cluster. All files in the script folder are uploaded into the cluster nodes for execution. The data_folder is set to use the datastore (`ds.as_mount()`)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure estimator" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.estimator import Estimator\n", - "\n", - "script_params = {\n", - " '--data-folder': ds.as_mount(),\n", - " '--regularization': 0.8\n", - "}\n", - "\n", - "est = Estimator(source_directory=script_folder,\n", - " script_params=script_params,\n", - " compute_target=compute_target,\n", - " entry_script='train.py',\n", - " conda_packages=['scikit-learn'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Submit the job to the cluster\n", - "\n", - "Run the experiment by submitting the estimator object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai", - "scikit-learn" - ] - }, - "outputs": [], - "source": [ - "run = exp.submit(config=est)\n", - "run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Since the call is asynchronous, it returns a **Preparing** or **Running** state as soon as the job is started.\n", - "\n", - "## Monitor a remote run\n", - "\n", - "In total, the first run takes **approximately 10 minutes**. But for subsequent runs, as long as the script dependencies don't change, the same image is reused and hence the container start up time is much faster.\n", - "\n", - "Here is what's happening while you wait:\n", - "\n", - "- **Image creation**: A Docker image is created matching the Python environment specified by the estimator. The image is uploaded to the workspace. Image creation and uploading takes **about 5 minutes**. \n", - "\n", - " This stage happens once for each Python environment since the container is cached for subsequent runs. During image creation, logs are streamed to the run history. You can monitor the image creation progress using these logs.\n", - "\n", - "- **Scaling**: If the remote cluster requires more nodes to execute the run than currently available, additional nodes are added automatically. Scaling typically takes **about 5 minutes.**\n", - "\n", - "- **Running**: In this stage, the necessary scripts and files are sent to the compute target, then data stores are mounted/copied, then the entry_script is run. While the job is running, stdout and the ./logs directory are streamed to the run history. You can monitor the run's progress using these logs.\n", - "\n", - "- **Post-Processing**: The ./outputs directory of the run is copied over to the run history in your workspace so you can access these results.\n", - "\n", - "\n", - "You can check the progress of a running job in multiple ways. This tutorial uses a Jupyter widget as well as a `wait_for_completion` method. \n", - "\n", - "### Jupyter widget\n", - "\n", - "Watch the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Get log results upon completion\n", - "\n", - "Model training and monitoring happen in the background. Wait until the model has completed training before running more code. Use `wait_for_completion` to show when the model training is complete." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "remote run", - "batchai", - "scikit-learn" - ] - }, - "outputs": [], - "source": [ - "run.wait_for_completion(show_output=False) # specify True for a verbose log" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Display run results\n", - "\n", - "You now have a model trained on a remote cluster. Retrieve the accuracy of the model:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "get metrics" - ] - }, - "outputs": [], - "source": [ - "print(run.get_metrics())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the next tutorial you will explore this model in more detail.\n", - "\n", - "## Register model\n", - "\n", - "The last step in the training script wrote the file `outputs/sklearn_mnist_model.pkl` in a directory named `outputs` in the VM of the cluster where the job is executed. `outputs` is a special directory in that all content in this directory is automatically uploaded to your workspace. This content appears in the run record in the experiment under your workspace. Hence, the model file is now also available in your workspace.\n", - "\n", - "You can see files associated with that run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history" - ] - }, - "outputs": [], - "source": [ - "print(run.get_file_names())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Register the model in the workspace so that you (or other collaborators) can later query, examine, and deploy this model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "register model from history" - ] - }, - "outputs": [], - "source": [ - "# register model \n", - "model = run.register_model(model_name='sklearn_mnist', model_path='outputs/sklearn_mnist_model.pkl')\n", - "print(model.name, model.id, model.version, sep = '\\t')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Next steps\n", - "\n", - "In this Azure Machine Learning tutorial, you used Python to:\n", - "\n", - "> * Set up your development environment\n", - "> * Access and examine the data\n", - "> * Train a simple logistic regression locally using the popular scikit-learn machine learning library\n", - "> * Train multiple models on a remote cluster\n", - "> * Review training details and register the best model\n", - "\n", - "You are ready to deploy this registered model using the instructions in the next part of the tutorial series:\n", - "\n", - "> [Tutorial 2 - Deploy models](02.deploy-models.ipynb)" - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.2" - }, - "msauthor": "sgilley" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/02.deploy-models.ipynb b/tutorials/02.deploy-models.ipynb deleted file mode 100644 index c9affdd5..00000000 --- a/tutorials/02.deploy-models.ipynb +++ /dev/null @@ -1,615 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Tutorial #2: Deploy an image classification model in Azure Container Instance (ACI)\n", - "\n", - "This tutorial is **part two of a two-part tutorial series**. In the [previous tutorial](01.train-models.ipynb), you trained machine learning models and then registered a model in your workspace on the cloud. \n", - "\n", - "Now, you're ready to deploy the model as a web service in [Azure Container Instances](https://docs.microsoft.com/azure/container-instances/) (ACI). A web service is an image, in this case a Docker image, that encapsulates the scoring logic and the model itself. \n", - "\n", - "In this part of the tutorial, you use Azure Machine Learning service (Preview) to:\n", - "\n", - "> * Set up your testing environment\n", - "> * Retrieve the model from your workspace\n", - "> * Test the model locally\n", - "> * Deploy the model to ACI\n", - "> * Test the deployed model\n", - "\n", - "ACI is not ideal for production deployments, but it is great for testing and understanding the workflow. For scalable production deployments, consider using AKS.\n", - "\n", - "\n", - "## Prerequisites\n", - "\n", - "Complete the model training in the [Tutorial #1: Train an image classification model with Azure Machine Learning](01.train-models.ipynb) notebook. \n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "register model from file" - ] - }, - "outputs": [], - "source": [ - "# If you did NOT complete the tutorial, you can instead run this cell \n", - "# This will register a model and download the data needed for this tutorial\n", - "# These prerequisites are created in the training tutorial\n", - "# Feel free to skip this cell if you completed the training tutorial \n", - "\n", - "# register a model\n", - "from azureml.core import Workspace\n", - "ws = Workspace.from_config()\n", - "\n", - "from azureml.core.model import Model\n", - "\n", - "model_name = \"sklearn_mnist\"\n", - "model = Model.register(model_path=\"sklearn_mnist_model.pkl\",\n", - " model_name=model_name,\n", - " tags={\"data\": \"mnist\", \"model\": \"classification\"},\n", - " description=\"Mnist handwriting recognition\",\n", - " workspace=ws)\n", - "\n", - "# download test data\n", - "import os\n", - "import urllib.request\n", - "\n", - "os.makedirs('./data', exist_ok=True)\n", - "\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz', filename='./data/test-images.gz')\n", - "urllib.request.urlretrieve('http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz', filename='./data/test-labels.gz')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set up the environment\n", - "\n", - "Start by setting up a testing environment.\n", - "\n", - "### Import packages\n", - "\n", - "Import the Python packages needed for this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "check version" - ] - }, - "outputs": [], - "source": [ - "%matplotlib notebook\n", - "import numpy as np\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - " \n", - "import azureml\n", - "from azureml.core import Workspace, Run\n", - "\n", - "# display the core SDK version number\n", - "print(\"Azure ML SDK Version: \", azureml.core.VERSION)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve the model\n", - "\n", - "You registered a model in your workspace in the previous tutorial. Now, load this workspace and download the model to your local directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "load workspace", - "download model" - ] - }, - "outputs": [], - "source": [ - "from azureml.core import Workspace\n", - "from azureml.core.model import Model\n", - "\n", - "ws = Workspace.from_config()\n", - "model=Model(ws, 'sklearn_mnist')\n", - "model.download(target_dir='.', exists_ok=True)\n", - "import os \n", - "# verify the downloaded model file\n", - "os.stat('./sklearn_mnist_model.pkl')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Test model locally\n", - "\n", - "Before deploying, make sure your model is working locally by:\n", - "* Loading test data\n", - "* Predicting test data\n", - "* Examining the confusion matrix\n", - "\n", - "### Load test data\n", - "\n", - "Load the test data from the **./data/** directory created during the training tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from utils import load_data\n", - "\n", - "# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the neural network converge faster\n", - "X_test = load_data('./data/test-images.gz', False) / 255.0\n", - "y_test = load_data('./data/test-labels.gz', True).reshape(-1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Predict test data\n", - "\n", - "Feed the test dataset to the model to get predictions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pickle\n", - "from sklearn.externals import joblib\n", - "\n", - "clf = joblib.load('./sklearn_mnist_model.pkl')\n", - "y_hat = clf.predict(X_test)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Examine the confusion matrix\n", - "\n", - "Generate a confusion matrix to see how many samples from the test set are classified correctly. Notice the mis-classified value for the incorrect predictions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import confusion_matrix\n", - "\n", - "conf_mx = confusion_matrix(y_test, y_hat)\n", - "print(conf_mx)\n", - "print('Overall accuracy:', np.average(y_hat == y_test))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Use `matplotlib` to display the confusion matrix as a graph. In this graph, the X axis represents the actual values, and the Y axis represents the predicted values. The color in each grid represents the error rate. The lighter the color, the higher the error rate is. For example, many 5's are mis-classified as 3's. Hence you see a bright grid at (5,3)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# normalize the diagnal cells so that they don't overpower the rest of the cells when visualized\n", - "row_sums = conf_mx.sum(axis=1, keepdims=True)\n", - "norm_conf_mx = conf_mx / row_sums\n", - "np.fill_diagonal(norm_conf_mx, 0)\n", - "\n", - "fig = plt.figure(figsize=(8,5))\n", - "ax = fig.add_subplot(111)\n", - "cax = ax.matshow(norm_conf_mx, cmap=plt.cm.bone)\n", - "ticks = np.arange(0, 10, 1)\n", - "ax.set_xticks(ticks)\n", - "ax.set_yticks(ticks)\n", - "ax.set_xticklabels(ticks)\n", - "ax.set_yticklabels(ticks)\n", - "fig.colorbar(cax)\n", - "plt.ylabel('true labels', fontsize=14)\n", - "plt.xlabel('predicted values', fontsize=14)\n", - "plt.savefig('conf.png')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy as web service\n", - "\n", - "Once you've tested the model and are satisfied with the results, deploy the model as a web service hosted in ACI. \n", - "\n", - "To build the correct environment for ACI, provide the following:\n", - "* A scoring script to show how to use the model\n", - "* An environment file to show what packages need to be installed\n", - "* A configuration file to build the ACI\n", - "* The model you trained before\n", - "\n", - "### Create scoring script\n", - "\n", - "Create the scoring script, called score.py, used by the web service call to show how to use the model.\n", - "\n", - "You must include two required functions into the scoring script:\n", - "* The `init()` function, which typically loads the model into a global object. This function is run only once when the Docker container is started. \n", - "\n", - "* The `run(input_data)` function uses the model to predict a value based on the input data. Inputs and outputs to the run typically use JSON for serialization and de-serialization, but other formats are supported.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile score.py\n", - "import json\n", - "import numpy as np\n", - "import os\n", - "import pickle\n", - "from sklearn.externals import joblib\n", - "from sklearn.linear_model import LogisticRegression\n", - "\n", - "from azureml.core.model import Model\n", - "\n", - "def init():\n", - " global model\n", - " # retreive the path to the model file using the model name\n", - " model_path = Model.get_model_path('sklearn_mnist')\n", - " model = joblib.load(model_path)\n", - "\n", - "def run(raw_data):\n", - " data = np.array(json.loads(raw_data)['data'])\n", - " # make prediction\n", - " y_hat = model.predict(data)\n", - " # you can return any data type as long as it is JSON-serializable\n", - " return y_hat.tolist()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create environment file\n", - "\n", - "Next, create an environment file, called myenv.yml, that specifies all of the script's package dependencies. This file is used to ensure that all of those dependencies are installed in the Docker image. This model needs `scikit-learn` and `azureml-sdk`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "set conda dependencies" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.conda_dependencies import CondaDependencies \n", - "\n", - "myenv = CondaDependencies()\n", - "myenv.add_conda_package(\"scikit-learn\")\n", - "\n", - "with open(\"myenv.yml\",\"w\") as f:\n", - " f.write(myenv.serialize_to_string())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Review the content of the `myenv.yml` file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open(\"myenv.yml\",\"r\") as f:\n", - " print(f.read())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create configuration file\n", - "\n", - "Create a deployment configuration file and specify the number of CPUs and gigabyte of RAM needed for your ACI container. While it depends on your model, the default of 1 core and 1 gigabyte of RAM is usually sufficient for many models. If you feel you need more later, you would have to recreate the image and redeploy the service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure web service", - "aci" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.webservice import AciWebservice\n", - "\n", - "aciconfig = AciWebservice.deploy_configuration(cpu_cores=1, \n", - " memory_gb=1, \n", - " tags={\"data\": \"MNIST\", \"method\" : \"sklearn\"}, \n", - " description='Predict MNIST with sklearn')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Deploy in ACI\n", - "Estimated time to complete: **about 7-8 minutes**\n", - "\n", - "Configure the image and deploy. The following code goes through these steps:\n", - "\n", - "1. Build an image using:\n", - " * The scoring file (`score.py`)\n", - " * The environment file (`myenv.yml`)\n", - " * The model file\n", - "1. Register that image under the workspace. \n", - "1. Send the image to the ACI container.\n", - "1. Start up a container in ACI using the image.\n", - "1. Get the web service HTTP endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure image", - "create image", - "deploy web service", - "aci" - ] - }, - "outputs": [], - "source": [ - "%%time\n", - "from azureml.core.webservice import Webservice\n", - "from azureml.core.image import ContainerImage\n", - "\n", - "# configure the image\n", - "image_config = ContainerImage.image_configuration(execution_script=\"score.py\", \n", - " runtime=\"python\", \n", - " conda_file=\"myenv.yml\")\n", - "\n", - "service = Webservice.deploy_from_model(workspace=ws,\n", - " name='sklearn-mnist-svc',\n", - " deployment_config=aciconfig,\n", - " models=[model],\n", - " image_config=image_config)\n", - "\n", - "service.wait_for_deployment(show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Get the scoring web service's HTTP endpoint, which accepts REST client calls. This endpoint can be shared with anyone who wants to test the web service or integrate it into an application." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "get scoring uri" - ] - }, - "outputs": [], - "source": [ - "print(service.scoring_uri)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Test deployed service\n", - "\n", - "Earlier you scored all the test data with the local version of the model. Now, you can test the deployed model with a random sample of 30 images from the test data. \n", - "\n", - "The following code goes through these steps:\n", - "1. Send the data as a JSON array to the web service hosted in ACI. \n", - "\n", - "1. Use the SDK's `run` API to invoke the service. You can also make raw calls using any HTTP tool such as curl.\n", - "\n", - "1. Print the returned predictions and plot them along with the input images. Red font and inverse image (white on black) is used to highlight the misclassified samples. \n", - "\n", - " Since the model accuracy is high, you might have to run the following code a few times before you can see a misclassified sample." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "score web service" - ] - }, - "outputs": [], - "source": [ - "import json\n", - "\n", - "# find 30 random samples from test set\n", - "n = 30\n", - "sample_indices = np.random.permutation(X_test.shape[0])[0:n]\n", - "\n", - "test_samples = json.dumps({\"data\": X_test[sample_indices].tolist()})\n", - "test_samples = bytes(test_samples, encoding='utf8')\n", - "\n", - "# predict using the deployed model\n", - "result = service.run(input_data=test_samples)\n", - "\n", - "# compare actual value vs. the predicted values:\n", - "i = 0\n", - "plt.figure(figsize = (20, 1))\n", - "\n", - "for s in sample_indices:\n", - " plt.subplot(1, n, i + 1)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " \n", - " # use different color for misclassified sample\n", - " font_color = 'red' if y_test[s] != result[i] else 'black'\n", - " clr_map = plt.cm.gray if y_test[s] != result[i] else plt.cm.Greys\n", - " \n", - " plt.text(x=10, y =-10, s=result[i], fontsize=18, color=font_color)\n", - " plt.imshow(X_test[s].reshape(28, 28), cmap=clr_map)\n", - " \n", - " i = i + 1\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also send raw HTTP request to test the web service." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "score web service" - ] - }, - "outputs": [], - "source": [ - "import requests\n", - "import json\n", - "\n", - "# send a random row from the test set to score\n", - "random_index = np.random.randint(0, len(X_test)-1)\n", - "input_data = \"{\\\"data\\\": [\" + str(list(X_test[random_index])) + \"]}\"\n", - "\n", - "headers = {'Content-Type':'application/json'}\n", - "\n", - "# for AKS deployment you'd need to the service key in the header as well\n", - "# api_key = service.get_key()\n", - "# headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)} \n", - "\n", - "resp = requests.post(service.scoring_uri, input_data, headers=headers)\n", - "\n", - "print(\"POST to url\", service.scoring_uri)\n", - "#print(\"input data:\", input_data)\n", - "print(\"label:\", y_test[random_index])\n", - "print(\"prediction:\", resp.text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Clean up resources\n", - "\n", - "To keep the resource group and workspace for other tutorials and exploration, you can delete only the ACI deployment using this API call:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "delete web service" - ] - }, - "outputs": [], - "source": [ - "service.delete()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "If you're not going to use what you've created here, delete the resources you just created with this quickstart so you don't incur any charges. In the Azure portal, select and delete your resource group. You can also keep the resource group, but delete a single workspace by displaying the workspace properties and selecting the Delete button.\n", - "\n", - "\n", - "## Next steps\n", - "\n", - "In this Azure Machine Learning tutorial, you used Python to:\n", - "\n", - "> * Set up your testing environment\n", - "> * Retrieve the model from your workspace\n", - "> * Test the model locally\n", - "> * Deploy the model to ACI\n", - "> * Test the deployed model\n", - " \n", - "You can also try out the [Automatic algorithm selection tutorial](03.auto-train-models.ipynb) to see how Azure Machine Learning can auto-select and tune the best algorithm for your model and build that model for you." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "roastala" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "sgilley" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/03.auto-train-models.ipynb b/tutorials/03.auto-train-models.ipynb deleted file mode 100644 index 10cfb770..00000000 --- a/tutorials/03.auto-train-models.ipynb +++ /dev/null @@ -1,427 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright (c) Microsoft Corporation. All rights reserved.\n", - "\n", - "Licensed under the MIT License." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Tutorial: Train a classification model with automated machine learning\n", - "\n", - "In this tutorial, you'll learn how to generate a machine learning model using automated machine learning (automated ML). Azure Machine Learning can perform algorithm selection and hyperparameter selection in an automated way for you. The final model can then be deployed following the workflow in the [Deploy a model](02.deploy-models.ipynb) tutorial.\n", - "\n", - "[flow diagram](./imgs/flow2.png)\n", - "\n", - "Similar to the [train models tutorial](01.train-models.ipynb), this tutorial classifies handwritten images of digits (0-9) from the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset. But this time you don't to specify an algorithm or tune hyperparameters. The automated ML technique iterates over many combinations of algorithms and hyperparameters until it finds the best model based on your criterion.\n", - "\n", - "You'll learn how to:\n", - "\n", - "> * Set up your development environment\n", - "> * Access and examine the data\n", - "> * Train using an automated classifier locally with custom parameters\n", - "> * Explore the results\n", - "> * Review training results\n", - "> * Register the best model\n", - "\n", - "## Prerequisites\n", - "\n", - "Use [these instructions](https://aka.ms/aml-how-to-configure-environment) to: \n", - "* Create a workspace and its configuration file (**config.json**) \n", - "* Upload your **config.json** to the same folder as this notebook" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Start a notebook\n", - "\n", - "To follow along, start a new notebook from the same directory as **config.json** and copy the code from the sections below.\n", - "\n", - "\n", - "## Set up your development environment\n", - "\n", - "All the setup for your development work can be accomplished in the Python notebook. Setup includes:\n", - "\n", - "* Import Python packages\n", - "* Configure a workspace to enable communication between your local computer and remote resources\n", - "* Create a directory to store training scripts\n", - "\n", - "### Import packages\n", - "Import Python packages you need in this tutorial." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import azureml.core\n", - "import pandas as pd\n", - "from azureml.core.workspace import Workspace\n", - "from azureml.train.automl.run import AutoMLRun\n", - "import time\n", - "import logging\n", - "from sklearn import datasets\n", - "from matplotlib import pyplot as plt\n", - "from matplotlib.pyplot import imshow\n", - "import random\n", - "import numpy as np" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configure workspace\n", - "\n", - "Create a workspace object from the existing workspace. `Workspace.from_config()` reads the file **aml_config/config.json** and loads the details into an object named `ws`. `ws` is used throughout the rest of the code in this tutorial.\n", - "\n", - "Once you have a workspace object, specify a name for the experiment and create and register a local directory with the workspace. The history of all runs is recorded under the specified experiment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ws = Workspace.from_config()\n", - "# choose a name for the run history container in the workspace\n", - "experiment_name = 'automl-classifier'\n", - "# project folder\n", - "project_folder = './automl-classifier'\n", - "\n", - "import os\n", - "\n", - "output = {}\n", - "output['SDK version'] = azureml.core.VERSION\n", - "output['Subscription ID'] = ws.subscription_id\n", - "output['Workspace'] = ws.name\n", - "output['Resource Group'] = ws.resource_group\n", - "output['Location'] = ws.location\n", - "output['Project Directory'] = project_folder\n", - "pd.set_option('display.max_colwidth', -1)\n", - "pd.DataFrame(data=output, index=['']).T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore data\n", - "\n", - "The initial training tutorial used a high-resolution version of the MNIST dataset (28x28 pixels). Since auto training requires many iterations, this tutorial uses a smaller resolution version of the images (8x8 pixels) to demonstrate the concepts while speeding up the time needed for each iteration." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn import datasets\n", - "\n", - "digits = datasets.load_digits()\n", - "\n", - "# Exclude the first 100 rows from training so that they can be used for test.\n", - "X_train = digits.data[100:,:]\n", - "y_train = digits.target[100:]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Display some sample images\n", - "\n", - "Load the data into `numpy` arrays. Then use `matplotlib` to plot 30 random images from the dataset with their labels above them." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "count = 0\n", - "sample_size = 30\n", - "plt.figure(figsize = (16, 6))\n", - "for i in np.random.permutation(X_train.shape[0])[:sample_size]:\n", - " count = count + 1\n", - " plt.subplot(1, sample_size, count)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " plt.text(x = 2, y = -2, s = y_train[i], fontsize = 18)\n", - " plt.imshow(X_train[i].reshape(8, 8), cmap = plt.cm.Greys)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You now have the necessary packages and data ready for auto training for your model. \n", - "\n", - "## Auto train a model \n", - "\n", - "To auto train a model, first define settings for autogeneration and tuning and then run the automatic classifier.\n", - "\n", - "\n", - "### Define settings for autogeneration and tuning\n", - "\n", - "Define the experiment parameters and models settings for autogeneration and tuning. \n", - "\n", - "\n", - "|Property| Value in this tutorial |Description|\n", - "|----|----|---|\n", - "|**primary_metric**|AUC Weighted | Metric that you want to optimize.|\n", - "|**max_time_sec**|12,000|Time limit in seconds for each iteration|\n", - "|**iterations**|20|Number of iterations. In each iteration, the model trains with the data with a specific pipeline|\n", - "|**n_cross_validations**|3|Number of cross validation splits|\n", - "|**exit_score**|0.9985|*double* value indicating the target for *primary_metric*. Once the target is surpassed the run terminates|\n", - "|**blacklist_algos**|['kNN','LinearSVM']|*Array* of *strings* indicating algorithms to ignore.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "configure automl" - ] - }, - "outputs": [], - "source": [ - "from azureml.train.automl import AutoMLConfig\n", - "\n", - "##Local compute \n", - "Automl_config = AutoMLConfig(task = 'classification',\n", - " primary_metric = 'AUC_weighted',\n", - " max_time_sec = 12000,\n", - " iterations = 20,\n", - " n_cross_validations = 3,\n", - " exit_score = 0.9985,\n", - " blacklist_algos = ['kNN','LinearSVM'],\n", - " X = X_train,\n", - " y = y_train,\n", - " path=project_folder)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run the automatic classifier\n", - "\n", - "Start the experiment to run locally. Define the compute target as local and set the output to true to view progress on the experiment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "local submitted run", - "automl" - ] - }, - "outputs": [], - "source": [ - "from azureml.core.experiment import Experiment\n", - "experiment=Experiment(ws, experiment_name)\n", - "local_run = experiment.submit(Automl_config, show_output=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Explore the results\n", - "\n", - "Explore the results of automatic training with a Jupyter widget or by examining the experiment history.\n", - "\n", - "### Jupyter widget\n", - "\n", - "Use the Jupyter notebook widget to see a graph and a table of all results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "use notebook widget" - ] - }, - "outputs": [], - "source": [ - "from azureml.widgets import RunDetails\n", - "RunDetails(local_run).show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Retrieve all iterations\n", - "\n", - "View the experiment history and see individual metrics for each iteration run." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "get metrics", - "query history" - ] - }, - "outputs": [], - "source": [ - "children = list(local_run.get_children())\n", - "metricslist = {}\n", - "for run in children:\n", - " properties = run.get_properties()\n", - " metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}\n", - " metricslist[int(properties['iteration'])] = metrics\n", - "\n", - "import pandas as pd\n", - "rundata = pd.DataFrame(metricslist).sort_index(1)\n", - "rundata" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Register the best model \n", - "\n", - "Use the `local_run` object to get the best model and register it into the workspace. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "query history", - "register model from history" - ] - }, - "outputs": [], - "source": [ - "# find the run with the highest accuracy value.\n", - "best_run, fitted_model = local_run.get_output()\n", - "\n", - "# register model in workspace\n", - "description = 'Automated Machine Learning Model'\n", - "tags = None\n", - "local_run.register_model(description=description, tags=tags)\n", - "local_run.model_id # Use this id to deploy the model as a web service in Azure" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Test the best model\n", - "\n", - "Use the model to predict a few random digits. Display the predicted and the image. Red font and inverse image (white on black) is used to highlight the misclassified samples.\n", - "\n", - "Since the model accuracy is high, you might have to run the following code a few times before you can see a misclassified sample." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# find 30 random samples from test set\n", - "n = 30\n", - "X_test = digits.data[:100, :]\n", - "y_test = digits.target[:100]\n", - "sample_indices = np.random.permutation(X_test.shape[0])[0:n]\n", - "test_samples = X_test[sample_indices]\n", - "\n", - "\n", - "# predict using the model\n", - "result = fitted_model.predict(test_samples)\n", - "\n", - "# compare actual value vs. the predicted values:\n", - "i = 0\n", - "plt.figure(figsize = (20, 1))\n", - "\n", - "for s in sample_indices:\n", - " plt.subplot(1, n, i + 1)\n", - " plt.axhline('')\n", - " plt.axvline('')\n", - " \n", - " # use different color for misclassified sample\n", - " font_color = 'red' if y_test[s] != result[i] else 'black'\n", - " clr_map = plt.cm.gray if y_test[s] != result[i] else plt.cm.Greys\n", - " \n", - " plt.text(x = 2, y = -2, s = result[i], fontsize = 18, color = font_color)\n", - " plt.imshow(X_test[s].reshape(8, 8), cmap = clr_map)\n", - " \n", - " i = i + 1\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Next steps\n", - "\n", - "In this Azure Machine Learning tutorial, you used Python to:\n", - "\n", - "> * Set up your development environment\n", - "> * Access and examine the data\n", - "> * Train using an automated classifier locally with custom parameters\n", - "> * Explore the results\n", - "> * Review training results\n", - "> * Register the best model\n", - "\n", - "Learn more about [how to configure settings for automatic training](https://aka.ms/aml-how-to-configure-auto) or [how to use automatic training on a remote resource](https://aka.ms/aml-how-to-auto-remote)." - ] - } - ], - "metadata": { - "authors": [ - { - "name": "jeffshep" - } - ], - "kernelspec": { - "display_name": "Python 3.6", - "language": "python", - "name": "python36" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.6" - }, - "msauthor": "sgilley" - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/imgs/flow2.png b/tutorials/imgs/flow2.png deleted file mode 100644 index f5c8968b67a600696b0c46109cff6d4d9c5433f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106278 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

0o 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