{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Azure ML & Azure Databricks notebooks by Parashar Shah.\n", "\n", "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/azure-databricks/amlsdk/deploy-to-aks-existingimage-05.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook uses image from ACI notebook for deploying to AKS." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import azureml.core\n", "\n", "# Check core SDK version number\n", "print(\"SDK version:\", azureml.core.VERSION)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Set auth to be used by workspace related APIs.\n", "# For automation or CI/CD ServicePrincipalAuthentication can be used.\n", "# https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.authentication.serviceprincipalauthentication?view=azure-ml-py\n", "auth = None" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from azureml.core import Workspace\n", "\n", "ws = Workspace.from_config(auth = auth)\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": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# List images by ws\n", "\n", "from azureml.core.image import ContainerImage\n", "for 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))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from azureml.core.image import Image\n", "myimage = Image(workspace=ws, name=\"aciws\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#create AKS compute\n", "#it may take 20-25 minutes to create a new cluster\n", "\n", "from azureml.core.compute import AksCompute, ComputeTarget\n", "\n", "# Use the default configuration (can also provide parameters to customize)\n", "prov_config = AksCompute.provisioning_configuration()\n", "\n", "aks_name = 'ps-aks-demo2' \n", "\n", "# Create the cluster\n", "aks_target = ComputeTarget.create(workspace = ws, \n", " name = aks_name, \n", " provisioning_configuration = prov_config)\n", "\n", "aks_target.wait_for_completion(show_output = True)\n", "\n", "print(aks_target.provisioning_state)\n", "print(aks_target.provisioning_errors)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from azureml.core.webservice import Webservice\n", "help( Webservice.deploy_from_image)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from azureml.core.webservice import Webservice, AksWebservice\n", "from azureml.core.image import ContainerImage\n", "\n", "#Set the web service configuration (using default here with app insights)\n", "aks_config = AksWebservice.deploy_configuration(enable_app_insights=True)\n", "\n", "#unique service name\n", "service_name ='ps-aks-service'\n", "\n", "# Webservice creation using single command, there is a variant to use image directly as well.\n", "aks_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", "\n", "aks_service.wait_for_deployment(show_output=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "aks_service.deployment_status" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#for using the Web HTTP API \n", "print(aks_service.scoring_uri)\n", "print(aks_service.get_keys())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "#get the some sample data\n", "test_data_path = \"AdultCensusIncomeTest\"\n", "test = spark.read.parquet(test_data_path).limit(5)\n", "\n", "test_json = json.dumps(test.toJSON().collect())\n", "\n", "print(test_json)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#using data defined above predict if income is >50K (1) or <=50K (0)\n", "aks_service.run(input_data=test_json)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#comment to not delete the web service\n", "aks_service.delete()\n", "#image.delete()\n", "#model.delete()\n", "aks_target.delete() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![Impressions](https://PixelServer20190423114238.azurewebsites.net/api/impressions/MachineLearningNotebooks/how-to-use-azureml/azure-databricks/amlsdk/deploy-to-aks-existingimage-05.png)" ] } ], "metadata": { "authors": [ { "name": "pasha" } ], "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" }, "name": "deploy-to-aks-existingimage-05", "notebookId": 1030695628045968 }, "nbformat": 4, "nbformat_minor": 1 }