From 2165cf308e1dddb977940ee7d9b5853daee28c35 Mon Sep 17 00:00:00 2001 From: Harneet Virk Date: Mon, 2 Mar 2020 13:42:04 -0700 Subject: [PATCH] update samples from Release-25 as a part of 1.1.2rc0 SDK experimental release (#829) Co-authored-by: vizhur --- README.md | 2 +- configuration.ipynb | 2 +- .../automated-machine-learning/automl_env.yml | 1 - .../automl_env_mac.yml | 1 - ...fication-bank-marketing-all-features.ipynb | 6 +- .../auto-ml-continuous-retraining.ipynb | 2 +- .../automl-forecasting-function.ipynb | 4 +- ...rmance-explanation-and-featurization.ipynb | 2 +- .../train_explainer.py | 2 +- .../production-deploy-to-aks-gpu.ipynb | 314 ++++++++++++++++++ .../production-deploy-to-aks-gpu.yml | 5 + .../snowleopardgaze.jpg | Bin 0 -> 62821 bytes ...with-automated-machine-learning-step.ipynb | 9 +- .../logging-api/logging-api.ipynb | 2 +- .../tensorboard/tensorboard.ipynb | 66 ++-- .../tensorboard/tensorboard.yml | 3 +- .../export-run-history-to-tensorboard.yml | 3 +- .../labeled-datasets/labeled-datasets.yml | 10 - .../pipeline-for-image-classification.ipynb | 2 +- .../pipeline-for-image-classification.yml | 2 +- ...tabular-timeseries-dataset-filtering.ipynb | 2 +- .../tabular-timeseries-dataset-filtering.yml | 2 +- .../train-with-datasets.ipynb | 5 +- .../train-with-datasets.yml | 2 +- index.md | 1 + setup-environment/configuration.ipynb | 2 +- tutorials/README.md | 1 - .../img-classification-part1-training.ipynb | 5 +- 28 files changed, 383 insertions(+), 75 deletions(-) create mode 100644 how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.ipynb create mode 100644 how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.yml create mode 100644 how-to-use-azureml/deployment/production-deploy-to-aks-gpu/snowleopardgaze.jpg delete mode 100644 how-to-use-azureml/work-with-data/datasets-tutorial/labeled-datasets/labeled-datasets.yml diff --git a/README.md b/README.md index 2add5721..33d704d1 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Read more detailed instructions on [how to set up your environment](./NBSETUP.md ## How to navigate and use the example notebooks? If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, you should always run the [Configuration](./configuration.ipynb) notebook first when setting up a notebook library on a new machine or in a new environment. It configures your notebook library to connect to an Azure Machine Learning workspace, and sets up your workspace and compute to be used by many of the other examples. -This [index](.index.md) should assist in navigating the Azure Machine Learning notebook samples and encourage efficient retrieval of topics and content. +This [index](./index.md) should assist in navigating the Azure Machine Learning notebook samples and encourage efficient retrieval of topics and content. If you want to... diff --git a/configuration.ipynb b/configuration.ipynb index cf1e9a12..5d12562d 100644 --- a/configuration.ipynb +++ b/configuration.ipynb @@ -103,7 +103,7 @@ "source": [ "import azureml.core\n", "\n", - "print(\"This notebook was created using version 1.1.1rc0 of the Azure ML SDK\")\n", + "print(\"This notebook was created using version 1.1.2rc0 of the Azure ML SDK\")\n", "print(\"You are currently using version\", azureml.core.VERSION, \"of the Azure ML SDK\")" ] }, diff --git a/how-to-use-azureml/automated-machine-learning/automl_env.yml b/how-to-use-azureml/automated-machine-learning/automl_env.yml index 42906d19..c907ce70 100644 --- a/how-to-use-azureml/automated-machine-learning/automl_env.yml +++ b/how-to-use-azureml/automated-machine-learning/automl_env.yml @@ -28,7 +28,6 @@ dependencies: - azureml-contrib-interpret - pytorch-transformers==1.0.0 - spacy==2.1.8 - - joblib - onnxruntime==1.0.0 - https://aka.ms/automl-resources/packages/en_core_web_sm-2.1.0.tar.gz diff --git a/how-to-use-azureml/automated-machine-learning/automl_env_mac.yml b/how-to-use-azureml/automated-machine-learning/automl_env_mac.yml index fca456e0..11841b72 100644 --- a/how-to-use-azureml/automated-machine-learning/automl_env_mac.yml +++ b/how-to-use-azureml/automated-machine-learning/automl_env_mac.yml @@ -29,7 +29,6 @@ dependencies: - azureml-contrib-interpret - pytorch-transformers==1.0.0 - spacy==2.1.8 - - joblib - onnxruntime==1.0.0 - https://aka.ms/automl-resources/packages/en_core_web_sm-2.1.0.tar.gz diff --git a/how-to-use-azureml/automated-machine-learning/classification-bank-marketing-all-features/auto-ml-classification-bank-marketing-all-features.ipynb b/how-to-use-azureml/automated-machine-learning/classification-bank-marketing-all-features/auto-ml-classification-bank-marketing-all-features.ipynb index 63c930e9..6a32356d 100644 --- a/how-to-use-azureml/automated-machine-learning/classification-bank-marketing-all-features/auto-ml-classification-bank-marketing-all-features.ipynb +++ b/how-to-use-azureml/automated-machine-learning/classification-bank-marketing-all-features/auto-ml-classification-bank-marketing-all-features.ipynb @@ -320,7 +320,6 @@ "|**n_cross_validations**|Number of cross validation splits.|\n", "|**training_data**|Input dataset, containing both features and label column.|\n", "|**label_column_name**|The name of the label column.|\n", - "|**model_explainability**|Indicate to explain each trained pipeline or not.|\n", "\n", "**_You can find more information about primary metrics_** [here](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-configure-auto-train#primary-metric)" ] @@ -352,7 +351,6 @@ " training_data = train_data,\n", " label_column_name = label,\n", " validation_data = validation_dataset,\n", - " model_explainability=True,\n", " **automl_settings\n", " )" ] @@ -500,11 +498,11 @@ "outputs": [], "source": [ "# Wait for the best model explanation run to complete\n", - "from azureml.train.automl.run import AutoMLRun\n", + "from azureml.core.run import Run\n", "model_explainability_run_id = remote_run.get_properties().get('ModelExplainRunId')\n", "print(model_explainability_run_id)\n", "if model_explainability_run_id is not None:\n", - " model_explainability_run = AutoMLRun(experiment=experiment, run_id=model_explainability_run_id)\n", + " model_explainability_run = Run(experiment=experiment, run_id=model_explainability_run_id)\n", " model_explainability_run.wait_for_completion()\n", "\n", "# Get the best run object\n", diff --git a/how-to-use-azureml/automated-machine-learning/continuous-retraining/auto-ml-continuous-retraining.ipynb b/how-to-use-azureml/automated-machine-learning/continuous-retraining/auto-ml-continuous-retraining.ipynb index 1d66116e..24f56a37 100644 --- a/how-to-use-azureml/automated-machine-learning/continuous-retraining/auto-ml-continuous-retraining.ipynb +++ b/how-to-use-azureml/automated-machine-learning/continuous-retraining/auto-ml-continuous-retraining.ipynb @@ -343,7 +343,7 @@ "outputs": [], "source": [ "from azureml.train.automl import AutoMLConfig\n", - "from azureml.train.automl import AutoMLStep\n", + "from azureml.pipeline.steps import AutoMLStep\n", "\n", "automl_settings = {\n", " \"iteration_timeout_minutes\": 10,\n", diff --git a/how-to-use-azureml/automated-machine-learning/forecasting-high-frequency/automl-forecasting-function.ipynb b/how-to-use-azureml/automated-machine-learning/forecasting-high-frequency/automl-forecasting-function.ipynb index b5188f21..995facff 100644 --- a/how-to-use-azureml/automated-machine-learning/forecasting-high-frequency/automl-forecasting-function.ipynb +++ b/how-to-use-azureml/automated-machine-learning/forecasting-high-frequency/automl-forecasting-function.ipynb @@ -459,8 +459,8 @@ "# use forecast_quantiles function, not the forecast() one\n", "y_pred_quantiles = fitted_model.forecast_quantiles(X_test)\n", "\n", - "# it all nicely aligns column-wise\n", - "pd.concat([X_test.reset_index(), y_pred_quantiles], axis=1)" + "# quantile forecasts returned in a Dataframe along with the time and grain columns \n", + "y_pred_quantiles" ] }, { diff --git a/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/auto-ml-regression-hardware-performance-explanation-and-featurization.ipynb b/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/auto-ml-regression-hardware-performance-explanation-and-featurization.ipynb index 124d0ab1..3935e0b3 100644 --- a/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/auto-ml-regression-hardware-performance-explanation-and-featurization.ipynb +++ b/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/auto-ml-regression-hardware-performance-explanation-and-featurization.ipynb @@ -514,7 +514,7 @@ " content = cefr.read()\n", "\n", "# Replace the values in train_explainer.py file with the appropriate values\n", - "content = content.replace('<>', automl_run.experiment.name) # your experiment name.\n", + "content = content.replace('<>', automl_run.experiment.name) # your experiment name.\n", "content = content.replace('<>', automl_run.id) # Run-id of the AutoML run for which you want to explain the model.\n", "content = content.replace('<>', 'ERP') # Your target column name\n", "content = content.replace('<>', 'regression') # Training task type\n", diff --git a/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/train_explainer.py b/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/train_explainer.py index 9d3b8ca5..5c7789aa 100644 --- a/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/train_explainer.py +++ b/how-to-use-azureml/automated-machine-learning/regression-hardware-performance-explanation-and-featurization/train_explainer.py @@ -22,7 +22,7 @@ run = Run.get_context() ws = run.experiment.workspace # Get the AutoML run object from the experiment name and the workspace -experiment = Experiment(ws, '<>') +experiment = Experiment(ws, '<>') automl_run = Run(experiment=experiment, run_id='<>') # Check if this AutoML model is explainable diff --git a/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.ipynb b/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.ipynb new file mode 100644 index 00000000..adbd1f3e --- /dev/null +++ b/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.ipynb @@ -0,0 +1,314 @@ +{ + "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": [ + "![Impressions](https://PixelServer20190423114238.azurewebsites.net/api/impressions/MachineLearningNotebooks/how-to-use-azureml/automated-machine-learning/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deploying a web service to Azure Kubernetes Service (AKS)\n", + "This notebook shows the steps for deploying a service: registering a model, creating an image, provisioning a cluster (one time action), and deploying a service to it. \n", + "We then test and delete the service, image and model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import azureml.core\n", + "print(azureml.core.VERSION)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Get workspace\n", + "Load existing workspace from the config file info." + ] + }, + { + "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": [ + "# Register the model\n", + "Register an existing trained model, add descirption and tags. Prior to registering the model, you should have a TensorFlow [Saved Model](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md) in the `resnet50` directory. You can download a [pretrained resnet50](http://download.tensorflow.org/models/official/20181001_resnet/savedmodels/resnet_v1_fp32_savedmodel_NCHW_jpg.tar.gz) and unpack it to that directory." + ] + }, + { + "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 = \"resnet50\", # this points to a local file\n", + " model_name = \"resnet50\", # this is the name the model is registered as\n", + " tags = {'area': \"Image classification\", 'type': \"classification\"},\n", + " description = \"Image classification trained on Imagenet Dataset\",\n", + " workspace = ws)\n", + "\n", + "print(model.name, model.description, model.version)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Provision the AKS Cluster\n", + "This is a one time setup. You can reuse this cluster for multiple deployments after it has been created. If you delete the cluster or the resource group that contains it, then you would have to recreate it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azureml.core.compute import ComputeTarget, AksCompute\n", + "from azureml.core.compute_target import ComputeTargetException\n", + "\n", + "# Choose a name for your GPU cluster\n", + "gpu_cluster_name = \"aks-gpu-cluster\"\n", + "\n", + "# Verify that cluster does not exist already\n", + "try:\n", + " gpu_cluster = ComputeTarget(workspace=ws, name=gpu_cluster_name)\n", + " print(\"Found existing gpu cluster\")\n", + "except ComputeTargetException:\n", + " print(\"Creating new gpu-cluster\")\n", + " \n", + " # Specify the configuration for the new cluster\n", + " compute_config = AksCompute.provisioning_configuration(cluster_purpose=AksCompute.ClusterPurpose.DEV_TEST,\n", + " agent_count=1,\n", + " vm_size=\"Standard_NV6\")\n", + " # Create the cluster with the specified name and configuration\n", + " gpu_cluster = ComputeTarget.create(ws, gpu_cluster_name, compute_config)\n", + "\n", + " # Wait for the cluster to complete, show the output log\n", + " gpu_cluster.wait_for_completion(show_output=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deploy the model as a web service to AKS\n", + "\n", + "First create a scoring script" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%writefile score.py\n", + "import tensorflow as tf\n", + "import numpy as np\n", + "import json\n", + "import os\n", + "from azureml.contrib.services.aml_request import AMLRequest, rawhttp\n", + "from azureml.contrib.services.aml_response import AMLResponse\n", + "\n", + "def init():\n", + " global session\n", + " global input_name\n", + " global output_name\n", + " \n", + " session = tf.Session()\n", + "\n", + " # AZUREML_MODEL_DIR is an environment variable created during deployment.\n", + " # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)\n", + " # For multiple models, it points to the folder containing all deployed models (./azureml-models)\n", + " model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'resnet50')\n", + " model = tf.saved_model.loader.load(session, ['serve'], model_path)\n", + " if len(model.signature_def['serving_default'].inputs) > 1:\n", + " raise ValueError(\"This score.py only supports one input\")\n", + " input_name = [tensor.name for tensor in model.signature_def['serving_default'].inputs.values()][0]\n", + " output_name = [tensor.name for tensor in model.signature_def['serving_default'].outputs.values()]\n", + " \n", + "\n", + "@rawhttp\n", + "def run(request):\n", + " if request.method == 'POST':\n", + " reqBody = request.get_data(False)\n", + " resp = score(reqBody)\n", + " return AMLResponse(resp, 200)\n", + " if request.method == 'GET':\n", + " respBody = str.encode(\"GET is not supported\")\n", + " return AMLResponse(respBody, 405)\n", + " return AMLResponse(\"bad request\", 500)\n", + "\n", + "def score(data):\n", + " result = session.run(output_name, {input_name: [data]})\n", + " return json.dumps(result[1].tolist())\n", + "\n", + "if __name__ == \"__main__\":\n", + " init()\n", + " with open(\"test_image.jpg\", 'rb') as f:\n", + " content = f.read()\n", + " print(score(content))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now create the deployment configuration objects and deploy the model as a webservice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set the web service configuration (using default here)\n", + "from azureml.core.model import InferenceConfig\n", + "from azureml.core.webservice import AksWebservice\n", + "from azureml.core.conda_dependencies import CondaDependencies\n", + "from azureml.core.environment import Environment, DEFAULT_GPU_IMAGE\n", + "\n", + "env = Environment('deploytocloudenv')\n", + "# Please see [Azure ML Containers repository](https://github.com/Azure/AzureML-Containers#featured-tags)\n", + "# for open-sourced GPU base images.\n", + "env.docker.base_image = DEFAULT_GPU_IMAGE\n", + "env.python.conda_dependencies = CondaDependencies.create(conda_packages=['tensorflow-gpu==1.12.0','numpy'],\n", + " pip_packages=['azureml-contrib-services', 'azureml-defaults'])\n", + "\n", + "inference_config = InferenceConfig(entry_script=\"score.py\", environment=env)\n", + "aks_config = AksWebservice.deploy_configuration()\n", + "\n", + "# # Enable token auth and disable (key) auth on the webservice\n", + "# aks_config = AksWebservice.deploy_configuration(token_auth_enabled=True, auth_enabled=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "aks_service_name ='gpu-rn50'\n", + "\n", + "aks_service = Model.deploy(workspace=ws,\n", + " name=aks_service_name,\n", + " models=[model],\n", + " inference_config=inference_config,\n", + " deployment_config=aks_config,\n", + " deployment_target=gpu_cluster)\n", + "\n", + "aks_service.wait_for_deployment(show_output = True)\n", + "print(aks_service.state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Test the web service\n", + "We test the web sevice by passing the test images content." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "import requests\n", + "\n", + "# if (key) auth is enabled, fetch keys and include in the request\n", + "key1, key2 = aks_service.get_keys()\n", + "\n", + "headers = {'Content-Type':'application/json', 'Authorization': 'Bearer ' + key1}\n", + "\n", + "# # if token auth is enabled, fetch token and include in the request\n", + "# access_token, fetch_after = aks_service.get_token()\n", + "# headers = {'Content-Type':'application/json', 'Authorization': 'Bearer ' + access_token}\n", + "\n", + "test_sample = open('snowleopardgaze.jpg', 'rb').read()\n", + "resp = requests.post(aks_service.scoring_uri, test_sample, headers=headers)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Clean up\n", + "Delete the service, image, model and compute target" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "aks_service.delete()\n", + "model.delete()\n", + "gpu_cluster.delete()\n" + ] + } + ], + "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 +} \ No newline at end of file diff --git a/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.yml b/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.yml new file mode 100644 index 00000000..c2afb644 --- /dev/null +++ b/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.yml @@ -0,0 +1,5 @@ +name: production-deploy-to-aks-gpu +dependencies: +- pip: + - azureml-sdk + - tensorflow diff --git a/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/snowleopardgaze.jpg b/how-to-use-azureml/deployment/production-deploy-to-aks-gpu/snowleopardgaze.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80450160bef250f5680d8d2046e0ebafe7cb0ea9 GIT binary patch literal 62821 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.0.0 diff --git a/how-to-use-azureml/training-with-deep-learning/export-run-history-to-tensorboard/export-run-history-to-tensorboard.yml b/how-to-use-azureml/training-with-deep-learning/export-run-history-to-tensorboard/export-run-history-to-tensorboard.yml index 6f79f760..17aa9f1d 100644 --- a/how-to-use-azureml/training-with-deep-learning/export-run-history-to-tensorboard/export-run-history-to-tensorboard.yml +++ b/how-to-use-azureml/training-with-deep-learning/export-run-history-to-tensorboard/export-run-history-to-tensorboard.yml @@ -3,7 +3,8 @@ dependencies: - pip: - azureml-sdk - azureml-tensorboard - - tensorflow<1.15.0 + - tensorflow - tqdm - scipy - sklearn + - setuptools>=41.0.0 diff --git a/how-to-use-azureml/work-with-data/datasets-tutorial/labeled-datasets/labeled-datasets.yml b/how-to-use-azureml/work-with-data/datasets-tutorial/labeled-datasets/labeled-datasets.yml deleted file mode 100644 index 26c3266a..00000000 --- a/how-to-use-azureml/work-with-data/datasets-tutorial/labeled-datasets/labeled-datasets.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: labeled-datasets -dependencies: -- pip: - - azureml-sdk - - azureml-dataprep - - pandas - - fuse - - azureml.contrib.dataset - - matplotlib - - torchvision diff --git a/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.ipynb b/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.ipynb index eefd2b70..739fca0e 100644 --- a/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.ipynb +++ b/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.ipynb @@ -141,7 +141,7 @@ "from azureml.core.compute_target import ComputeTargetException\n", "\n", "# choose a name for your cluster\n", - "cluster_name = \"your-cluster-name\"\n", + "cluster_name = \"gpu-cluster\"\n", "\n", "try:\n", " compute_target = ComputeTarget(workspace=workspace, name=cluster_name)\n", diff --git a/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.yml b/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.yml index a7379445..e6b3df70 100644 --- a/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.yml +++ b/how-to-use-azureml/work-with-data/datasets-tutorial/pipeline-with-datasets/pipeline-for-image-classification.yml @@ -3,5 +3,5 @@ dependencies: - pip: - azureml-sdk - azureml-dataprep - - pandas + - pandas<=0.23.4 - fuse diff --git a/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.ipynb b/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.ipynb index 7f909acd..fc4cdd9e 100644 --- a/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.ipynb +++ b/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.ipynb @@ -543,7 +543,7 @@ "metadata": { "authors": [ { - "name": "ylxiong" + "name": "jamgan" } ], "category": "tutorial", diff --git a/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.yml b/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.yml index 96daf4fb..a3471ade 100644 --- a/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.yml +++ b/how-to-use-azureml/work-with-data/datasets-tutorial/timeseries-datasets/tabular-timeseries-dataset-filtering.yml @@ -3,4 +3,4 @@ dependencies: - pip: - azureml-sdk - azureml-dataprep - - pandas + - pandas<=0.23.4 diff --git a/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.ipynb b/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.ipynb index 5dfbff64..9e477a3d 100644 --- a/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.ipynb +++ b/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.ipynb @@ -529,8 +529,9 @@ "metadata": {}, "outputs": [], "source": [ - "print(run.get_metrics())\n", - "metrics = run.get_metrics()" + "run.wait_for_completion()\n", + "metrics = run.get_metrics()\n", + "print(metrics)" ] }, { diff --git a/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.yml b/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.yml index 096a82b1..4f490f41 100644 --- a/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.yml +++ b/how-to-use-azureml/work-with-data/datasets-tutorial/train-with-datasets/train-with-datasets.yml @@ -4,6 +4,6 @@ dependencies: - azureml-sdk - azureml-widgets - azureml-dataprep - - pandas + - pandas<=0.23.4 - fuse - scikit-learn diff --git a/index.md b/index.md index 12511149..797684dd 100644 --- a/index.md +++ b/index.md @@ -117,6 +117,7 @@ Machine Learning notebook samples and encourage efficient retrieval of topics an | [enable-app-insights-in-production-service](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/deployment/enable-app-insights-in-production-service/enable-app-insights-in-production-service.ipynb) | | | | | | | | [onnx-model-register-and-deploy](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/deployment/onnx/onnx-model-register-and-deploy.ipynb) | | | | | | | | [production-deploy-to-aks](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/deployment/production-deploy-to-aks/production-deploy-to-aks.ipynb) | | | | | | | +| [production-deploy-to-aks-gpu](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/deployment/production-deploy-to-aks-gpu/production-deploy-to-aks-gpu.ipynb) | | | | | | | | [tensorflow-model-register-and-deploy](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/deployment/tensorflow/tensorflow-model-register-and-deploy.ipynb) | | | | | | | | [explain-model-on-amlcompute](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/explain-model/azure-integration/remote-explanation/explain-model-on-amlcompute.ipynb) | | | | | | | | [save-retrieve-explanations-run-history](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/explain-model/azure-integration/run-history/save-retrieve-explanations-run-history.ipynb) | | | | | | | diff --git a/setup-environment/configuration.ipynb b/setup-environment/configuration.ipynb index 62435abd..a849870b 100644 --- a/setup-environment/configuration.ipynb +++ b/setup-environment/configuration.ipynb @@ -102,7 +102,7 @@ "source": [ "import azureml.core\n", "\n", - "print(\"This notebook was created using version 1.1.1rc0 of the Azure ML SDK\")\n", + "print(\"This notebook was created using version 1.1.2rc0 of the Azure ML SDK\")\n", "print(\"You are currently using version\", azureml.core.VERSION, \"of the Azure ML SDK\")" ] }, diff --git a/tutorials/README.md b/tutorials/README.md index c861e7bc..53b6e975 100644 --- a/tutorials/README.md +++ b/tutorials/README.md @@ -28,7 +28,6 @@ The following tutorials are intended to provide examples of more advanced featur | Tutorial | Description | Notebook | Task | Framework | | --- | --- | --- | --- | --- | | [Build an Azure Machine Learning pipeline for batch scoring](https://docs.microsoft.com/azure/machine-learning/tutorial-pipeline-batch-scoring-classification) | Create an Azure Machine Learning pipeline to run batch scoring image classification jobs | [tutorial-pipeline-batch-scoring-classification.ipynb](machine-learning-pipelines-advanced/tutorial-pipeline-batch-scoring-classification.ipynb) | Image Classification | TensorFlow -Complete these tutorials to learn how to train and deploy models using Azure Machine Learning services and Python SDK. These Notebooks accompany the tutorial articles for: For additional documentation and resources, see the [official documentation site for Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/). diff --git a/tutorials/image-classification-mnist-data/img-classification-part1-training.ipynb b/tutorials/image-classification-mnist-data/img-classification-part1-training.ipynb index 65db573c..73cc8d79 100644 --- a/tutorials/image-classification-mnist-data/img-classification-part1-training.ipynb +++ b/tutorials/image-classification-mnist-data/img-classification-part1-training.ipynb @@ -126,7 +126,8 @@ "metadata": {}, "source": [ "### Create or Attach existing compute resource\n", - "By using Azure Machine Learning Compute, a managed service, data scientists can train machine learning models on clusters of Azure virtual machines. Examples include VMs with GPU support. In this tutorial, you create Azure Machine Learning Compute as your training environment. The code below creates the compute clusters for you if they don't already exist in your workspace.\n", + "By using Azure Machine Learning Compute, a managed service, data scientists can train machine learning models on clusters of Azure virtual machines. Examples include VMs with GPU support. In this tutorial, you create Azure Machine Learning Compute as your training environment. You will submit Python code to run on this VM later in the tutorial. \n", + "The code below creates the compute clusters for you if they don't already exist in your workspace.\n", "\n", "**Creation of compute takes approximately 5 minutes.** If the AmlCompute with that name is already in your workspace the code will skip the creation process." ] @@ -263,7 +264,7 @@ "source": [ "## Train on a remote cluster\n", "\n", - "For this task, submit the job to the remote training cluster you set up earlier. To submit a job you:\n", + "For this task, you submit the job to run on 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",