diff --git a/lineage/lineage_auto_tracking_example.ipynb b/lineage/lineage_auto_tracking_example.ipynb deleted file mode 100644 index 194966bf9d..0000000000 --- a/lineage/lineage_auto_tracking_example.ipynb +++ /dev/null @@ -1,670 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Lineage Auto Tracking with MNIST Handwritten Digits Example\n", - "\n", - "This demo shows how SageMaker Lineage metadata is auto generated during training.\n", - "\n", - "1. Setup the beta SDK. \n", - "1. Download and prepare the MNIST dataset.\n", - "1. Train a Convolutional Neural Network (CNN) Model.\n", - "1. Traverse the auto generated lineage entities.\n", - "\n", - "Make sure you selected `conda_mxnet_p36` kernel." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Make sure:\n", - "* your account has been whitelisted\n", - "* your execution role has the appropriate trusts" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "\n", - "!{sys.executable} -m pip install -q -U pip\n", - "!{sys.executable} -m pip install -q sagemaker-2.6.1.dev0.tar.gz" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import IPython\n", - "#may need to restart the kernel after initial install of beta sdk\n", - "#IPython.Application.instance().kernel.do_shutdown(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Install Python SDKs" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: sagemaker-experiments in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (0.1.24)\n", - "Requirement already satisfied: boto3>=1.12.8 in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from sagemaker-experiments) (1.14.60)\n", - "Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from boto3>=1.12.8->sagemaker-experiments) (0.9.4)\n", - "Requirement already satisfied: botocore<1.18.0,>=1.17.60 in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from boto3>=1.12.8->sagemaker-experiments) (1.17.60)\n", - "Requirement already satisfied: s3transfer<0.4.0,>=0.3.0 in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from boto3>=1.12.8->sagemaker-experiments) (0.3.3)\n", - "Requirement already satisfied: docutils<0.16,>=0.10 in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from botocore<1.18.0,>=1.17.60->boto3>=1.12.8->sagemaker-experiments) (0.15.2)\n", - "Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from botocore<1.18.0,>=1.17.60->boto3>=1.12.8->sagemaker-experiments) (2.8.1)\n", - "Requirement already satisfied: urllib3<1.26,>=1.20; python_version != \"3.4\" in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from botocore<1.18.0,>=1.17.60->boto3>=1.12.8->sagemaker-experiments) (1.25.8)\n", - "Requirement already satisfied: six>=1.5 in /home/ec2-user/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.18.0,>=1.17.60->boto3>=1.12.8->sagemaker-experiments) (1.14.0)\n" - ] - } - ], - "source": [ - "!{sys.executable} -m pip install sagemaker-experiments" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "\n", - "import boto3\n", - "import numpy as np\n", - "import pandas as pd\n", - "%config InlineBackend.figure_format = 'retina'\n", - "from matplotlib import pyplot as plt\n", - "\n", - "import sagemaker\n", - "from sagemaker import get_execution_role\n", - "from sagemaker.session import Session\n", - "from sagemaker.analytics import ExperimentAnalytics\n", - "\n", - "from smexperiments.experiment import Experiment\n", - "from smexperiments.trial import Trial\n", - "from smexperiments.trial_component import TrialComponent\n", - "from smexperiments.tracker import Tracker" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# lineage beta only available in CMH\n", - "region = 'us-east-2'\n", - "\n", - "sess = boto3.Session(region_name=region)\n", - "sm = sess.client('sagemaker')\n", - "role = get_execution_role()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a S3 bucket to hold data" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "An error occurred (BucketAlreadyOwnedByYou) when calling the CreateBucket operation: Your previous request to create the named bucket succeeded and you already own it.\n" - ] - } - ], - "source": [ - "# create a s3 bucket to hold data, note that your account might already created a bucket with the same name\n", - "account_id = sess.client('sts').get_caller_identity()[\"Account\"]\n", - "bucket = 'sagemaker-experiments-{}-{}'.format(sess.region_name, account_id)\n", - "prefix = 'mnist'\n", - "\n", - "try:\n", - " if sess.region_name == \"us-east-1\":\n", - " sess.client('s3').create_bucket(Bucket=bucket)\n", - " else:\n", - " sess.client('s3').create_bucket(Bucket=bucket, \n", - " CreateBucketConfiguration={'LocationConstraint': sess.region_name})\n", - "except Exception as e:\n", - " print(e)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create an Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Experiment(sagemaker_boto_client=,experiment_name='mnist-hand-written-digits-classification-1600448285',description='Classification of mnist hand-written digits',tags=None,experiment_arn='arn:aws:sagemaker:us-east-2:707662012936:experiment/mnist-hand-written-digits-classification-1600448285',response_metadata={'RequestId': 'eaf6dbea-6ecb-4781-9167-53ead98746b7', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'eaf6dbea-6ecb-4781-9167-53ead98746b7', 'content-type': 'application/x-amz-json-1.1', 'content-length': '123', 'date': 'Fri, 18 Sep 2020 16:58:05 GMT'}, 'RetryAttempts': 0})\n" - ] - } - ], - "source": [ - "mnist_experiment = Experiment.create(\n", - " experiment_name=f\"mnist-hand-written-digits-classification-{int(time.time())}\", \n", - " description=\"Classification of mnist hand-written digits\", \n", - " sagemaker_boto_client=sm)\n", - "print(mnist_experiment)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a Trial For Each Training Run\n", - "\n", - "Note the execution of the following code takes a while." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from sagemaker.mxnet import MXNet\n", - "from sagemaker import get_execution_role\n", - "\n", - "# Bucket location where results of model training are saved.\n", - "model_artifacts_location = 's3://{}/mxnet-mnist-example/artifacts'.format(bucket)\n", - "custom_code_upload_location = 's3://{}/mxnet-mnist-example/code'.format(bucket)\n", - "train_data_location = 's3://sagemaker-sample-data-{}/mxnet/mnist/train'.format(region)\n", - "test_data_location = 's3://sagemaker-sample-data-{}/mxnet/mnist/test'.format(region)\n", - "# IAM execution role that gives SageMaker access to resources in your AWS account.\n", - "# We can use the SageMaker Python SDK to get the role from our notebook environment. \n", - "role = get_execution_role()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you want to run the following training jobs asynchronously, you may need to increase your resource limit. Otherwise, you can run them sequentially." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# create trial\n", - "trial_name = f\"cnn-training-job-{int(time.time())}\"\n", - "cnn_trial = Trial.create(\n", - " trial_name=trial_name, \n", - " experiment_name=mnist_experiment.experiment_name,\n", - " sagemaker_boto_client=sm,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:sagemaker:Creating training-job with name: cnn-training-job-1600448298\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-09-18 16:58:19 Starting - Starting the training job...\n", - "2020-09-18 16:58:21 Starting - Launching requested ML instances......\n", - "2020-09-18 16:59:24 Starting - Preparing the instances for training...\n", - "2020-09-18 17:00:14 Downloading - Downloading input data...\n", - "2020-09-18 17:00:38 Training - Downloading the training image..\n", - "2020-09-18 17:00:57 Training - Training image download completed. Training in progress.\u001b[34m2020-09-18 17:00:58,918 sagemaker-containers INFO Imported framework sagemaker_mxnet_container.training\u001b[0m\n", - "\u001b[34m2020-09-18 17:00:58,922 sagemaker-containers INFO No GPUs detected (normal if no gpus installed)\u001b[0m\n", - "\u001b[34m2020-09-18 17:00:58,936 sagemaker_mxnet_container.training INFO MXNet training environment: {'SM_HOSTS': '[\"algo-1\"]', 'SM_NETWORK_INTERFACE_NAME': 'eth0', 'SM_HPS': '{\"learning-rate\":0.1}', 'SM_USER_ENTRY_POINT': 'mnist.py', 'SM_FRAMEWORK_PARAMS': '{}', 'SM_RESOURCE_CONFIG': '{\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"}', 'SM_INPUT_DATA_CONFIG': '{\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}}', 'SM_OUTPUT_DATA_DIR': '/opt/ml/output/data', 'SM_CHANNELS': '[\"test\",\"train\"]', 'SM_CURRENT_HOST': 'algo-1', 'SM_MODULE_NAME': 'mnist', 'SM_LOG_LEVEL': '20', 'SM_FRAMEWORK_MODULE': 'sagemaker_mxnet_container.training:main', 'SM_INPUT_DIR': '/opt/ml/input', 'SM_INPUT_CONFIG_DIR': '/opt/ml/input/config', 'SM_OUTPUT_DIR': '/opt/ml/output', 'SM_NUM_CPUS': '4', 'SM_NUM_GPUS': '0', 'SM_MODEL_DIR': '/opt/ml/model', 'SM_MODULE_DIR': 's3://sagemaker-experiments-us-east-2-707662012936/mxnet-mnist-example/code/cnn-training-job-1600448298/source/sourcedir.tar.gz', 'SM_TRAINING_ENV': '{\"additional_framework_parameters\":{},\"channel_input_dirs\":{\"test\":\"/opt/ml/input/data/test\",\"train\":\"/opt/ml/input/data/train\"},\"current_host\":\"algo-1\",\"framework_module\":\"sagemaker_mxnet_container.training:main\",\"hosts\":[\"algo-1\"],\"hyperparameters\":{\"learning-rate\":0.1},\"input_config_dir\":\"/opt/ml/input/config\",\"input_data_config\":{\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}},\"input_dir\":\"/opt/ml/input\",\"is_master\":true,\"job_name\":\"cnn-training-job-1600448298\",\"log_level\":20,\"master_hostname\":\"algo-1\",\"model_dir\":\"/opt/ml/model\",\"module_dir\":\"s3://sagemaker-experiments-us-east-2-707662012936/mxnet-mnist-example/code/cnn-training-job-1600448298/source/sourcedir.tar.gz\",\"module_name\":\"mnist\",\"network_interface_name\":\"eth0\",\"num_cpus\":4,\"num_gpus\":0,\"output_data_dir\":\"/opt/ml/output/data\",\"output_dir\":\"/opt/ml/output\",\"output_intermediate_dir\":\"/opt/ml/output/intermediate\",\"resource_config\":{\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"},\"user_entry_point\":\"mnist.py\"}', 'SM_USER_ARGS': '[\"--learning-rate\",\"0.1\"]', 'SM_OUTPUT_INTERMEDIATE_DIR': '/opt/ml/output/intermediate', 'SM_CHANNEL_TEST': '/opt/ml/input/data/test', 'SM_CHANNEL_TRAIN': '/opt/ml/input/data/train', 'SM_HP_LEARNING-RATE': '0.1'}\u001b[0m\n", - "\u001b[34m2020-09-18 17:00:59,276 sagemaker-containers INFO Module mnist does not provide a setup.py. \u001b[0m\n", - "\u001b[34mGenerating setup.py\u001b[0m\n", - "\u001b[34m2020-09-18 17:00:59,277 sagemaker-containers INFO Generating setup.cfg\u001b[0m\n", - "\u001b[34m2020-09-18 17:00:59,277 sagemaker-containers INFO Generating MANIFEST.in\u001b[0m\n", - "\u001b[34m2020-09-18 17:00:59,277 sagemaker-containers INFO Installing module with the following command:\u001b[0m\n", - "\u001b[34m/usr/local/bin/python3.6 -m pip install -U . \u001b[0m\n", - "\u001b[34mProcessing /opt/ml/code\u001b[0m\n", - "\u001b[34mInstalling collected packages: mnist\n", - " Running setup.py install for mnist: started\n", - " Running setup.py install for mnist: finished with status 'done'\u001b[0m\n", - "\u001b[34mSuccessfully installed mnist-1.0.0\u001b[0m\n", - "\u001b[34mWARNING: You are using pip version 19.1.1, however version 20.2.3 is available.\u001b[0m\n", - "\u001b[34mYou should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n", - "\u001b[34m2020-09-18 17:01:01,093 sagemaker-containers INFO No GPUs detected (normal if no gpus installed)\u001b[0m\n", - "\u001b[34m2020-09-18 17:01:01,109 sagemaker-containers INFO Invoking user script\n", - "\u001b[0m\n", - "\u001b[34mTraining Env:\n", - "\u001b[0m\n", - "\u001b[34m{\n", - " \"additional_framework_parameters\": {},\n", - " \"channel_input_dirs\": {\n", - " \"test\": \"/opt/ml/input/data/test\",\n", - " \"train\": \"/opt/ml/input/data/train\"\n", - " },\n", - " \"current_host\": \"algo-1\",\n", - " \"framework_module\": \"sagemaker_mxnet_container.training:main\",\n", - " \"hosts\": [\n", - " \"algo-1\"\n", - " ],\n", - " \"hyperparameters\": {\n", - " \"learning-rate\": 0.1\n", - " },\n", - " \"input_config_dir\": \"/opt/ml/input/config\",\n", - " \"input_data_config\": {\n", - " \"test\": {\n", - " \"TrainingInputMode\": \"File\",\n", - " \"S3DistributionType\": \"FullyReplicated\",\n", - " \"RecordWrapperType\": \"None\"\n", - " },\n", - " \"train\": {\n", - " \"TrainingInputMode\": \"File\",\n", - " \"S3DistributionType\": \"FullyReplicated\",\n", - " \"RecordWrapperType\": \"None\"\n", - " }\n", - " },\n", - " \"input_dir\": \"/opt/ml/input\",\n", - " \"is_master\": true,\n", - " \"job_name\": \"cnn-training-job-1600448298\",\n", - " \"log_level\": 20,\n", - " \"master_hostname\": \"algo-1\",\n", - " \"model_dir\": \"/opt/ml/model\",\n", - " \"module_dir\": \"s3://sagemaker-experiments-us-east-2-707662012936/mxnet-mnist-example/code/cnn-training-job-1600448298/source/sourcedir.tar.gz\",\n", - " \"module_name\": \"mnist\",\n", - " \"network_interface_name\": \"eth0\",\n", - " \"num_cpus\": 4,\n", - " \"num_gpus\": 0,\n", - " \"output_data_dir\": \"/opt/ml/output/data\",\n", - " \"output_dir\": \"/opt/ml/output\",\n", - " \"output_intermediate_dir\": \"/opt/ml/output/intermediate\",\n", - " \"resource_config\": {\n", - " \"current_host\": \"algo-1\",\n", - " \"hosts\": [\n", - " \"algo-1\"\n", - " ],\n", - " \"network_interface_name\": \"eth0\"\n", - " },\n", - " \"user_entry_point\": \"mnist.py\"\u001b[0m\n", - "\u001b[34m}\n", - "\u001b[0m\n", - "\u001b[34mEnvironment variables:\n", - "\u001b[0m\n", - "\u001b[34mSM_HOSTS=[\"algo-1\"]\u001b[0m\n", - "\u001b[34mSM_NETWORK_INTERFACE_NAME=eth0\u001b[0m\n", - "\u001b[34mSM_HPS={\"learning-rate\":0.1}\u001b[0m\n", - "\u001b[34mSM_USER_ENTRY_POINT=mnist.py\u001b[0m\n", - "\u001b[34mSM_FRAMEWORK_PARAMS={}\u001b[0m\n", - "\u001b[34mSM_RESOURCE_CONFIG={\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"}\u001b[0m\n", - "\u001b[34mSM_INPUT_DATA_CONFIG={\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}}\u001b[0m\n", - "\u001b[34mSM_OUTPUT_DATA_DIR=/opt/ml/output/data\u001b[0m\n", - "\u001b[34mSM_CHANNELS=[\"test\",\"train\"]\u001b[0m\n", - "\u001b[34mSM_CURRENT_HOST=algo-1\u001b[0m\n", - "\u001b[34mSM_MODULE_NAME=mnist\u001b[0m\n", - "\u001b[34mSM_LOG_LEVEL=20\u001b[0m\n", - "\u001b[34mSM_FRAMEWORK_MODULE=sagemaker_mxnet_container.training:main\u001b[0m\n", - "\u001b[34mSM_INPUT_DIR=/opt/ml/input\u001b[0m\n", - "\u001b[34mSM_INPUT_CONFIG_DIR=/opt/ml/input/config\u001b[0m\n", - "\u001b[34mSM_OUTPUT_DIR=/opt/ml/output\u001b[0m\n", - "\u001b[34mSM_NUM_CPUS=4\u001b[0m\n", - "\u001b[34mSM_NUM_GPUS=0\u001b[0m\n", - "\u001b[34mSM_MODEL_DIR=/opt/ml/model\u001b[0m\n", - "\u001b[34mSM_MODULE_DIR=s3://sagemaker-experiments-us-east-2-707662012936/mxnet-mnist-example/code/cnn-training-job-1600448298/source/sourcedir.tar.gz\u001b[0m\n", - "\u001b[34mSM_TRAINING_ENV={\"additional_framework_parameters\":{},\"channel_input_dirs\":{\"test\":\"/opt/ml/input/data/test\",\"train\":\"/opt/ml/input/data/train\"},\"current_host\":\"algo-1\",\"framework_module\":\"sagemaker_mxnet_container.training:main\",\"hosts\":[\"algo-1\"],\"hyperparameters\":{\"learning-rate\":0.1},\"input_config_dir\":\"/opt/ml/input/config\",\"input_data_config\":{\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}},\"input_dir\":\"/opt/ml/input\",\"is_master\":true,\"job_name\":\"cnn-training-job-1600448298\",\"log_level\":20,\"master_hostname\":\"algo-1\",\"model_dir\":\"/opt/ml/model\",\"module_dir\":\"s3://sagemaker-experiments-us-east-2-707662012936/mxnet-mnist-example/code/cnn-training-job-1600448298/source/sourcedir.tar.gz\",\"module_name\":\"mnist\",\"network_interface_name\":\"eth0\",\"num_cpus\":4,\"num_gpus\":0,\"output_data_dir\":\"/opt/ml/output/data\",\"output_dir\":\"/opt/ml/output\",\"output_intermediate_dir\":\"/opt/ml/output/intermediate\",\"resource_config\":{\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"},\"user_entry_point\":\"mnist.py\"}\u001b[0m\n", - "\u001b[34mSM_USER_ARGS=[\"--learning-rate\",\"0.1\"]\u001b[0m\n", - "\u001b[34mSM_OUTPUT_INTERMEDIATE_DIR=/opt/ml/output/intermediate\u001b[0m\n", - "\u001b[34mSM_CHANNEL_TEST=/opt/ml/input/data/test\u001b[0m\n", - "\u001b[34mSM_CHANNEL_TRAIN=/opt/ml/input/data/train\u001b[0m\n", - "\u001b[34mSM_HP_LEARNING-RATE=0.1\u001b[0m\n", - "\u001b[34mPYTHONPATH=/usr/local/bin:/usr/local/lib/python36.zip:/usr/local/lib/python3.6:/usr/local/lib/python3.6/lib-dynload:/usr/local/lib/python3.6/site-packages\n", - "\u001b[0m\n", - "\u001b[34mInvoking script with the following command:\n", - "\u001b[0m\n", - "\u001b[34m/usr/local/bin/python3.6 -m mnist --learning-rate 0.1\n", - "\n", - "\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [0-100]#011Speed: 50205.03 samples/sec#011accuracy=0.109109\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [100-200]#011Speed: 56347.94 samples/sec#011accuracy=0.112500\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [200-300]#011Speed: 56731.99 samples/sec#011accuracy=0.114400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [300-400]#011Speed: 55335.14 samples/sec#011accuracy=0.112100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [400-500]#011Speed: 54007.85 samples/sec#011accuracy=0.111500\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Train-accuracy=0.131767\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Time cost=1.168\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Validation-accuracy=0.361700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [0-100]#011Speed: 46970.64 samples/sec#011accuracy=0.485149\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [100-200]#011Speed: 51159.84 samples/sec#011accuracy=0.671800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [200-300]#011Speed: 51225.45 samples/sec#011accuracy=0.772000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [300-400]#011Speed: 49382.28 samples/sec#011accuracy=0.802200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [400-500]#011Speed: 54041.46 samples/sec#011accuracy=0.821100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Train-accuracy=0.732617\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Time cost=1.161\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Validation-accuracy=0.841000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [0-100]#011Speed: 47934.41 samples/sec#011accuracy=0.855743\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [100-200]#011Speed: 43980.94 samples/sec#011accuracy=0.873200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [200-300]#011Speed: 46539.72 samples/sec#011accuracy=0.890400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [300-400]#011Speed: 56658.80 samples/sec#011accuracy=0.901300\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [400-500]#011Speed: 60301.89 samples/sec#011accuracy=0.904900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Train-accuracy=0.889467\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Time cost=1.177\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Validation-accuracy=0.919500\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [0-100]#011Speed: 44645.67 samples/sec#011accuracy=0.921584\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [100-200]#011Speed: 50707.90 samples/sec#011accuracy=0.926800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [200-300]#011Speed: 55945.46 samples/sec#011accuracy=0.929800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [300-400]#011Speed: 53771.68 samples/sec#011accuracy=0.931100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [400-500]#011Speed: 58883.54 samples/sec#011accuracy=0.932000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Train-accuracy=0.929450\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Time cost=1.144\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Validation-accuracy=0.939000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [0-100]#011Speed: 49187.93 samples/sec#011accuracy=0.942376\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [100-200]#011Speed: 61187.84 samples/sec#011accuracy=0.943200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [200-300]#011Speed: 56989.14 samples/sec#011accuracy=0.945400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [300-400]#011Speed: 55916.23 samples/sec#011accuracy=0.947000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [400-500]#011Speed: 52112.93 samples/sec#011accuracy=0.948400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Train-accuracy=0.946367\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Time cost=1.107\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Validation-accuracy=0.953300\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [0-100]#011Speed: 46316.68 samples/sec#011accuracy=0.958812\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [100-200]#011Speed: 57687.36 samples/sec#011accuracy=0.956300\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [200-300]#011Speed: 60239.45 samples/sec#011accuracy=0.955200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [300-400]#011Speed: 42946.92 samples/sec#011accuracy=0.956400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [400-500]#011Speed: 58556.36 samples/sec#011accuracy=0.957900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Train-accuracy=0.957400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Time cost=1.144\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Validation-accuracy=0.956300\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [0-100]#011Speed: 43963.93 samples/sec#011accuracy=0.963663\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [100-200]#011Speed: 59093.51 samples/sec#011accuracy=0.964100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [200-300]#011Speed: 55414.68 samples/sec#011accuracy=0.965300\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [300-400]#011Speed: 57791.73 samples/sec#011accuracy=0.964200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [400-500]#011Speed: 56011.66 samples/sec#011accuracy=0.963900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Train-accuracy=0.964483\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Time cost=1.125\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Validation-accuracy=0.962200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [0-100]#011Speed: 49319.63 samples/sec#011accuracy=0.970396\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [100-200]#011Speed: 49068.18 samples/sec#011accuracy=0.972700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [200-300]#011Speed: 50908.98 samples/sec#011accuracy=0.968400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [300-400]#011Speed: 57289.14 samples/sec#011accuracy=0.968700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [400-500]#011Speed: 50406.79 samples/sec#011accuracy=0.969500\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Train-accuracy=0.969983\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Time cost=1.167\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Validation-accuracy=0.967600\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [0-100]#011Speed: 49308.79 samples/sec#011accuracy=0.974158\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [100-200]#011Speed: 55016.65 samples/sec#011accuracy=0.972100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [200-300]#011Speed: 56157.89 samples/sec#011accuracy=0.974800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [300-400]#011Speed: 56100.66 samples/sec#011accuracy=0.974600\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [400-500]#011Speed: 55336.53 samples/sec#011accuracy=0.975700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Train-accuracy=0.973583\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Time cost=1.153\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Validation-accuracy=0.969100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [0-100]#011Speed: 49495.16 samples/sec#011accuracy=0.976931\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [100-200]#011Speed: 56176.17 samples/sec#011accuracy=0.978100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [200-300]#011Speed: 54348.38 samples/sec#011accuracy=0.977700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [300-400]#011Speed: 55923.31 samples/sec#011accuracy=0.974100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [400-500]#011Speed: 55544.87 samples/sec#011accuracy=0.976800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Train-accuracy=0.976783\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Time cost=1.097\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Validation-accuracy=0.971200\u001b[0m\n", - "\u001b[34m2020-09-18 17:01:20,526 sagemaker-containers INFO Reporting training SUCCESS\u001b[0m\n", - "\n", - "2020-09-18 17:01:30 Uploading - Uploading generated training model\n", - "2020-09-18 17:01:30 Completed - Training job completed\n", - "Training seconds: 76\n", - "Billable seconds: 76\n" - ] - } - ], - "source": [ - "# all input configurations, parameters, and metrics specified in estimator \n", - "# definition are automatically tracked\n", - "from sagemaker.mxnet import MXNet\n", - "\n", - "estimator = MXNet(entry_point='mnist.py',\n", - " role=role,\n", - " output_path=model_artifacts_location,\n", - " code_location=custom_code_upload_location,\n", - " instance_count=1,\n", - " instance_type='ml.m4.xlarge',\n", - " framework_version='1.4.1',\n", - " py_version='py3',\n", - " #distributions={'parameter_server': {'enabled': True}},\n", - " hyperparameters={'learning-rate': 0.1})\n", - "\n", - "cnn_training_job_name = \"cnn-training-job-{}\".format(int(time.time()))\n", - "\n", - "# Now associate the estimator with the Experiment and Trial\n", - "estimator.fit(\n", - " inputs={'train': train_data_location, 'test': test_data_location},\n", - " job_name=cnn_training_job_name,\n", - " experiment_config={\n", - " \"TrialName\": cnn_trial.trial_name,\n", - " \"TrialComponentDisplayName\": \"Training\",\n", - " },\n", - " wait=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### View the Lineage Data\n", - "\n", - "Now we will traverse the lineage metadata auto generated by SageMaker for the previously created training job." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "from sagemaker.lineage.association import Association" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Lineage entities upstream from arn:aws:sagemaker:us-east-2:707662012936:experiment-trial-component/cnn-training-job-1600448298-aws-training-job:\n", - "arn:aws:sagemaker:us-east-2:707662012936:artifact/670e8b0c6229188481e498f852cad181\n", - "arn:aws:sagemaker:us-east-2:707662012936:artifact/9f4e6150b0cb6b66b70038d62c60c287\n", - "arn:aws:sagemaker:us-east-2:707662012936:artifact/faa0f168c72092323e13042098253e44\n", - "\n", - "Lineage entities downstream from arn:aws:sagemaker:us-east-2:707662012936:experiment-trial-component/cnn-training-job-1600448298-aws-training-job:\n" - ] - } - ], - "source": [ - "trial_component_name = cnn_training_job_name + '-aws-training-job'\n", - "trial_component = TrialComponent.load(trial_component_name=trial_component_name, sagemaker_boto_client=sm)\n", - "tc_arn = trial_component.trial_component_arn\n", - "\n", - "# Incoming Associations\n", - "incoming_associations = Association.list(destination_arn=tc_arn, sagemaker_boto_client=sm)\n", - "\n", - "print(f'\\nLineage entities upstream from {tc_arn}:')\n", - "for association in incoming_associations:\n", - " print(association.source_arn)\n", - "\n", - "# Outgoing Assocaitions\n", - "outgoing_associations = Association.list(source_arn=tc_arn, sagemaker_boto_client=sm)\n", - "print(f'\\nLineage entities downstream from {tc_arn}:')\n", - "for association in outgoing_associations:\n", - " print(association.destination_arn)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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uLg4ffLJJ0pISJDT6dSjjz7qVebQoUOaMmWKrrnmGp1zzjmKiopSdHS0WrVqpYcffliHDh3yqtO7d2+PXAxxcXEebR05cqS9LDMzU5999pluvfVWtWrVStWqVbNzwdx2221av359qffL3bRp0+R0OnXNNdcoPDzcZ5nnnntOTqdT/fr1U48ePU5qe+6mT58uY4yioqLUt29fr+UzZsxQfn6+6tSpo4EDB3otv+mmm1S7dm3l5eUVmQ+htOfdwYMFuV/q16+v+Ph4r+URERE699xzJUnp6elF7uOiRYt05ZVXKj4+XlWqVNEFF1yg//znP35/lf3ggw8kSYMHD/a57YceekiStHTpUu3bt8/nOpKTk/X000/rwgsvVFxcnCIiItS4cWP17dtXM2fOlNN5Ynrv3NxcvfTSS5Kkxx9/XPXq1Styf9w1bNhQdevW9bu8V69e9nm+apVnTpywsDCfvU5SsnK1fl+KgmNrKrz+eZKknANbPco4czKVvbugh0T0BT1lBTm81hPztz6SpPyUQ8ratc5rua86JWHycmSyC17z0IRGkqT1+1KUknUiV0a7du0kFeSOKtz7wnVunX/++bIsy2v9rVu3VnBwsKSiz60jR47ooYceUlxcnJ5//vli2+3ariS1adPGZxlXu31t1+Eo2/Fyd+zYMT366KNq06aNYmJiFBERoWbNmumhhx7yaJ8/7777rpYuXaqbbrpJl19+eZFl09LS9N1330mShg8f7rP9DzzwgKSCHnuF3wtc7QkJCVHLli296gYFBdnH0f149e7d2yMv0Kuvvurx3n7s2DGP9Z/seVBaJ3PNutu2bZuGDRum5s2bKyoqSrGxsWrRooXuvvtu/fDDDx5l8/LytHDhQg0dOlRt2rRRjRo1FBYWprp166p///5e5QszxmjKlCm64IILFBkZqfj4eHXv3l1Lliwpdn/Let6eCddL//79JUlTp0496XUBCFwEeACckTIzM9W7d2/169dPX3zxhQ4dOqSIiAgdPHhQs2fPVqdOnfTMM8941ZsxY4Y6dOigjz76SLt377a/8G7fvl0LFizQfffdp6NHj0qSqlSpooSEBLtM1apVlZCQYD+qV69eprZXq1ZN99xzjyRpyZIlXjciDz/8sIYMGaJ58+Zp8+bNCg4OVmZmptavX6/nnntObdq00ZYtnrMBxcXFqWbNmvbf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cuVPat26tf2cq/eO63nX+v3dFL/99tuSCnpN+gtal1ZISIj9/vHSSy8V2RvF6XR65Mtas2ZNkfvsen+cMGGCjDGles9PTk62h9jcfvvtHj3ppBPHa9myZX6H37h6bSYmJvocyunPyZwHUvE/Xrz88sv29X/11Vd7LS/rNdu+fXt7uOZDDz1kD78rius1ysrK0tatW72Wb9u2ze8xuPTSS1WrVi05nU69+OKLXsvz8/P1wgsvFNuGsiiv68Xdhg0blJ6eruDgYDu4BqDyIcAD4IzTvn17Ow/NyJEjNWrUKI88HikpKfr888/Vv39/u1eOVDALUtu2bfX666975BHIzs7W+++/bye27d69u8f2XENOZs6cWew01r44nU6tX79ezz//vFq2bGn3EJkwYYI6dPC8+XQFM5YvX64xY8bYQZikpCQ99thjevjhh/1+cXY4HPavctOmTfP5pb1du3aqVq2asrKydMMNN9i/Jubk5OiDDz7Q1VdfXepkq4W5Agw//fST3zKjR49W9erVtX//fvXt29d+PbKzszVlyhQ9+eSTkgqCKv5+MZZOJFeuW7euV48bXxo3bqzbby9IYnvvvffq008/tW/uPvnkE913332SpDvvvNOrK31ZzztJuueeeyQV3Ah1795dP/74o/Ly8uxz4x//+Ifdhd/f0JGQkBCtWbNGAwYMsHs3paam6oknntD48eMlFSRaDQ72HF19//33q2bNmjp06JCuueYabdu2TVJBEHDo0KFavHixHA6Hz1mUHn30UVWvXl179uxRx44d9dVXX9nTLKekpGjhwoXq06ePV9Lp559/XpZlac6cORo9erR9o3z06FE7Qa0krwDnsWPHdOWVV2rjxo1q2LChFi9e7JULyR9jjIYMGaKZM2cqPDxcc+fOVceOHdUqsWTBGGdOlo4unqLsfZtk8gqCwSY/T5nbV+nAf/9PuUd2KziutuI63ep7+3k5ys9Ith+udciZ5/G8M9szwXdYrcYKrVNwk5u8fIaOLf9Q+ZkpapkYq5SUFL3xxhv2edmyZUt17tzZrutwOOwE54sXL9aNN97ocS199dVXuvrqq+0hf3feeWeJjkVJ3HTTTYqOjpYxRtdff71mzJhhJzTev3+/RowYYSfXvf32272G6hhjdPjwYfvhHkw5evSox7LC72WPP/646tSpo6SkJHXs2FEfffSR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SodDRETlEJdoERERkT1hgoceS/7+/hgzZgwAIDQ0VOFoiIioPOISLSIiIrInTPDQY2v69OlwdnbG9u3bceLECaXDISKicoYzeIiIiMieMMFDj60qVapg3LhxAIDZs2crHA0REZU3nMFDRERE9oQJHnqsvf3223B3d8fu3bvx66+/Kh0OERGVIyyyTERERPaECR56rFWoUAGTJk0CAMycORNCCIUjIiKi8oJLtIiIiMieMMFDj72JEyfCx8cHv/76K/bu3at0OEREVE5wiRYRERHZEyZ46LHn6emJt99+GwBn8RARUQ4hBJdoERERkV1hgodswhtvvAFfX1+cOHECO3fuVDocIiJSWGpqKnQ6HZycnODk5KR0OERERESljgkesgmurq6YMWMGgJwdtfR6vcIRERGRkjh7h4iIiOwNEzxkM0aPHo3q1avjzJkz2LJli9LhEBGRglhgmYiIiOwNEzxkM5ycnDB79mwAQFhYGLKyshSOiIiIlMICy0RERGRvmOAhm/LKK6+gdu3auHjxIr766iulwyEiIoVwBg8RERHZGyZ4yKZoNBrMmTMHADB37lxkZmYqGxARESmCM3iIiIjI3jDBQzbnpZdeQsOGDXHjxg2sXbtW6XCIiEgBLLJMRERE9oYJHrI5arUa8+bNAwCEh4cjLS1N4YiIiKiscYkWERER2RsmeMgm9evXD82aNcO9e/fwySefKB0OERGVMS7RIiIiInvDBA/ZJJVKhfDwcADAu+++i+TkZIUjIiKissQZPERERGRvmOAhm9WzZ08888wziImJwfLly5UOh4iIyhBn8BAREZG9YYKHbJYkSZg/fz4AYPHixfK/5hIRke1jkWUiIiKyN0zwkE3r1KkTnnvuOTx69AgffPCB0uEQEVEZ4RItIiIisjdM8JDNM9TiWbp0KWJiYhSOhoiIygKXaBEREZG9YYKHbF6bNm3Qo0cPJCcnY9GiRUqHQ0REZYAzeIiIiMjeMMFDdsEwiyciIgL37t1TOBoiIipN2dnZSEhIAAB4eHgoHA0RERFR2WCCh+xCcHAw+vXrh/T0dLzzzjtKh0NERKUoMTERQE5yR61WKxwNERERUdlggofsxrx58yBJElatWoWbN28qHQ4REZUSLs8iIiIie8QED9mNwMBAvPTSS9DpdJg3b57S4RARUSlhgWUiIiKyR0zwkF0JCwuD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tzIdX65cOXr37s1TTz2V5Vj7Bie1atXio48+csw6slqt3HnnnY7lLBcvXmTLli25zpRXH3/8McnJyTg7O9OjR49M15UqVYo9e/awbt06Onfu7PhCwcXFhUceeYQNGzbg5uZGdHR0tl8W79mzhxUrVgAQHh7OY489hsViwcnJib59+zo+8M+YMYPTp09nOnb+/PkcOXIEq9VKREQEd911F0t2HMJiseBerRFlnngFgLj920g8/kemY22lKlJx4FzKBr6C+813YHVxB8Dq7Ipn/daUDRwFQGr0aeL2f5Mlt0et5vje2QXXm+phdfN0XO7k4Ytvi874tuic/ti/b82yTMzv3j5UfOZdfJt34qtT/xVUb775ZpYvX879998PwPTp07O+GKQXf3r06EHVqlWx2Wzpz8dmo1WrVmzcuBEvLy8SExNZunRptsfn1fW8H/r27cuwYcNo3Lhxpvdb5cqVef311+nduzcAH374YZZj4+Li8pxZBR6RbDz22GM0a9aM06dP89Zb2VTARUSkUFIHj5Q0rVu3xmKx8OGHHxIdHc0rr7zCzTffjLu7OzVq1GDChAkkJCQ4br9582batm1LmTJl8PT05J577mHbtm3Z3ndqaipbtmzhxRdfpEmTJpQrVw4XFxcqVqxIhw4d+PLLL6+ab+HChTRv3hxPT0/8/f257777WLduHQDVqlXDYrHkOH8jJiaGKVOmcMcdd+Dr64ubmxu1atVi6NChHDly5NpP1v/bsGEDJ0+epH79+txyyy2ZrgsODsZisTi6NrZu3ZppFos96/Wcm5iYGD755BN69epFgwYN8PPzw93dnZo1azJw4MAc54mkpaWxbNkyAJ577rksRRonJydeeuklANatW0d0dPqOSvZ5MxkHRGd8TvZNRuz3kVfvvvsuFy5coE6dOowaNeqajj116hSQ3jGVXYbq1avj7+8PkOOXr8nJybz//vu0adOGsmXL4urqStWqVXnooYd4//33r+lL24ULFwLpnwnKlCmT6TpfX18aNmyY47F169Z1dH1lNxNpyZIlANSpU4cnnngiy/UDBw7E19eX+Ph4IiIiMl33v//9D4AHH3yQBg0aEJ2QzK/H/9s5y61SPVwq1gEg9tfMhTCbTxmc/crnmNut6m04+ZYDIOnktXfCuFSoDaTP20lLuJT5vivdgsWa/rr+ejya6IT/NrOxWCz06dMHgIMHD3L+/PlrelxfX19q1aoFwPHjx3O83TfffEP37t2pVKkSrq6ulC5dmgceeIClS5fmOPPoet4PV3PHHXcA2We+1nOQkQo8ItmwWCxMnjwZgNdff93xgUFERAo3dfBISXXhwgWaN2/OtGnTOHXqFKmpqRw8eJCwsDC6du0KwJw5c3jwwQfZtGkTycnJxMXFsW3bNh544AG+/fbbLPe5b98+7r//fmbPns3u3buJiorCxcWFEydOEBkZSZs2bZgyZUqOmZ555hn69evHzp07SUhIwDAMtm7dyuOPP86sWbOu+Hz27dtHgwYNGDduHLt27SIuLg6bzcZff/3FW2+9RcOGDbPNnBuff/45AHfddVeW67y8vChXrhw+Pj4AODs7OwYR24s413tuPvzwQ7p27cqSJUv47bffSEtLIy0tjb///pt58+Zx++23s2nTpizH/f77745CSNu2bbO974ceeghIH+D7zTfpXRguLi6UK1cuU6Ei43PKry4lexdOnz59HMubcstefPr555+z3dEs4wf/22+/Pcv1x44do1mzZgwaNIgvv/yS8+fP4+HhwZEjR/jiiy8YNGgQP/zwQ66y/Pzzz+zduxdI78LIi9KlSwNk+1zsHUj21+py7u7u3H333QBZCoWHDh0C0otIAL8ey7pczdm/EgDxh/Zec24nd2+AHIclX0nisX0AWJxdsXpc+f+DL89tP1+Q/Tm7knPnznHgwAEgvRCYnVGjRnH33XezfPlyjh07hqurKxcvXmTz5s307NmTnj17kpZ27c/5emzfvh3IPnNMTN53G1OBRyQHbdq04d577+XChQvMmDHD7DgiIpIL6uCRkiokJATDMNi2bRsxMTHExMQwb948bDYbn376KWFhYQwbNozRo0dz7tw5oqKi+Pfff7nzzjtJSkpi+PDhWe7TxcWFLl268Omnn3Ly5Eni4+OJiYnh1KlThIWF4eTkxPjx49mxY0eWY8PDw/nggw8AGDNmDOfPn+fChQucPHmSAQMGMHLkSMc8mMtFRUXRrl07Dh06RPv27dm9e7fjsQ8ePMiTTz7JhQsX6NSpU56+hLMXhpo0aZLluhEjRnDy5ElHAeryWS32+THXc25Kly7NkCFD2L59OxcvXiQ6OpqEhAT27dtHr169iI2NpWfPnlk6Tn7//XfH/76888iuTJkyBAQEZLq9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h7Zu3aratWubTgIAIxh4AOA2xMbGSpLmzZunc+fOGa4BnBuPLAO4WV988YV69+4t6eqJ2qefftpwEQCYw8ADALfhscce09/+9jdlZGQoPj7edA7g1LiiBeBmXLhwQYGBgcrMzFTPnj01fPhw00kAYBQDDwDcpmuneBYtWqSTJ08argGcF1e0ANyovLw8dezYUT/99JMefvhhLV26lEeVAbg9Bh4AuE1NmzZVSEiIcnJyNHnyZNM5gNPiBA+AGzVmzBi98847qlKlihITE+Xr62s6CQCMY+ABgCIQExMjq9WqlStX6ujRo6ZzAKfECR4AN2LNmjWaP3++vLy8lJiYqLvuust0EgA4BAYeACgCDRo0UNeuXZWXl6eYmBjTOYDTyc7OVk5Ojry8vFSqVCnTOQAc1Mcff6yBAwdKuno1ukWLFoaLAMBxMPAAQBGJjIyUp6en1q1bp++++850DuBUrr+exTsaAH7N6dOn1a5dO+Xm5mrQoEHq37+/6SQAcCgMPABQROrUqaM+ffrIZrMpKirKdA7gVLieBeD35OTkqF27djp16pRatmypuXPnmk4CAIfDwAMARSg8PFze3t7avHmzvvzyS9M5gNPggWUAv8Vut2vIkCHas2ePatSooe3bt8vb29t0FgA4HAYeAChCNWrUKHwbICIiwnAN4Dw4wQPgtyxevFirVq2Sr6+vkpOTVblyZdNJAOCQGHgAoIhNmDBBfn5+SklJ0SeffGI6B3AK107wMPAAuN67776rESNGSJJWr16tBx980HARADguBh4AKGJVq1bVsGHDJEmTJk0yXAM4B65oAfiln376SSEhIcrPz9fLL7+szp07m04CAIfGwAMAxWDs2LHy9/fXW2+9pffee890DuDwuKIF4HqZmZkKDg7WhQsX9Nxzz2nq1KmmkwDA4THwAEAxKF++vEaNGiXp6sPLdrvdcBHg2DjBA+Aau92uvn37av/+/apbt642bdokDw8P01kA4PAYeACgmIwcOVLly5fX+++/r507d5rOARwaJ3gAXDNjxgxt3rxZZcqUUXJyMsMvANwgBh4AKCb+/v4aN26cJE7xAH+ER5YBSNKOHTs0fvx4SdL69evVsGFDw0UA4DwYeACgGA0ZMkRVqlTR3r179eqrrz3hLEkAACAASURBVJrOARwWV7QAHDp0SKGhobLb7YqKilJgYKDp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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "image/png": { - "height": 573, - "width": 572 - } - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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OIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAAD4STt3iBNBFERRtFqOQcAGGNn7X0xL2AAITMvPBjA9CQk3nONfUvqKgjiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAwMaQUAAAJ7SURBVAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACIE3gAAAAA4gQeAAAAgDiBBwAAACBO4AEAAACI29Za10fb9nG73Z73ff+FkwAAAAD+n+M45jzPz7XWy9Xto4HnbWaeZub98hgAAACAn7zOzNda6351+FDgAQAAAODv8IMHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAOIEHAAAAIE7gAQAAAIgTeAAAAADiBB4AAACAuG/SHCRhDOiQFgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "image/png": { - "height": 573, - "width": 572 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%run lineage_visualizer.py\n", - "\n", - "import lineage_visualizer\n", - "\n", - "# plot a rough visualization of the linaege artifacts\n", - "vis = LineageVisualizer(sm)\n", - "vis.upstream(tc_arn)\n", - "\n", - "vis.downstream(tc_arn)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "!!python/object:networkx.classes.digraph.DiGraph\n", - "_adj: &id001 {}\n", - "_node: &id003 {}\n", - "_pred: {}\n", - "_succ: *id001\n", - "adjlist_inner_dict_factory: &id002 !!python/name:builtins.dict ''\n", - "adjlist_outer_dict_factory: *id002\n", - "edge_attr_dict_factory: *id002\n", - "graph: {}\n", - "graph_attr_dict_factory: *id002\n", - "node_attr_dict_factory: *id002\n", - "node_dict_factory: *id002\n", - "nodes: !!python/object:networkx.classes.reportviews.NodeView\n", - " _nodes: *id003\n", - "\n" - ] - } - ], - "source": [ - "# represent lineage as yaml\n", - "file_name = vis.write_yaml()\n", - "f = open(file_name, \"r\")\n", - "print(f.read())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,md" - }, - "kernelspec": { - "display_name": "conda_mxnet_p36", - "language": "python", - "name": "conda_mxnet_p36" - }, - "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.10" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} \ No newline at end of file diff --git a/lineage/lineage_tracking_example.ipynb b/lineage/lineage_tracking_example.ipynb deleted file mode 100644 index f594997150..0000000000 --- a/lineage/lineage_tracking_example.ipynb +++ /dev/null @@ -1,611 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Lineage Tracking and Traversal Example\n", - "\n", - "SageMaker Lineage makes it easy to track all the artifacts created in a machine learning workflow\n", - " from start to finish.\n", - "\n", - "The [SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) is an SDK to train and \n", - "deploy Apache MXNet models. In this example, we train a simple neural network using the Apache MXNet [Module API](https://mxnet.apache.org/api/python/module/module.html) and the MNIST dataset. \n", - "\n", - "\n", - "Make sure you selected `conda_mxnet_p36` kernel." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Make sure:\n", - "* your account has been whitelisted\n", - "* your execution role has the appropriate trusts" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "# Import Private Beta SDK.\n", - "!{sys.executable} -m pip install -q -U pip\n", - "!{sys.executable} -m pip install -q sagemaker-2.6.1.dev0.tar.gz" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import IPython\n", - "#may need to restart the kernel after initial install of beta sdk\n", - "#IPython.Application.instance().kernel.do_shutdown(True)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from sagemaker import get_execution_role\n", - "from sagemaker.session import Session\n", - "from sagemaker.lineage import context, artifact, association, action\n", - "import boto3\n", - "from datetime import datetime\n", - "import logging\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# lineage beta only available in CMH\n", - "region = 'us-east-2'\n", - "\n", - "# S3 bucket for saving code and model artifacts.\n", - "# Feel free to specify a different bucket here if you wish.\n", - "bucket = Session().default_bucket()\n", - "boto_session = boto3.Session(region_name=region)\n", - "sagemaker_client = boto_session.client(\"sagemaker\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Bucket location where your custom code will be saved in the tar.gz format.\n", - "custom_code_upload_location = 's3://{}/mxnet-mnist-example/code'.format(bucket)\n", - "list_response = list(artifact.Artifact.list(source_uri=custom_code_upload_location, sagemaker_boto_client=sagemaker_client))\n", - "\n", - "if len(list_response):\n", - " code_artifact_arn = list_response[0].artifact_arn\n", - "else:\n", - " code_artifact_arn = artifact.Artifact.create(\n", - " artifact_name='SourceCodeLocation',\n", - " source_uri=custom_code_upload_location,\n", - " artifact_type='codelocation',\n", - " sagemaker_boto_client=sagemaker_client\n", - " ).artifact_arn\n", - "\n", - "# Bucket location where results of model training are saved.\n", - "model_artifacts_location = 's3://{}/mxnet-mnist-example/artifacts'.format(bucket)\n", - "list_response = list(artifact.Artifact.list(source_uri=model_artifacts_location, sagemaker_boto_client=sagemaker_client))\n", - "if len(list_response):\n", - " model_location_artifact_arn = list_response[0].artifact_arn\n", - "else:\n", - " model_location_artifact_arn = artifact.Artifact.create(\n", - " artifact_name='model-artifacts-location',\n", - " source_uri=model_artifacts_location,\n", - " artifact_type='model-artifacts-location',\n", - " sagemaker_boto_client=sagemaker_client,\n", - " ).artifact_arn\n", - "\n", - "# IAM execution role that gives SageMaker access to resources in your AWS account.\n", - "# We can use the SageMaker Python SDK to get the role from our notebook environment. \n", - "role = get_execution_role()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The training script\n", - "\n", - "The `mnist.py` script provides all the code we need for training and hosting a SageMaker model. The script also checkpoints the model at the end of every epoch and saves the model graph, params and optimizer state in the folder `/opt/ml/checkpoints`. If the folder path does not exist then it skips checkpointing. The script we use is adaptated from Apache MXNet [MNIST tutorial](https://mxnet.incubator.apache.org/tutorials/python/mnist.html).\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### SageMaker's MXNet estimator class" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "from sagemaker.mxnet import MXNet\n", - "\n", - "mnist_estimator = MXNet(entry_point='mnist.py',\n", - " role=role,\n", - " output_path=model_artifacts_location,\n", - " code_location=custom_code_upload_location,\n", - " instance_count=1,\n", - " instance_type='ml.m4.xlarge',\n", - " framework_version='1.4.1',\n", - " py_version='py3',\n", - " #distributions={'parameter_server': {'enabled': True}},\n", - " hyperparameters={'learning-rate': 0.1})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Running the Training Job" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "After we've constructed our MXNet object, we can fit it using data stored in S3. Below we run SageMaker training on two input channels: **train** and **test**.\n", - "\n", - "During training, SageMaker makes this data stored in S3 available in the local filesystem where the mnist script is running. The ```mnist.py``` script simply loads the train and test data from disk." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-09-18 19:11:17 Starting - Starting the training job...\n", - "2020-09-18 19:11:19 Starting - Launching requested ML instances......\n", - "2020-09-18 19:12:24 Starting - Preparing the instances for training......\n", - "2020-09-18 19:13:39 Downloading - Downloading input data\n", - "2020-09-18 19:13:39 Training - Downloading the training image...\n", - "2020-09-18 19:13:59 Training - Training image download completed. Training in progress.\u001b[34m2020-09-18 19:14:00,197 sagemaker-containers INFO Imported framework sagemaker_mxnet_container.training\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:00,201 sagemaker-containers INFO No GPUs detected (normal if no gpus installed)\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:00,215 sagemaker_mxnet_container.training INFO MXNet training environment: {'SM_HOSTS': '[\"algo-1\"]', 'SM_NETWORK_INTERFACE_NAME': 'eth0', 'SM_HPS': '{\"learning-rate\":0.1}', 'SM_USER_ENTRY_POINT': 'mnist.py', 'SM_FRAMEWORK_PARAMS': '{}', 'SM_RESOURCE_CONFIG': '{\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"}', 'SM_INPUT_DATA_CONFIG': '{\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}}', 'SM_OUTPUT_DATA_DIR': '/opt/ml/output/data', 'SM_CHANNELS': '[\"test\",\"train\"]', 'SM_CURRENT_HOST': 'algo-1', 'SM_MODULE_NAME': 'mnist', 'SM_LOG_LEVEL': '20', 'SM_FRAMEWORK_MODULE': 'sagemaker_mxnet_container.training:main', 'SM_INPUT_DIR': '/opt/ml/input', 'SM_INPUT_CONFIG_DIR': '/opt/ml/input/config', 'SM_OUTPUT_DIR': '/opt/ml/output', 'SM_NUM_CPUS': '4', 'SM_NUM_GPUS': '0', 'SM_MODEL_DIR': '/opt/ml/model', 'SM_MODULE_DIR': 's3://sagemaker-us-east-2-707662012936/mxnet-mnist-example/code/mxnet-training-2020-09-18-19-11-17-138/source/sourcedir.tar.gz', 'SM_TRAINING_ENV': '{\"additional_framework_parameters\":{},\"channel_input_dirs\":{\"test\":\"/opt/ml/input/data/test\",\"train\":\"/opt/ml/input/data/train\"},\"current_host\":\"algo-1\",\"framework_module\":\"sagemaker_mxnet_container.training:main\",\"hosts\":[\"algo-1\"],\"hyperparameters\":{\"learning-rate\":0.1},\"input_config_dir\":\"/opt/ml/input/config\",\"input_data_config\":{\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}},\"input_dir\":\"/opt/ml/input\",\"is_master\":true,\"job_name\":\"mxnet-training-2020-09-18-19-11-17-138\",\"log_level\":20,\"master_hostname\":\"algo-1\",\"model_dir\":\"/opt/ml/model\",\"module_dir\":\"s3://sagemaker-us-east-2-707662012936/mxnet-mnist-example/code/mxnet-training-2020-09-18-19-11-17-138/source/sourcedir.tar.gz\",\"module_name\":\"mnist\",\"network_interface_name\":\"eth0\",\"num_cpus\":4,\"num_gpus\":0,\"output_data_dir\":\"/opt/ml/output/data\",\"output_dir\":\"/opt/ml/output\",\"output_intermediate_dir\":\"/opt/ml/output/intermediate\",\"resource_config\":{\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"},\"user_entry_point\":\"mnist.py\"}', 'SM_USER_ARGS': '[\"--learning-rate\",\"0.1\"]', 'SM_OUTPUT_INTERMEDIATE_DIR': '/opt/ml/output/intermediate', 'SM_CHANNEL_TEST': '/opt/ml/input/data/test', 'SM_CHANNEL_TRAIN': '/opt/ml/input/data/train', 'SM_HP_LEARNING-RATE': '0.1'}\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:00,481 sagemaker-containers INFO Module mnist does not provide a setup.py. \u001b[0m\n", - "\u001b[34mGenerating setup.py\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:00,481 sagemaker-containers INFO Generating setup.cfg\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:00,481 sagemaker-containers INFO Generating MANIFEST.in\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:00,481 sagemaker-containers INFO Installing module with the following command:\u001b[0m\n", - "\u001b[34m/usr/local/bin/python3.6 -m pip install -U . \u001b[0m\n", - "\u001b[34mProcessing /opt/ml/code\u001b[0m\n", - "\u001b[34mInstalling collected packages: mnist\n", - " Running setup.py install for mnist: started\n", - " Running setup.py install for mnist: finished with status 'done'\u001b[0m\n", - "\u001b[34mSuccessfully installed mnist-1.0.0\u001b[0m\n", - "\u001b[34mWARNING: You are using pip version 19.1.1, however version 20.2.3 is available.\u001b[0m\n", - "\u001b[34mYou should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:02,203 sagemaker-containers INFO No GPUs detected (normal if no gpus installed)\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:02,220 sagemaker-containers INFO Invoking user script\n", - "\u001b[0m\n", - "\u001b[34mTraining Env:\n", - "\u001b[0m\n", - "\u001b[34m{\n", - " \"additional_framework_parameters\": {},\n", - " \"channel_input_dirs\": {\n", - " \"test\": \"/opt/ml/input/data/test\",\n", - " \"train\": \"/opt/ml/input/data/train\"\n", - " },\n", - " \"current_host\": \"algo-1\",\n", - " \"framework_module\": \"sagemaker_mxnet_container.training:main\",\n", - " \"hosts\": [\n", - " \"algo-1\"\n", - " ],\n", - " \"hyperparameters\": {\n", - " \"learning-rate\": 0.1\n", - " },\n", - " \"input_config_dir\": \"/opt/ml/input/config\",\n", - " \"input_data_config\": {\n", - " \"test\": {\n", - " \"TrainingInputMode\": \"File\",\n", - " \"S3DistributionType\": \"FullyReplicated\",\n", - " \"RecordWrapperType\": \"None\"\n", - " },\n", - " \"train\": {\n", - " \"TrainingInputMode\": \"File\",\n", - " \"S3DistributionType\": \"FullyReplicated\",\n", - " \"RecordWrapperType\": \"None\"\n", - " }\n", - " },\n", - " \"input_dir\": \"/opt/ml/input\",\n", - " \"is_master\": true,\n", - " \"job_name\": \"mxnet-training-2020-09-18-19-11-17-138\",\n", - " \"log_level\": 20,\n", - " \"master_hostname\": \"algo-1\",\n", - " \"model_dir\": \"/opt/ml/model\",\n", - " \"module_dir\": \"s3://sagemaker-us-east-2-707662012936/mxnet-mnist-example/code/mxnet-training-2020-09-18-19-11-17-138/source/sourcedir.tar.gz\",\n", - " \"module_name\": \"mnist\",\n", - " \"network_interface_name\": \"eth0\",\n", - " \"num_cpus\": 4,\n", - " \"num_gpus\": 0,\n", - " \"output_data_dir\": \"/opt/ml/output/data\",\n", - " \"output_dir\": \"/opt/ml/output\",\n", - " \"output_intermediate_dir\": \"/opt/ml/output/intermediate\",\n", - " \"resource_config\": {\n", - " \"current_host\": \"algo-1\",\n", - " \"hosts\": [\n", - " \"algo-1\"\n", - " ],\n", - " \"network_interface_name\": \"eth0\"\n", - " },\n", - " \"user_entry_point\": \"mnist.py\"\u001b[0m\n", - "\u001b[34m}\n", - "\u001b[0m\n", - "\u001b[34mEnvironment variables:\n", - "\u001b[0m\n", - "\u001b[34mSM_HOSTS=[\"algo-1\"]\u001b[0m\n", - "\u001b[34mSM_NETWORK_INTERFACE_NAME=eth0\u001b[0m\n", - "\u001b[34mSM_HPS={\"learning-rate\":0.1}\u001b[0m\n", - "\u001b[34mSM_USER_ENTRY_POINT=mnist.py\u001b[0m\n", - "\u001b[34mSM_FRAMEWORK_PARAMS={}\u001b[0m\n", - "\u001b[34mSM_RESOURCE_CONFIG={\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"}\u001b[0m\n", - "\u001b[34mSM_INPUT_DATA_CONFIG={\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}}\u001b[0m\n", - "\u001b[34mSM_OUTPUT_DATA_DIR=/opt/ml/output/data\u001b[0m\n", - "\u001b[34mSM_CHANNELS=[\"test\",\"train\"]\u001b[0m\n", - "\u001b[34mSM_CURRENT_HOST=algo-1\u001b[0m\n", - "\u001b[34mSM_MODULE_NAME=mnist\u001b[0m\n", - "\u001b[34mSM_LOG_LEVEL=20\u001b[0m\n", - "\u001b[34mSM_FRAMEWORK_MODULE=sagemaker_mxnet_container.training:main\u001b[0m\n", - "\u001b[34mSM_INPUT_DIR=/opt/ml/input\u001b[0m\n", - "\u001b[34mSM_INPUT_CONFIG_DIR=/opt/ml/input/config\u001b[0m\n", - "\u001b[34mSM_OUTPUT_DIR=/opt/ml/output\u001b[0m\n", - "\u001b[34mSM_NUM_CPUS=4\u001b[0m\n", - "\u001b[34mSM_NUM_GPUS=0\u001b[0m\n", - "\u001b[34mSM_MODEL_DIR=/opt/ml/model\u001b[0m\n", - "\u001b[34mSM_MODULE_DIR=s3://sagemaker-us-east-2-707662012936/mxnet-mnist-example/code/mxnet-training-2020-09-18-19-11-17-138/source/sourcedir.tar.gz\u001b[0m\n", - "\u001b[34mSM_TRAINING_ENV={\"additional_framework_parameters\":{},\"channel_input_dirs\":{\"test\":\"/opt/ml/input/data/test\",\"train\":\"/opt/ml/input/data/train\"},\"current_host\":\"algo-1\",\"framework_module\":\"sagemaker_mxnet_container.training:main\",\"hosts\":[\"algo-1\"],\"hyperparameters\":{\"learning-rate\":0.1},\"input_config_dir\":\"/opt/ml/input/config\",\"input_data_config\":{\"test\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"},\"train\":{\"RecordWrapperType\":\"None\",\"S3DistributionType\":\"FullyReplicated\",\"TrainingInputMode\":\"File\"}},\"input_dir\":\"/opt/ml/input\",\"is_master\":true,\"job_name\":\"mxnet-training-2020-09-18-19-11-17-138\",\"log_level\":20,\"master_hostname\":\"algo-1\",\"model_dir\":\"/opt/ml/model\",\"module_dir\":\"s3://sagemaker-us-east-2-707662012936/mxnet-mnist-example/code/mxnet-training-2020-09-18-19-11-17-138/source/sourcedir.tar.gz\",\"module_name\":\"mnist\",\"network_interface_name\":\"eth0\",\"num_cpus\":4,\"num_gpus\":0,\"output_data_dir\":\"/opt/ml/output/data\",\"output_dir\":\"/opt/ml/output\",\"output_intermediate_dir\":\"/opt/ml/output/intermediate\",\"resource_config\":{\"current_host\":\"algo-1\",\"hosts\":[\"algo-1\"],\"network_interface_name\":\"eth0\"},\"user_entry_point\":\"mnist.py\"}\u001b[0m\n", - "\u001b[34mSM_USER_ARGS=[\"--learning-rate\",\"0.1\"]\u001b[0m\n", - "\u001b[34mSM_OUTPUT_INTERMEDIATE_DIR=/opt/ml/output/intermediate\u001b[0m\n", - "\u001b[34mSM_CHANNEL_TEST=/opt/ml/input/data/test\u001b[0m\n", - "\u001b[34mSM_CHANNEL_TRAIN=/opt/ml/input/data/train\u001b[0m\n", - "\u001b[34mSM_HP_LEARNING-RATE=0.1\u001b[0m\n", - "\u001b[34mPYTHONPATH=/usr/local/bin:/usr/local/lib/python36.zip:/usr/local/lib/python3.6:/usr/local/lib/python3.6/lib-dynload:/usr/local/lib/python3.6/site-packages\n", - "\u001b[0m\n", - "\u001b[34mInvoking script with the following command:\n", - "\u001b[0m\n", - "\u001b[34m/usr/local/bin/python3.6 -m mnist --learning-rate 0.1\n", - "\n", - "\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [0-100]#011Speed: 48537.71 samples/sec#011accuracy=0.105248\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [100-200]#011Speed: 52232.08 samples/sec#011accuracy=0.117400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [200-300]#011Speed: 52729.16 samples/sec#011accuracy=0.112400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [300-400]#011Speed: 58271.46 samples/sec#011accuracy=0.111800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Batch [400-500]#011Speed: 51936.64 samples/sec#011accuracy=0.111900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Train-accuracy=0.132550\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Time cost=1.159\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[0] Validation-accuracy=0.350200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [0-100]#011Speed: 46740.22 samples/sec#011accuracy=0.473168\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [100-200]#011Speed: 59956.92 samples/sec#011accuracy=0.666000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [200-300]#011Speed: 59902.97 samples/sec#011accuracy=0.763500\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [300-400]#011Speed: 57584.56 samples/sec#011accuracy=0.799100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Batch [400-500]#011Speed: 59448.98 samples/sec#011accuracy=0.829800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Train-accuracy=0.727917\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Time cost=1.065\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[1] Validation-accuracy=0.859700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [0-100]#011Speed: 47147.88 samples/sec#011accuracy=0.857723\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [100-200]#011Speed: 48038.83 samples/sec#011accuracy=0.868600\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [200-300]#011Speed: 51587.54 samples/sec#011accuracy=0.889400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [300-400]#011Speed: 54230.68 samples/sec#011accuracy=0.899400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Batch [400-500]#011Speed: 49632.21 samples/sec#011accuracy=0.905200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Train-accuracy=0.888900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Time cost=1.195\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[2] Validation-accuracy=0.920000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [0-100]#011Speed: 39163.75 samples/sec#011accuracy=0.920594\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [100-200]#011Speed: 55325.51 samples/sec#011accuracy=0.920200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [200-300]#011Speed: 58630.19 samples/sec#011accuracy=0.928000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [300-400]#011Speed: 57232.00 samples/sec#011accuracy=0.929900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Batch [400-500]#011Speed: 58584.25 samples/sec#011accuracy=0.930200\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Train-accuracy=0.927933\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Time cost=1.152\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[3] Validation-accuracy=0.937500\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [0-100]#011Speed: 47603.31 samples/sec#011accuracy=0.943762\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [100-200]#011Speed: 54678.19 samples/sec#011accuracy=0.944800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [200-300]#011Speed: 55427.86 samples/sec#011accuracy=0.943600\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [300-400]#011Speed: 52224.08 samples/sec#011accuracy=0.947500\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Batch [400-500]#011Speed: 59256.14 samples/sec#011accuracy=0.949900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Train-accuracy=0.947067\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Time cost=1.113\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[4] Validation-accuracy=0.951700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [0-100]#011Speed: 48969.19 samples/sec#011accuracy=0.956238\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [100-200]#011Speed: 61169.63 samples/sec#011accuracy=0.955600\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [200-300]#011Speed: 51660.99 samples/sec#011accuracy=0.955900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [300-400]#011Speed: 50272.49 samples/sec#011accuracy=0.959100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Batch [400-500]#011Speed: 56537.68 samples/sec#011accuracy=0.959400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Train-accuracy=0.957833\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Time cost=1.135\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[5] Validation-accuracy=0.957800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [0-100]#011Speed: 48367.56 samples/sec#011accuracy=0.965644\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [100-200]#011Speed: 52162.12 samples/sec#011accuracy=0.964000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [200-300]#011Speed: 42420.57 samples/sec#011accuracy=0.965700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [300-400]#011Speed: 58030.24 samples/sec#011accuracy=0.963800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Batch [400-500]#011Speed: 59894.67 samples/sec#011accuracy=0.967100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Train-accuracy=0.965133\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Time cost=1.186\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[6] Validation-accuracy=0.964100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [0-100]#011Speed: 45140.09 samples/sec#011accuracy=0.971188\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [100-200]#011Speed: 52699.15 samples/sec#011accuracy=0.966600\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [200-300]#011Speed: 49742.93 samples/sec#011accuracy=0.969700\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [300-400]#011Speed: 55433.43 samples/sec#011accuracy=0.968400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Batch [400-500]#011Speed: 49421.79 samples/sec#011accuracy=0.968600\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Train-accuracy=0.969383\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Time cost=1.210\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[7] Validation-accuracy=0.965900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [0-100]#011Speed: 46661.86 samples/sec#011accuracy=0.973168\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [100-200]#011Speed: 55705.76 samples/sec#011accuracy=0.971900\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [200-300]#011Speed: 57230.98 samples/sec#011accuracy=0.974000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [300-400]#011Speed: 60181.19 samples/sec#011accuracy=0.974400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Batch [400-500]#011Speed: 59841.18 samples/sec#011accuracy=0.971400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Train-accuracy=0.973050\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Time cost=1.087\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[8] Validation-accuracy=0.969000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [0-100]#011Speed: 37346.64 samples/sec#011accuracy=0.977228\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [100-200]#011Speed: 60791.24 samples/sec#011accuracy=0.976100\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [200-300]#011Speed: 56732.68 samples/sec#011accuracy=0.975800\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [300-400]#011Speed: 56863.21 samples/sec#011accuracy=0.976400\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Batch [400-500]#011Speed: 43948.87 samples/sec#011accuracy=0.976000\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Train-accuracy=0.976433\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Time cost=1.205\u001b[0m\n", - "\u001b[34mINFO:root:Epoch[9] Validation-accuracy=0.969100\u001b[0m\n", - "\u001b[34m2020-09-18 19:14:21,054 sagemaker-containers INFO Reporting training SUCCESS\u001b[0m\n", - "\n", - "2020-09-18 19:14:32 Uploading - Uploading generated training model\n", - "2020-09-18 19:14:32 Completed - Training job completed\n", - "Training seconds: 71\n", - "Billable seconds: 71\n", - "CPU times: user 534 ms, sys: 33.9 ms, total: 567 ms\n", - "Wall time: 3min 41s\n" - ] - } - ], - "source": [ - "%%time\n", - "\n", - "train_data_location = 's3://sagemaker-sample-data-{}/mxnet/mnist/train'.format(region)\n", - "test_data_location = 's3://sagemaker-sample-data-{}/mxnet/mnist/test'.format(region)\n", - "\n", - "mnist_estimator.fit({'train': train_data_location, 'test': test_data_location})" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "list_response = list(artifact.Artifact.list(source_uri=train_data_location, sagemaker_boto_client=sagemaker_client))\n", - "if len(list_response):\n", - " train_data_location_artifact_arn = list_response[0].artifact_arn\n", - "else:\n", - " train_data_location_artifact_arn = artifact.Artifact.create(\n", - " artifact_name='train-data',\n", - " artifact_type='TrainingData',\n", - " source_uri=train_data_location,\n", - " sagemaker_boto_client=sagemaker_client,\n", - " ).artifact_arn\n", - "\n", - "list_response = list(artifact.Artifact.list(source_uri=test_data_location, sagemaker_boto_client=sagemaker_client))\n", - "if len(list_response):\n", - " test_data_location_artifact_arn = list_response[0].artifact_arn\n", - "else:\n", - " test_data_location_artifact_arn = artifact.Artifact.create(\n", - " artifact_name='test-data',\n", - " artifact_type='TestData',\n", - " source_uri=test_data_location,\n", - " sagemaker_boto_client=sagemaker_client,\n", - " ).artifact_arn" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# associate the artifacts\n", - "\n", - "training_job_name = mnist_estimator.latest_training_job.job_name\n", - "\n", - "trial_component = sagemaker_client.describe_trial_component(TrialComponentName=training_job_name + '-aws-training-job')\n", - "trial_component_arn=trial_component['TrialComponentArn']\n", - "\n", - "input_artifacts = [code_artifact_arn, train_data_location_artifact_arn, test_data_location_artifact_arn]\n", - "for artifact_arn in input_artifacts:\n", - " try:\n", - " association.Association.create(\n", - " source_arn=artifact_arn,\n", - " destination_arn=trial_component_arn,\n", - " association_type='ContributedTo',\n", - " sagemaker_boto_client=sagemaker_client,\n", - " )\n", - " except:\n", - " logging.info('association between {} and {} already exists', artifact_arn, trial_component_arn)\n", - "\n", - "output_artifacts = [model_location_artifact_arn]\n", - "for artifact_arn in output_artifacts:\n", - " try:\n", - " association.Association.create(\n", - " source_arn=trial_component_arn,\n", - " destination_arn=artifact_arn,\n", - " association_type='Produced',\n", - " sagemaker_boto_client=sagemaker_client,\n", - " )\n", - " except:\n", - " logging.info('association between {} and {} already exists', artifact_arn, trial_component_arn)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating an inference Endpoint\n", - "\n", - "After training, we use the ``MXNet estimator`` object to build and deploy an ``MXNetPredictor``. This creates a Sagemaker **Endpoint** -- a hosted prediction service that we can use to perform inference. \n", - "\n", - "The arguments to the ``deploy`` function allow us to set the number and type of instances that will be used for the Endpoint. These do not need to be the same as the values we used for the training job. For example, you can train a model on a set of GPU-based instances, and then deploy the Endpoint to a fleet of CPU-based instances. Here we will deploy the model to a single ``ml.m4.xlarge`` instance." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-------------!CPU times: user 368 ms, sys: 12.5 ms, total: 380 ms\n", - "Wall time: 6min 32s\n" - ] - } - ], - "source": [ - "%%time\n", - "\n", - "predictor = mnist_estimator.deploy(initial_instance_count=1,\n", - " instance_type='ml.m4.xlarge')" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Association(sagemaker_boto_client=,source_arn='arn:aws:sagemaker:us-east-2:707662012936:experiment-trial-component/mxnet-training-2020-09-18-19-07-09-802-aws-training-job',destination_arn='arn:aws:sagemaker:us-east-2:707662012936:context/mxnet-training-2020-09-18-19-21-54-609',association_type=None,response_metadata={'RequestId': 'd6391fc9-edd2-43b9-8338-d996287f1140', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd6391fc9-edd2-43b9-8338-d996287f1140', 'content-type': 'application/x-amz-json-1.1', 'content-length': '246', 'date': 'Fri, 18 Sep 2020 19:28:54 GMT'}, 'RetryAttempts': 0})" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sagemaker.lineage import context\n", - "\n", - "endpoint = sagemaker_client.describe_endpoint(EndpointName=predictor.endpoint_name)\n", - "endpoint_arn = endpoint['EndpointArn']\n", - "\n", - "list_response = list(context.Context.list(source_uri=endpoint_arn, sagemaker_boto_client=sagemaker_client))\n", - "if len(list_response):\n", - " endpoint_context_arn = list_response[0].context_arn\n", - "else:\n", - " endpoint_context_arn = context.Context.create(\n", - " context_name=predictor.endpoint_name,\n", - " context_type='Endpoint',\n", - " source_uri=endpoint_arn,\n", - " sagemaker_boto_client=sagemaker_client, \n", - " ).context_arn\n", - "\n", - "association.Association.create(\n", - " source_arn=trial_component_arn,\n", - " destination_arn=endpoint_context_arn,\n", - " sagemaker_boto_client=sagemaker_client,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "predictor.delete_endpoint()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%run lineage_visualizer.py\n", - "\n", - "import lineage_visualizer\n", - "\n", - "vis = LineageVisualizer(sagemaker_client)\n", - "vis.both(endpoint_context_arn)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "file_name = vis.write_yaml()\n", - "f = open(file_name, \"r\")\n", - "print(f.read())" - ] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,md" - }, - "kernelspec": { - "display_name": "conda_mxnet_p36", - "language": "python", - "name": "conda_mxnet_p36" - }, - "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.10" - }, - "notice": "Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with the License. A copy of the License is located at http://aws.amazon.com/apache2.0/ or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." - }, - "nbformat": 4, - "nbformat_minor": 4 -} \ No newline at end of file diff --git a/lineage/lineage_visualizer.py b/lineage/lineage_visualizer.py deleted file mode 100644 index 4b318e1a5f..0000000000 --- a/lineage/lineage_visualizer.py +++ /dev/null @@ -1,97 +0,0 @@ -from __future__ import division -import matplotlib as mpl -import matplotlib.pyplot as plt -import networkx as nx -from sagemaker.lineage.context import Context -from sagemaker.lineage.artifact import Artifact -from sagemaker.lineage.association import Association -from sagemaker.lineage.action import Action -from datetime import datetime - - -class LineageVisualizer(object): - def __init__(self, sagemaker_client): - self._sm_client = sagemaker_client - - def upstream(self, start_arn): - edges = self._get_upstream_lineage(start_arn) - self._plot_lineage(edges) - - def _get_upstream_lineage(self, start_arn): - upstream_associations = Association.list( - destination_arn=start_arn, sagemaker_boto_client=self._sm_client - ) - unexplored_associations = list(upstream_associations) - edges = [] - while unexplored_associations: - association = unexplored_associations.pop() - src = association.source_arn - dest = association.destination_arn - edges.append(association) - upstream_associations = Association.list( - destination_arn=src, sagemaker_boto_client=self._sm_client - ) - unexplored_associations.extend(upstream_associations) - return edges - - def downstream(self, start_arn): - edges = self._get_downstream_lineage(start_arn) - self._plot_lineage(edges) - - def _get_downstream_lineage(self, start_arn): - downstream_associations = Association.list( - source_arn=start_arn, sagemaker_boto_client=self._sm_client - ) - unexplored_associations = list(downstream_associations) - edges = [] - while unexplored_associations: - association = unexplored_associations.pop() - src = association.source_arn - dest = association.destination_arn - edges.append(association) - downstream_associations = Association.list( - destination_arn=src, sagemaker_boto_client=self._sm_client - ) - unexplored_associations.extend(downstream_associations) - return edges - - def both(self, start_arn): - upstream = self._get_upstream_lineage(start_arn) - downstream = self._get_downstream_lineage(start_arn) - all = [] - if upstream: - all.extend(upstream) - if downstream: - all.extend(downstream) - self._plot_lineage(all) - - def write_yaml(self): - file_name = f"graph_{datetime.now().timestamp()}.yaml" - nx.write_yaml(self._g, file_name) - return file_name - - def _plot_lineage(self, edges): - G = nx.DiGraph() - - for edge in edges: - source_name = edge.source_arn.split("/")[1] - source_name = f"{edge.source_type}-({source_name})" - G.add_node(source_name) - dest_name = edge.destination_arn.split("/")[1] - dest_name = f"{edge.desination_type}-({dest_name})" - G.add_node(dest_name) - G.add_edge(source_name, dest_name) - self._g = G - M = G.number_of_edges() - - pos = nx.layout.spring_layout(G) - nodes = nx.draw_networkx_nodes(G, pos, node_size=500) - nx.draw_networkx_labels(G, pos) - edges = nx.draw_networkx_edges(G, pos, arrowstyle="->", arrowsize=30, width=1, arrows=True) - - ax = plt.gca() - ax.patch.set_facecolor("white") - ax.figure.set_size_inches(10, 10) - # fig= plt.figure(figsize=(10,10)) - plt.title("foo") - plt.show() diff --git a/lineage/mnist.py b/lineage/mnist.py deleted file mode 100644 index d09aed57d8..0000000000 --- a/lineage/mnist.py +++ /dev/null @@ -1,183 +0,0 @@ -import argparse -import gzip -import json -import logging -import os -import struct - -import mxnet as mx -import numpy as np - - -def load_data(path): - with gzip.open(find_file(path, "labels.gz")) as flbl: - struct.unpack(">II", flbl.read(8)) - labels = np.fromstring(flbl.read(), dtype=np.int8) - with gzip.open(find_file(path, "images.gz")) as fimg: - _, _, rows, cols = struct.unpack(">IIII", fimg.read(16)) - images = np.fromstring(fimg.read(), dtype=np.uint8).reshape(len(labels), rows, cols) - images = images.reshape(images.shape[0], 1, 28, 28).astype(np.float32) / 255 - return labels, images - - -def find_file(root_path, file_name): - for root, dirs, files in os.walk(root_path): - if file_name in files: - return os.path.join(root, file_name) - - -def build_graph(): - data = mx.sym.var("data") - data = mx.sym.flatten(data=data) - fc1 = mx.sym.FullyConnected(data=data, num_hidden=128) - act1 = mx.sym.Activation(data=fc1, act_type="relu") - fc2 = mx.sym.FullyConnected(data=act1, num_hidden=64) - act2 = mx.sym.Activation(data=fc2, act_type="relu") - fc3 = mx.sym.FullyConnected(data=act2, num_hidden=10) - return mx.sym.SoftmaxOutput(data=fc3, name="softmax") - - -def get_training_context(num_gpus): - if num_gpus: - return [mx.gpu(i) for i in range(num_gpus)] - else: - return mx.cpu() - - -def train( - batch_size, - epochs, - learning_rate, - num_gpus, - training_channel, - testing_channel, - hosts, - current_host, - model_dir, -): - checkpoints_dir = "/opt/ml/checkpoints" - checkpoints_enabled = os.path.exists(checkpoints_dir) - - (train_labels, train_images) = load_data(training_channel) - (test_labels, test_images) = load_data(testing_channel) - # Data parallel training - shard the data so each host - # only trains on a subset of the total data. - shard_size = len(train_images) // len(hosts) - for i, host in enumerate(hosts): - if host == current_host: - start = shard_size * i - end = start + shard_size - break - - train_iter = mx.io.NDArrayIter( - train_images[start:end], train_labels[start:end], batch_size, shuffle=True - ) - val_iter = mx.io.NDArrayIter(test_images, test_labels, batch_size) - - logging.getLogger().setLevel(logging.DEBUG) - - kvstore = "local" if len(hosts) == 1 else "dist_sync" - - mlp_model = mx.mod.Module(symbol=build_graph(), context=get_training_context(num_gpus)) - - checkpoint_callback = None - if checkpoints_enabled: - # Create a checkpoint callback that checkpoints the model params and - # the optimizer state at the given path after every epoch. - checkpoint_callback = mx.callback.module_checkpoint( - mlp_model, os.path.join(checkpoints_dir, "mnist"), period=1, save_optimizer_states=True - ) - mlp_model.fit( - train_iter, - eval_data=val_iter, - kvstore=kvstore, - optimizer="sgd", - optimizer_params={"learning_rate": learning_rate}, - eval_metric="acc", - epoch_end_callback=checkpoint_callback, - batch_end_callback=mx.callback.Speedometer(batch_size, 100), - num_epoch=epochs, - ) - - if current_host == hosts[0]: - save(model_dir, mlp_model) - - -def save(model_dir, model): - model.symbol.save(os.path.join(model_dir, "model-symbol.json")) - model.save_params(os.path.join(model_dir, "model-0000.params")) - - signature = [ - {"name": data_desc.name, "shape": [dim for dim in data_desc.shape]} - for data_desc in model.data_shapes - ] - with open(os.path.join(model_dir, "model-shapes.json"), "w") as f: - json.dump(signature, f) - - -def parse_args(): - parser = argparse.ArgumentParser() - - parser.add_argument("--batch-size", type=int, default=100) - parser.add_argument("--epochs", type=int, default=10) - parser.add_argument("--learning-rate", type=float, default=0.1) - - parser.add_argument("--model-dir", type=str, default=os.environ["SM_MODEL_DIR"]) - parser.add_argument("--train", type=str, default=os.environ["SM_CHANNEL_TRAIN"]) - parser.add_argument("--test", type=str, default=os.environ["SM_CHANNEL_TEST"]) - - parser.add_argument("--current-host", type=str, default=os.environ["SM_CURRENT_HOST"]) - parser.add_argument("--hosts", type=list, default=json.loads(os.environ["SM_HOSTS"])) - - return parser.parse_args() - - -### NOTE: this function cannot use MXNet -def neo_preprocess(payload, content_type): - import logging - import numpy as np - import io - - logging.info("Invoking user-defined pre-processing function") - - if content_type != "application/vnd+python.numpy+binary": - raise RuntimeError("Content type must be application/vnd+python.numpy+binary") - - f = io.BytesIO(payload) - return np.load(f) - - -### NOTE: this function cannot use MXNet -def neo_postprocess(result): - import logging - import numpy as np - import json - - logging.info("Invoking user-defined post-processing function") - - # Softmax (assumes batch size 1) - result = np.squeeze(result) - result_exp = np.exp(result - np.max(result)) - result = result_exp / np.sum(result_exp) - - response_body = json.dumps(result.tolist()) - content_type = "application/json" - - return response_body, content_type - - -if __name__ == "__main__": - args = parse_args() - num_gpus = int(os.environ["SM_NUM_GPUS"]) - - train( - args.batch_size, - args.epochs, - args.learning_rate, - num_gpus, - args.train, - args.test, - args.hosts, - args.current_host, - args.model_dir, - )