From 56d5be19916ef94db70a39a708152c02251907a2 Mon Sep 17 00:00:00 2001 From: Gili Nachum Date: Wed, 5 Oct 2022 20:02:01 +0300 Subject: [PATCH] Adding Heterogeneous Clusters example for TensorFlow and PyTorch (#3599) * initial commit * notebook fix and misspelling * add link from root readme.md * switching cifar-10 to artificial dataset for TF * adding retries to fit() * grammer fixes * remove cifar references * Removing local tf and pt execution exmaples * Add security group info for private VPC use case * Adding index.rst for heterogeneous clusters * fix PT notebook heading for rst * fix rst and notebook tables for rst * Adding programmatic kernel restart * removing programmatic kernel restart - breaks CI * Remove tables that don't render in RST --- README.md | 1 + index.rst | 2 +- sagemaker-datawrangler/readme.md | 40 + training/heterogeneous-clusters/.gitignore | 11 + training/heterogeneous-clusters/README.md | 38 + .../helloworld-example.ipynb | 467 +++++++ .../hello.world.sagemaker/source_dir/train.py | 38 + training/heterogeneous-clusters/index.rst | 49 + .../pt.grpc.sagemaker/code/dataset_feed.proto | 14 + .../code/dataset_feed_pb2.py | 47 + .../code/dataset_feed_pb2_grpc.py | 99 ++ .../pt.grpc.sagemaker/code/launcher.py | 101 ++ .../pt.grpc.sagemaker/code/requirements.txt | 2 + .../pt.grpc.sagemaker/code/train.py | 127 ++ .../pt.grpc.sagemaker/code/train_data.py | 172 +++ .../pt.grpc.sagemaker/code/train_dnn.py | 179 +++ .../hetero-pytorch-mnist.ipynb | 520 ++++++++ .../images/heterogeneous-cluster-diagram.png | Bin 0 -> 31604 bytes .../images/heterogeneous-instance-metrics.png | Bin 0 -> 55343 bytes .../images/homogeneous-cluster-diagram.png | Bin 0 -> 18353 bytes .../images/pytorch-heterogeneous-workflow.png | Bin 0 -> 64269 bytes .../heterogenenous-workload.json | 30 + .../homogenous-workload copy.json | 26 + .../code/launcher.py | 123 ++ .../code/requirements.txt | 2 + .../code/train_data.py | 68 + .../code/train_dnn.py | 153 +++ .../hetero-tensorflow-restnet50.ipynb | 1136 +++++++++++++++++ .../TensorFlow-Hetero-Instance-Metrics.png | Bin 0 -> 130144 bytes .../images/basic-heterogeneous-job.png | Bin 0 -> 30377 bytes .../images/basic-homogeneous-job.png | Bin 0 -> 18547 bytes ...heterogeneous cluster diagrams (5) (1).xml | 1 + .../heterogeneous cluster diagrams (5).xml | 1 + ...geneous-vs-heterogeneous-results-table.png | Bin 0 -> 29695 bytes ...etrics Heterogeneous cpu and gpu usage.png | Bin 0 -> 98510 bytes ...cs Heterogeneous cpu and gpu usage.png.png | Bin 0 -> 73268 bytes .../metrics homogeneous cpu and gpu usage.png | Bin 0 -> 47674 bytes .../images/tf.data.service-diagram.png | Bin 0 -> 56335 bytes .../start_job_utils.py | 37 + 39 files changed, 3483 insertions(+), 1 deletion(-) create mode 100644 training/heterogeneous-clusters/.gitignore create mode 100644 training/heterogeneous-clusters/README.md create mode 100644 training/heterogeneous-clusters/hello.world.sagemaker/helloworld-example.ipynb create mode 100644 training/heterogeneous-clusters/hello.world.sagemaker/source_dir/train.py create mode 100644 training/heterogeneous-clusters/index.rst create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed.proto create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2.py create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2_grpc.py create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/launcher.py create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/requirements.txt create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/train.py create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_data.py create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_dnn.py create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/hetero-pytorch-mnist.ipynb create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/images/heterogeneous-cluster-diagram.png create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/images/heterogeneous-instance-metrics.png create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/images/homogeneous-cluster-diagram.png create mode 100644 training/heterogeneous-clusters/pt.grpc.sagemaker/images/pytorch-heterogeneous-workflow.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/heterogenenous-workload.json create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/homogenous-workload copy.json create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/code/launcher.py create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/code/requirements.txt create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_data.py create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_dnn.py create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/hetero-tensorflow-restnet50.ipynb create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/TensorFlow-Hetero-Instance-Metrics.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/basic-heterogeneous-job.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/basic-homogeneous-job.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5) (1).xml create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5).xml create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/homogeneous-vs-heterogeneous-results-table.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/metrics Heterogeneous cpu and gpu usage.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/metrics Heterogeneous cpu and gpu usage.png.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/metrics homogeneous cpu and gpu usage.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/images/tf.data.service-diagram.png create mode 100644 training/heterogeneous-clusters/tf.data.service.sagemaker/start_job_utils.py diff --git a/README.md b/README.md index 25c9d52f1e..f2088a64db 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,7 @@ These examples showcase unique functionality available in Amazon SageMaker. They - [Host Multiple Models with SKLearn](advanced_functionality/multi_model_sklearn_home_value) shows how to deploy multiple models to a realtime hosted endpoint using a multi-model enabled SKLearn container. - [SageMaker Training and Inference with Script Mode](sagemaker-script-mode) shows how to use custom training and inference scripts, similar to those you would use outside of SageMaker, with SageMaker's prebuilt containers for various frameworks like Scikit-learn, PyTorch, and XGBoost. - [Host Models with NVidia Triton Server](sagemaker-triton) shows how to deploy models to a realtime hosted endpoint using [Triton](https://developer.nvidia.com/nvidia-triton-inference-server) as the model inference server. +- [Heterogenous Clusters Training in TensorFlow or PyTorch ](training/heterogeneous-clusters/README.md) shows how to train using TensorFlow tf.data.service (distributed data pipeline) or Pytorch (with gRPC) on top of Amazon SageMaker Heterogenous clusters to overcome CPU bottlenecks by including different instance types (GPU/CPU) in the same training job. ### Amazon SageMaker Neo Compilation Jobs diff --git a/index.rst b/index.rst index e153475283..53ddf2b0de 100644 --- a/index.rst +++ b/index.rst @@ -185,7 +185,7 @@ More examples sagemaker-script-mode/index training/bring_your_own_container training/management - + training/heterogeneous-clusters/index .. toctree:: :maxdepth: 1 diff --git a/sagemaker-datawrangler/readme.md b/sagemaker-datawrangler/readme.md index 8b13789179..d6c963f90d 100644 --- a/sagemaker-datawrangler/readme.md +++ b/sagemaker-datawrangler/readme.md @@ -1 +1,41 @@ +![Amazon SageMaker Data Wrangler](https://github.com/aws/amazon-sagemaker-examples/raw/main/_static/sagemaker-banner.png) + +# Amazon SageMaker Data Wrangler Examples + +Example flows that demonstrate how to aggregate and prepare data for Machine Learning using Amazon SageMaker Data Wrangler. + +## :books: Background + +[Amazon SageMaker Data Wrangler](https://aws.amazon.com/sagemaker/data-wrangler/) reduces the time it takes to aggregate and prepare data for ML. From a single interface in SageMaker Studio, you can import data from Amazon S3, Amazon Athena, Amazon Redshift, AWS Lake Formation, and Amazon SageMaker Feature Store, and in just a few clicks SageMaker Data Wrangler will automatically load, aggregate, and display the raw data. It will then make conversion recommendations based on the source data, transform the data into new features, validate the features, and provide visualizations with recommendations on how to remove common sources of error such as incorrect labels. Once your data is prepared, you can build fully automated ML workflows with Amazon SageMaker Pipelines or import that data into Amazon SageMaker Feature Store. + + + +The [SageMaker example notebooks](https://sagemaker-examples.readthedocs.io/en/latest/) are Jupyter notebooks that demonstrate the usage of Amazon SageMaker. + +## :hammer_and_wrench: Setup + +Amazon SageMaker Data Wrangler is a feature in Amazon SageMaker Studio. Use this section to learn how to access and get started using Data Wrangler. Do the following: + +* Complete each step in [Prerequisites](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-getting-started.html#data-wrangler-getting-started-prerequisite). + +* Follow the procedure in [Access Data Wrangler](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-getting-started.html#data-wrangler-getting-started-access) to start using Data Wrangler. + + + + +## :notebook: Examples + +### **[Tabular DataFlow](tabular-dataflow/README.md)** + +This example provide quick walkthrough of how to aggregate and prepare data for Machine Learning using Amazon SageMaker Data Wrangler for Tabular dataset. + +### **[Timeseries DataFlow](timeseries-dataflow/readme.md)** + +This example provide quick walkthrough of how to aggregate and prepare data for Machine Learning using Amazon SageMaker Data Wrangler for Timeseries dataset. + +### **[Joined DataFlow](joined-dataflow/readme.md)** + +This example provide quick walkthrough of how to aggregate and prepare data for Machine Learning using Amazon SageMaker Data Wrangler for Joined dataset. + + diff --git a/training/heterogeneous-clusters/.gitignore b/training/heterogeneous-clusters/.gitignore new file mode 100644 index 0000000000..f6a49187cf --- /dev/null +++ b/training/heterogeneous-clusters/.gitignore @@ -0,0 +1,11 @@ +.venv/ +.DS_Store +data/MyMNIST +pt.grpc.local/data/* +pt.grpc.local/__pycache__ +pt.grpc.local/profile +tf.data.service.sagemaker/data +tf.data.service.sagemaker/code/__pycache__ +tf.data.service.local/data +pt.grpc.sagemaker/data +tf.data.service.sagemaker/__pycache__ diff --git a/training/heterogeneous-clusters/README.md b/training/heterogeneous-clusters/README.md new file mode 100644 index 0000000000..8fc73d4764 --- /dev/null +++ b/training/heterogeneous-clusters/README.md @@ -0,0 +1,38 @@ +# Heterogeneous Clusters +SageMaker Training Heterogeneous Clusters allows you to run one training job +that includes instances of different types. For example a GPU instance like +ml.p4d.24xlarge and a CPU instance like c5.18xlarge. + +One primary use case is offloading CPU intensive tasks like image +pre-processing (data augmentation) from the GPU instance to a dedicate +CPU instance, so you can fully utilize the expensive GPUs, and arrive at +an improved time and cost to train. + +You'll find TensorFlow (tf.data.service) and PyTorch (a customer gRPC based distributed data loading) examples on how to utilize Heterogeneous clusters in your training jobs. You can reuse these examples when enabling your own training workload to use heterogeneous clusters. + +![Hetero job diagram](tf.data.service.sagemaker/images/basic-heterogeneous-job.png) + +## Examples: + +### TensorFlow examples +- [**TensorFlow's tf.data.service running locally**](tf.data.service.local/README.md): +This example runs the tf.data.service locally on your machine (not on SageMaker). It's helpful in order to get familiar with tf.data.service and to run small scale quick experimentation. + +- [**TensorFlow's tf.data.service with Amazon SageMaker Training Heterogeneous Clusters**](tf.data.service.sagemaker/hetero-tensorflow-restnet50.ipynb): +This TensorFlow example runs a Homogenous trainign job and compares its results with a Heterogeneous Clusters SageMaker training job that runs with two instance groups: + - `data_group` - this group has two ml.c5.18xlarge instances to which data augmentation is offloaded. + - `dnn_group` - Running one ml.p4d.24xlarge instance (8GPUs) in a horovod/MPI distribution. + +### PyTorch examples +- [**PyTorch with gRPC distributed dataloader running locally**](pt.grpc.local/README.md): +This Pytorch example runs a training job split into two processes locally on your machine (not on SageMaker). It's helpful in order to get familiar with the GRPC distributed data loader and to run small scale quick experimentation. + +- [**PyTorch with gRPC distributed dataloader Heterogeneous Clusters training job example**](pt.grpc.sagemaker/hetero-pytorch-mnist.ipynb): +This PyTorch example runs a Hetero SageMaker training job that uses gRPC to offload data augmentation to a CPU based server. + + +### Hello world example +- [**Hetero Training Job - Hello world**](hello.world.sagemaker/README.md): +This basic example run a heterogeneous training job consisting of two instance groups. Each group includes a different instance_type. +Each instance prints its instance group information and exits. +Note: This example only shows how to orchastrate the training job with instance type, for actual code to help with a distributed data loader, see the TF or PT examples below. \ No newline at end of file diff --git a/training/heterogeneous-clusters/hello.world.sagemaker/helloworld-example.ipynb b/training/heterogeneous-clusters/hello.world.sagemaker/helloworld-example.ipynb new file mode 100644 index 0000000000..e990cf22ce --- /dev/null +++ b/training/heterogeneous-clusters/hello.world.sagemaker/helloworld-example.ipynb @@ -0,0 +1,467 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Heterogeneous Cluster - a hello world training job\n", + "\n", + "This basic example on how to run a Heterogeneous Clusters training job consisting of two instance groups. Each instance group includes a different instance type. Each instance prints its environment information including its instance group and exits.\n", + "\n", + "You can retrieve environment information in either of the following ways:\n", + " - **Option 1**: Read instance group information using the convenient `sagemaker_training.environment.Environment` class.\n", + " - **Option 2**: Read instance group information from `/opt/ml/input/config/resourceconfig.json`.\n", + " \n", + " \n", + "Note: This notebook does not demonstrate offloading of data preprocessing job to data group and deep neural network training to dnn_group. We will cover those examples in [TensorFlow's tf.data.service based Amazon SageMaker Heterogeneous Clusters for training](../tf.data.service.sagemaker/hetero-tensorflow-restnet50.ipynb) and [PyTorch and gRPC distributed dataloader based Amazon SageMaker Heterogeneous Clusters for training](../pt.grpc.sagemaker/hetero-pytorch-mnist.ipynb) notebooks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### A. Setting up SageMaker Studio notebook\n", + "#### Before you start\n", + "Ensure you have selected Python 3 (_TensorFlow 2.6 Python 3.8 CPU Optimized_) image for your SageMaker Studio Notebook instance, and running on _ml.t3.medium_ instance type.\n", + "\n", + "#### Step 1 - Upgrade SageMaker SDK and dependent packages\n", + "Heterogeneous Clusters for Amazon SageMaker model training was [announced](https://aws.amazon.com/about-aws/whats-new/2022/07/announcing-heterogeneous-clusters-amazon-sagemaker-model-training) on 07/08/2022. This feature release requires you to have updated SageMaker SDK and boto3 client libraries." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: boto3 in /usr/local/lib/python3.8/site-packages (1.24.72)\n", + "Collecting boto3\n", + " Downloading boto3-1.24.83-py3-none-any.whl (132 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.5/132.5 kB 2.5 MB/s eta 0:00:00\n", + "Requirement already satisfied: botocore in /usr/local/lib/python3.8/site-packages (1.27.72)\n", + "Collecting botocore\n", + " Downloading botocore-1.27.83-py3-none-any.whl (9.2 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2/9.2 MB 42.5 MB/s eta 0:00:00\n", + "Requirement already satisfied: awscli in /usr/local/lib/python3.8/site-packages (1.25.73)\n", + "Collecting awscli\n", + " Downloading awscli-1.25.84-py3-none-any.whl (3.9 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 35.4 MB/s eta 0:00:00\n", + "Requirement already satisfied: sagemaker in /usr/local/lib/python3.8/site-packages (2.109.0)\n", + "Collecting sagemaker\n", + " Downloading sagemaker-2.110.0.tar.gz (576 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 576.0/576.0 kB 9.9 MB/s eta 0:00:00\n", + " Preparing metadata (setup.py): started\n", + " Preparing metadata (setup.py): finished with status 'done'\n", + "Requirement already satisfied: s3transfer<0.7.0,>=0.6.0 in /usr/local/lib/python3.8/site-packages (from boto3) (0.6.0)\n", + "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /usr/local/lib/python3.8/site-packages (from boto3) (0.10.0)\n", + "Requirement already satisfied: urllib3<1.27,>=1.25.4 in /usr/local/lib/python3.8/site-packages (from botocore) (1.25.11)\n", + "Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.8/site-packages (from botocore) (2.8.2)\n", + "Requirement already satisfied: colorama<0.4.5,>=0.2.5 in /usr/local/lib/python3.8/site-packages (from awscli) (0.4.3)\n", + "Requirement already satisfied: PyYAML<5.5,>=3.10 in /usr/local/lib/python3.8/site-packages (from awscli) (5.4.1)\n", + "Requirement already satisfied: docutils<0.17,>=0.10 in /usr/local/lib/python3.8/site-packages (from awscli) (0.15.2)\n", + "Requirement already satisfied: rsa<4.8,>=3.1.2 in /usr/local/lib/python3.8/site-packages (from awscli) (4.7.2)\n", + "Requirement already satisfied: attrs<22,>=20.3.0 in /usr/local/lib/python3.8/site-packages (from sagemaker) (21.2.0)\n", + "Requirement already satisfied: google-pasta in /usr/local/lib/python3.8/site-packages (from sagemaker) (0.2.0)\n", + "Requirement already satisfied: numpy<2.0,>=1.9.0 in /usr/local/lib/python3.8/site-packages (from sagemaker) (1.19.5)\n", + "Requirement already satisfied: protobuf<4.0,>=3.1 in /usr/local/lib/python3.8/site-packages (from sagemaker) (3.19.1)\n", + "Requirement already satisfied: protobuf3-to-dict<1.0,>=0.1.5 in /usr/local/lib/python3.8/site-packages (from sagemaker) (0.1.5)\n", + "Requirement already satisfied: smdebug_rulesconfig==1.0.1 in /usr/local/lib/python3.8/site-packages (from sagemaker) (1.0.1)\n", + "Requirement already satisfied: importlib-metadata<5.0,>=1.4.0 in /usr/local/lib/python3.8/site-packages (from sagemaker) (4.8.2)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.8/site-packages (from sagemaker) (21.3)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.8/site-packages (from sagemaker) (1.2.5)\n", + "Requirement already satisfied: pathos in /usr/local/lib/python3.8/site-packages (from sagemaker) (0.2.8)\n", + "Collecting schema\n", + " Downloading schema-0.7.5-py2.py3-none-any.whl (17 kB)\n", + "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.8/site-packages (from importlib-metadata<5.0,>=1.4.0->sagemaker) (3.6.0)\n", + "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.8/site-packages (from packaging>=20.0->sagemaker) (3.0.6)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.8/site-packages (from protobuf3-to-dict<1.0,>=0.1.5->sagemaker) (1.16.0)\n", + "Requirement already satisfied: pyasn1>=0.1.3 in /usr/local/lib/python3.8/site-packages (from rsa<4.8,>=3.1.2->awscli) (0.4.8)\n", + "Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.8/site-packages (from pandas->sagemaker) (2021.3)\n", + "Requirement already satisfied: dill>=0.3.4 in /usr/local/lib/python3.8/site-packages (from pathos->sagemaker) (0.3.4)\n", + "Requirement already satisfied: ppft>=1.6.6.4 in /usr/local/lib/python3.8/site-packages (from pathos->sagemaker) (1.6.6.4)\n", + "Requirement already satisfied: pox>=0.3.0 in /usr/local/lib/python3.8/site-packages (from pathos->sagemaker) (0.3.0)\n", + "Requirement already satisfied: multiprocess>=0.70.12 in /usr/local/lib/python3.8/site-packages (from pathos->sagemaker) (0.70.12.2)\n", + "Collecting contextlib2>=0.5.5\n", + " Downloading contextlib2-21.6.0-py2.py3-none-any.whl (13 kB)\n", + "Building wheels for collected packages: sagemaker\n", + " Building wheel for sagemaker (setup.py): started\n", + " Building wheel for sagemaker (setup.py): finished with status 'done'\n", + " Created wheel for sagemaker: filename=sagemaker-2.110.0-py2.py3-none-any.whl size=791666 sha256=5e4f859fef28f399b5eb60568410a22ddb2c42bbc357d0b3eae61587a14ca679\n", + " Stored in directory: /root/.cache/pip/wheels/ad/56/4f/4c5b1ed9fb3a725a634741aa293beb6fad882af965e2ccb6ae\n", + "Successfully built sagemaker\n", + "Installing collected packages: contextlib2, schema, botocore, boto3, awscli, sagemaker\n", + " Attempting uninstall: botocore\n", + " Found existing installation: botocore 1.27.72\n", + " Uninstalling botocore-1.27.72:\n", + " Successfully uninstalled botocore-1.27.72\n", + " Attempting uninstall: boto3\n", + " Found existing installation: boto3 1.24.72\n", + " Uninstalling boto3-1.24.72:\n", + " Successfully uninstalled boto3-1.24.72\n", + " Attempting uninstall: awscli\n", + " Found existing installation: awscli 1.25.73\n", + " Uninstalling awscli-1.25.73:\n", + " Successfully uninstalled awscli-1.25.73\n", + " Attempting uninstall: sagemaker\n", + " Found existing installation: sagemaker 2.109.0\n", + " Uninstalling sagemaker-2.109.0:\n", + " Successfully uninstalled sagemaker-2.109.0\n", + "Successfully installed awscli-1.25.84 boto3-1.24.83 botocore-1.27.83 contextlib2-21.6.0 sagemaker-2.110.0 schema-0.7.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\n" + ] + } + ], + "source": [ + "%%bash\n", + "python3 -m pip install --upgrade boto3 botocore awscli sagemaker" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 2 - Restart the notebook kernel " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#import IPython\n", + "#IPython.Application.instance().kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 3 - Validate SageMaker Python SDK and TensorFlow versions\n", + "Ensure the output of the cell below reflects:\n", + "\n", + "- SageMaker Python SDK version 2.98.0 or above, \n", + "- boto3 1.24 or above \n", + "- botocore 1.27 or above \n", + "- TensorFlow 2.6 or above " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Name: sagemaker\n", + "Version: 2.110.0\n", + "---\n", + "Name: boto3\n", + "Version: 1.24.83\n", + "---\n", + "Name: botocore\n", + "Version: 1.27.83\n", + "---\n", + "Name: tensorflow\n", + "Version: 2.6.2\n", + "---\n", + "Name: protobuf\n", + "Version: 3.19.1\n" + ] + } + ], + "source": [ + "!pip show sagemaker boto3 botocore tensorflow protobuf |egrep 'Name|Version|---'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Run a heterogeneous cluster training job\n", + "\n", + "#### Step 1: Set up training environment\n", + "Import the required libraries that enable you to use Heterogeneous clusters for training. In this step, you are also inheriting this notebook's IAM role and SageMaker session. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "import datetime\n", + "\n", + "import sagemaker\n", + "from sagemaker import get_execution_role\n", + "from sagemaker.tensorflow import TensorFlow\n", + "from sagemaker.instance_group import InstanceGroup\n", + "\n", + "sess = sagemaker.Session()\n", + "role = get_execution_role()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 2: Define instance groups \n", + "Here we define instance groups. Each instance group includes a different instance type." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "data_group = InstanceGroup(\"data_group\", \"ml.c5.xlarge\", 1)\n", + "dnn_group = InstanceGroup(\"dnn_group\", \"ml.m4.xlarge\", 1) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 3: Review the \"hello world\" training code" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[34mimport\u001b[39;49;00m \u001b[04m\u001b[36mjson\u001b[39;49;00m\n", + "\u001b[34mimport\u001b[39;49;00m \u001b[04m\u001b[36mos\u001b[39;49;00m\n", + "\u001b[34mimport\u001b[39;49;00m \u001b[04m\u001b[36msys\u001b[39;49;00m\n", + "\u001b[34mfrom\u001b[39;49;00m \u001b[04m\u001b[36msagemaker_training\u001b[39;49;00m \u001b[34mimport\u001b[39;49;00m environment \u001b[37m# This module is present on the DLC images, or you can install it with pip install sagemaker_training\u001b[39;49;00m\n", + "\n", + "\u001b[34mif\u001b[39;49;00m \u001b[31m__name__\u001b[39;49;00m == \u001b[33m\"\u001b[39;49;00m\u001b[33m__main__\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m:\n", + " \n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33m\"\u001b[39;49;00m\u001b[33mOption-1: Read instance group information from the sagemaker_training.environment.Environment class\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " env = environment.Environment() \n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.is_hetero: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.is_hetero\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.current_host: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.current_host\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.current_instance_type: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.current_instance_type\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.current_instance_group: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.current_instance_group\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.current_instance_group_hosts: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.current_instance_group_hosts\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.instance_groups: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.instance_groups\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.instance_groups_dict: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.instance_groups_dict\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.distribution_hosts: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.distribution_hosts\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.distribution_instance_groups: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00menv.distribution_instance_groups\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \n", + "\n", + " file_path = \u001b[33m'\u001b[39;49;00m\u001b[33m/opt/ml/input/config/resourceconfig.json\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33m\"\u001b[39;49;00m\u001b[33mOption-2: Read instance group information from \u001b[39;49;00m\u001b[33m{file_path}\u001b[39;49;00m\u001b[33m.\u001b[39;49;00m\u001b[33m\\\u001b[39;49;00m\n", + "\u001b[33m You\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m\u001b[33mll need to parse the json yourself. This doesn\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m\u001b[33mt require an additional library.\u001b[39;49;00m\u001b[33m\\n\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \n", + " \u001b[34mwith\u001b[39;49;00m \u001b[36mopen\u001b[39;49;00m(file_path, \u001b[33m'\u001b[39;49;00m\u001b[33mr\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m) \u001b[34mas\u001b[39;49;00m f:\n", + " config = json.load(f)\n", + "\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m\u001b[33m{\u001b[39;49;00mfile_path\u001b[33m}\u001b[39;49;00m\u001b[33m dump = \u001b[39;49;00m\u001b[33m{\u001b[39;49;00mjson.dumps(config, indent=\u001b[34m4\u001b[39;49;00m, sort_keys=\u001b[34mTrue\u001b[39;49;00m)\u001b[33m}\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m)\n", + " \n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.is_hetero: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m\u001b[33minstance_groups\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m \u001b[35min\u001b[39;49;00m config\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33mcurrent_host=\u001b[39;49;00m\u001b[33m{\u001b[39;49;00mconfig[\u001b[33m'\u001b[39;49;00m\u001b[33mcurrent_host\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m]\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33mcurrent_instance_type=\u001b[39;49;00m\u001b[33m{\u001b[39;49;00mconfig[\u001b[33m'\u001b[39;49;00m\u001b[33mcurrent_instance_type\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m]\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.current_instance_group: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00mconfig[\u001b[33m'\u001b[39;49;00m\u001b[33mcurrent_group_name\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m]\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.current_instance_group_hosts: TODO\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.instance_groups: TODO\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.instance_groups_dict: \u001b[39;49;00m\u001b[33m{\u001b[39;49;00mconfig[\u001b[33m'\u001b[39;49;00m\u001b[33minstance_groups\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m]\u001b[33m}\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.distribution_hosts: TODO\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n", + " \u001b[36mprint\u001b[39;49;00m(\u001b[33mf\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33menv.distribution_instance_groups: TODO\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m)\n" + ] + } + ], + "source": [ + "!pygmentize source_dir/train.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 4: Configure the Estimator\n", + "In order to use SageMaker to fit our algorithm, we'll create an `Estimator` that defines how to use the container to train. This includes the configuration we need to invoke SageMaker training." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "estimator = TensorFlow(\n", + " entry_point='train.py',\n", + " source_dir='./source_dir',\n", + " #instance_type='ml.m4.xlarge',\n", + " #instance_count=1,\n", + " instance_groups = [data_group, dnn_group,],\n", + " framework_version='2.9.1',\n", + " py_version='py39',\n", + " role=role,\n", + " volume_size=10,\n", + " max_run=3600,\n", + " disable_profiler=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 5: Submit the training job\n", + "Here you are submitting the heterogeneous cluster training job. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-09-30 17:23:58 Starting - Starting the training job...\n", + "2022-09-30 17:24:26 Starting - Preparing the instances for training.........\n", + "2022-09-30 17:25:56 Downloading - Downloading input data...\n", + "2022-09-30 17:26:22 Training - Downloading the training image...............\n", + "2022-09-30 17:28:53 Training - Training image download completed. Training in progress....\n", + "2022-09-30 17:29:24 Uploading - Uploading generated training model\n", + "2022-09-30 17:29:24 Completed - Training job completed\n", + "..Training seconds: 0\n", + "Billable seconds: 0\n" + ] + } + ], + "source": [ + "estimator.fit(\n", + " job_name='hello-world-heterogenous' + \n", + " '-' + datetime.datetime.utcnow().strftime(\"%Y%m%dT%H%M%SZ\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 6: Review the logs for environment information\n", + "\n", + "Wait for the training job to finish, and review its logs in the AWS Console (click on **View logs** from the **Training Jobs** node in **Amazon SageMaker Console**) You'll find two logs: Algo1, Algo2. Examine the printouts on each node on how to retrieve instance group environment information. An example is shown here:\n", + "\n", + "```\n", + "Option-1: Read instance group information from the sagemaker_training.environment.Environment class\n", + "env.is_hetero: True\n", + "env.current_host: algo-1\n", + "env.current_instance_type: ml.c5.xlarge\n", + "env.current_instance_group: data_group\n", + "env.current_instance_group_hosts: ['algo-1']\n", + "env.instance_groups: ['data_group', 'dnn_group']\n", + "\n", + "Option-2: Read instance group information from {file_path}. You'll need to parse the json yourself. This doesn't require an additional library.\n", + "/opt/ml/input/config/resourceconfig.json dump = {\n", + " \"current_group_name\": \"data_group\",\n", + " \"current_host\": \"algo-1\",\n", + " \"current_instance_type\": \"ml.c5.xlarge\",\n", + " \"hosts\": [\n", + " \"algo-1\",\n", + " \"algo-2\"\n", + " ],\n", + " \"instance_groups\": [\n", + " {\n", + " \"hosts\": [\n", + " \"algo-1\"\n", + " ],\n", + " \"instance_group_name\": \"data_group\",\n", + " \"instance_type\": \"ml.c5.xlarge\"\n", + " },\n", + " {\n", + " \"hosts\": [\n", + " \"algo-2\"\n", + " ],\n", + " \"instance_group_name\": \"dnn_group\",\n", + " \"instance_type\": \"ml.m4.xlarge\"\n", + " }\n", + " ],\n", + " \"network_interface_name\": \"eth0\"\n", + "}\n", + "env.is_hetero: True\n", + "current_host=algo-1\n", + "current_instance_type=ml.c5.xlarge\n", + "env.current_instance_group: data_group\n", + "env.current_instance_group_hosts: TODO\n", + "env.instance_groups: TODO\n", + "env.instance_groups_dict: [{'instance_group_name': 'data_group', 'instance_type': 'ml.c5.xlarge', 'hosts': ['algo-1']}, {'instance_group_name': 'dnn_group', 'instance_type': 'ml.m4.xlarge', 'hosts': ['algo-2']}]\n", + "env.distribution_hosts: TODO\n", + "env.distribution_instance_groups: TODO\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Next steps\n", + "\n", + "In this notebook, we demonstrated how to retrieve the environment information, and differentiate which instance group an instance belongs to. Based on this, you can build logic to offload data processing tasks in your training job to a dedicated instance group. To understand how that can be done with a real-world example, we suggest going through the following notebook examples: \n", + "\n", + "- [TensorFlow's tf.data.service based Amazon SageMaker Heterogeneous Clusters for training](../tf.data.service.sagemaker/hetero-tensorflow-restnet50.ipynb)\n", + "- [PyTorch and gRPC distributed dataloader based Amazon SageMaker Heterogeneous Clusters for training](../pt.grpc.sagemaker/hetero-pytorch-mnist.ipynb)" + ] + } + ], + "metadata": { + "instance_type": "ml.t3.medium", + "kernelspec": { + "display_name": "Python 3.9.7 ('.venv': venv)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + }, + "vscode": { + "interpreter": { + "hash": "77c0de85c2cb739aa5100af7b92fb9d2075368f0e653f4148499a56c989df5f7" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/training/heterogeneous-clusters/hello.world.sagemaker/source_dir/train.py b/training/heterogeneous-clusters/hello.world.sagemaker/source_dir/train.py new file mode 100644 index 0000000000..1884e20fab --- /dev/null +++ b/training/heterogeneous-clusters/hello.world.sagemaker/source_dir/train.py @@ -0,0 +1,38 @@ +import json +import os +import sys +from sagemaker_training import environment # This module is present on the DLC images, or you can install it with pip install sagemaker_training + +if __name__ == "__main__": + + print("Option-1: Read instance group information from the sagemaker_training.environment.Environment class") + env = environment.Environment() + print(f"env.is_hetero: {env.is_hetero}") + print(f"env.current_host: {env.current_host}") + print(f"env.current_instance_type: {env.current_instance_type}") + print(f"env.current_instance_group: {env.current_instance_group}") + print(f"env.current_instance_group_hosts: {env.current_instance_group_hosts}") + print(f"env.instance_groups: {env.instance_groups}") + print(f"env.instance_groups_dict: {env.instance_groups_dict}") + print(f"env.distribution_hosts: {env.distribution_hosts}") + print(f"env.distribution_instance_groups: {env.distribution_instance_groups}") + + + file_path = '/opt/ml/input/config/resourceconfig.json' + print("Option-2: Read instance group information from {file_path}.\ + You'll need to parse the json yourself. This doesn't require an additional library.\n") + + with open(file_path, 'r') as f: + config = json.load(f) + + print(f'{file_path} dump = {json.dumps(config, indent=4, sort_keys=True)}') + + print(f"env.is_hetero: {'instance_groups' in config}") + print(f"current_host={config['current_host']}") + print(f"current_instance_type={config['current_instance_type']}") + print(f"env.current_instance_group: {config['current_group_name']}") + print(f"env.current_instance_group_hosts: TODO") + print(f"env.instance_groups: TODO") + print(f"env.instance_groups_dict: {config['instance_groups']}") + print(f"env.distribution_hosts: TODO") + print(f"env.distribution_instance_groups: TODO") diff --git a/training/heterogeneous-clusters/index.rst b/training/heterogeneous-clusters/index.rst new file mode 100644 index 0000000000..55b3125889 --- /dev/null +++ b/training/heterogeneous-clusters/index.rst @@ -0,0 +1,49 @@ +#################### +Heterogeneous Clusters +#################### + +SageMaker Training Heterogeneous Clusters allows you to run one training job +that includes instances of different types. For example a GPU instance like +ml.p4d.24xlarge and a CPU instance like c5.18xlarge. + +One primary use case is offloading CPU intensive tasks like image +pre-processing (data augmentation) from the GPU instance to a dedicate +CPU instance, so you can fully utilize the expensive GPUs, and arrive at +an improved time and cost to train. + +.. admonition:: More resources: + + - `SageMaker heterogeneous cluster developer guide `_ + + +See the following example notebooks: + +Hello World +==================================== +This minimal example launches a Heterogeneous cluster training job, print environment information, and exit. + +.. toctree:: + :maxdepth: 1 + + hello.world.sagemaker/helloworld-example + + +TensorFlow +==================================== +This example is a reusable implementation of Heterogeneous cluster with TensorFlow's tf.data.service + +.. toctree:: + :maxdepth: 1 + + tf.data.service.sagemaker/hetero-tensorflow-restnet50 + + +PyTorch +==================================== +This example is a reusable implementation of Heterogeneous cluster with gRPC based data loader + +.. toctree:: + :maxdepth: 1 + + pt.grpc.sagemaker/hetero-pytorch-mnist + diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed.proto b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed.proto new file mode 100644 index 0000000000..94de2cd212 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +service DatasetFeed { + rpc get_examples(Dummy) returns (stream Example) {} + rpc shutdown(Dummy) returns (Dummy) {} +} + +message Dummy { +} + +message Example { + bytes image = 1; + bytes label = 2; +} \ No newline at end of file diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2.py b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2.py new file mode 100644 index 0000000000..78575b8888 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: dataset_feed.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12\x64\x61taset_feed.proto\"\x07\n\x05\x44ummy\"\'\n\x07\x45xample\x12\r\n\x05image\x18\x01 \x01(\x0c\x12\r\n\x05label\x18\x02 \x01(\x0c\x32Q\n\x0b\x44\x61tasetFeed\x12$\n\x0cget_examples\x12\x06.Dummy\x1a\x08.Example\"\x00\x30\x01\x12\x1c\n\x08shutdown\x12\x06.Dummy\x1a\x06.Dummy\"\x00\x62\x06proto3') + + + +_DUMMY = DESCRIPTOR.message_types_by_name['Dummy'] +_EXAMPLE = DESCRIPTOR.message_types_by_name['Example'] +Dummy = _reflection.GeneratedProtocolMessageType('Dummy', (_message.Message,), { + 'DESCRIPTOR' : _DUMMY, + '__module__' : 'dataset_feed_pb2' + # @@protoc_insertion_point(class_scope:Dummy) + }) +_sym_db.RegisterMessage(Dummy) + +Example = _reflection.GeneratedProtocolMessageType('Example', (_message.Message,), { + 'DESCRIPTOR' : _EXAMPLE, + '__module__' : 'dataset_feed_pb2' + # @@protoc_insertion_point(class_scope:Example) + }) +_sym_db.RegisterMessage(Example) + +_DATASETFEED = DESCRIPTOR.services_by_name['DatasetFeed'] +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + _DUMMY._serialized_start=22 + _DUMMY._serialized_end=29 + _EXAMPLE._serialized_start=31 + _EXAMPLE._serialized_end=70 + _DATASETFEED._serialized_start=72 + _DATASETFEED._serialized_end=153 +# @@protoc_insertion_point(module_scope) diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2_grpc.py b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2_grpc.py new file mode 100644 index 0000000000..b37fe7aad6 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/dataset_feed_pb2_grpc.py @@ -0,0 +1,99 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +import dataset_feed_pb2 as dataset__feed__pb2 + + +class DatasetFeedStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.get_examples = channel.unary_stream( + '/DatasetFeed/get_examples', + request_serializer=dataset__feed__pb2.Dummy.SerializeToString, + response_deserializer=dataset__feed__pb2.Example.FromString, + ) + self.shutdown = channel.unary_unary( + '/DatasetFeed/shutdown', + request_serializer=dataset__feed__pb2.Dummy.SerializeToString, + response_deserializer=dataset__feed__pb2.Dummy.FromString, + ) + + +class DatasetFeedServicer(object): + """Missing associated documentation comment in .proto file.""" + + def get_examples(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def shutdown(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_DatasetFeedServicer_to_server(servicer, server): + rpc_method_handlers = { + 'get_examples': grpc.unary_stream_rpc_method_handler( + servicer.get_examples, + request_deserializer=dataset__feed__pb2.Dummy.FromString, + response_serializer=dataset__feed__pb2.Example.SerializeToString, + ), + 'shutdown': grpc.unary_unary_rpc_method_handler( + servicer.shutdown, + request_deserializer=dataset__feed__pb2.Dummy.FromString, + response_serializer=dataset__feed__pb2.Dummy.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'DatasetFeed', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class DatasetFeed(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def get_examples(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream(request, target, '/DatasetFeed/get_examples', + dataset__feed__pb2.Dummy.SerializeToString, + dataset__feed__pb2.Example.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def shutdown(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/DatasetFeed/shutdown', + dataset__feed__pb2.Dummy.SerializeToString, + dataset__feed__pb2.Dummy.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/launcher.py b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/launcher.py new file mode 100644 index 0000000000..371663f461 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/launcher.py @@ -0,0 +1,101 @@ +import sys +import time +from typing import Optional + +# instance group names +DATA_GROUP = 'data_group' +DNN_GROUP = 'dnn_group' + +def start_child_process(name : str, additional_args=[]) -> int: + import subprocess + params = ["python", f"./{name}"] + sys.argv[1:] + additional_args + print(f'Opening process: {params}') + p = subprocess.run(params) + print(f'Process {name} closed with returncode={p.returncode}') + if p.returncode == -15 or p.returncode == -9: + print(f'Received SIGTERM|SIGKILL which is normal termination for pytorch data service to avoid hanging process') + return 0 + return p.returncode + + +def start_data_group(dispatcher_host : str) -> int: + return start_child_process('train_data.py', ["--dispatcher_host", dispatcher_host]) + + +def start_dnn_group(dispatcher_host : Optional[str]) -> int: + additional_args = [] if dispatcher_host is None else ["--dispatcher_host", dispatcher_host] + return start_child_process('train_dnn.py', additional_args) + + +def get_group_first_host(instance_groups, target_group_name): + return instance_groups[target_group_name]['hosts'][0] + +def shutdown_pt_data_service_with_retries(dispatcher_host : str): + for i in range(0,12): + try: + if i>0: + sleeptime = 10 + print(f'Will attempt {i} time to shutdown in {sleeptime} seconds') + time.sleep(sleeptime) + _shutdown_data_service(dispatcher_host) + break + except Exception as e: + print(f'Failed to shutdown dispatcher in {dispatcher_host} due to: {e}') + + +def _shutdown_data_service(dispatcher_host : str): + SHUTDOWN_PORT = 16000 + print(f'Shutting down data service dispatcher via: [{dispatcher_host}:{SHUTDOWN_PORT}]') + import socket + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect((dispatcher_host, SHUTDOWN_PORT)) + print(f'Shutdown request sent to {dispatcher_host}:{SHUTDOWN_PORT}') + + +def split_to_instance_group_train_script() -> int: + from sagemaker_training import environment + env = environment.Environment() + # try: + # from sagemaker_training import environment + # env = environment.Environment() + # except ImportError: + # class Object(object): + # pass + + # env = Object() + # env.is_hetero = True + # env.current_host = 'dummyhost' + # env.instance_groups_dict = {DATA_GROUP : {'hosts': ['dummyhost']}} + # env.current_instance_group = DNN_GROUP + # env.current_instance_type = 'dummyinstance' + + print(f'env.is_hetero={env.is_hetero}') + print(f'current_host={env.current_host}') + + if env.is_hetero: + dispatcher_host = get_group_first_host(env.instance_groups_dict, DATA_GROUP) + first_host_in_dnn_group = get_group_first_host(env.instance_groups_dict, DNN_GROUP) + print(f'current_instance_type={env.current_instance_type}') + print(f'current_group_name={env.current_instance_group}') + print(f'dispatcher_host={dispatcher_host}') + if env.current_instance_group == DATA_GROUP: + return start_data_group(dispatcher_host) + elif env.current_instance_group == DNN_GROUP: + returncode = start_dnn_group(dispatcher_host) + # first host in DNN group takes care of shutting down the dispatcher + if env.current_host == first_host_in_dnn_group: + shutdown_pt_data_service_with_retries(dispatcher_host) + return returncode + else: + raise Exception(f'Unknown instance group: {env.current_instance_group}') + + else: # not hetero + return start_dnn_group(dispatcher_host=None) + +if __name__ == "__main__": + try: + returncode = split_to_instance_group_train_script() + exit(returncode) + except Exception as e: + print(f'Failed due to {e}. exiting with returncode=1') + sys.exit(1) \ No newline at end of file diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/requirements.txt b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/requirements.txt new file mode 100644 index 0000000000..5d406f6b34 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/requirements.txt @@ -0,0 +1,2 @@ +torchvision +grpcio-tools diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train.py b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train.py new file mode 100644 index 0000000000..1963d940bf --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train.py @@ -0,0 +1,127 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.optim as optim +from torchvision import datasets, transforms +import time +import logging +import sys +import os +import json + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +logger.addHandler(logging.StreamHandler(sys.stdout)) + +class Net(nn.Module): + def __init__(self): + super(Net, self).__init__() + self.conv1 = nn.Conv2d(1, 32, 3, 1) + self.conv2 = nn.Conv2d(32, 64, 3, 1) + self.dropout1 = nn.Dropout(0.25) + self.dropout2 = nn.Dropout(0.5) + self.fc1 = nn.Linear(9216, 128) + self.fc2 = nn.Linear(128, 10) + def forward(self, x): + x = self.conv1(x) + x = F.relu(x) + x = self.conv2(x) + x = F.relu(x) + x = F.max_pool2d(x, 2) + x = self.dropout1(x) + x = torch.flatten(x, 1) + x = self.fc1(x) + x = F.relu(x) + x = self.fc2(x) + output = F.log_softmax(x, dim=1) + return output + +class MyMNIST(datasets.MNIST): + ''' + A personalized extension of the MNIST class in which we + modify the __len__ operation to return the maximum value + of int32 so that we do not run out of data. + ''' + + def __init__(self, batch_size : int, iterations : int, **kwargs): + + super().__init__(**kwargs) + self.batch_size = batch_size + self.iterations = iterations + + def __len__(self) -> int: + size = self.batch_size * self.iterations + return size + + def __getitem__(self, index: int): + return super(MyMNIST, self).__getitem__(index % len(self.data)) + +def main(args): + use_cuda = torch.cuda.is_available() + device = torch.device("cuda" if use_cuda else "cpu") + train_kwargs = {'batch_size': args.batch_size, + 'num_workers': args.num_data_workers, + 'pin_memory': args.pin_memory + } + logger.info ('Training job started...') + transform=transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize((0.1307,), (0.3081,)), + transforms.GaussianBlur(11) + ]) + dataset = MyMNIST(batch_size=args.batch_size, iterations=args.iterations, root='./data', train=True, + transform=transform, download=True) + train_loader = torch.utils.data.DataLoader(dataset, + **train_kwargs) + model = Net().to(device) + optimizer = optim.Adadelta(model.parameters()) + model.train() + t = time.perf_counter() + for idx, (data, target) in enumerate(train_loader, start=1): + data, target = data.to(device), target.to(device) + optimizer.zero_grad() + output = model(data) + loss = F.nll_loss(output, target) + loss.backward() + optimizer.step() + if device=='cpu' or idx % 10 == 0: + logger.info( + f'{idx}: avg step time: {(time.perf_counter()-t)/idx}') + logger.info('Training completed!') + save_model(model, args.model_dir) + +def save_model(model, model_dir): + logger.info("Saving the model") + path = os.path.join(model_dir, "model.pth") + torch.save(model.cpu().state_dict(), path) + return + +def read_args(): + import argparse + parser = argparse.ArgumentParser() + + parser.add_argument("--batch-size", type=int, default=4, + help="Input batch size for training",) + parser.add_argument("--iterations", type=int, default=10, + help="Based on no. of cpu per training instance",) + parser.add_argument("--num-data-workers", type=int, default=1, metavar="N", + help="Based on no. of cpu per training instance type in data group",) + parser.add_argument("--num-dnn-workers", type=int, default=1, metavar="N", + help="Based on no. of cpu per training instance type in dnn group, ideally should match to grpc-workers",) + parser.add_argument("--grpc-workers", type=int, default=1, metavar="N", + help="No. of grpc server workers to start",) + parser.add_argument("--pin-memory", type=bool, default=1, + help="pin to GPU memory (default: True)",) + parser.add_argument("--seed", type=int, default=1, + help="random seed (default: 1)",) + parser.add_argument("--hosts", type=list, default=json.loads(os.environ["SM_HOSTS"])) + parser.add_argument("--current-host", type=str, default=os.environ["SM_CURRENT_HOST"]) + parser.add_argument("--model-dir", type=str, default=os.environ["SM_MODEL_DIR"]) + parser.add_argument("--train", type=str, default=os.environ["SM_CHANNEL_TRAINING"]) + #parser.add_argument("--test", type=str, default=os.environ["SM_CHANNEL_TESTING"]) + parser.add_argument("--num-gpus", type=int, default=os.environ["SM_NUM_GPUS"]) + parser.add_argument("--dispatcher_host", type=str) + return parser.parse_args() + +if __name__ == '__main__': + main(read_args()) diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_data.py b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_data.py new file mode 100644 index 0000000000..2d35ba4b26 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_data.py @@ -0,0 +1,172 @@ +import multiprocessing as mp +from concurrent import futures + +import grpc +import torch +from torchvision import datasets, transforms + +import dataset_feed_pb2 +import dataset_feed_pb2_grpc +import logging +import sys + +# Logging initialization +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +logger.addHandler(logging.StreamHandler(sys.stdout)) + +# The following class implements the data feeding service +class DatasetFeedService(dataset_feed_pb2_grpc.DatasetFeedServicer): + def __init__(self, q, kill_event): + ''' + param q: A shared queue containing data batches + param kill: Kill event for graceful shutdown + ''' + self.q = q + self.kill_event = kill_event + + + def get_examples(self, request, context): + while True: + #print('DEBUG: get_examples') + example = self.q.get() + yield dataset_feed_pb2.Example(image=example[0], + label=example[1]) + + + def shutdown(self, request, context): + logger.info("Received shutdown request - Not implemented") + # from main_grpc_client import shutdown_data_service + # shutdown_data_service() + context.set_code(grpc.StatusCode.OK) + context.set_details('Shutting down') + return dataset_feed_pb2.Dummy() + + +# The data loading and preprocessing logic. +# We chose to keep the existing logic unchanged, just instead +# of feeding the model, the dataloader feeds a shared queue +class MyMNIST(datasets.MNIST): + ''' + A personalized extension of the MNIST class in which we + modify the __len__ operation to return the maximum value + of int32 so that we do not run out of data. + ''' + + def __init__(self, batch_size : int, iterations : int, **kwargs): + + super().__init__(**kwargs) + self.batch_size = batch_size + self.iterations = iterations + + def __len__(self) -> int: + size = self.batch_size * self.iterations + return size + + def __getitem__(self, index: int): + return super(MyMNIST, self).__getitem__(index % len(self.data)) + + +def fill_queue(q,kill, args): + + MyMNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"] + train_kwargs = {'batch_size': args.batch_size, + 'num_workers': args.num_data_workers} + transform=transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize((0.1307,), (0.3081,)), + transforms.GaussianBlur(11) + ]) + dataset = MyMNIST(batch_size=args.batch_size, iterations=args.iterations, root='./data', train=True, + transform=transform, download=True) + loader = torch.utils.data.DataLoader(dataset, **train_kwargs) + for batch_idx, (data, target) in enumerate(loader): + if kill.is_set(): + logger.info('kill signal received, exiting fill_queue') + break + added = False + while not added and not kill.is_set(): + try: + # convert the data to bytestrings and add to queue + q.put((data.numpy().tobytes(), + target.type(torch.int8).numpy().tobytes()), + timeout=1) + #print(f'DEBUG: Added example to queue') + added = True + except: + continue + logger.info('Finished filling queue with dataset.') + + +def start(kill_event, args): + q = mp.Queue(maxsize=32) + queuing_process = mp.Process(target=fill_queue, args=(q, kill_event, args)) + queuing_process.start() + logger.info('Started queuing process.') + + server = grpc.server(futures.ThreadPoolExecutor(max_workers=args.grpc_workers)) + dataset_feed_pb2_grpc.add_DatasetFeedServicer_to_server( + DatasetFeedService(q, kill_event), server) + server.add_insecure_port('[::]:6000') + server.start() + logger.info('gRPC Data Server started at port 6000.') + return queuing_process,server + + +def shutdown(queuing_process, grpc_server): + logger.info('Shutting down...') + logger.info('Stopping gRPC server...') + grpc_server.stop(2).wait() + logger.info('Stopping queuing process...') + queuing_process.join(1) + queuing_process.terminate() + logger.info('Shutdown done.') + import os, time + os.system('kill -9 %d' % os.getpid()) + + +def wait_for_shutdown_signal(): + SHUTDOWN_PORT = 16000 + import socket + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind(('', SHUTDOWN_PORT)) + s.listen(1) + logger.info('Awaiting shutdown signal on port {}'.format(SHUTDOWN_PORT)) + conn, addr = s.accept() + print('Received shutdown signal from: ', addr) + try: + conn.close() + s.close() + except Exception as e: + logger.info(e) + + +def serve(args): + kill_event = mp.Event() # an mp.Event for graceful shutdown + queue_data_loader_process, grpc_server = start(kill_event, args) + wait_for_shutdown_signal() + kill_event.set() + shutdown(queue_data_loader_process, grpc_server) + +def read_args(): + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--batch-size", type=int, default=4, metavar="N", + help="input batch size for training",) + parser.add_argument("--num-data-workers", type=int, default=1, metavar="N", + help="based on no. of cpu per training instance",) + parser.add_argument("--num-dnn-workers", type=int, default=1, + help="based on no. of cpu per training instance",) + parser.add_argument("--iterations", type=int, default=10, metavar="N", + help="The number of iterations per epoch (multiply of 10)",) + parser.add_argument("--grpc-workers", type=int, default=1, metavar="N", + help="No. of gRPC server workers",) + parser.add_argument("--pin-memory", type=bool, default=1, + help="pin to GPU memory (default: True)",) + parser.add_argument("--first_data_host", type=str) + args, unknown = parser.parse_known_args() + return args + + +if __name__ == "__main__": + serve(read_args()) diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_dnn.py b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_dnn.py new file mode 100644 index 0000000000..6dfa6f59f7 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/code/train_dnn.py @@ -0,0 +1,179 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.optim as optim +from torchvision import datasets, transforms +import time +import grpc +import dataset_feed_pb2_grpc +import dataset_feed_pb2 +import logging +import sys +import json +import os + +#Pass environment variables to detect heterogenous host names +from sagemaker_training import environment + + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +logger.addHandler(logging.StreamHandler(sys.stdout)) + +# Based on https://github.com/pytorch/examples/blob/master/mnist/main.py +class Net(nn.Module): + def __init__(self): + super(Net, self).__init__() + self.conv1 = nn.Conv2d(1, 32, 3, 1) + self.conv2 = nn.Conv2d(32, 64, 3, 1) + self.dropout1 = nn.Dropout(0.25) + self.dropout2 = nn.Dropout(0.5) + self.fc1 = nn.Linear(9216, 128) + self.fc2 = nn.Linear(128, 10) + def forward(self, x): + x = self.conv1(x) + x = F.relu(x) + x = self.conv2(x) + x = F.relu(x) + x = F.max_pool2d(x, 2) + x = self.dropout1(x) + x = torch.flatten(x, 1) + x = self.fc1(x) + x = F.relu(x) + x = self.fc2(x) + output = F.log_softmax(x, dim=1) + return output + + +# Decode binary data from SM_CHANNEL_TRAINING +# Decode and preprocess data +# Create map dataset +class RemoteDataset(torch.utils.data.IterableDataset): + ''' + An iterable PyTorch dataset that opens a connection to the + gRPC server and reads from a stream of data batches + ''' + + def __init__(self, data_host, batch_size, iterations): + self.data_host = data_host + self.batch_size = batch_size + self.iterations = iterations + + + def __len__(self) -> int: + size = self.batch_size * self.iterations + return size + + def get_stub(self): + channel = grpc.insecure_channel(f'{self.data_host}:6000', + # overwrite the default max message length + options=[('grpc.max_receive_message_length', + 200 * 1024 * 1024)]) + + try: + # print('Waiting for gRPC data server to be ready...') + grpc.channel_ready_future(channel).result(timeout=30) + except grpc.FutureTimeoutError: + logger.error('ERROR: Timeout connecting to gRPC data server. Check that it is running.') + raise + #print('Connected to gRPC data server.') + + return dataset_feed_pb2_grpc.DatasetFeedStub(channel,) + + + def __iter__(self): + import numpy as np + + examples = self.get_stub().get_examples(dataset_feed_pb2.Dummy()) + for s in examples: + image = torch.tensor(np.frombuffer(s.image, + dtype=np.float32)).reshape( + [self.batch_size, 1, 28, 28]) + label = torch.tensor(np.frombuffer(s.label, + dtype=np.int8)).reshape( + [self.batch_size]).type(torch.int64) + yield image, label + + + # def shutdown_remote(self): + # print('Calling remote server to shutdown') + # self.get_stub().shutdown(dataset_feed_pb2.Dummy()) + + +def main(args): + logger.info ('Training job started...') + use_cuda = args.num_gpus > 0 + device = torch.device("cuda" if use_cuda > 0 else "cpu") + + torch.manual_seed(args.seed) + if use_cuda: + torch.cuda.manual_seed(args.seed) + + train_kwargs = {'batch_size': None, #the data is already batched + 'num_workers': args.num_dnn_workers, + 'pin_memory': args.pin_memory + } + + dataset = RemoteDataset(args.dispatcher_host, args.batch_size, args.iterations) + train_loader = torch.utils.data.DataLoader(dataset, + **train_kwargs) + model = Net().to(device) + optimizer = optim.Adadelta(model.parameters()) + model.train() + t = time.perf_counter() + for idx, (data, target) in enumerate(train_loader, start=1): + data, target = data.to(device), target.to(device) + optimizer.zero_grad() + output = model(data) + loss = F.nll_loss(output, target) + loss.backward() + optimizer.step() + if device.type == 'cpu' or idx % 10 == 0: + logger.info( + f'{idx}: avg step time: {(time.perf_counter()-t)/idx}') + + # TODO: exit the loop through the iterator stopping by itself + if idx*args.batch_size==(dataset.__len__()): + break + + save_model(model, args.model_dir) + logger.info ('Training job completed!') + + +def save_model(model, model_dir): + logger.info("Saving the model") + path = os.path.join(model_dir, "model.pth") + torch.save(model.cpu().state_dict(), path) + return + + +def read_args(): + import argparse + parser = argparse.ArgumentParser() + + parser.add_argument("--batch-size", type=int, default=4, + help="Input batch size for training",) + parser.add_argument("--iterations", type=int, default=10, + help="Based on no. of cpu per training instance",) + parser.add_argument("--num-data-workers", type=int, default=1, metavar="N", + help="Based on no. of cpu per training instance type in data group",) + parser.add_argument("--num-dnn-workers", type=int, default=1, metavar="N", + help="Based on no. of cpu per training instance type in dnn group, ideally should match to grpc-workers",) + parser.add_argument("--grpc-workers", type=int, default=1, metavar="N", + help="No. of grpc server workers to start",) + parser.add_argument("--pin-memory", type=bool, default=1, + help="pin to GPU memory (default: True)",) + parser.add_argument("--seed", type=int, default=1, + help="random seed (default: 1)",) + parser.add_argument("--hosts", type=list, default=json.loads(os.environ["SM_HOSTS"])) + parser.add_argument("--current-host", type=str, default=os.environ["SM_CURRENT_HOST"]) + parser.add_argument("--model-dir", type=str, default=os.environ["SM_MODEL_DIR"]) + parser.add_argument("--train", type=str, default=os.environ["SM_CHANNEL_TRAINING"]) + #parser.add_argument("--test", type=str, default=os.environ["SM_CHANNEL_TESTING"]) + parser.add_argument("--num-gpus", type=int, default=os.environ["SM_NUM_GPUS"]) + parser.add_argument("--dispatcher_host", type=str) + return parser.parse_args() + + +if __name__ == '__main__': + main(read_args()) diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/hetero-pytorch-mnist.ipynb b/training/heterogeneous-clusters/pt.grpc.sagemaker/hetero-pytorch-mnist.ipynb new file mode 100644 index 0000000000..7146988464 --- /dev/null +++ b/training/heterogeneous-clusters/pt.grpc.sagemaker/hetero-pytorch-mnist.ipynb @@ -0,0 +1,520 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "85da9619", + "metadata": {}, + "source": [ + "# PyTorch's example to demonstrate Amazon SageMaker Heterogeneous Cluster for model training\n", + "\n", + "---\n", + "### Description\n", + "Heterogeneous clusters enable launching training jobs that use multiple instance types in a single job. This capability can improve your training cost and speed by running different parts of the model training on the most suitable instance type. This use case typically happens in computer vision DL training, where training is bottleneck on CPU resources needed for data augmentation, leaving the expensive GPU underutilized. Heterogeneous clusters enable you to add more CPU resources to fully utilize GPUs, thus increase training speed and cost-efficiency. For more details, you can find the documentation of this feature [here](https://docs.aws.amazon.com/sagemaker/latest/dg/train-heterogeneous-cluster.html).\n", + "\n", + "This notebook demonstrates how to use Heterogeneous Cluster feature of SageMaker Training with PyTorch. The notebook works on Python 3 (_PyTorch 1.11 Python 3.8 CPU Optimized_) image of SageMaker Studio Notebook instance, and runs on _ml.t3.medium_ instance type.\n", + "\n", + "The notebook covers:\n", + "- Setting up SageMaker Studio Notebook \n", + "- Setting up the Training environment \n", + "- Submit a Training job\n", + "- Monitor and visualize the CloudWatch metrics\n", + "- Comparing time-to-train and cost-to-train\n", + "- Conclusion \n", + "\n", + "In this sample notebook, we have taken the PyTorch model based on this [official MNIST example](https://github.com/pytorch/examples/tree/main/MNIST). We modified the training code to be heavy on data pre-processing. We are going to train this model in both Homogeneous and Heterogeneous Cluster modes. The flag to train on any of these modes can be set using `IS_HETERO = False or True` in section **B.2 Configure environment variables**. \n", + "\n", + "Homogeneous Training Job - In this baseline we observe an ml.p3.2xlarge with an under-utilized GPU due to a CPU bottleneck. \n", + "\"homogeneous-training \n", + "\n", + "Heterogeneous Training Job - Where we add ml.c5.9xlarge instance for extra CPU cores, to allow increased GPU usage of ml.p3.2xlarge instance, and improve cost-efficiency. Both the jobs runs the training code, train data set, pre-processing, and other relevant parameters.\n", + "\"heterogeneous-training\n", + "\n", + "In homogeneous cluster training job, the data pre-processing and Deep Neural Network (DNN) training code runs on the same instance. However, in heterogeneous cluster training job, the data pre-processing code runs on the CPU nodes (here by referred as **data_group or data group**), whereas the Deep Neural Network (DNN) training code runs on the GPU nodes (here referred as **dnn_group or dnn group**). The inter-node communication between the data and dnn groups is handled by generic implementation of [gRPC client-server interface](https://grpc.io/docs/languages/python/basics/).  \n", + "\n", + "The script (`launcher.py`) has the logic to detect (using SageMaker environment variables) whether the node it is running on belongs to data_group or dnn_group. If it is data_group, it spawns a separate process by executing `train_data.py`. This script runs grpc-server service for extracting processed training batches using [Protocol Buffers](https://developers.google.com/protocol-buffers/docs/overview). The gRPC server running on the data_group listens on a specific port (ex. 6000). In the code (`train_data.py`) documentation, we have chosen an implementation that keeps the data loading logic intact  where data batches are entered into a shared queue. The `get_samples` function of the `DataFeedService` pulls batches from the same queue and sends them to the client in the form of a continuous data stream. While fetching the data, the main entrypoint script `launcher.py` listens on port 16000 for a shutdown request coming from gRPC client i.e. data group. The `train_data.py` waits for shutdown action from the parent process. \n", + "\n", + "If the node belongs to dnn_group, the main training script (`launcher.py`) spawns a separate set of processes by executing `train_dnn.py`. The script runs gRPC client code and DNN component of the training job. It consumes the processed training data from the gRPC server. We have defined an iterable PyTorch dataset, RemoteDataset, that opens a connection to the gRPC server, and reads from a stream of data batches. Once the model is trained with all the batches of training data, the gRPC client exits, and the parent process`launcher.py` sends a shutdown request on port 16000. This indicates the gRPC server to shutdown, and signals ends of the training job. \n", + "\n", + "Here is how the workflow looks like:\n", + "\n", + "\n", + "\n", + "This example notebook runs a training job on 2 instances, 1 in each node group. The data_group uses ml.c5.9xlarge whereas dnn_group uses ml.p3.2xlarge.\n", + "\n", + "This notebook refers following files and folders:\n", + "\n", + "- Folders: \n", + "  - `code`: this has the training (data pre-processing and dnn) scripts, and grpc client-server start and shutdown scripts\n", + "  - `images`: contains images referred in notebook\n", + "- Files: \n", + "  - `launcher.py`: entry point training script. This script is executed on all the nodes irrespective of which group it belongs to. This is a parent process that makes a decision on where to spawn a data pre-processing or dnn component of the training job. The script runs on all the nodes as entry point. It also handles the shutdown logic for gRPC server. \n", + "  - `train_data.py`, `dataset_feed_pb2.py`, `dataset_feed_pb2_grpc.py`: these scripts run on the data_group nodes and responsible for setting up grpc-server, start and shutdown.\n", + "  - `train_dnn.py`: this script runs dnn code on the training data set. It fetches preprocessed data from the data_group node as a stream using gRPC client-server communication. It also sends a shutdown request after all the iterations on the preprocessed training data set. \n", + "  - `requirement.txt`: defines package required for gRPC \n", + "  - `train.py`: this script is the entry point script for SageMaker homogeneous cluster training. This script is picked up when you choose IS_HETERO = False. This uses a local dataset and runs both data pre-processing and a dnn component on the same node. " + ] + }, + { + "cell_type": "markdown", + "id": "1f98cde9", + "metadata": {}, + "source": [ + "### security groups update if running in private VPC\n", + "This section is relevant if you plan to [run in a private VPC](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html) (passing `subnets` and `security_group_ids` parameters when defining an Estimator). \n", + "SageMaker documentation recommends you [add](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html#train-vpc-vpc) a rule for your security group that allows inbound connections between members of the same security group, for all TCP communication. This will also cover for the gRPC related traffic between instances:\n", + "- the data_group instances will listen on port 6000 for connections from all nodes. This stream is not encrypted. You can change the code to encrypted the connection if needed.\n", + "- the data_group intances listen on port 16000 for a shutdown signal from all nodes." + ] + }, + { + "cell_type": "markdown", + "id": "fd1e5aca", + "metadata": {}, + "source": [ + "### A. Setting up SageMaker Studio notebook\n", + "\n", + "#### Step 1 - Upgrade SageMaker SDK and dependent packages \n", + "Heterogeneous Clusters for Amazon SageMaker model training was [announced](https://aws.amazon.com/about-aws/whats-new/2022/07/announcing-heterogeneous-clusters-amazon-sagemaker-model-training) on 07/08/2022. As a first step, ensure you have updated SageMaker SDK, PyTorch, and Boto3 client that enables this feature." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "54ff1687", + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "python3 -m pip install --upgrade boto3 botocore awscli sagemaker" + ] + }, + { + "cell_type": "markdown", + "id": "0d20b2f3", + "metadata": {}, + "source": [ + "#### Step 2 - Restart the notebook kernel " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "229e1b18", + "metadata": {}, + "outputs": [], + "source": [ + "#import IPython\n", + "#IPython.Application.instance().kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "id": "a9592cda", + "metadata": {}, + "source": [ + "#### Step 3 - Validate SageMaker Python SDK and PyTorch versions\n", + "Ensure the output of the cell below reflects:\n", + "\n", + "- SageMaker Python SDK version 2.98.0 or above, \n", + "- boto3 1.24 or above \n", + "- botocore 1.27 or above \n", + "- PyTorch 1.10 or above " + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "0b0e3202", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Name: sagemaker\n", + "Version: 2.109.0\n", + "---\n", + "Name: torch\n", + "Version: 1.10.2+cpu\n", + "---\n", + "Name: boto3\n", + "Version: 1.24.72\n", + "---\n", + "Name: botocore\n", + "Version: 1.27.72\n" + ] + } + ], + "source": [ + "!pip show sagemaker torch boto3 botocore |egrep 'Name|Version|---'" + ] + }, + { + "cell_type": "markdown", + "id": "9176d868", + "metadata": {}, + "source": [ + "--------------\n", + "### B. Setting up the Training environment\n", + "\n", + "#### Step 1 - Import SageMaker components and set up the IAM role and Amazon S3 bucket" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "594fce53", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arn:aws:iam::776941257690:role/service-role/AmazonSageMakerServiceCatalogProductsUseRole\n", + "s3://sagemaker-us-east-1-776941257690/DEMO-MNIST\n" + ] + } + ], + "source": [ + "import os\n", + "import json\n", + "import datetime\n", + "import os\n", + "\n", + "import sagemaker\n", + "from sagemaker.pytorch import PyTorch\n", + "from sagemaker import get_execution_role\n", + "from sagemaker.instance_group import InstanceGroup\n", + "\n", + "\n", + "sess = sagemaker.Session()\n", + "\n", + "role = get_execution_role()\n", + "\n", + "output_path = \"s3://\" + sess.default_bucket() + \"/DEMO-MNIST\"\n", + "print(role)\n", + "print(output_path)" + ] + }, + { + "cell_type": "markdown", + "id": "165bca04", + "metadata": {}, + "source": [ + "#### Step 2 - Configure environment variables \n", + "This step defines whether you want to run training job in heterogeneous cluster mode or not. Also, defines instance groups, multiple nodes in group, and hyperparameter values. For baselining, run a homogeneous cluster training job by setting `IS_HETERO = False`. This will let both the data pre-processing and DNN code run on the same node i.e. `ml.p3.2xlarge`. \n", + "\n", + "\n", + "Test configuration (if running training on p3.2xl or g5.2xl as dnn_group instance type, and c5.2xl as data_group instance type: (training duration: 7-8 mins) \n", + "`num-data-workers: 4` \n", + "`grpc-workers: 4` \n", + "`num-dnn-workers: 4` \n", + "`pin-memory\": True` \n", + "`iterations : 100` \n", + "\n", + "Performance configuration (if running training on p3.2xl as dnn_group instance type, and c5.9xl as data_group instance type OR training in homogeneous cluster mode i.e. g5.8xl): (training duration - 30 mins) \n", + "`num-data-workers: 32` \n", + "`grpc-workers: 2` \n", + "`num-dnn-workers: 2` \n", + "`pin-memory\": True` \n", + "`iterations : 4800`\n", + "\n", + "Performance configuration (if running training on p3.2xl in homogeneous cluster mode): \n", + "`num-data-workers: 8` \n", + "`grpc-workers: 2` \n", + "`num-dnn-workers: 2` \n", + "`pin-memory\": True` \n", + "`iterations : 2400`\n", + "\n", + "Note: This PyTorch example has not been tested with multiple instances in an instance group. " + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "0d65707b", + "metadata": {}, + "outputs": [], + "source": [ + "IS_CLOUD_JOB = True\n", + "IS_HETERO = True # if set to false, uses homogeneous cluster\n", + "PT_DATA_MODE = \"service\" if IS_HETERO else \"local\" # local | service\n", + "IS_DNN_DISTRIBUTION = False # Distributed Training with DNN nodes not tested, set it to False\n", + "\n", + "data_group = InstanceGroup(\n", + " \"data_group\", \"ml.c5.9xlarge\", 1\n", + ") # 36 vCPU #change the instance type if IS_HETERO=True\n", + "dnn_group = InstanceGroup(\n", + " \"dnn_group\", \"ml.p3.2xlarge\", 1\n", + ") # 8 vCPU #change the instance type if IS_HETERO=True\n", + "\n", + "kwargs = dict()\n", + "kwargs[\"hyperparameters\"] = {\n", + " \"batch-size\": 8192,\n", + " \"num-data-workers\": 4, # This number drives the avg. step time. More workers help parallel pre-processing of data. Recommendation: Total no. of cpu 'n' = 'num-data-wokers'+'grpc-workers'+ 2 (reserved)\n", + " \"grpc-workers\": 4, # No. of workers serving pre-processed data to DNN group (gRPC client). see above formula.\n", + " \"num-dnn-workers\": 4, # Modify this no. to be less than the cpu core of your training instances in dnn group\n", + " \"pin-memory\": True, # Pin to GPU memory\n", + " \"iterations\": 100, # No. of iterations in an epoch (must be multiple of 10).\n", + "}\n", + "\n", + "if IS_HETERO:\n", + " kwargs[\"instance_groups\"] = [data_group, dnn_group]\n", + " entry_point = \"launcher.py\"\n", + "else:\n", + " kwargs[\"instance_type\"] = (\n", + " \"ml.p3.2xlarge\" if IS_CLOUD_JOB else \"local\"\n", + " ) # change the instance type if IS_HETERO=False\n", + " kwargs[\"instance_count\"] = 1\n", + " entry_point = \"train.py\"\n", + "\n", + "if IS_DNN_DISTRIBUTION:\n", + " processes_per_host_dict = {\n", + " \"ml.g5.xlarge\": 1,\n", + " \"ml.g5.12xlarge\": 4,\n", + " \"ml.p3.8xlarge\": 4,\n", + " \"ml.p4d.24xlarge\": 8,\n", + " }\n", + " kwargs[\"distribution\"] = {\n", + " \"mpi\": {\n", + " \"enabled\": True,\n", + " \"processes_per_host\": processes_per_host_dict[dnn_instance_type],\n", + " \"custom_mpi_options\": \"--NCCL_DEBUG INFO\",\n", + " },\n", + " }\n", + " if IS_HETERO:\n", + " kwargs[\"distribution\"][\"instance_groups\"] = [dnn_group]\n", + "\n", + " print(f\"distribution={kwargs['distribution']}\")" + ] + }, + { + "cell_type": "markdown", + "id": "4ff19e24", + "metadata": {}, + "source": [ + "#### Step 3: Set up the Estimator\n", + "In order to use SageMaker to fit our algorithm, we'll create `Estimator` that defines how to use the container to train. This includes the configuration we need to invoke SageMaker training." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "94f4c8ce", + "metadata": {}, + "outputs": [], + "source": [ + "estimator = PyTorch(\n", + " framework_version=\"1.11.0\", # 1.10.0 or later\n", + " py_version=\"py38\", # Python v3.8\n", + " role=role,\n", + " entry_point=entry_point,\n", + " source_dir=\"code\",\n", + " volume_size=10,\n", + " max_run=4800,\n", + " disable_profiler=True,\n", + " debugger_hook_config=False,\n", + " **kwargs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "a81dcab6", + "metadata": {}, + "source": [ + "#### Step 4: Download the MNIST Data and Upload it to S3 bucket\n", + "\n", + "This is an optional step for now. The training job downloads the data on its run directly from MNIST website to the data_group node (grpc server). " + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "d0534973", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import boto3\n", + "from botocore.exceptions import ClientError\n", + "\n", + "# Download training and testing data from a public S3 bucket\n", + "\n", + "\n", + "def download_from_s3(data_dir=\"./data\", train=True):\n", + " \"\"\"Download MNIST dataset and convert it to numpy array\n", + "\n", + " Args:\n", + " data_dir (str): directory to save the data\n", + " train (bool): download training set\n", + "\n", + " Returns:\n", + " None\n", + " \"\"\"\n", + "\n", + " if not os.path.exists(data_dir):\n", + " os.makedirs(data_dir)\n", + "\n", + " if train:\n", + " images_file = \"train-images-idx3-ubyte.gz\"\n", + " labels_file = \"train-labels-idx1-ubyte.gz\"\n", + " else:\n", + " images_file = \"t10k-images-idx3-ubyte.gz\"\n", + " labels_file = \"t10k-labels-idx1-ubyte.gz\"\n", + "\n", + " # download objects\n", + " s3 = boto3.client(\"s3\")\n", + " bucket = f\"sagemaker-sample-files\"\n", + " for obj in [images_file, labels_file]:\n", + " key = os.path.join(\"datasets/image/MNIST\", obj)\n", + " dest = os.path.join(data_dir, obj)\n", + " if not os.path.exists(dest):\n", + " s3.download_file(bucket, key, dest)\n", + " return\n", + "\n", + "\n", + "download_from_s3(\"./data\", True)\n", + "download_from_s3(\"./data\", False)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "2d699654", + "metadata": {}, + "outputs": [], + "source": [ + "# Upload to the default bucket\n", + "\n", + "prefix = \"DEMO-MNIST\"\n", + "bucket = sess.default_bucket()\n", + "loc = sess.upload_data(path=\"./data\", bucket=bucket, key_prefix=prefix)\n", + "\n", + "channels = {\"training\": loc, \"testing\": loc}" + ] + }, + { + "cell_type": "markdown", + "id": "48352f04", + "metadata": {}, + "source": [ + "## C. Submit the training job\n", + "\n", + "The job runs for the predefined iterations. DNN instance group sends a shutdown request to data group after done with the training. You can see the following entries in the CloudWatch logs of dnn instance. A job with 4800 iterations finishes in 29 mins in a Heterogeneous cluster composed of 1x ml.c5.9xlarge as data node and 1x ml.p3.2xlarge as DNN node.\n", + "\n", + "Note: The console output of billing seconds can be ignored. See the AWS console > SageMaker > Training Job for the exact billing seconds.\n", + "\n", + "Log excerpt from algo-1 (DNN instance)\n", + "```\n", + "4780: avg step time: 0.19709917231025106\n", + "INFO:__main__:4780: avg step time: 0.19709917231025106\n", + "4790: avg step time: 0.19694106239373696\n", + "INFO:__main__:4790: avg step time: 0.19694106239373696\n", + "4800: avg step time: 0.196784295383125\n", + "Saving the model\n", + "INFO:__main__:4800: avg step time: 0.196784295383125\n", + "INFO:__main__:Saving the model\n", + "Training job completed!\n", + "INFO:__main__:Training job completed!\n", + "Process train_dnn.py closed with returncode=0\n", + "Shutting downdata service dispatcher via: [algo-2:16000]\n", + "shutdown request sent to algo-2:16000\n", + "2022-08-16 01:15:05,555 sagemaker-training-toolkit INFO Waiting for the process to finish and give a return code.\n", + "2022-08-16 01:15:05,555 sagemaker-training-toolkit INFO Done waiting for a return code. Received 0 from exiting process.\n", + "2022-08-16 01:15:05,556 sagemaker-training-toolkit INFO Reporting training SUCCESS\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31cb6cae", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-09-15 00:55:22 Starting - Starting the training job...\n", + "2022-09-15 00:55:50 Starting - Preparing the instances for training.........\n", + "2022-09-15 00:57:10 Downloading - Downloading input data.." + ] + } + ], + "source": [ + "estimator.fit(\n", + " inputs=channels,\n", + " job_name=\"pt-hetero\"\n", + " + \"-\"\n", + " + \"H-\"\n", + " + str(IS_HETERO)[0]\n", + " + \"-\"\n", + " + datetime.datetime.utcnow().strftime(\"%Y%m%dT%H%M%SZ\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "3ea2e092", + "metadata": {}, + "source": [ + "## D. Monitoring Instance Metrics for GPU and CPU utilization\n", + "\n", + "Click on **View instance metrics** from the **Training jobs** node in **Amazon SageMaker Console**. In the run above, all 30 vCPU of Data node (algo-1) is approx. 100% utilized, and the GPU utilization is at 100% at frequent intervals in the DNN node (algo-2). To rescale the CloudWatch Metrics to 100% on CPU utilization for algo-1 and algo-2, use CloudWatch \"Add Math\" feature and average it out by no. of cores on those instance types.\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "430fb45e", + "metadata": {}, + "source": [ + "## E. Comparing time-to-train and cost-to-train\n", + "\n", + "Let's continue with the above example i.e. train a heavy data pre-processing (CPU intensive) model (MNIST) requiring only 1 GPU. We start with ml.p3.2xlarge (1xV100 GPU, 8x vCPU) in homogeneous cluster mode to get the baseline performance numbers. Due to the no. of CPU cores, we could not go beyond 8 data loader/workers for data pre-processing. The avg. step cost was `7.6 cents` and avg. step time is `1.19 seconds`. \n", + "\n", + "Our objective is to reduce the cost and speed up the model training time. The first choice here is to scale up the instance type in the same family. If we leverage the next instance type (4 GPU) in the P3 family, the GPUs would have gone underutilized. In this case, we needed more vCPU to GPU ratio. Assuming we haven't had any instance type in another instance family or the model is incompatible with the CPU/GPU architectures of other instance families, we are constrained to use ml.p3.2xlarge. The only way then to have more vCPUs to GPU ratio is to use SageMaker feature, Heterogeneous Cluster, which enables customers to offload data pre-processing logic to CPU only instance types example ml.c5. In the next test, we offloaded CPU intensive work i.e. data preprocessing to ml.c5.9xlarge (36 vCPU) and continued using ml.p3.2xlarge for DNN. The avg. step cost was `1.9 cents` and avg. step time is `0.18 seconds`. \n", + "\n", + "In summary, we reduced the training cost by 4.75 times, and the avg. step reduced by 6.5 times. This was possible because with higher cpu count, we could use 32 data loader workers (compared to 8 with p3.2xl) to preprocess the data, and kept GPU close to 100% utilized at frequent intervals. Note: These numbers are just taken as a sample, you have to do benchmarking with your own model and dataset to come up with the exact price-performance benefits. \n", + "\n", + "## F. Conclusion\n", + "In this notebook, we demonstrated how to leverage heterogeneous cluster feature of SageMaker Training to achieve better price performance. To get started you can copy this example project, and only change the `train_dnn.py` script.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.7 ('.venv': venv)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + }, + "vscode": { + "interpreter": { + "hash": "77c0de85c2cb739aa5100af7b92fb9d2075368f0e653f4148499a56c989df5f7" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/images/heterogeneous-cluster-diagram.png b/training/heterogeneous-clusters/pt.grpc.sagemaker/images/heterogeneous-cluster-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c84c185d31391b8c7db2d0236dee6f50bea526c3 GIT binary patch literal 31604 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 JT-f02{{wO;rP}}i literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/images/heterogeneous-instance-metrics.png b/training/heterogeneous-clusters/pt.grpc.sagemaker/images/heterogeneous-instance-metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..d812e2f46b5c3495ae98daa48d5acd33150426d6 GIT binary patch literal 55343 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 literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/images/homogeneous-cluster-diagram.png b/training/heterogeneous-clusters/pt.grpc.sagemaker/images/homogeneous-cluster-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3119d4b62034144e9fc4b2b8e6a31773f8d98e GIT binary patch literal 18353 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 literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/pt.grpc.sagemaker/images/pytorch-heterogeneous-workflow.png b/training/heterogeneous-clusters/pt.grpc.sagemaker/images/pytorch-heterogeneous-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..c40b09aeed955e8eeda6d3ccad5348481a5f2d67 GIT binary patch literal 64269 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 literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/heterogenenous-workload.json b/training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/heterogenenous-workload.json new file mode 100644 index 0000000000..5b3736fc35 --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/heterogenenous-workload.json @@ -0,0 +1,30 @@ +{ + "metrics": [ + [ { "expression": "100*(m1/9600)", "label": "DNN1 CPU/100%", "id": "e1" } ], + [ { "expression": "100*(m2/800)", "label": "DNN1 GPU/100%", "id": "e2" } ], + [ { "expression": "100*(m3/7200)", "label": "DATA1 CPU/100%", "id": "e3" } ], + [ { "expression": "100*(m4/7200)", "label": "DATA2 CPU/100%", "id": "e4" } ], + [ "/aws/sagemaker/TrainingJobs", "CPUUtilization", "Host", "hetero-tf-data-service-Dnode2-wrkrs-1-20220922T214326Z/algo-1", { "id": "m1", "yAxis": "left", "visible": false } ], + [ ".", "GPUUtilization", ".", ".", { "id": "m2", "visible": false } ], + [ ".", "CPUUtilization", ".", "hetero-tf-data-service-Dnode2-wrkrs-1-20220922T214326Z/algo-2", { "id": "m3", "visible": false } ], + [ "...", "hetero-tf-data-service-Dnode2-wrkrs-1-20220922T214326Z/algo-3", { "id": "m4", "visible": false } ] + ], + "sparkline": true, + "view": "timeSeries", + "stacked": false, + "region": "us-east-1", + "stat": "Average", + "period": 60, + "setPeriodToTimeRange": true, + "yAxis": { + "left": { + "min": 0, + "max": 100, + "label": "% Utilization", + "showUnits": false + } + }, + "legend": { + "position": "bottom" + } +} \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/homogenous-workload copy.json b/training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/homogenous-workload copy.json new file mode 100644 index 0000000000..c514eced5a --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/cloudwatch-metric-definitions/homogenous-workload copy.json @@ -0,0 +1,26 @@ +{ + "sparkline": true, + "metrics": [ + [ { "expression": "100*(m1/9600)", "label": "CPU/100%", "id": "e1" } ], + [ { "expression": "100*(m2/800)", "label": "GPU/100%", "id": "e2" } ], + [ "/aws/sagemaker/TrainingJobs", "CPUUtilization", "Host", "hetero-tf-data-local-Dnode1-wrkrs-1-20220921T213920Z/algo-1", { "id": "m1", "visible": false } ], + [ ".", "GPUUtilization", ".", ".", { "id": "m2", "visible": false } ] + ], + "view": "timeSeries", + "stacked": false, + "region": "us-east-1", + "stat": "Average", + "period": 60, + "setPeriodToTimeRange": true, + "yAxis": { + "left": { + "min": 0, + "max": 100, + "label": "% Utilization", + "showUnits": false + } + }, + "legend": { + "position": "bottom" + } +} \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/code/launcher.py b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/launcher.py new file mode 100644 index 0000000000..d67b27af7d --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/launcher.py @@ -0,0 +1,123 @@ +import sys +import os +import time +from typing import Optional +import subprocess + +# instance group names +DATA_GROUP = 'data_group' +DNN_GROUP = 'dnn_group' + + +def start_child_process_async(name : str, additional_args=[]) -> int: + #TODO: Find a way to stream stdout and stderr to the parent process + params = ["python", f"./{name}"] + sys.argv[1:] + additional_args + print(f'Opening process async: {params}') + p = subprocess.Popen(params) + print(f'Process {name} started') + return p.pid + + +def start_child_process(name : str, additional_args=[]) -> int: + params = ["python", f"./{name}"] + sys.argv[1:] + additional_args + print(f'Opening process: {params}') + p = subprocess.run(params) + print(f'Process {name} closed with returncode={p.returncode}') + return p.returncode + + +def start_data_group(dispatcher_host : str) -> int: + return start_child_process('train_data.py', ["--dispatcher_host", dispatcher_host]) + + +def not_mpi_or_rank_0() -> bool: + return 'OMPI_COMM_WORLD_LOCAL_RANK' not in os.environ or os.environ['OMPI_COMM_WORLD_LOCAL_RANK'] == '0' + + +def start_dnn_group(dispatcher_host : Optional[str]) -> int: + if dispatcher_host is not None: + args = ["--dispatcher_host", dispatcher_host] + # Start a tf.data.service worker processes for each host in the DNN group + # to take advantage of its CPU resources. + # Start once per instance, not per MPI process + if not_mpi_or_rank_0(): + start_child_process_async('train_data.py', args) + else: + args = [] + return start_child_process('train_dnn.py', args) + + +def get_group_first_host(instance_groups, target_group_name): + return instance_groups[target_group_name]['hosts'][0] + + +def is_not_mpi_or_world_rank_0() -> bool: + return 'OMPI_COMM_WORLD_RANK' in os.environ and os.environ['OMPI_COMM_WORLD_RANK'] != '0' + + +def shutdown_tf_data_service_with_retries(hosts : list): + # only world rank 0 process should shutdown the dispatcher + if is_not_mpi_or_world_rank_0(): + return + + completed_hosts = [] + for host in hosts: + for i in range(0,12): + try: + if i>0: + sleeptime = 10 + print(f'Will attempt {i} time to shutdown in {sleeptime} seconds') + time.sleep(sleeptime) + + if host not in completed_hosts: + _shutdown_data_service(host) + completed_hosts.append(host) + break + except Exception as e: + print(f'Failed to shutdown dispatcher in {host} due to: {e}') + + +def _shutdown_data_service(dispatcher_host : str): + SHUTDOWN_PORT = 16000 + print(f'Shutting down tf.data.service dispatcher via: [{dispatcher_host}:{SHUTDOWN_PORT}]') + import socket + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect((dispatcher_host, SHUTDOWN_PORT)) + print(f'Shutdown request sent to {dispatcher_host}:{SHUTDOWN_PORT}') + + +def split_to_instance_group_train_script() -> int: + from sagemaker_training import environment + env = environment.Environment() + + print(f'env.is_hetero={env.is_hetero}') + print(f'current_host={env.current_host}') + + if env.is_hetero: + dispatcher_host = get_group_first_host(env.instance_groups_dict, DATA_GROUP) + first_host_in_dnn_group = get_group_first_host(env.instance_groups_dict, DNN_GROUP) + print(f'current_instance_type={env.current_instance_type}') + print(f'current_group_name={env.current_instance_group}') + print(f'dispatcher_host={dispatcher_host}') + if env.current_instance_group == DATA_GROUP: + return start_data_group(dispatcher_host) + elif env.current_instance_group == DNN_GROUP: + returncode = start_dnn_group(dispatcher_host) + # first host in DNN group will take care of shutting down the dispatcher + if env.current_host == first_host_in_dnn_group: + hosts = env.instance_groups_dict[DATA_GROUP]['hosts'] + env.instance_groups_dict[DNN_GROUP]['hosts'] + shutdown_tf_data_service_with_retries(hosts) + return returncode + else: + raise Exception(f'Unknown instance group: {env.current_instance_group}') + + else: # not heterogenous + return start_dnn_group(dispatcher_host=None) + +if __name__ == "__main__": + try: + returncode = split_to_instance_group_train_script() + exit(returncode) + except Exception as e: + print(f'Failed due to {e}. exiting with returncode=1') + sys.exit(1) \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/code/requirements.txt b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/requirements.txt new file mode 100644 index 0000000000..64b956a22e --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/requirements.txt @@ -0,0 +1,2 @@ +protobuf==3.20.1 +tensorflow-addons==0.17.0 \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_data.py b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_data.py new file mode 100644 index 0000000000..62248d1e68 --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_data.py @@ -0,0 +1,68 @@ +from tensorflow.data.experimental.service import DispatchServer, WorkerServer, DispatcherConfig, WorkerConfig + +def wait_for_shutdown_signal(dispatcher, workers): + SHUTDOWN_PORT = 16000 + import socket + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind(('', SHUTDOWN_PORT)) + s.listen(1) + print('Awaiting shutdown signal on port {}'.format(SHUTDOWN_PORT)) + conn, addr = s.accept() + print('Received shutdown signal from: ', addr) + try: + conn.close() + s.close() + except Exception as e: + print(e) + + if dispatcher is not None: # dispatcher runs only on the 1st data instance + print('Stopping dispatcher.') + dispatcher._stop() + print('Joining dispatcher') + dispatcher.join() + + for i,worker in enumerate(workers, start=0): + print(f'Stopping worker {i}') + worker._stop() + print(f'Joining worker {i}') + worker.join() + +def create_worker(workerIndex : int, dispatcher_host : str, current_host : str) -> WorkerServer: + port = 6001 + workerIndex + w_config = WorkerConfig(port=port, + dispatcher_address=f'{dispatcher_host}:6000', + worker_address=f'{current_host}:{port}') + print(f'Starting tf.data.service WorkerServer {w_config}') + worker = WorkerServer(w_config) + return worker + +def start_dispatcher_and_worker(dispatcher_host : str, current_host : str, num_of_data_workers : int): + assert(dispatcher_host is not None) + + if current_host == dispatcher_host: + print(f'starting Dispatcher (dispatcher_host={dispatcher_host})') + d_config = DispatcherConfig(port=6000) + dispatcher = DispatchServer(d_config) + else: + dispatcher = None + + workers = [ create_worker(i, dispatcher_host, current_host) for i in range(num_of_data_workers) ] + print(f'Finished starting dispatcher and {num_of_data_workers} workers') + + wait_for_shutdown_signal(dispatcher, workers) + + +"This function read mode command line argument" +def read_args(): + import argparse, os + parser = argparse.ArgumentParser() + parser.add_argument("--dispatcher_host", type=str) + parser.add_argument("--current_host", type=str, default=os.environ["SM_CURRENT_HOST"]) + parser.add_argument("--num_of_data_workers", type=int) + args, unknown = parser.parse_known_args() + return args + + +if __name__ == "__main__": + args = read_args() + start_dispatcher_and_worker(args.dispatcher_host, args.current_host, args.num_of_data_workers) \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_dnn.py b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_dnn.py new file mode 100644 index 0000000000..cd938b46c7 --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/code/train_dnn.py @@ -0,0 +1,153 @@ +from tensorflow.keras.layers.experimental import preprocessing +from tensorflow.keras.applications.resnet50 import ResNet50 +import tensorflow_addons as tfa +import tensorflow as tf +import os +import horovod.tensorflow.keras as hvd + + +# dilation filter +def dilate(image, label): + dilateFilter = tf.zeros([3, 3, 3], tf.uint8) + image = tf.expand_dims(image, 0) + image = tf.nn.dilation2d( + image, dilateFilter, strides=[1, 1, 1, 1], + dilations=[1, 1, 1, 1], + padding='SAME', + data_format='NHWC') + image = tf.squeeze(image) + return image, label +# blur filter + + +def blur(image, label): + image = tfa.image.gaussian_filter2d(image=image, + filter_shape=(11, 11), sigma=0.8) + return image, label + +# rescale filter +def rescale(image, label): + image = preprocessing.Rescaling(1.0 / 255)(image) + return image, label + + +# augmentation filters +def augment(image, label): + data_augmentation = tf.keras.Sequential( + [preprocessing.RandomFlip("horizontal"), + preprocessing.RandomRotation(0.1), + preprocessing.RandomZoom(0.1)]) + image = data_augmentation(image) + return image, label + + +# This function generates a dataset consisting 32x32x3 random images +# And a corresponding random label representing 10 different classes. +# As this dataset is randomly generated, you should not expect the model +# to converge in a meaningful way, it doesn't matter as our intent is +# only to measure data pipeline and DNN optimization throughput +def generate_artificial_dataset(): + import numpy as np + x_train = np.random.randint(0, 255, size=(32000, 32, 32, 3), dtype=np.uint8) + y_train = np.random.randint(0, 10, size=(32000,1)) + train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)) + return train_dataset + + +def get_dataset(batch_size : int, use_tf_data_service : bool, dispatcher_host : str): + autotune = tf.data.experimental.AUTOTUNE + options = tf.data.Options() + options.experimental_deterministic = False + + ds = generate_artificial_dataset().shuffle(10000).repeat() + + ds = ds.map(dilate, num_parallel_calls=autotune) + ds = ds.map(blur, num_parallel_calls=autotune) + ds = ds.map(rescale,num_parallel_calls=autotune) + ds = ds.map(augment, num_parallel_calls=autotune) + ds = ds.batch(batch_size) + + if use_tf_data_service: + ds = ds.apply(tf.data.experimental.service.distribute( + processing_mode="parallel_epochs", + service=f'grpc://{dispatcher_host}:6000',), + ) + + #ds = ds.take(1).cache().repeat() + ds = ds.prefetch(autotune) + return ds + +"This function read mode command line argument" +def read_args(): + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--tf_data_mode', type=str, default='local', + help="'service' distributed dataset using tf.data.service. 'local' use standard tf.data") + parser.add_argument('--steps_per_epoch', type=int, default=1) + parser.add_argument('--batch_size', type=int) + parser.add_argument('--epochs', type=int, default=1) + parser.add_argument("--n_gpus", type=str, + default=os.environ.get("SM_NUM_GPUS")) + parser.add_argument("--dispatcher_host", type=str) + parser.add_argument("--num_of_data_workers", type=int, default=1) + parser.add_argument("--output_data_dir", type=str, + default=os.environ.get("SM_OUTPUT_DATA_DIR")) + parser.add_argument("--model_dir", type=str, + default=os.environ.get("SM_MODEL_DIR")) + parser.add_argument("--checkpoint-path",type=str,default="/opt/ml/checkpoints",help="Path where checkpoints are saved.") + args = parser.parse_args() + return args + +if __name__ == "__main__": + args = read_args() + hvd.init() + # Horovod: pin GPU to be used to process local rank (one GPU per process) + gpus = tf.config.experimental.list_physical_devices('GPU') + print(str(gpus)) + for gpu in gpus: + tf.config.experimental.set_memory_growth(gpu, True) + if gpus: + print(f'hvd.local_rank() {hvd.local_rank()}') + tf.config.experimental.set_visible_devices(gpus[hvd.local_rank()], 'GPU') + + model = ResNet50(weights=None, + input_shape=(32, 32, 3), + classes=10) + + model.compile(loss=tf.losses.SparseCategoricalCrossentropy(), + optimizer=tf.optimizers.Adam()) + # Horovod: adjust learning rate based on number of GPUs. + scaled_lr = 0.001 * hvd.size() + opt = tf.optimizers.Adam(scaled_lr) + opt = hvd.DistributedOptimizer( + opt, backward_passes_per_step=1, average_aggregated_gradients=True) + + model.compile(loss=tf.losses.SparseCategoricalCrossentropy(), + optimizer=opt, + experimental_run_tf_function=False) + + callbacks = [ + hvd.callbacks.BroadcastGlobalVariablesCallback(0), + hvd.callbacks.MetricAverageCallback(), + hvd.callbacks.LearningRateWarmupCallback(initial_lr=scaled_lr, warmup_epochs=3, verbose=1), + ] + # Horovod: save checkpoints only on worker 0 to prevent other workers from corrupting them. + if hvd.rank() == 0: + path = os.path.join(args.checkpoint_path, './checkpoint-{epoch}.h5') + callbacks.append(tf.keras.callbacks.ModelCheckpoint(path)) + + # Horovod: write logs on worker 0. + verbose = 1 if hvd.rank() == 0 else 0 + + assert(args.tf_data_mode == 'local' or args.tf_data_mode == 'service') + print(f'Running in {args.tf_data_mode} tf_data_mode.') + dataset = get_dataset(batch_size = args.batch_size, use_tf_data_service=(args.tf_data_mode == 'service'), dispatcher_host = args.dispatcher_host) + + model.fit( dataset, + steps_per_epoch=args.steps_per_epoch, + callbacks=callbacks, + epochs=args.epochs, + verbose=2,) + + if hvd.rank() == 0: + model.save(os.path.join(args.model_dir, '000000001'), 'my_model.h5') \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/hetero-tensorflow-restnet50.ipynb b/training/heterogeneous-clusters/tf.data.service.sagemaker/hetero-tensorflow-restnet50.ipynb new file mode 100644 index 0000000000..61cdc56cf5 --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/hetero-tensorflow-restnet50.ipynb @@ -0,0 +1,1136 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TensorFlow's tf.data.service with Amazon SageMaker Training Heterogeneous Clusters\n", + "\n", + "---\n", + "### Introduction\n", + "\n", + "Heterogeneous clusters enable launching training jobs that use multiple instance types in a single job. This capability can improve your training cost and speed by running different parts of the model training on the most suitable instance type. This use case typically happens in computer vision (CV) deep learning (DL) training, where training is bottleneck on CPU resources needed for data augmentation, leaving the expensive GPU underutilized. Heterogeneous clusters enable you to add more CPU resources to fully utilize GPUs to increase training speed and cost-efficiency. For more details, you can find the documentation of this feature [here](https://docs.aws.amazon.com/sagemaker/latest/dg/train-heterogeneous-cluster.html).\n", + "\n", + "This notebook demonstrates how to use Heterogeneous Clusters with TensorFlow's [tf.data.service](https://www.TensorFlow.org/api_docs/python/tf/data/experimental/service). It includes training a CPU intensive DL CV workload. Comparing cost and performance between homogeneous and heterogeneous training configurations. \n", + "\n", + "💡To get started quickly with heterogeneous clusters, we suggest you'll reuse the provided code as a quick way to migrate your workload from a local tf.data pipeline to a distributed tf.data.service pipeline. You'll need to change [code/train_dnn.py](./code/train_dnn.py), while keeping [code/train_data.py](./code/train_data.py) and [code/launcher.py](code/launcher.py) intact. This is explained below in the [Workload Details] section.\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook covers:\n", + "- A guide to switching from a homogeneous job (single instance type) to a heterogeneous job (multiple instance types)\n", + "- Explaining to use Heterogeneous clusters with TensorFlow's tf.data.service\n", + "- Set up Amazon SageMaker Studio Notebook \n", + "- Run homogeneous cluster training job \n", + "- Run heterogeneous cluster training job \n", + "- Compare time and cost to train between homogeneous and heterogeneous clusters\n", + "- Conclusion\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### A guide to switching from a homogeneous to a heterogeneous job\n", + "\n", + "This notebook runs and compares these two workloads:\n", + "\n", + "Homogeneous Training Job - The image shows a ml.p4d.24xlarge instance GPUs is under-utilized due to a CPU bottleneck. \n", + "\"homogeneous\n", + " \n", + "Heterogeneous Training Job - The image shows two ml.c5.18xlarge instances with extra CPU cores, to reduce the CPU bottleneck and increase GPU usage, to improve training speed cost-efficiency. \n", + " \"Heterogeneous\n", + "\n", + "In each workload: Training data is an artificially generated dataset consisting of 32x32x3 images with random pixel values, and a corresponding random label representing 10 different classes. As this dataset is randomly generated, you should not expect the model to converge in a meaningful way. This shouldn't matter as our intent is only to measure data pipeline and neural network optimization throughput expressed in epoch/step time. \n", + "The model we used is [Resnet50](https://www.TensorFlow.org/api_docs/python/tf/keras/applications/ResNet50). The workloads uses an 8 GPUs instance, ml.p4d.24xlarge, and uses Horovod for data parallelization. \n", + "\n", + "The heterogeneous job will include two instance groups:\n", + "- **data_group** - A group of CPU instances that will run data pre-processing code.\n", + "- **dnn_group** - A group of GPU instances that will run Deep Neural Network training code.\n", + "\n", + "In this example, the inter-node communication between CPU and GPU instance groups is implemented using [TensorFlow data service feature](https://www.TensorFlow.org/api_docs/python/tf/data/experimental/service). This feature allows offloading a configurable amount of preprocessing work to worker machines. Note that SageMaker's Heterogeneous cluster does not provide out-of-the-box support for inter-instance_group communication, and it is up to the user to implement (we provide reference implementation here).\n", + "\n", + "This notebook refers following files and folders:\n", + "- [code/train_dnn.py](./code/train_dnn.py) - this is standard TF training script, it has a single reference to tf.data.service when setting up the tf.data pipeline. This script will be executed on GPU instances belonging to the dnn_group.\n", + "- [code/train_data.py](./code/train_data.py) - this script starts tf.data.service services like a tf.data.service Dispatcher and tf.data.service Worker processes. You shouldn't edit this script when adjusting to your workload.\n", + "- [code/launcher.py](./code/launcher.py) - Entry point training script. This is the script that SageMaker Training will start on all instances (all instances groups must share the same entry point script in heterogeneous clusters). `launcher.py` is responsible for detecting the instance group the instance belong to, and start `train_dnn.py` and `train_data.py` accordingly. It is also responsible for shutting down tf.data.services the training script completes (`train_dnn.py`) so all instances exit allowing the SageMaker training job to complete. \n", + "In every instance `luncher.py` will use `train_data.py` to start a tf.data.service worker server (As all instance types have CPUs that could be used for preprocessing). `luncher.py` will start a single tf.data.service dispatcher server (on the first instance of the `data_group`). \n", + "`luncher.py` will start the `train_dnn.py` script in all GPU instances (`dnn_group` instances).\n", + "\n", + "#### Learn more about tf.data.service processes\n", + "`tf.data.service Dispatcher` - The dispatcher server acts as the control plain for tf.data.service; Being responsible for registering worker servers and assigning preprocessing tasks to them. Each training job has a single Dispatcher running in the first instance of the `data_group` and listens on port 6000.\n", + "`tf.data.service Workers` - Worker servers carry out the data processing. Each instance could have one or more workers (listen on port 6001/6002/...).\n", + "\n", + "##### Defining what part of your pipeline runs in which instance group\n", + " When you apply `tf.data.experimental.service.distribute()` on your dataset, all preprocessing operations defined up to the apply will run on the tf.data.service workers, and all dataset operations defined afterwords will run on the local process. All instances will need access to a dataset you'll make available through a SageMaker training data channel. You do have the option of limiting which instance group will see which training data channel.\n", + "\n", + "The below figure shows sequence of events of setting up and running in a tf.data.service based heterogeneous cluster training job.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### security groups update if running in private VPC\n", + "This section is relevant if you plan to [run in a private VPC](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html) (passing `subnets` and `security_group_ids` parameters when defining an Estimator). \n", + "SageMaker documentation recommends you [add](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html#train-vpc-vpc) a rule for your security group that allows inbound connections between members of the same security group, for all TCP communication. This will also cover for the tf.data.service related traffic between instances:\n", + "- tf.data.service Dispatcher node will listen for incoming connections on port 6000 (configurable) from all nodes.\n", + "- tf.data.service Workers will listen on ports 6001-6006 from all nodes.\n", + "- Each node listens on port 16000 for a tf.data.service shutdown signal from all nodes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### A. Set up SageMaker Studio notebook\n", + "#### Before you start\n", + "Ensure you have selected Python 3 (_TensorFlow 2.6 Python 3.8 CPU Optimized_) image for your SageMaker Studio Notebook instance, and running on _ml.t3.medium_ instance type.\n", + "\n", + "#### Step 1 - Upgrade SageMaker SDK and dependent packages \n", + "Heterogeneous Clusters for Amazon SageMaker model training was [announced](https://aws.amazon.com/about-aws/whats-new/2022/07/announcing-heterogeneous-clusters-amazon-sagemaker-model-training) on 07/08/2022. This feature release requires you to have updated SageMaker SDK, Boto3 client." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: boto3 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (1.24.72)\n", + "Collecting boto3\n", + " Downloading boto3-1.24.80-py3-none-any.whl (132 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.5/132.5 kB 925.9 kB/s eta 0:00:00\n", + "Requirement already satisfied: botocore in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (1.27.72)\n", + "Collecting botocore\n", + " Downloading botocore-1.27.80-py3-none-any.whl (9.1 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.1/9.1 MB 16.4 MB/s eta 0:00:00\n", + "Requirement already satisfied: awscli in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (1.25.73)\n", + "Collecting awscli\n", + " Downloading awscli-1.25.81-py3-none-any.whl (3.9 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 38.4 MB/s eta 0:00:00\n", + "Requirement already satisfied: sagemaker in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (2.109.0)\n", + "Requirement already satisfied: s3transfer<0.7.0,>=0.6.0 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from boto3) (0.6.0)\n", + "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/jmespath-1.0.0-py3.9.egg (from boto3) (1.0.0)\n", + "Requirement already satisfied: urllib3<1.27,>=1.25.4 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/urllib3-1.26.9-py3.9.egg (from botocore) (1.26.9)\n", + "Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/python_dateutil-2.8.2-py3.9.egg (from botocore) (2.8.2)\n", + "Requirement already satisfied: PyYAML<5.5,>=3.10 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from awscli) (5.4.1)\n", + "Requirement already satisfied: docutils<0.17,>=0.10 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from awscli) (0.16)\n", + "Requirement already satisfied: colorama<0.4.5,>=0.2.5 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from awscli) (0.4.4)\n", + "Requirement already satisfied: rsa<4.8,>=3.1.2 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from awscli) (4.7.2)\n", + "Requirement already satisfied: importlib-metadata<5.0,>=1.4.0 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/importlib_metadata-4.11.3-py3.9.egg (from sagemaker) (4.11.3)\n", + "Requirement already satisfied: pathos in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/pathos-0.2.8-py3.9.egg (from sagemaker) (0.2.8)\n", + "Requirement already satisfied: protobuf3-to-dict<1.0,>=0.1.5 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/protobuf3_to_dict-0.1.5-py3.9.egg (from sagemaker) (0.1.5)\n", + "Requirement already satisfied: pandas in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/pandas-1.4.2-py3.9-macosx-10.9-x86_64.egg (from sagemaker) (1.4.2)\n", + "Requirement already satisfied: numpy<2.0,>=1.9.0 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from sagemaker) (1.22.4)\n", + "Requirement already satisfied: attrs<22,>=20.3.0 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/attrs-20.3.0-py3.9.egg (from sagemaker) (20.3.0)\n", + "Requirement already satisfied: smdebug-rulesconfig==1.0.1 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/smdebug_rulesconfig-1.0.1-py3.9.egg (from sagemaker) (1.0.1)\n", + "Requirement already satisfied: google-pasta in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/google_pasta-0.2.0-py3.9.egg (from sagemaker) (0.2.0)\n", + "Requirement already satisfied: protobuf<4.0,>=3.1 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from sagemaker) (3.20.1)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/packaging-21.3-py3.9.egg (from sagemaker) (21.3)\n", + "Requirement already satisfied: zipp>=0.5 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/zipp-3.7.0-py3.9.egg (from importlib-metadata<5.0,>=1.4.0->sagemaker) (3.7.0)\n", + "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/pyparsing-3.0.7-py3.9.egg (from packaging>=20.0->sagemaker) (3.0.7)\n", + "Requirement already satisfied: six in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from protobuf3-to-dict<1.0,>=0.1.5->sagemaker) (1.15.0)\n", + "Requirement already satisfied: pyasn1>=0.1.3 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages (from rsa<4.8,>=3.1.2->awscli) (0.4.8)\n", + "Requirement already satisfied: pytz>=2020.1 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/pytz-2022.1-py3.9.egg (from pandas->sagemaker) (2022.1)\n", + "Requirement already satisfied: dill>=0.3.4 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/dill-0.3.4-py3.9.egg (from pathos->sagemaker) (0.3.4)\n", + "Requirement already satisfied: multiprocess>=0.70.12 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/multiprocess-0.70.12.2-py3.9.egg (from pathos->sagemaker) (0.70.12.2)\n", + "Requirement already satisfied: pox>=0.3.0 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/pox-0.3.0-py3.9.egg (from pathos->sagemaker) (0.3.0)\n", + "Requirement already satisfied: ppft>=1.6.6.4 in /Users/gili/dev/hetro-training/.venv/lib/python3.9/site-packages/ppft-1.6.6.4-py3.9.egg (from pathos->sagemaker) (1.6.6.4)\n", + "Installing collected packages: botocore, boto3, awscli\n", + " Attempting uninstall: botocore\n", + " Found existing installation: botocore 1.27.72\n", + " Uninstalling botocore-1.27.72:\n", + " Successfully uninstalled botocore-1.27.72\n", + " Attempting uninstall: boto3\n", + " Found existing installation: boto3 1.24.72\n", + " Uninstalling boto3-1.24.72:\n", + " Successfully uninstalled boto3-1.24.72\n", + " Attempting uninstall: awscli\n", + " Found existing installation: awscli 1.25.73\n", + " Uninstalling awscli-1.25.73:\n", + " Successfully uninstalled awscli-1.25.73\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "sagemaker-training 4.2.2 requires protobuf<3.20,>=3.9.2, but you have protobuf 3.20.1 which is incompatible.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Successfully installed awscli-1.25.81 boto3-1.24.80 botocore-1.27.80\n" + ] + } + ], + "source": [ + "%%bash\n", + "python3 -m pip install --upgrade boto3 botocore awscli sagemaker" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 2 - Restart the notebook kernel " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#import IPython\n", + "#IPython.Application.instance().kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 3 - Validate SageMaker Python SDK and TensorFlow versions\n", + "Ensure the output of the cell below reflects:\n", + "\n", + "- SageMaker Python SDK version 2.98.0 or above, \n", + "- boto3 1.24 or above \n", + "- botocore 1.27 or above \n", + "- TensorFlow 2.6 or above " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Name: sagemaker\n", + "Version: 2.109.0\n", + "---\n", + "Name: boto3\n", + "Version: 1.24.80\n", + "---\n", + "Name: botocore\n", + "Version: 1.27.80\n", + "---\n", + "Name: tensorflow\n", + "Version: 2.8.0\n", + "---\n", + "Name: protobuf\n", + "Version: 3.20.1\n" + ] + } + ], + "source": [ + "!pip show sagemaker boto3 botocore tensorflow protobuf |egrep 'Name|Version|---'" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "import datetime\n", + "\n", + "import sagemaker\n", + "from sagemaker import get_execution_role\n", + "from sagemaker.instance_group import InstanceGroup\n", + "\n", + "sess = sagemaker.Session()\n", + "role = get_execution_role()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Run a homogeneous training job\n", + "#### Step 1: Set up the training environment\n", + "In this step, we define and submit a homogeneous training job. It uses a single instance type (p4d.24xlarge) with 8 GPUs. The analysis of the job will shows that it is CPU bound and therefore its GPUs are underutilized." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import datetime\n", + "from sagemaker.tensorflow import TensorFlow\n", + "from sagemaker.instance_group import InstanceGroup\n", + "import os\n", + "\n", + "hyperparameters = {\n", + " \"epochs\": 10,\n", + " \"steps_per_epoch\": 500,\n", + " \"batch_size\": 1024,\n", + " \"tf_data_mode\": \"local\", # We won't be using tf.data.service ('service') for this homogeneous job\n", + " \"num_of_data_workers\": 0, # We won't be using tf.data.service ('service') for this homogeneous job\n", + "}\n", + "\n", + "estimator = TensorFlow(\n", + " entry_point=\"launcher.py\",\n", + " source_dir=\"code\",\n", + " framework_version=\"2.9.1\",\n", + " py_version=\"py39\",\n", + " role=role,\n", + " volume_size=10,\n", + " max_run=1800, # 30 minutes\n", + " disable_profiler=True,\n", + " instance_type=\"ml.p4d.24xlarge\",\n", + " instance_count=1,\n", + " hyperparameters=hyperparameters,\n", + " distribution={\n", + " \"mpi\": {\n", + " \"enabled\": True,\n", + " \"processes_per_host\": 8, # 8 GPUs per host\n", + " \"custom_mpi_options\": \"--NCCL_DEBUG WARN\",\n", + " },\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 2: Submit the training job\n", + "\n", + "Note: For the logs, click on **View logs** from the **Training Jobs** node in **Amazon SageMaker Console**. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-09-24 11:28:23 Starting - Starting the training job......\n", + "2022-09-24 11:29:08 Starting - Preparing the instances for training........................\n", + "2022-09-24 11:33:34 Downloading - Downloading input data\n", + "2022-09-24 11:33:34 Training - Downloading the training image..................\n", + "2022-09-24 11:37:00 Training - Training image download completed. Training in progress..2022-09-24 11:37:05.792579: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "2022-09-24 11:37:05.801314: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "2022-09-24 11:37:06.269740: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "2022-09-24 11:37:13,412 sagemaker-training-toolkit INFO Imported framework sagemaker_tensorflow_container.training\n", + "2022-09-24 11:37:14,075 sagemaker-training-toolkit INFO Installing dependencies from requirements.txt:\n", + "/usr/local/bin/python3.9 -m pip install -r requirements.txt\n", + "Collecting protobuf==3.20.1\n", + "Downloading protobuf-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.0 MB)\n", + "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 39.6 MB/s eta 0:00:00\n", + "Collecting tensorflow-addons==0.17.0\n", + "Downloading tensorflow_addons-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n", + "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 51.6 MB/s eta 0:00:00\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.9/site-packages (from tensorflow-addons==0.17.0->-r requirements.txt (line 2)) (21.3)\n", + "Requirement already satisfied: typeguard>=2.7 in /usr/local/lib/python3.9/site-packages (from tensorflow-addons==0.17.0->-r requirements.txt (line 2)) (2.13.3)\n", + "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.9/site-packages (from packaging->tensorflow-addons==0.17.0->-r requirements.txt (line 2)) (3.0.9)\n", + "Installing collected packages: protobuf, tensorflow-addons\n", + "Attempting uninstall: protobuf\n", + "Found existing installation: protobuf 3.19.4\n", + "Uninstalling protobuf-3.19.4:\n", + "Successfully uninstalled protobuf-3.19.4\n", + "Attempting uninstall: tensorflow-addons\n", + "Found existing installation: tensorflow-addons 0.17.1\n", + "Uninstalling tensorflow-addons-0.17.1:\n", + "Successfully uninstalled tensorflow-addons-0.17.1\n", + "ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "tf-models-official 2.9.1 requires tensorflow~=2.9.0, which is not installed.\n", + "tensorflow-gpu 2.9.1 requires protobuf<3.20,>=3.9.2, but you have protobuf 3.20.1 which is incompatible.\n", + "tensorboard 2.9.1 requires protobuf<3.20,>=3.9.2, but you have protobuf 3.20.1 which is incompatible.\n", + "sagemaker-training 4.1.4.dev0 requires protobuf<3.20,>=3.9.2, but you have protobuf 3.20.1 which is incompatible.\n", + "Successfully installed protobuf-3.20.1 tensorflow-addons-0.17.0\n", + "WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\n", + "[notice] A new release of pip available: 22.1.2 -> 22.2.2\n", + "[notice] To update, run: pip install --upgrade pip\n", + "2022-09-24 11:37:24,079 sagemaker-training-toolkit INFO Waiting for the process to finish and give a return code.\n", + "2022-09-24 11:37:24,079 sagemaker-training-toolkit INFO Done waiting for a return code. Received 0 from exiting process.\n", + "2022-09-24 11:37:24,258 sagemaker-training-toolkit INFO Starting MPI run as worker node.\n", + "2022-09-24 11:37:24,258 sagemaker-training-toolkit INFO Creating SSH daemon.\n", + "2022-09-24 11:37:24,274 sagemaker-training-toolkit INFO Waiting for MPI workers to establish their SSH connections\n", + "2022-09-24 11:37:24,274 sagemaker-training-toolkit INFO Env Hosts: ['algo-1'] Hosts: ['algo-1:8'] process_per_hosts: 8 num_processes: 8\n", + "2022-09-24 11:37:24,276 sagemaker-training-toolkit INFO Network interface name: eth0\n", + "2022-09-24 11:37:24,368 sagemaker-training-toolkit INFO Invoking user script\n", + "Training Env:\n", + "{\n", + " \"additional_framework_parameters\": {\n", + " \"sagemaker_mpi_custom_mpi_options\": \"--NCCL_DEBUG WARN\",\n", + " \"sagemaker_mpi_enabled\": true,\n", + " \"sagemaker_mpi_num_of_processes_per_host\": 8\n", + " },\n", + " \"channel_input_dirs\": {},\n", + " \"current_host\": \"algo-1\",\n", + " \"current_instance_group\": \"homogeneousCluster\",\n", + " \"current_instance_group_hosts\": [\n", + " \"algo-1\"\n", + " ],\n", + " \"current_instance_type\": \"ml.p4d.24xlarge\",\n", + " \"distribution_hosts\": [\n", + " \"algo-1\"\n", + " ],\n", + " \"distribution_instance_groups\": [\n", + " \"homogeneousCluster\"\n", + " ],\n", + " \"framework_module\": \"sagemaker_tensorflow_container.training:main\",\n", + " \"hosts\": [\n", + " \"algo-1\"\n", + " ],\n", + " \"hyperparameters\": {\n", + " \"batch_size\": 1024,\n", + " \"epochs\": 10,\n", + " \"model_dir\": \"/opt/ml/model\",\n", + " \"num_of_data_workers\": 0,\n", + " \"steps_per_epoch\": 500,\n", + " \"tf_data_mode\": \"local\"\n", + " },\n", + " \"input_config_dir\": \"/opt/ml/input/config\",\n", + " \"input_data_config\": {},\n", + " \"input_dir\": \"/opt/ml/input\",\n", + " \"instance_groups\": [\n", + " \"homogeneousCluster\"\n", + " ],\n", + " \"instance_groups_dict\": {\n", + " \"homogeneousCluster\": {\n", + " \"instance_group_name\": \"homogeneousCluster\",\n", + " \"instance_type\": \"ml.p4d.24xlarge\",\n", + " \"hosts\": [\n", + " \"algo-1\"\n", + " ]\n", + " }\n", + " },\n", + " \"is_hetero\": false,\n", + " \"is_master\": true,\n", + " \"job_name\": \"homogeneous-20220924T112821Z-1\",\n", + " \"log_level\": 20,\n", + " \"master_hostname\": \"algo-1\",\n", + " \"model_dir\": \"/opt/ml/model\",\n", + " \"module_dir\": \"s3://sagemaker-us-east-1-331113010199/homogeneous-20220924T112821Z-1/source/sourcedir.tar.gz\",\n", + " \"module_name\": \"launcher\",\n", + " \"network_interface_name\": \"eth0\",\n", + " \"num_cpus\": 96,\n", + " \"num_gpus\": 8,\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", + " \"current_instance_type\": \"ml.p4d.24xlarge\",\n", + " \"current_group_name\": \"homogeneousCluster\",\n", + " \"hosts\": [\n", + " \"algo-1\"\n", + " ],\n", + " \"instance_groups\": [\n", + " {\n", + " \"instance_group_name\": \"homogeneousCluster\",\n", + " \"instance_type\": \"ml.p4d.24xlarge\",\n", + " \"hosts\": [\n", + " \"algo-1\"\n", + " ]\n", + " }\n", + " ],\n", + " \"network_interface_name\": \"eth0\"\n", + " },\n", + " \"user_entry_point\": \"launcher.py\"\n", + "}\n", + "Environment variables:\n", + "SM_HOSTS=[\"algo-1\"]\n", + "SM_NETWORK_INTERFACE_NAME=eth0\n", + "SM_HPS={\"batch_size\":1024,\"epochs\":10,\"model_dir\":\"/opt/ml/model\",\"num_of_data_workers\":0,\"steps_per_epoch\":500,\"tf_data_mode\":\"local\"}\n", + "SM_USER_ENTRY_POINT=launcher.py\n", + "SM_FRAMEWORK_PARAMS={\"sagemaker_mpi_custom_mpi_options\":\"--NCCL_DEBUG WARN\",\"sagemaker_mpi_enabled\":true,\"sagemaker_mpi_num_of_processes_per_host\":8}\n", + "SM_RESOURCE_CONFIG={\"current_group_name\":\"homogeneousCluster\",\"current_host\":\"algo-1\",\"current_instance_type\":\"ml.p4d.24xlarge\",\"hosts\":[\"algo-1\"],\"instance_groups\":[{\"hosts\":[\"algo-1\"],\"instance_group_name\":\"homogeneousCluster\",\"instance_type\":\"ml.p4d.24xlarge\"}],\"network_interface_name\":\"eth0\"}\n", + "SM_INPUT_DATA_CONFIG={}\n", + "SM_OUTPUT_DATA_DIR=/opt/ml/output/data\n", + "SM_CHANNELS=[]\n", + "SM_CURRENT_HOST=algo-1\n", + "SM_CURRENT_INSTANCE_TYPE=ml.p4d.24xlarge\n", + "SM_CURRENT_INSTANCE_GROUP=homogeneousCluster\n", + "SM_CURRENT_INSTANCE_GROUP_HOSTS=[\"algo-1\"]\n", + "SM_INSTANCE_GROUPS=[\"homogeneousCluster\"]\n", + "SM_INSTANCE_GROUPS_DICT={\"homogeneousCluster\":{\"hosts\":[\"algo-1\"],\"instance_group_name\":\"homogeneousCluster\",\"instance_type\":\"ml.p4d.24xlarge\"}}\n", + "SM_DISTRIBUTION_INSTANCE_GROUPS=[\"homogeneousCluster\"]\n", + "SM_IS_HETERO=false\n", + "SM_MODULE_NAME=launcher\n", + "SM_LOG_LEVEL=20\n", + "SM_FRAMEWORK_MODULE=sagemaker_tensorflow_container.training:main\n", + "SM_INPUT_DIR=/opt/ml/input\n", + "SM_INPUT_CONFIG_DIR=/opt/ml/input/config\n", + "SM_OUTPUT_DIR=/opt/ml/output\n", + "SM_NUM_CPUS=96\n", + "SM_NUM_GPUS=8\n", + "SM_MODEL_DIR=/opt/ml/model\n", + "SM_MODULE_DIR=s3://sagemaker-us-east-1-331113010199/homogeneous-20220924T112821Z-1/source/sourcedir.tar.gz\n", + "SM_TRAINING_ENV={\"additional_framework_parameters\":{\"sagemaker_mpi_custom_mpi_options\":\"--NCCL_DEBUG WARN\",\"sagemaker_mpi_enabled\":true,\"sagemaker_mpi_num_of_processes_per_host\":8},\"channel_input_dirs\":{},\"current_host\":\"algo-1\",\"current_instance_group\":\"homogeneousCluster\",\"current_instance_group_hosts\":[\"algo-1\"],\"current_instance_type\":\"ml.p4d.24xlarge\",\"distribution_hosts\":[\"algo-1\"],\"distribution_instance_groups\":[\"homogeneousCluster\"],\"framework_module\":\"sagemaker_tensorflow_container.training:main\",\"hosts\":[\"algo-1\"],\"hyperparameters\":{\"batch_size\":1024,\"epochs\":10,\"model_dir\":\"/opt/ml/model\",\"num_of_data_workers\":0,\"steps_per_epoch\":500,\"tf_data_mode\":\"local\"},\"input_config_dir\":\"/opt/ml/input/config\",\"input_data_config\":{},\"input_dir\":\"/opt/ml/input\",\"instance_groups\":[\"homogeneousCluster\"],\"instance_groups_dict\":{\"homogeneousCluster\":{\"hosts\":[\"algo-1\"],\"instance_group_name\":\"homogeneousCluster\",\"instance_type\":\"ml.p4d.24xlarge\"}},\"is_hetero\":false,\"is_master\":true,\"job_name\":\"homogeneous-20220924T112821Z-1\",\"log_level\":20,\"master_hostname\":\"algo-1\",\"model_dir\":\"/opt/ml/model\",\"module_dir\":\"s3://sagemaker-us-east-1-331113010199/homogeneous-20220924T112821Z-1/source/sourcedir.tar.gz\",\"module_name\":\"launcher\",\"network_interface_name\":\"eth0\",\"num_cpus\":96,\"num_gpus\":8,\"output_data_dir\":\"/opt/ml/output/data\",\"output_dir\":\"/opt/ml/output\",\"output_intermediate_dir\":\"/opt/ml/output/intermediate\",\"resource_config\":{\"current_group_name\":\"homogeneousCluster\",\"current_host\":\"algo-1\",\"current_instance_type\":\"ml.p4d.24xlarge\",\"hosts\":[\"algo-1\"],\"instance_groups\":[{\"hosts\":[\"algo-1\"],\"instance_group_name\":\"homogeneousCluster\",\"instance_type\":\"ml.p4d.24xlarge\"}],\"network_interface_name\":\"eth0\"},\"user_entry_point\":\"launcher.py\"}\n", + "SM_USER_ARGS=[\"--batch_size\",\"1024\",\"--epochs\",\"10\",\"--model_dir\",\"/opt/ml/model\",\"--num_of_data_workers\",\"0\",\"--steps_per_epoch\",\"500\",\"--tf_data_mode\",\"local\"]\n", + "SM_OUTPUT_INTERMEDIATE_DIR=/opt/ml/output/intermediate\n", + "SM_HP_BATCH_SIZE=1024\n", + "SM_HP_EPOCHS=10\n", + "SM_HP_MODEL_DIR=/opt/ml/model\n", + "SM_HP_NUM_OF_DATA_WORKERS=0\n", + "SM_HP_STEPS_PER_EPOCH=500\n", + "SM_HP_TF_DATA_MODE=local\n", + "PYTHONPATH=/opt/ml/code:/usr/local/bin:/usr/local/lib/python39.zip:/usr/local/lib/python3.9:/usr/local/lib/python3.9/lib-dynload:/usr/local/lib/python3.9/site-packages:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg:/usr/local/lib/python3.9/site-packages/pyinstrument-3.4.2-py3.9.egg:/usr/local/lib/python3.9/site-packages/pyinstrument_cext-0.2.4-py3.9-linux-x86_64.egg\n", + "Invoking script with the following command:\n", + "mpirun --host algo-1:8 -np 8 --allow-run-as-root --display-map --tag-output -mca btl_tcp_if_include eth0 -mca oob_tcp_if_include eth0 -mca plm_rsh_no_tree_spawn 1 -bind-to none -map-by slot -mca pml ob1 -mca btl ^openib -mca orte_abort_on_non_zero_status 1 -mca btl_vader_single_copy_mechanism none -x NCCL_MIN_NRINGS=4 -x NCCL_SOCKET_IFNAME=eth0 -x NCCL_DEBUG=WARN -x LD_LIBRARY_PATH -x PATH -x LD_PRELOAD=/usr/local/lib/python3.9/site-packages/gethostname.cpython-39-x86_64-linux-gnu.so -x SM_HOSTS -x SM_NETWORK_INTERFACE_NAME -x SM_HPS -x SM_USER_ENTRY_POINT -x SM_FRAMEWORK_PARAMS -x SM_RESOURCE_CONFIG -x SM_INPUT_DATA_CONFIG -x SM_OUTPUT_DATA_DIR -x SM_CHANNELS -x SM_CURRENT_HOST -x SM_CURRENT_INSTANCE_TYPE -x SM_CURRENT_INSTANCE_GROUP -x SM_CURRENT_INSTANCE_GROUP_HOSTS -x SM_INSTANCE_GROUPS -x SM_INSTANCE_GROUPS_DICT -x SM_DISTRIBUTION_INSTANCE_GROUPS -x SM_IS_HETERO -x SM_MODULE_NAME -x SM_LOG_LEVEL -x SM_FRAMEWORK_MODULE -x SM_INPUT_DIR -x SM_INPUT_CONFIG_DIR -x SM_OUTPUT_DIR -x SM_NUM_CPUS -x SM_NUM_GPUS -x SM_MODEL_DIR -x SM_MODULE_DIR -x SM_TRAINING_ENV -x SM_USER_ARGS -x SM_OUTPUT_INTERMEDIATE_DIR -x SM_HP_BATCH_SIZE -x SM_HP_EPOCHS -x SM_HP_MODEL_DIR -x SM_HP_NUM_OF_DATA_WORKERS -x SM_HP_STEPS_PER_EPOCH -x SM_HP_TF_DATA_MODE -x PYTHONPATH /usr/local/bin/python3.9 -m mpi4py launcher.py --batch_size 1024 --epochs 10 --model_dir /opt/ml/model --num_of_data_workers 0 --steps_per_epoch 500 --tf_data_mode local\n", + "Data for JOB [7555,1] offset 0 Total slots allocated 8\n", + " ======================== JOB MAP ========================\n", + " Data for node: ip-10-0-215-180#011Num slots: 8#011Max slots: 0#011Num procs: 8\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 0 Bound: N/A\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 1 Bound: N/A\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 2 Bound: N/A\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 3 Bound: N/A\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 4 Bound: N/A\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 5 Bound: N/A\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 6 Bound: N/A\n", + " #011Process OMPI jobid: [7555,1] App: 0 Process rank: 7 Bound: N/A\n", + " =============================================================\n", + "[1,mpirank:1,algo-1]:env.is_hetero=False\n", + "[1,mpirank:1,algo-1]:current_host=algo-1\n", + "[1,mpirank:1,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:4,algo-1]:env.is_hetero=False\n", + "[1,mpirank:4,algo-1]:current_host=algo-1\n", + "[1,mpirank:4,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:5,algo-1]:env.is_hetero=False\n", + "[1,mpirank:5,algo-1]:current_host=algo-1\n", + "[1,mpirank:5,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:7,algo-1]:env.is_hetero=False\n", + "[1,mpirank:7,algo-1]:current_host=algo-1\n", + "[1,mpirank:7,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:0,algo-1]:env.is_hetero=False\n", + "[1,mpirank:0,algo-1]:current_host=algo-1\n", + "[1,mpirank:0,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:6,algo-1]:env.is_hetero=False\n", + "[1,mpirank:6,algo-1]:current_host=algo-1\n", + "[1,mpirank:6,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:3,algo-1]:env.is_hetero=False\n", + "[1,mpirank:3,algo-1]:current_host=algo-1\n", + "[1,mpirank:3,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:2,algo-1]:env.is_hetero=False\n", + "[1,mpirank:2,algo-1]:current_host=algo-1[1,mpirank:2,algo-1]:\n", + "[1,mpirank:2,algo-1]:Opening process: ['python', './train_dnn.py', '--batch_size', '1024', '--epochs', '10', '--model_dir', '/opt/ml/model', '--num_of_data_workers', '0', '--steps_per_epoch', '500', '--tf_data_mode', 'local']\n", + "[1,mpirank:1,algo-1]:2022-09-24 11:37:25.276381: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:2,algo-1]:2022-09-24 11:37:25.276382: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:4,algo-1]:2022-09-24 11:37:25.276384: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:1,algo-1]:2022-09-24 11:37:25.276524: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:2,algo-1]:2022-09-24 11:37:25.276524: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:4,algo-1]:2022-09-24 11:37:25.276524: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:0,algo-1]:2022-09-24 11:37:25.290991: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:7,algo-1]:2022-09-24 11:37:25.290987: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:3,algo-1]:2022-09-24 11:37:25.290990: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:5,algo-1]:2022-09-24 11:37:25.290991: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:6,algo-1]:2022-09-24 11:37:25.290990: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:0,algo-1]:2022-09-24 11:37:25.291121: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:7,algo-1]:2022-09-24 11:37:25.291122: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:3,algo-1]:2022-09-24 11:37:25.291124: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:5,algo-1]:2022-09-24 11:37:25.291124: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:6,algo-1]:2022-09-24 11:37:25.291121: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:105] SageMaker Profiler is not enabled. The timeline writer thread will not be started, future recorded events will be dropped.\n", + "[1,mpirank:4,algo-1]:2022-09-24 11:37:25.310966: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:2,algo-1]:2022-09-24 11:37:25.310966: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:1,algo-1]:2022-09-24 11:37:25.310966: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:0,algo-1]:2022-09-24 11:37:25.325878: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:7,algo-1]:2022-09-24 11:37:25.325873: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:3,algo-1]:2022-09-24 11:37:25.325878: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:6,algo-1]:2022-09-24 11:37:25.326012: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:5,algo-1]:2022-09-24 11:37:25.326064: W tensorflow/core/profiler/internal/smprofiler_timeline.cc:460] Initializing the SageMaker Profiler.\n", + "[1,mpirank:6,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')]\n", + "[1,mpirank:0,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')]\n", + "[1,mpirank:0,algo-1]:hvd.local_rank() 0\n", + "[1,mpirank:1,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')]\n", + "[1,mpirank:6,algo-1]:hvd.local_rank() 6\n", + "[1,mpirank:1,algo-1]:hvd.local_rank() 1\n", + "[1,mpirank:5,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')][1,mpirank:5,algo-1]:\n", + "[1,mpirank:5,algo-1]:hvd.local_rank() 5\n", + "[1,mpirank:2,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')]\n", + "[1,mpirank:3,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')]\n", + "[1,mpirank:4,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')]\n", + "[1,mpirank:2,algo-1]:hvd.local_rank() 2\n", + "[1,mpirank:7,algo-1]:[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:4', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:5', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:6', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:7', device_type='GPU')]\n", + "[1,mpirank:3,algo-1]:hvd.local_rank() 3\n", + "[1,mpirank:4,algo-1]:hvd.local_rank() 4\n", + "[1,mpirank:7,algo-1]:hvd.local_rank() 7\n", + "[1,mpirank:3,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:6,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:5,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:0,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:7,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:2,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:1,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:4,algo-1]:Running in local tf_data_mode.\n", + "[1,mpirank:1,algo-1]:Epoch 1/10\n", + "[1,mpirank:4,algo-1]:Epoch 1/10\n", + "[1,mpirank:2,algo-1]:Epoch 1/10\n", + "[1,mpirank:3,algo-1]:Epoch 1/10\n", + "[1,mpirank:5,algo-1]:Epoch 1/10\n", + "[1,mpirank:7,algo-1]:Epoch 1/10\n", + "[1,mpirank:0,algo-1]:Epoch 1/10\n", + "[1,mpirank:6,algo-1]:Epoch 1/10\n", + "[1,mpirank:5,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:5,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:5,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:0,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:0,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:0,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:7,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:7,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:7,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:3,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:3,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:3,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:1,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:1,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:1,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:2,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:2,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:2,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:4,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:4,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:4,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:6,algo-1]:Extension horovod.torch has not been built: /usr/local/lib/python3.9/site-packages/horovod/torch/mpi_lib/_mpi_lib.cpython-39-x86_64-linux-gnu.so not found\n", + "[1,mpirank:6,algo-1]:If this is not expected, reinstall Horovod with HOROVOD_WITH_PYTORCH=1 to debug the build error.\n", + "[1,mpirank:6,algo-1]:Warning! MPI libs are missing, but python applications are still available.\n", + "[1,mpirank:1,algo-1]:[2022-09-24 11:37:33.366 algo-1:177 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:4,algo-1]:[2022-09-24 11:37:33.366 algo-1:178 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:5,algo-1]:[2022-09-24 11:37:33.366 algo-1:179 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:0,algo-1]:[2022-09-24 11:37:33.366 algo-1:181 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:3,algo-1]:[2022-09-24 11:37:33.366 algo-1:183 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:2,algo-1]:[2022-09-24 11:37:33.366 algo-1:184 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:6,algo-1]:[2022-09-24 11:37:33.366 algo-1:182 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:7,algo-1]:[2022-09-24 11:37:33.366 algo-1:180 INFO utils.py:27] RULE_JOB_STOP_SIGNAL_FILENAME: None\n", + "[1,mpirank:1,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:2,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:4,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:5,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:6,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:0,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:3,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:1,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:2,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:5,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:4,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:6,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:7,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:0,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:3,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:7,algo-1]:/usr/local/lib/python3.9/site-packages/smdebug-1.0.17b20220701-py3.9.egg/smdebug/profiler/system_metrics_reader.py:63: SyntaxWarning: \"is not\" with a literal. Did you mean \"!=\"?\n", + "[1,mpirank:1,algo-1]:[2022-09-24 11:37:33.581 algo-1:177 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:2,algo-1]:[2022-09-24 11:37:33.581 algo-1:184 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:0,algo-1]:[2022-09-24 11:37:33.582 algo-1:181 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:5,algo-1]:[2022-09-24 11:37:33.582 algo-1:179 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:7,algo-1]:[2022-09-24 11:37:33.582 algo-1:180 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:6,algo-1]:[2022-09-24 11:37:33.582 algo-1:182 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:3,algo-1]:[2022-09-24 11:37:33.582 algo-1:183 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:4,algo-1]:[2022-09-24 11:37:33.582 algo-1:178 INFO profiler_config_parser.py:111] Unable to find config at /opt/ml/input/config/profilerconfig.json. Profiler is disabled.\n", + "[1,mpirank:2,algo-1]:[2022-09-24 11:37:33.639 algo-1:184 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:1,algo-1]:[2022-09-24 11:37:33.639 algo-1:177 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:4,algo-1]:[2022-09-24 11:37:33.639 algo-1:178 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:3,algo-1]:[2022-09-24 11:37:33.639 algo-1:183 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:7,algo-1]:[2022-09-24 11:37:33.639 algo-1:180 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:6,algo-1]:[2022-09-24 11:37:33.639 algo-1:182 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:0,algo-1]:[2022-09-24 11:37:33.639 algo-1:181 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:5,algo-1]:[2022-09-24 11:37:33.639 algo-1:179 INFO json_config.py:91] Creating hook from json_config at /opt/ml/input/config/debughookconfig.json.\n", + "[1,mpirank:1,algo-1]:[2022-09-24 11:37:33.640 algo-1:177 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:4,algo-1]:[2022-09-24 11:37:33.640 algo-1:178 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:2,algo-1]:[2022-09-24 11:37:33.640 algo-1:184 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:3,algo-1]:[2022-09-24 11:37:33.640 algo-1:183 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:7,algo-1]:[2022-09-24 11:37:33.640 algo-1:180 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:6,algo-1]:[2022-09-24 11:37:33.640 algo-1:182 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:0,algo-1]:[2022-09-24 11:37:33.640 algo-1:181 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:2,algo-1]:[2022-09-24 11:37:33.640 algo-1:184 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:1,algo-1]:[2022-09-24 11:37:33.640 algo-1:177 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:4,algo-1]:[2022-09-24 11:37:33.640 algo-1:178 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:2,algo-1]:[2022-09-24 11:37:33.640 algo-1:184 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:4,algo-1]:[2022-09-24 11:37:33.640 algo-1:178 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:1,algo-1]:[2022-09-24 11:37:33.640 algo-1:177 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:5,algo-1]:[2022-09-24 11:37:33.640 algo-1:179 INFO hook.py:201] tensorboard_dir has not been set for the hook. SMDebug will not be exporting tensorboard summaries.\n", + "[1,mpirank:3,algo-1]:[2022-09-24 11:37:33.640 algo-1:183 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:3,algo-1]:[2022-09-24 11:37:33.640 algo-1:183 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:2,algo-1]:[2022-09-24 11:37:33.640 algo-1:184 INFO hook.py:421] Monitoring the collections: losses, sm_metrics, metrics\n", + "[1,mpirank:7,algo-1]:[2022-09-24 11:37:33.640 algo-1:180 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:6,algo-1]:[2022-09-24 11:37:33.640 algo-1:182 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:1,algo-1]:[2022-09-24 11:37:33.640 algo-1:177 INFO hook.py:421] Monitoring the collections: losses, metrics, sm_metrics\n", + "[1,mpirank:4,algo-1]:[2022-09-24 11:37:33.640 algo-1:178 INFO hook.py:421] Monitoring the collections: losses, metrics, sm_metrics\n", + "[1,mpirank:0,algo-1]:[2022-09-24 11:37:33.640 algo-1:181 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:7,algo-1]:[2022-09-24 11:37:33.640 algo-1:180 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:6,algo-1]:[2022-09-24 11:37:33.640 algo-1:182 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:0,algo-1]:[2022-09-24 11:37:33.641 algo-1:181 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:3,algo-1]:[2022-09-24 11:37:33.641 algo-1:183 INFO hook.py:421] Monitoring the collections: losses, sm_metrics, metrics\n", + "[1,mpirank:6,algo-1]:[2022-09-24 11:37:33.641 algo-1:182 INFO hook.py:421] Monitoring the collections: sm_metrics, metrics, losses\n", + "[1,mpirank:7,algo-1]:[2022-09-24 11:37:33.641 algo-1:180 INFO hook.py:421] Monitoring the collections: sm_metrics, losses, metrics\n", + "[1,mpirank:0,algo-1]:[2022-09-24 11:37:33.641 algo-1:181 INFO hook.py:421] Monitoring the collections: sm_metrics, metrics, losses\n", + "[1,mpirank:5,algo-1]:[2022-09-24 11:37:33.641 algo-1:179 INFO hook.py:254] Saving to /opt/ml/output/tensors\n", + "[1,mpirank:5,algo-1]:[2022-09-24 11:37:33.641 algo-1:179 INFO state_store.py:77] The checkpoint config file /opt/ml/input/config/checkpointconfig.json does not exist.\n", + "[1,mpirank:5,algo-1]:[2022-09-24 11:37:33.641 algo-1:179 INFO hook.py:421] Monitoring the collections: metrics, losses, sm_metrics\n", + "[1,mpirank:0,algo-1]:NCCL version 2.10.3+cuda11.2\n", + "[1,mpirank:2,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2246s vs `on_train_batch_end` time: 0.6465s). Check your callbacks.\n", + "[1,mpirank:2,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2246s vs `on_train_batch_end` time: 0.6465s). Check your callbacks.\n", + "[1,mpirank:3,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2247s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:3,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2247s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:0,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2237s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:0,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2237s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:5,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2247s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:5,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2247s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:7,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2241s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:6,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2247s vs `on_train_batch_end` time: 0.6465s). Check your callbacks.\n", + "[1,mpirank:7,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2241s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:6,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2247s vs `on_train_batch_end` time: 0.6465s). Check your callbacks.\n", + "[1,mpirank:1,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2255s vs `on_train_batch_end` time: 0.6463s). Check your callbacks.\n", + "[1,mpirank:1,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2255s vs `on_train_batch_end` time: 0.6463s). Check your callbacks.\n", + "[1,mpirank:4,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2250s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:4,algo-1]:WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.2250s vs `on_train_batch_end` time: 0.6464s). Check your callbacks.\n", + "[1,mpirank:7,algo-1]:500/500 - 121s - loss: 2.4081 - lr: 0.0033 - 121s/epoch - 242ms/step\n", + "[1,mpirank:1,algo-1]:500/500 - 121s - loss: 2.4081 - lr: 0.0033 - 121s/epoch - 242ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 121s - loss: 2.4081 - lr: 0.0033 - 121s/epoch - 242ms/step\n", + "[1,mpirank:4,algo-1]:500/500 - 121s - loss: 2.4081 - lr: 0.0033 - 121s/epoch - 242ms/step\n", + "[1,mpirank:6,algo-1]:500/500 - 121s - loss: 2.4081 - lr: 0.0033 - 121s/epoch - 242ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 121s - loss: 2.4081 - lr: 0.0033 - 121s/epoch - 242ms/step\n", + "[1,mpirank:1,algo-1]:Epoch 2/10\n", + "[1,mpirank:5,algo-1]:Epoch 2/10\n", + "[1,mpirank:7,algo-1]:Epoch 2/10\n", + "[1,mpirank:6,algo-1]:Epoch 2/10\n", + "[1,mpirank:2,algo-1]:Epoch 2/10\n", + "[1,mpirank:4,algo-1]:Epoch 2/10\n", + "[1,mpirank:3,algo-1]:500/500 - 121s - loss: 2.4081 - lr: 0.0033 - 121s/epoch - 242ms/step\n", + "[1,mpirank:3,algo-1]:Epoch 2/10\n", + "[1,mpirank:0,algo-1]:500/500 - 122s - loss: 2.4081 - lr: 0.0033 - 122s/epoch - 245ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 2/10\n", + "[1,mpirank:1,algo-1]:500/500 - 100s - loss: 2.3881 - lr: 0.0057 - 100s/epoch - 199ms/step\n", + "[1,mpirank:4,algo-1]:500/500 - 100s - loss: 2.3881 - lr: 0.0057 - 100s/epoch - 199ms/step\n", + "[1,mpirank:7,algo-1]:500/500 - 100s - loss: 2.3881 - lr: 0.0057 - 100s/epoch - 199ms/step\n", + "[1,mpirank:6,algo-1]:500/500 - 100s - loss: 2.3881 - lr: 0.0057 - 100s/epoch - 199ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 100s - loss: 2.3881 - lr: 0.0057 - 100s/epoch - 199ms/step\n", + "[1,mpirank:3,algo-1]:500/500 - 100s - loss: 2.3881 - lr: 0.0057 - 100s/epoch - 199ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 100s - loss: 2.3881 - lr: 0.0057 - 100s/epoch - 199ms/step\n", + "[1,mpirank:7,algo-1]:Epoch 3/10\n", + "[1,mpirank:5,algo-1]:Epoch 3/10\n", + "[1,mpirank:2,algo-1]:Epoch 3/10\n", + "[1,mpirank:6,algo-1]:Epoch 3/10\n", + "[1,mpirank:4,algo-1]:Epoch 3/10\n", + "[1,mpirank:3,algo-1]:Epoch 3/10\n", + "[1,mpirank:1,algo-1]:Epoch 3/10\n", + "[1,mpirank:0,algo-1]:500/500 - 99s - loss: 2.3881 - lr: 0.0057 - 99s/epoch - 199ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 3/10\n", + "[1,mpirank:6,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:0,algo-1]:\n", + "[1,mpirank:0,algo-1]:Epoch 3: finished gradual learning rate warmup to 0.008.\n", + "[1,mpirank:7,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:1,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:3,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:6,algo-1]:Epoch 4/10\n", + "[1,mpirank:5,algo-1]:Epoch 4/10\n", + "[1,mpirank:2,algo-1]:Epoch 4/10\n", + "[1,mpirank:7,algo-1]:Epoch 4/10\n", + "[1,mpirank:1,algo-1]:Epoch 4/10\n", + "[1,mpirank:3,algo-1]:Epoch 4/10\n", + "[1,mpirank:4,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:4,algo-1]:Epoch 4/10\n", + "[1,mpirank:0,algo-1]:500/500 - 103s - loss: 2.3532 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 4/10\n", + "[1,mpirank:7,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:6,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:4,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:1,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:3,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:6,algo-1]:Epoch 5/10\n", + "[1,mpirank:7,algo-1]:Epoch 5/10\n", + "[1,mpirank:4,algo-1]:Epoch 5/10\n", + "[1,mpirank:1,algo-1]:Epoch 5/10\n", + "[1,mpirank:2,algo-1]:Epoch 5/10\n", + "[1,mpirank:3,algo-1]:Epoch 5/10\n", + "[1,mpirank:5,algo-1]:Epoch 5/10\n", + "[1,mpirank:0,algo-1]:500/500 - 103s - loss: 2.3199 - lr: 0.0080 - 103s/epoch - 206ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 5/10\n", + "[1,mpirank:2,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:6,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:2,algo-1]:Epoch 6/10\n", + "[1,mpirank:7,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:1,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:6,algo-1]:Epoch 6/10\n", + "[1,mpirank:3,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:5,algo-1]:Epoch 6/10\n", + "[1,mpirank:7,algo-1]:Epoch 6/10\n", + "[1,mpirank:1,algo-1]:Epoch 6/10\n", + "[1,mpirank:3,algo-1]:Epoch 6/10\n", + "[1,mpirank:4,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:4,algo-1]:Epoch 6/10\n", + "[1,mpirank:0,algo-1]:500/500 - 100s - loss: 2.3071 - lr: 0.0080 - 100s/epoch - 200ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 6/10\n", + "[1,mpirank:7,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 188ms/step\n", + "[1,mpirank:4,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 188ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 188ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 188ms/step\n", + "[1,mpirank:3,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 188ms/step\n", + "[1,mpirank:4,algo-1]:Epoch 7/10\n", + "[1,mpirank:5,algo-1]:Epoch 7/10\n", + "[1,mpirank:3,algo-1]:Epoch 7/10\n", + "[1,mpirank:7,algo-1]:Epoch 7/10\n", + "[1,mpirank:1,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 188ms/step\n", + "[1,mpirank:2,algo-1]:Epoch 7/10\n", + "[1,mpirank:1,algo-1]:Epoch 7/10\n", + "[1,mpirank:6,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 188ms/step\n", + "[1,mpirank:6,algo-1]:Epoch 7/10\n", + "[1,mpirank:0,algo-1]:500/500 - 94s - loss: 2.3043 - lr: 0.0080 - 94s/epoch - 189ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 7/10\n", + "[1,mpirank:3,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:1,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:3,algo-1]:Epoch 8/10\n", + "[1,mpirank:5,algo-1]:Epoch 8/10\n", + "[1,mpirank:2,algo-1]:Epoch 8/10\n", + "[1,mpirank:6,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:7,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:6,algo-1]:Epoch 8/10\n", + "[1,mpirank:1,algo-1]:Epoch 8/10\n", + "[1,mpirank:7,algo-1]:Epoch 8/10\n", + "[1,mpirank:4,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:4,algo-1]:Epoch 8/10\n", + "[1,mpirank:0,algo-1]:500/500 - 97s - loss: 2.3031 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 8/10\n", + "[1,mpirank:3,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:4,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:7,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:6,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:5,algo-1]:Epoch 9/10\n", + "[1,mpirank:4,algo-1]:Epoch 9/10\n", + "[1,mpirank:7,algo-1]:Epoch 9/10\n", + "[1,mpirank:3,algo-1]:Epoch 9/10\n", + "[1,mpirank:2,algo-1]:Epoch 9/10\n", + "[1,mpirank:6,algo-1]:Epoch 9/10\n", + "[1,mpirank:1,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:1,algo-1]:Epoch 9/10\n", + "[1,mpirank:0,algo-1]:500/500 - 96s - loss: 2.3027 - lr: 0.0080 - 96s/epoch - 192ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 9/10\n", + "[1,mpirank:2,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 210ms/step\n", + "[1,mpirank:3,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 210ms/step\n", + "[1,mpirank:1,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 210ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 210ms/step\n", + "[1,mpirank:2,algo-1]:Epoch 10/10\n", + "[1,mpirank:1,algo-1]:Epoch 10/10\n", + "[1,mpirank:4,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 210ms/step\n", + "[1,mpirank:6,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 210ms/step\n", + "[1,mpirank:3,algo-1]:Epoch 10/10\n", + "[1,mpirank:5,algo-1]:Epoch 10/10\n", + "[1,mpirank:6,algo-1]:Epoch 10/10\n", + "[1,mpirank:4,algo-1]:Epoch 10/10\n", + "[1,mpirank:7,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 210ms/step\n", + "[1,mpirank:7,algo-1]:Epoch 10/10\n", + "[1,mpirank:0,algo-1]:500/500 - 105s - loss: 2.3021 - lr: 0.0080 - 105s/epoch - 209ms/step\n", + "[1,mpirank:0,algo-1]:Epoch 10/10\n", + "[1,mpirank:6,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:7,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:3,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:2,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:5,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:1,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:4,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 194ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 97s - loss: 2.3013 - lr: 0.0080 - 97s/epoch - 193ms/step\n", + "[1,mpirank:4,algo-1]:Process train_dnn.py closed with returncode=0\n", + "[1,mpirank:6,algo-1]:Process train_dnn.py closed with returncode=0\n", + "[1,mpirank:3,algo-1]:Process train_dnn.py closed with returncode=0\n", + "[1,mpirank:1,algo-1]:Process train_dnn.py closed with returncode=0\n", + "[1,mpirank:5,algo-1]:Process train_dnn.py closed with returncode=0\n", + "[1,mpirank:7,algo-1]:Process train_dnn.py closed with returncode=0\n", + "[1,mpirank:2,algo-1]:Process train_dnn.py closed with returncode=0\n", + "[1,mpirank:0,algo-1]:WARNING:absl:Found untraced functions such as _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op while saving (showing 5 of 53). These functions will not be directly callable after loading.\n", + "[1,mpirank:0,algo-1]:INFO:tensorflow:Assets written to: /opt/ml/model/000000001/assets\n", + "[1,mpirank:0,algo-1]:INFO:tensorflow:Assets written to: /opt/ml/model/000000001/assets\n", + "[1,mpirank:0,algo-1]:Process train_dnn.py closed with returncode=0\n", + "2022-09-24 11:54:50,061 sagemaker-training-toolkit INFO Waiting for the process to finish and give a return code.\n", + "2022-09-24 11:54:50,061 sagemaker-training-toolkit INFO Done waiting for a return code. Received 0 from exiting process.\n", + "2022-09-24 11:54:50,062 sagemaker-training-toolkit INFO Reporting training SUCCESS\n", + "\n", + "2022-09-24 11:55:05 Uploading - Uploading generated training model\n", + "2022-09-24 11:55:36 Completed - Training job completed\n", + "Training seconds: 1337\n", + "Billable seconds: 1337\n" + ] + } + ], + "source": [ + "from start_job_utils import fit_with_retries\n", + "fit_with_retries(5, estimator, \n", + " job_name=\"homogeneous-\" + datetime.datetime.utcnow().strftime(\"%Y%m%dT%H%M%SZ\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 3: Analyzing the homogeneous training job throughput and resource usage\n", + "We'll examine: CPU and GPU usage. Epoch time and step time\n", + "\n", + "**CPU and GPU usage analysis** \n", + "\n", + "In the screenshot below we observe that close to all the 96 vCPU of the instance is utilized. While GPU utilization is only ~45%. Clearly if we had more vCPUs we could increase GPU usage significantly to increase job throughput\n", + "\n", + "Note: To view your own job Click on **View instance metrics** from the **Training jobs** in **Amazon SageMaker Console**. Then to rescale the CloudWatch Metrics to 100% on CPU utilization for algo-1 and algo-2, use CloudWatch \"Add Math\" feature and average it out by no. of vCPUs/GPUs on those instance types. We captured metrics definitions used to produce this graph [here](./cloudwatch-metric-definitions/homogenous-workload%20copy.json). \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Epoch time and step time analysis**\n", + "\n", + "For 2nd and 3rd epochs the below should print out: 105s/epoch - 209ms/step." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "%%capture homogeneous_logs\n", + "estimator.sagemaker_session.logs_for_job(estimator.latest_training_job.name)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Printing step time for epochs and steps for homogeneous-20220923T231801Z\n", + "[1,mpirank:0,algo-1]:500/500 - 117s - loss: 2.4153 - lr: 0.0033 - 117s/epoch - 234ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 92s - loss: 2.3755 - lr: 0.0057 - 92s/epoch - 184ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 92s - loss: 2.3472 - lr: 0.0080 - 92s/epoch - 184ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 92s - loss: 2.3175 - lr: 0.0080 - 92s/epoch - 184ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 92s - loss: 2.3066 - lr: 0.0080 - 92s/epoch - 183ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 90s - loss: 2.3043 - lr: 0.0080 - 90s/epoch - 181ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 94s - loss: 2.3028 - lr: 0.0080 - 94s/epoch - 189ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 92s - loss: 2.3024 - lr: 0.0080 - 92s/epoch - 184ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 93s - loss: 2.3021 - lr: 0.0080 - 93s/epoch - 185ms/step\n", + "[1,mpirank:0,algo-1]:500/500 - 89s - loss: 2.3018 - lr: 0.0080 - 89s/epoch - 177ms/step\n" + ] + } + ], + "source": [ + "print(f\"Printing step time for epochs and steps for {estimator.latest_training_job.name}\")\n", + "for line in homogeneous_logs.stdout.split(\"\\n\"):\n", + " if \"mpirank:0\" in line and \"/epoch\" in line:\n", + " print(line)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### D. Run a heterogeneous cluster training job\n", + "\n", + "#### Step 1: Set up training environment\n", + "We'll now run a training job in heterogeneous cluster mode. \n", + "Note the changes from the homogeneous cluster job: \n", + "- We define two new instance groups that are provided to the `estimator` as the `instance_groups` parameter that replaces the homogeneous parameters `instance_type` and `instance_count`.\n", + "- In the `distribution` parameter for Horovod we added a new parameter `instance_groups` that is used to limit the MPI cluster to run in the `dnn_group`. The MPI cluster should include only the GPU nodes that run Horovod (which needs MPI). The `data_group` instances should not be part of the MPI cluster, as they set up their on `tf.data.service` cluster.\n", + "\n", + "More on the two instance groups config we use:\n", + "- `data_group` - two ml.c5.18xlarge instances, each with 72 vCPUs to handle data preprocessing. Reading data from S3, preprocessing it, and forwarding it to the `dnn_group`.\n", + "- `dnn_group` - a single p4d.24xlarge instance, with 8 GPUs and 96 vCPUs to handle deep neural network optimization (forward backward passes). To fully utilize 96 vCPUs in the `dnn_group`, we'll be starting data workers on all the instances in both groups, therefore we have 240 vCPUs (96+72+72) in total available for preprocessing (minus vCPUs used for the neural network optimization process).\n", + "\n", + "There are three Python scripts to know about:\n", + "The 1st is `train_dnn.py` - This is your training script for the neural network, you should edit it to match your own use case. Note that this script isn't aware of the Heterogeneous cluster set up, except when it initializes the tf.data dataset calling this line: `ds = ds.apply(tf.data.experimental.service.distribute(...)`. \n", + "The 2nd and 3rd scripts, which should not need editing when adapting to your own use case, do the heavy lifting required for using tf.data.service over the Heterogeneous cluster feature. \n", + "`train_data.py` include functions to start/stop tf.service.data process like a dispatcher and WorkerServer. \n", + "`launcher.py` has several responsibilities: \n", + "- A single entry point script for all instances in all instance groups (SageMaker will start the same script on all instances).\n", + "- Identifies which instance group the node belong to, and start the relevant script accordingly (`train_dnn.py` or `train_data.py` or sometimes both).\n", + "- Takes measures to ensure that tf.data.service processes shutdown when training completes, as the training job completes only when all instances exit.\n", + "- Allow to start more than one process (for example, on the dnn_group instances we'll run both the `train_dnn.py` and a tf.data.service worker to utilize the instance CPUs)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import datetime\n", + "from sagemaker.tensorflow import TensorFlow\n", + "from sagemaker.instance_group import InstanceGroup\n", + "from sagemaker.inputs import TrainingInput\n", + "import os\n", + "\n", + "hyperparameters = {\n", + " \"epochs\": 10,\n", + " \"steps_per_epoch\": 500,\n", + " \"batch_size\": 1024,\n", + " \"tf_data_mode\": \"service\", # Using tf.data.service for this Heterogeneous cluster job\n", + " \"num_of_data_workers\": 1, # One tf.data.service worker per node\n", + "}\n", + "\n", + "# Group for CPU instances to run tf.data.service dispatcher/workers processes.\n", + "data_group = InstanceGroup(\"data_group\", \"ml.c5.18xlarge\", 2)\n", + "# Group for deep neural network (dnn) with accleartors (e.g., GPU, FPGA, etc.)\n", + "dnn_group = InstanceGroup(\"dnn_group\", \"ml.p4d.24xlarge\", 1)\n", + "\n", + "estimator2 = TensorFlow(\n", + " entry_point=\"launcher.py\",\n", + " source_dir=\"code\",\n", + " framework_version=\"2.9.1\",\n", + " py_version=\"py39\",\n", + " role=role,\n", + " volume_size=10,\n", + " max_run=1800, # 30 minutes\n", + " disable_profiler=True,\n", + " # instance_type='ml.p4d.24xlarge',\n", + " # instance_count=1,\n", + " instance_groups=[data_group, dnn_group],\n", + " hyperparameters=hyperparameters,\n", + " distribution={\n", + " \"mpi\": {\n", + " \"enabled\": True,\n", + " \"processes_per_host\": 8, # p4d.24xlarge has 8 GPUs per host\n", + " \"custom_mpi_options\": \"--NCCL_DEBUG WARN\",\n", + " },\n", + " \"instance_groups\": [dnn_group], # Apply distribution strategy to the dnn_group only\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 2: Submit the training job\n", + "\n", + "Note1: For the logs, click on **View logs** from the **Training Jobs** node in **Amazon SageMaker Console**. \n", + "Note2: Ignore the 0 billable seconds shown below. See actual billable seconds in the AWS web console > SageMaker > Training Jobs > this job." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-09-23 23:52:33 Starting - Starting the training job......\n", + "2022-09-23 23:53:17 Starting - Preparing the instances for training........................\n", + "2022-09-23 23:57:33 Downloading - Downloading input data...\n", + "2022-09-23 23:57:48 Training - Downloading the training image...........................\n", + "2022-09-24 00:02:25 Training - Training image download completed. Training in progress....................................................\n", + "2022-09-24 00:11:23 Uploading - Uploading generated training model...\n", + "2022-09-24 00:11:59 Completed - Training job completed\n" + ] + } + ], + "source": [ + "from start_job_utils import fit_with_retries\n", + "fit_with_retries(5, estimator2, \n", + " job_name=\"heterogeneous-\" + datetime.datetime.utcnow().strftime(\"%Y%m%dT%H%M%SZ\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 3: Analyze the heterogeneous cluster training job's throughput and resource usage\n", + "We'll examine: CPU and GPU usage. Epoch time and step time.\n", + "\n", + "**CPU and GPU usage analysis** \n", + "\n", + " In the screenshot below we observe that GPU usage has increase to 74% (compared to ~45% in the homogeneous training run) which is what we were aiming for. The CPU usage on all 3 instances are close to 80% CPU usage. \n", + " \n", + "Note: To view your own job Click on **View instance metrics** from the **Training jobs** node in **Amazon SageMaker Console**. Then to rescale the CloudWatch Metrics to 100% on CPU utilization for algo-1 and algo-2, use CloudWatch \"Add Math\" feature and average it out by no. of vCPUs/GPUs on those instance types. We captured metrics definitions used to produce this graph [here](./cloudwatch-metric-definitions/heterogenenous-workload.json). \n", + "\n", + "\n", + "**Epoch time and step time analysis** \n", + "\n", + "For 2nd epoch onwards you should see this print out in the logs of the dnn_group instance (p4d.24xlarge): 43s/epoch - 86ms/step.\n", + "Note that the instances are named: Algo1, Algo2, Algo3 randomly on each execution, so you'll need to open all instances logs to find the dnn_group instance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## E. Comparing time-to-train and cost-to-train\n", + "The table below summarizes both jobs. We can see that:\n", + "- The Heterogeneous job is 2.2x faster to train (86ms/step) than the homogeneous job (192ms/step).\n", + "- The Heterogeneous job is 45% cheaper to train than the homogeneous job. This is despite the heterogeneous costs more per hour ($45/hour vs $37/hour), due to the two extra c5.18xlarge instances included in the heterogeneous job `($45 = $37.7 + 2 * $3.67` \n", + "The cost-to-train formula we used: change in hourly price `($45/$37.7) ` times `reduction-in-time-to-train (86ms/192ms)` = 45% = `($45/$37.7) * (86ms/192ms)`. \n", + "\n", + "\"results\n", + "\n", + "## F. Conclusion\n", + "In this notebook, we demonstrated how to leverage Heterogeneous cluster feature of SageMaker Training, with TensorFlow to achieve better price performance and increase training speed. To get started you can copy this example project and change `train_dnn.py` to match your workload. To run the job, you could use this notebook, or the `start_job.py`." + ] + } + ], + "metadata": { + "instance_type": "ml.t3.medium", + "kernelspec": { + "display_name": "Python 3.9.7 ('.venv': venv)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + }, + "vscode": { + "interpreter": { + "hash": "77c0de85c2cb739aa5100af7b92fb9d2075368f0e653f4148499a56c989df5f7" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/images/TensorFlow-Hetero-Instance-Metrics.png b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/TensorFlow-Hetero-Instance-Metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..21c27a3528fdaaad3c03c86aa8e259ded67ad553 GIT binary patch literal 130144 zcmeEuc{tQ-|34zKw^*`-RFb{2ujQ0VmXf_8gk;Y$7)w)@4xti?Y^P9Y>|>c3L{wzS zzRlROo5ebI-+MZpbLu=?PrpBZ*Y&tA`7|@1&wbzT`@O#2uX}#i*VSTS9qG&S`vYHAAV-*L5baI&SMy6}6fF};bwC(dN^ zt3pLB>A^VKy`t2wf?H@VNZorKd_?28%xJT}5@xEY4`tTwl3COm$*(o`@$ReQPJB@36#nw^bjrq7@vS+!6&0#Sw;r^ute{mMuu=t9_e?hx4B*+e3J^H?qw}y$4|@rzOukW%Sb5K-&s}w#Pn`OB-FLG*MRt48-cg_3k}m%(qRG zmf2@5`ygq~W4Jn2?qx(l_v8C=`y6t_1GOL6(Eag)L$@pUlg=H$~?s|_u)KqQ-~A;^VQG%uw(2;--~*wJz%1- z=CEqj?jp_#Uwm;$ENcV@=)vh%rD#^Ex|!?t}eO^<$yu#D?F+-(#rS z4ZlnMDlg;yML}K$Wj|inP|_bF+-`8%n>5sJ*G}FSe)3iIuutT!bAx&hXa$3AUB8Pq zreYM@@_Jx+o&QWIxo0?iRYm`>|ygwq&?UW!pV#cDV_>W{q`+^s_4rBU;#)$oG@6f(=G> z5)F(aBKXS2!LSbf-YYLekDrSk*2~}UeU*So=zA0{-laaKwbyY~zoJJ|RejBV>rsH3 zQ%w-^J?D+J{8Qa~X862m9ch_!=p3ti^Ix7+DMB4;fOe&pnE0wF>T4~t1>F}DYq(kA zk>n9Q&vnicej{s!pQStIecO@h&p9-^nF9CHGDkfaKmB58cxIU9?#$XBJ^`5D9|y^^ zW0#2iXmu)*!$EFth4myRN9r57^#1E?0pm{3No{E~RXv(2Z(ixY8!BL;t~lC06k|tq z`7T{v$hp^A6;z99SVKQvS>?B0K4!PG59yXt`SuFrJoseIyeV(-lIsGWBAy_3vi zJAF@hkXC_3@~-wEPw6hGp1cqBYLznS;2HLPXEi4tP+Nza2(dn3s{YOYvEUJ!-_JdH zeEP`#y+T)S?mo#Ts&(Q~@yBDYIC~=a&gu$|KhpimIY%{l#zHtnpV{zS@fDkP9)9@A zE1W!0buUN0T=qO^795uv@ulMyOZk3h4ZT#Z7ROs$t2FozR2last?ix(*S+sHIS_Zx z_QpOZPNPsmYgrT3PUfx^#?FvMYXSGex*raf3irQD^Py>~5g92Yom)2ZSH|5f88Rl( z`v`1CY6x@hW~x zw{NR19$1uIj0_JCFALAS^e|lCHmd%1tm+AS!$YtAuXS84Hnz>q$hu_6mF;4nity83 zWQjaqn6c7!^%h-GZIM~;#omBkdfD=X7#^+2TsiZ%m)@Si7xZd-g_p-FX$Rc%d+e9K z8n_rSh2c5C;>d#BZEO>FKDJIMl9y*A!L#vk!j%NygoxA7Tgh$y8RuFHIvHDs9b<1f zcPhPEd=T|TV!}x&S}nRFBrqKJR;L~LW$c!{W4t4=mC!?lqZCI^tuF`Cr+`z7OEvO%qX1>RKhdJ)x zX`cR5?^*CHHq4pa2zeFTZsp6cXJlzyUV+tGC|2%lV>WCpLZ+->FJL|6}jZXD)2iTprOS8LLsAI=( zm(u9`dH?5#Mrh(dVXB$5#7S`@lOnSP(*(1q{1;ZH_P%}L*0n|T1!lHhbyJw)NUtZ0 z{?q5D?d4YG_!18%DkY+jr_I&-J|Sh1#`p)`mr;BuFYox7D=_&r@wF3c5v;H8qwcp@ zC25YkRl7A0{V^n4liab;gz4>-^X05YrIX@-NuB(nhGG*V+_e zNYXtQN}SDGxG?{Esq|gD-T6~oGR=PbRCcM@!w$`^PmB@_2aB7hrCha$d_;a+^ZCAq zoDXp)S06{0v31$U=*3Ib$Tvb?y2htG7wF2ZBc@e`s1F2XZyCh#izODvES{`V)Y#`H zJ*e6jp&ApQ!p_9JN1SPfp_TCxgBh=pS|TXQP9H6XTut8 z&@jm~&yaYqlM}&nh^s}Z9`@}eOR5P5UR+P2?W1)#>-dMC^=)hC;k8#)ufks; z@`dY~_+Uak(x%V)pPs#R@p4Z>tGeW^{(5)p8<#ifZ@ND8Jxo#B?5C~SQ?@@!_gc!w zq*C?BM{!S)!gwb6aPu0x-uNryO!90u+7Qjtg<~{0SJLwE*2~O~@DU{#X52->>K*wB})nD^ahVpL}}tCPt~2b@-}# z*Uj8dVj|>=)kn?eAFt1@=+O0&v??IC#Wv2ZrnZ#iWsz#0z877~ysgWj3mm<(6k+_*Y?^-Jq?!+M-^ZcEPbET1C(&vT(14>@ebaEKSBbJx=y zM?($U4Oywi(p|$N!Oxi3frKEJQ;w(4z1C^z2ZYFOvR zX+Q4_0=h`d&Da2Avyp)UY|sAQ)Cy7dIA^f+Umt53*x+h6UVLPp?s3|_koriuoU%NH5uV`<%&(7lZKNmSvtm}mF zxHI!9+gZk$KeJjdNtNG!_3OdT=W&H<_R%lqm7o(U^Zp}rWF{883!Xj*y0&p645n3c zE;>RdUPVe48bwg??jg?oE(SN&wH&>Uag&%c8($2bmUn%Hn<)QOxiVu!cxzn3tHP z>bEwk2V~lb*H<*XNIA#Ujq4frChwBFQ;{*Aem}_IfPIs|@Mam^Nke0j$C}ia{r-+g z*L`1uf+F138%|Jy<%|k^8uBgGU8a40V*XOB^Q|+7m;)8<_s{5p zzm%Ux;FogGpMQ5f38kV3|Jw(CeNt)u`t+We)LnmF(@cQ(sLmK@Uc3nY8ra;iwRQ2h zro1e5Sn%6NJRMaJo9O5ZYP#OB6_k^dmXtoM z#waK#sB-6~ozm6c&VRoh{7?1pEl*E3B`GN=6eRY<d$HC3h!PP~O@?0xxS1(W1!-pvY{r&UjJZ*g({u#-| zkn`J`&L5_+dG=B&R|SWwSV^O`^`VT`Ta%}Daz7+5XGNz{`M*mv>Ky| z)Zd$?##qG3{RHeIpTlo@*T7$(Wt1OkPw>z2KmSs$-%sNt-&RslX;5AK?aVbF>KQEk z3k$;}dD5xppI^xfvY+*%p?$A^_N*YsBSFpskcQqb#W^7yiyTbe=RBQrO)L)dctuEx zO=Y1F;R#fG92PW~(_U$u5VAcfdg{{=qU!kb@lTgafB*bQ<@p?D<#IBtS+yB69_YF> zU-86pb1OWchtr9cfn8AJE)_M+f4!*M%ki4MTltR)N!?%iJmr~B?p7tMGyK;_|22Fn zGYt*QR>Pa=zt86TErNOD&41nf-)D9F{@p5zgO9NHe)$%LnUzz&CLYQo>jee#jCbEG z`9+C>TWDaL%)hz;RPd7w3^TFRJrcjXXB6@8`k(lBl<@z%_*Ln@)<$rJrEABB9z10i z4Bths7Uufw?0?t2?>dpd#CI}}ywIi>R)WDhPx8jb#twz4uUjb$1@BL=Oq-pkSR*iX zS-_l?R_Ed?`RXEhhu8bx2^$D9u{eszkQ}rThxaRJq z&Rk0Y+(L$YY@BbWseMS$`iCHKetE2EshidER}uB+p@_=ORq4R><&4Ze{APh|L-iVt zTv4=X6Qy{p|4xHMWAbSEG=hoT@1f_j(qL)9C@+^d_{%G2xJe_yICCz)*?;VmRsB=Z z=IZI!aLjV5`qoNw&C6&t9*d=d_>fag3NL#KD_0s_S*JVSGD-P<(ys0>w#3f7*!9a! zLI1!l_Zzv!xfVm}n8mFu|*CBt4m^*EA>|syN5@UwQmq{Fe1zRSfh5w)NMz{n%7reR*Po7c+&gH8!W)* zjb>n->^cEjsqN9EO736S$guQToy@FpF2Tly9@BlnUH9-{%o3E)e=rb;G-IPd5+%NX z?~`Aj)C*!{Q(t#8Yfe^$wff=a;!1+w-KUS2EOQ;GAho4zp636ssGD$Fbf&jhOl9`{ zek*)$u@G`AvhU+#;hKjBPqhZFOBjtrkn{Hbsyl)oC%xDOBL!bc9ge5EV3jF|be=w6!_JWVw8nTiM&GZK!{va(z^4C@ULrX&ix` zt0#rZqtklO^oM)|{l5weT(k+=A_oarEM^&}Z?N#n1B1T5DG z=&t#~F(wdV-@vB#?U1#Jm(dx%`G%widxgPn;A2wOZ*nWR-I(lV{Z+&Dbb)iyEm;?r z=LT&|r^giutPj%HXj`tf9`VVmvdH;J?kuU0ZTvlUArOonx@_8SonDc$F=Ia|o!jB! zZZSLWM!OWs%AauJYi;u|rx*d^(I`7fYB$hh8CYq8wgy_<$X!nAP9}Th!XQfipR_IZ zAu3jxLCt zVM{M))gWPhL|{vS`H+eNethFtUVNtY!(UBUddoGkcflMxbN09fOq;jOv+yZMqqjDQ zY$+?B?OWa3sw|jiYrV_d*E(_oIsBGpo-ZYCE&*4g^f^&pilsKLG+&nRP7aQ_|A|}V z7xNxCQoLoV%EJG3&}wE7qx#Axz1I08|G7^?U$g{t)^v8kDa#mh0`JG2k3jBOm1dDgYzq$X&^DgG!v#go9;)Q>0EZ#;DNu~EjA)*?~0j$9%FZ>wHU7a;OLhaa@f8U=7nXbC;lhlPFcsZ076rA)Q6|>x9pX_VbUFKo` zOcmx$$qBTntA!y}u0$M0G?<&q00QA3UJYaA=b;3C>*YMH=tK0912Vttd#=LA`MV=r zDE_3Tzsy5B7>LW=?aLqMhW4i{|2FC0|GO26drZtl<~7$Y*Jj&@x6U>ZeZ$^^#o;4b zN_kww{n;C}SwZwJG8cTB6vz1#W}f}38Y{i2650jhm3O%;;rddijnoG>N|blioe!r* z?*elO%*i0X(F@2jZ9(`XRj#2bnQ{a0j+*DropYafl+q906rKlq|4+&fuO-GjNNRg(DE0x;Y+h3jV&A)2dKYR+aTq~u! z)|R28-Ta7^Cn%z0Vc0{$vI2d&zcOgc4eQkv5~HV9cG@oNm)BE5S&!B|J21DQ*$)DG z5>7U2-OFttjpQ82LLemH4_f3DL0d11gj{)fJ{?&kQPE<{>!$&|F;{zS|R*Tss4*D{cWEAQ>wp3@!u}~r&Rw_ zsvUu*KjZfQXW>tRquaug7unGf?2JO%rI>3rBAnFMau7MJZ6B`lltb~jR_z46?GY6G z1&~beW5l(O{wqc9jnZ(&A`c)VhENII)eZNcA%YeIXQVWwfsfEVC)thUxr=qYWerJ3< zM_T(~tOVsFhS&%Rk7%OmacI<;9YzBL1Ds^^xzr<^Z4-;1N4~wq zTjMKhDwvC`$Pm{xG+maYBVL_A1UXbH#BtSU6MFHF9ATiD-Uv|>`)n?w?DQHEuS{Op zUzeT*Yy0q-xg)lt%!7FcIrnh@IirYm^*<+i8ex083!!?9o%}_$PP*sN_{Cyd-%W0R zF(Z^CXQ^Y(-L6dYt+VIQb+>)on;x?^VCTQ0-HbW=QDRJ_4%zlmrR&nx=N}l7k1=Be z$>^OV00RV+#3dfAKih|;k zPYiI}_i9utJOQm8gtX~fbmbU2YhgQG&13GtWU9!^ryA}EcwDF)GHvL8E{cX;&mHj? z=RWc;+xb)c@RuTjdC-L!?DL;1{1m-<<4duvF-jFq93r8ok2O^KP+fk#z>-?Rv zd^6Tq)Y5Ufnecb03Z1ji+Wd?Z2+C8ndsJy-xgazCm3LYG9IlR^_l{~4x2HEFL5J7t z;_IxL(ld4aVe;ETrEs|uf_Yu%Eg#zcgfeQ3b9R@(v~2PaEqCPT@W3|eHqQ3-_#j&R zkaE1)j<3a-%%ZcBO_vd_x6FDFdL^4_4ph05fy_gOM%UtOos(vdMHn?o6gOfqpj-Lw z>0_=;5^h;2=1w#34l7z-Q$D?^UyvQUy#$NV|Fa>Wgtwn6uOmguFNvZIoSR* z@-x5JjOdPrQuTO0=#bq(A};^r6#4a2kuK(p0~~$zbyZk+2VvMf>mFAPw5K`w{xwzQ zeicj>jH?=IdOX{q3gM90lR=FxwG{G)mRf2img0I7G7I9$3JvbMu4H_;({(y$>!UPA z1`WO3JaT786{!&eD&nIG`MGTBeXNn?V$9r?-uxCQ=-G%K>j}g$rmr2G9|}m2nu^c@ z6)WPDT6#S+|Abi^l||b|YgrDX#kr-1^Me}jbY4!bYMAL=*S4le`efY?Bf5MkW@Ebi zi+{8fYj^c4?*5k({%$0LD@+VCszI8@KV=8-m*RP@133K{vrl#P-XT-oA&frxs}P~P zT}6j2oNY!?m>zO{{^De(dU1f^Vrxm*io9G~ z`P;QKChsIeiGClbEXWmUt|glxRgiod3!_m4cd1zD+^|0{9C?g=i#Ueh05+R5g}d)a z`~Y4>CYl)AYrl79BQN0%A0H zIZQBKhH18ha8s+%F_AmQiq=&V?I)qV6WY~x4}BPGlG)adscC{BKtQ>?&(Hj%y3eZ! zp{qIgnax2gT*BT)PzsqYaSbh2l#aEqH0MM~a>TCPhrU^bROYN=3;P=7_@@me{Eg${ zM~>ky-S|{ae<_xXoaudvS}NSFcVP%4DlEks3puf~YxAduWBj>Z{s?nSv;g<&9dfNh zGGvBvsQfG)THG_fx25yucu8n)&M+m)M`8OKtgo7Wku6S?FsyJiT13bM8#9l{1}tfF0MQs$5?{LO`;T4ObA&XJ~u^P+ZkM zs@ZLB5+v<2|Iqb3P3c0v7PaFLRn3mjzYQA}w{Nu<))SD-3Wuem}tRii#7?f^R{ z83FBWtMFs{fd^3am=olRi6;hX??QA$J&hUqYezury~dFXJbpzQ;ewPHq_X^ED6t^i z8@n2c>(NUQ5AKpb^kEQE*jy)VA=in?(lYHFJ4VY;#0C%R#2IIyjSWhULcfeND@qw+ z6IJG_Thjl~Ch%?F@R_&_Vsp}@GtB6RO*E6xXYT5lsi%R;_;+y^iP6q7TA@tvl98Dn zvQ}i=s?k91QOg;l9tnz%F{+3VLSOCc*+t`1i!8*V7zc{qcVDNWWtD8n%N6?kr|NKw zy)9LRTHBtpHS!|1O4}@acB}i{etZX`f;Ry^K-WQBf&C9bEA@F59Ha_WVh=$gkVa!6 zlWNR7i0?t6dSs*8&yW$=!fQd=a1E}w)2+zLYD*{@8olovH*^z6;PNQ@wb9$h_H8~TwUL^Vhc5) zI$2m*Bea-NRYXTBaJ(P0y3R2L>$gy{*42fIWC~vV3t^E`@QS15*;99C74fg5C zvg{H>J!at9NFCr0*@ue0lw{l}XZyI5BJ*Dax+9FyY5u2Up32X3ddB%e2R;ELaKVJ( z?oA+o{9$)ye5}p%m5x(}NU@^CND2GGlmqXl1;U-}5_c1=kLQ*bl=EqOuz~F^@`clP z^@BVrf6l@=K!@Ph%k`D=|usFz=G~~{!_uEvM|11%9llj<85uK zB-cJgIS$(!;Sna2l2IJyO?6bbiWy@?WU?WKaR^mc55?FlORimfhsxo1ZfmX%+|oBR zHH=CxqX$l3sR%eutkq_{^3_ocT{hu!KqoLqtJP=Et zKhfcMj7ETF04LIs8EczH@qlNkr08a?Q9TE$8`O9;{fZa+>Wj+R{S3*H*H8`jyeXPB z2NCjt-sk|DHr;z}8Q~=LF%oEy8#~r|!h{FrAYzp{6* zN0Xum=)f(fdL;c5q+2-Yyz#i6ZfozLVwA~-Br;B-=($8uN~9q%+(y~kRjTjhd(Ohy zOek}&EFrU*ySyQAm9NDQoObbkBi^^#|A1n9y%|*-*<2yq{V2zk9JjnJsN-;+C`kD? zA51#W3+06WZJ$40(C<|^49AEh`y9URUdu7`j$XjYyN|mLMaIEup2^r;8j)!yha000 zi<=d_KFtZmf$nA)rB$Ei*i~sEF+%Bd6MdUu2?1NnBhhS?p#N60JUfyY*#)|>l&;*6 zmip?I!r4zTB4Lz%snuW=ys?h|ujs?TemqQr`N)C3PjyR$vNE1sCL0JOLdFNGG2N2{ z^L}dMkal>@kb&Z?2r|LY8&tVLMvIck4Qh$Bv*p+L)&*Lg+75x(2UdhP6Eq4*s+@}g zf#yq$het}fxh+{*)$zG9aHi5r!CX7q1@een_b!;sD|y@cr+JjN$jy(B+$PiGGp4*K z{mx3zpgce@AkC+2sU!vA9W8lX%0}Zf{Xm0s zfYI18z$?My%Q>!)e47uU>YKCCRy_r_4l@K4(S@@YwLaJIjSJyPkj?eg$(kS!Y;6o! z)r7KGwZFddX3AoqB7n_TPvoD}m+z7w@{vR^K4CX;DU5KN;>;O+LYlch_Qi(mtIw}x zhlu)j9r5W>rX#G%Im##YHiPOIyBY?LVcZdKR{d7KXdtTEil=MP93`3cu!iJ71!&Wr zfZdscxTjaR!eUlg8g}xoTIPd!^h*|VPvV2YG`CpdA>O9Tpu5Ynx;PDOv8V7G4ynyO zj(&Ax;2s^*C1(elLBbPl$%_N9K{$PNsr$&C+`WB0tURZWhwP$ssNEW6yI%R`)4AsK za_zd88@QNV^R@(+P{$>Cox4eyh%O3R!O^9y6+7?A&xxCSFZY!(3vm1vIHZszWhO*HNOBCv^gFWhu9CbUc<5lOlZET z#{n(@?gy$8JW5DE=B$@#H$vvRaf~6-(E=~2?Bb-Hcw*2tmPDyT8)}S=Je{57`v6Rl z1uz2OIxUz77b6X46a3?B-TyQi+TPby7(I#O!Q{B+`m7GZXUOQQp|-0&MD&n>#||a2 zh9VuS;|(dJvNbT-Lx|Gha8iWj`tYOXd>3rF+wkuq8HzH3Tzy~UurB438Q*%|FM!h< zN`?^}{IZIIIt-0ND5MxPrB|=M`X&0(h`T*d_cyB+%(QiJB~k&C+BI)7lM~EFHybL~ zwSDFj2l|~hThp~`95R#Q>a3SttL{=aHYxw@K5r@0z{vPUv--M0NKRmh`dwp&K90JQ z4tu;^;r!YzAM=`I46J^R9fG=+jx5YybYkvXbZPZNN-xa}LikF)0}OBXQ;>ycz=ODT z&Gif=XO4|pywWmkrX;Qt+GlgBzAMd-={lG~)faY!95|-?(h_W7&7yRv*RcjQutAUp zgaFb<;pkU`{h-Ni0D@A%N!9THGB!SH8fum*p2_=U-=HgLoqC({>HBZxiq~^2PH#EJYrZpTR%q=M>Ow}EZ=iF zezy*gK{TEikYyUMwL%}LYM}8AK#`>kE2gn;o2iZeqOv{J7DRqZsyxg@eEW>!5VrI* z8F_z=^&&voqRWpn6O>Qygf;T*p_mJ-r@?{~sP(1@U(oujkP%YZ4Yn~2=mTD;tgI}3 z=C8Gi`8+syAMhX5uP(;4lA`#P&qg0oWqq-)E?Piw1Ry%S-f#yK};-(SvOf93oOkP)sYg(fT^GZ^{Qjbn%M#~MEJb4hdq;2XR+Korh19pQXVfC*v z!Sfaz%d(h;3^ZSgp_^_UN9L&#J)mu~y?Ih=hEWm#l`tlMqVWn~Ofd{;t~Mc_?nEge zUp58~+sozJ8|K~-Z~QZmP{HMnld8&5HQ4NNJ9TKtD#oi!Oa)5%>h>=0;LztY`**<8 zQt=GT+|sFd@eDdKMPN175xtaTVhC^nZxq^I_v$bl3gvZSczHgOFYg9xqQ`H zgIH3z;hZ%_zQ=_Yq_7OvC$!WVU4z#85_Q=qndwMfq_&MY(rM4e>Y}4Jj{3WBXFCZ+B+t^R`ttHSam=*yD4(+f}a9ClD5}QVmrtUlI?VzKZIx&h81Mf4ImLP}o@* zP|l$iLhP+ik(~b187FDq06DhRX1HH8<>k-|fnqt1=_S92>dGjtOM4XmV&lPukLKBsmp0y^j!~n}GDz(v z@o4&*a_1st{JAO(5E8p5tzRSba$JnpKi%`eBu3hf7m_H-(pZNwUOe74*Z&ul$E}<8 zP!CD}S;_DcCB9gVM6r~0soJ#kP-?d!5N{2<2Kz5=t1p6X4BtHH*mL`8_YeH>E?iB$LF~078ZW$z?d>Oh)JcQDbsMCRzFhNF-s|p$QCMrW+xKG(#=81N8u|f5f za%2N@zcGF;Vdy+%D3FpUWQ0 z$b!kBOJGDozx}h5bHh1vxT993TFdLd+LppzlMmLICXSp##AkZ`YD!xA$#KqkXA1UQUdy;8{1 zNO~PHa?+i8(IE=4m5EdQf>4EtuTI{n^L0JD$Lf*jC2Sh`htW>i;hJJ?kt zlS^R+jydjE!y+G?jVRAL=)&BF^=#95Q*F_9*WIuEwRd_(m@T zlnSSDMM^lpnK#R-v%^fgAA2V7!!juQ8gx)5_$jO+_Qz^qMMD1#Dlo_LUg%s19q z&L?yQn?S$`Ufe&W9o|xK^W5}iXMqk#K0z-n<;`J>n7E=v7B5>E2~_TvVu_3##Dt=h z#!Z@1D8S{rU69>=$npa7p3d>}f9F_2Ik@tZpDiDUkc~bwHpr{SX`cjb3IK|Kb^~Rt zmHt4?4y}q*4<^3HRTf8_0pD9sW%f4{l(#dt?Com`ldobf4WU%#D7E-e?YQ7Ws(uuD z-Xb2}H`bU)sn*X{25zvb#6}q-t{*hYwcxLd;^&Q09DCNUSo;p_^DA!@@GEafwclB)>MUs71%!i*GeMZmDi<0j8+JyHnZ0`D&EgPx(BgDfa4jc?2LahFD1z3wX%qa#=w zqB4fchXb>`jRmrC9A?d&A2hp-%j+KZPbP#+B+%il6MKM^QUC|RNya=U)R=job_yy} z^h1Txa)|bj88qlwYU)&V*@)*bdpcQYgqxKKMi@e>=*i z1g~nsDr-91)S|5OBzNOk`NWD|MN*@47M(Vb1)l(>S?dM?E&h98Ga-|imJ><$e1Kcy zu4@>p^)8nCr+Vgx+-SzBT7Ah_wwA=to2hX z;+q>tH2`E#ulg=R8byl+Z!yhuV^j@`wTH^f&z6GxZ7B>N&Ot0_fhbw-M|O3^IrkVs zvI?cK)MrrK<&GyiQ5P3c+-RUkz`Yf`{XzjNzwcU+F}DQzv$HTg--IJKe-uPFu3fOv z-YhW`KG!XtjsP}|M{EEPa6tinRTk}}ZuHan8Mm8sMoxYz;wHZKM!v2_K6e_z`xC#n zO@{N{3^K#6FcksfrxV|%a+#)90|Lfx3y0DplO>QZv1Ru5&yBdwmedo{Pe4U) zcIDJV(hge`&R*M_Yx$F}1%S83;5%7z@QN7mLM-|A6!NRZab$fG#n7#~zqY*0vfrUg zQUn35EaaL?&bQ+PQID$h2$;#c;n210;SPL{S1@69roo%oD{NRHMmq!0<-qhyKI!@G zp-5>9KG;(1!@qX~M7_tfz$8J8^8heaVPQ(2hrru{KTc+sLmi%hR*l=z#r-=p`BL$F z0BINlwLV8t8#h|I3U#tTjdR21THZjKR#!6ccUiZLUwd|Cf_^Y@SKU>TBr@YI!K1rt z=-%J)hL*uo93I&xe{%?<2)x~sMYgYM{rRf&fYRgR+DZb6y?f?P8_`GE2wvj56BG>t zCr-Eg$dNxfZQ0^7E>am;e_kF@#J>B`N)gfCM;ZcL>->3c6ME+D7lw_HZX$m_md3>IC^l zgNZ7rs+m5-V2Q@ROamQ>q9-1qFSrnxn?dQAmuQue9}lyD0O#X0(#pO?-3Ae}3oDk@ z8^w)3g=dB>M<*P+Dd9oCq$ae3+hxtYTZJ21^pvHz%v-`VAe`t~VSpmO;z&{<6&>iD zZhPy>Yno>J)4r+Dkkw?>KSvK?MhmM!uiC>^$-VojwC~q*R@R)j>CR%<4*RAOMCm=d zPB2mwzom{=4&VJOWD&7POine<$lE$aXsGwO9}?DlL88A*SAX4kB0s`ZMJK4_r=? z6kVvcf6O*$=vqGl^HmH4nwapge;^@>tqxMbZF%E@>9T>_>Dh`it8{Lpwr2{XV8NF` z>q;CgugKRmy}ZMC%hMo+2Vp-lf7?0{nk^zCH$+`!F0u9YmQ`;tuwLy;AG|5!{2ki{ zTWFx_zQ)fgPcjiDQaHTvJtS#M*GOc-rWF|x%92&ad~in zuySU(_WqWI*`jh2>I8aW!8kq&|KnJI7qE8QzV@&00^sU4GTzVmHX+eax>B`&z8&2! zwe))Gx!G89Jl%2~%b}DVtgjL5UII+vFh!`|$4S{?o5JfpU&z{GL0D5)rd;K<`qq5@ zf8sqwi!oJGZ}mV%qzGK6_cv}L6AR!bUT!$?LXTVS=tC8|%R8uNFgSg$_YIpUa)hg^ zulA9W6fH$nYqWJ?hRdjnTlz{!&A)|7xd_v{F}Yf6b;icWRTE#{&y*5aT?)*g7P!rP z%T+ zm-;f`M4CVuZ<>ZklO&(#diZQ_Q*+=k);8FSd)@TB2AoRNs+}qqsD71R zSH&eIR&y29`+>48A=ynoCFZJ$tJ^>t|HAL8oIhfuy_pmb3o;H0`M{|^Ux+M3VF{Mr zxakBeov&@abcgYdP{v!3Q)QxzR|=qA7&v}Q--U}wE`oZcwC^SZ-wP#)kbQpK#9Ng# zEHK{cYD15L6lG0jA|8iQCR=4ZL@Qk8QIp69wtmgfX!}5$iUHL_Fqp?g` z?2(4n=Ctk)nmcE?XCzGb1b?5|4$LWC z73J+C0^SfrR!oKBG;m`YBKu2c5w5`l>T}tx23s{ndUiqZQ-z*Re_>014%r)D1uBnM zab@#H{fFXQ{luZOHLKCg2InD90ncS$C>wX|w#E%#Is%9R$+);;P(h}~Fs^@1PON^* zw&^%IIS`1WuWr!YO8gJw9-xWn!hH*_ab=0#E}sLQQ7YB(=x50%h%6JnPTN~{Z#nSI z=0TdBAkT;EN|L6-T=s0CCtycIx{?<=Nvnke7XLPFeytl&%>a{UbYxCM`Kb^x&yp-i z$%?MT2hWGf{OTPyk~yqj^d zA!zltNuR0L5j7oc>X3i0DoN|cN`_WVb*x9tdTdEpY+}mC0Mg!F=fjxJTRbxxW95}T zxxHR!nFBW6tx9S#CGmjU?-7SoD)`SL9Vy|ztqi13+>|Jn2FhvsM%f=#k(wq+dk`)Q z1<45do1yg-i;{<$c~pch^TN4z4HUAUID77ynx7qKf8vYYF(dCc z{+)c=eThiDDEPJ$U1##QV57vlbO+>r2eIadW&Q^LAg}hM8a8i?J4ErXT(<2pB4P7d zO&26Q!gk_J!G(oDdU@m;B!==ZGjUR6PYRPq+*a8FMh`u)>PBdp*Zx<&0FF1(5n#8i z0LO4Yg<%75`cE6HikeMK<1C2@Cy0wg8Nu!ME=(Kjo!iCoZ{G`0WHv}YUvV(7WTEoX zK;`Wz5x{PZkNa1;Km{Kc&hsEIUGvK2#x$r z2J)RPKc7-Q2(P|sq6hdUin96bPGBhLgFVyO`{CQlexswbCzgkuyMn=Si%B(m zmSlEB(n>5KN6tOKb=6YPg@1A`ppc#IDzPEtf9+&OV_3(9{LG9z3d=ca8H4?2pl=4JA^=}zYvHtu zC6DEzg>xG3`TO>X?$ToehjYzrVpdd*)Ea!}8-ygj%YBr`rz|O&Q9!EBPsqkCx70Vo8u%|H}K6OXRKh z5fyw*fT#E$`hSZ^qvve;9Mr?1bYN+=dg?FM6hsyd@-+#lsb1z&Q+%kpx&5wrI#Cj> zjX+g?VBAsVRczxyV(Uc9KvT01^cjIF*A>QU|D7poq`uq(c%(P7(DFgRwt`c3-f;mQd*^g zDqH}praEWXA_pz+T8p>pN=_<^=DiQw4-(|ynL@piifwh#lbN!r*+Z&yU{$>@s)D4- zWc$&Bp{?bcW1mZce?;(Hz1QBW9_aT6>m4p5Pe*Mc- zegb&;yx@HTTbj$2Q2#eYQC!ghwmw}e|52||!JEYMZqLsFjR+-Ecoy;2ZUaJ~L)Zow zp9Y0XWk0~G-_;hdfk3JwgL|1t$#fF;J}{&~pzt$Ik zf%QJA(wrtRMHn@)03_z1Tsxux((54d&=KU_iaRkn;7gRT)NnC|lxz{gAP)1pxZEm$ z*wZ)V*y`8J=kHRw^dvX5UNRPMy}^0$XG@NX`$oV3$+y8MW<`v^;Kkxqrmg7O-45Kc zb?3a-{QTBMA$&V2lxa=ajZ|DYj z3}AX?LlqrN9`S7ePE-hb|L~eGu|JJ#+xn?x3Fu-kPC1`~%oi!coxNm%@0h5od{rzk z0MlojW|>q+V^t&Q{vp#+{39HBB+t6dCcPdOtzIY&bDA&b%3(TP9&fL|sep>+_%!Qn`FYx(!VJ)4shpv0*WtD%6o|JZSgYri3 zDFZjxvz;f&?<+L7?SUxx0klG^8J9$<3WaDZyw3{erP+`-_xmXT#pM<*j+-Ss>$phTW^1%>>yPsEmVSW2y zguyU}?4h9W(g@pMI$9CLTGGFzmp<;-7fcRqX!e2p=P>#faFJxwPHvD-Q3@sU7$}r3 z82Gmv*!7&mkF%wKf~*!G?S#FCp1o)q0KC53lVYG_=OJVpQB&>jj{l^W76f$Rs}hK%t;(BWk_{O8I|kgJ5r*)d{I0BRPn-6WnkoyCS9!RWO<|?th_D|qV<1$1 zog1(K=La01z)jdssa<9o0{Ke~L37OE{Q~g$;8+0bi{bw~eKyDrOgXH|{Ts3S?Ctw7 zy(KC9NGHZIn)D`zg#aA6=Fcb@Xl~qq7n>GuoHKQk0@+5vCcIySzh$HwB=<)Ramw}| zeYcI2rvc{ZNErG?GEZPwA5gA1;1aaXmi{;zvYx&mFs%K5d|h`u)!+XwkyR+6GD|2z zk-aq(8D(!}X79ajB{aO2gqXO*`f{XAK8_#mss9K)Xu>Xn9*?fBzSg{C~J}z=- zRtD$8I~{@Q0|&(Y8sRpuH@rZN>Q@V2MB>h$&EOukIYzNS%c+8*tYKKmEof;-0muoz z0V2)>f+5gDa!fEJoOGV3Yg#U&w*olGp$vR9Qo7{Iy{DSsok4|4T&P@}zj*}3W8&P| z@2>+9UPR9rOMhnJWJ>GqZ2{jpwD%Z==SYVuT`u_dIEf~Vfe1v+esIzNs!1U_)X1=V zq0C`xT!LLM+R?$j35)t@zySVGe28_L44{j#*Bl(upwsfUmi3KNuFXQ(VD!#FP~b+T+u-D#we{YbG4K*gXBe&?); z5U_61Nr+7oqpxIUCG?=~gi-y)$Zc()!NN`2G2=llN8YblZK#HsDSKfc61F+empL;@ z*C5SFMcHem1#ARp8a=LAsaXSvV9#_!jw$-YPD4PfrK~g`|HJ<*VG@)QWEn0X$vL$~ zo)s2L9L5L#dqD!0g$2<0_yca!t1vG0elOGfYo_QZ{7F^xaW!?Z0_c2bQh{z7TG;C` zI(HVef6OtACqU5wh9Ji>^atn`q8ckHr1;CQgJp+?07r`Y{MN}MzsPDovBVI=v)*^> znE~kkL<}$-hnNh|X%Lg0v&z)qzkw8R!F(Z0z3VnA0jg=$LRR5Wk#vM<0Do8u_|Yo% z41*6Jg~vq~Y}G6z(Zle%?+8u5EE#`iY#p3$#jcsAy$_pCz6Bsyue;HTR8vkU%SXv-V8BrpWKcd@F5;^w7n=#ie3vc1< z1t#(*>PT%=gcBy^dN6jObJoQ+EEog-AzQEd0+lh^h9Tu#@`s@AnUw6nD59FyMit9gsO|$n$yqvWfpmQl*BK%eF@j(!Wg@g)~A1D2mI*HfRR8#$6FW@|I(?O z5iw3R!bjf`{g|#HUL{%EhO%l>rE03!r_1DgcYVA=;iaPol!=Kmvp9|3@C9wij@VkQ zrau2?S8d0n0o@4t+0n&wP2z3UW3Ht}`EQQME>1hEjGV^AnWb6l(;IT3(jJ>@q`IAZ z2;2vO&!5WO7bF>KtD53XT~wY8t+ZgUe=Bk1`H3dLwqxulp4bvQak8A`ddhX=GdOI= zXoV``K7BPe3DT(lbJXBm*oP}eH7AKyE9$YI>=3tb4))`&UX3~jAPWU_{AlqOBVt*Y6F>SDTO z#w1frj6yRlpMP9A*GLmH{7@Z5Yy0ZeOM&or5$FEZc?1_Y-Hl4rH%9O)h%Bl7vS-L> zj?H}7);#4p_9f&ZURx66$W!9bG%sLOjfC<(=v4NWrcRkot`A9LTnx_`i-3Qc%8@dCC9Jlj>1urN5Pt-SEciF*kb0Owt1Vr3^98C z-T{{fRbaF>t69Ygx`G{Mm%IA{UlfuZ(Vs@h2?*TEy`Bkeh;x`T&9~Gxwn~M=igrp>>)2(o#nlo zEIy{E*XqlUAE=9~@~pUXx~rU0Zk5&IQAx0;2Lj8^I*0y`rQ%v!UmBJQlnEtVA4O|) zVm%TV0p{VMQhcRGo)qb;qo1ZRx5ZqN(`vH#oIY%?&h#xL?W?n=IHBXpSHD;ym-p$k zr6FUs-%P{r5d1)e^M4)D``5Ti(SXPnlUq#`y}a@e!rx`7AdIjk{pGA<*bB*?l+1yg z)|+f!B0?H^j_elrNFzkp^ob8>?U3*U#u-}c+-Un`%2bgL2#4Sx{qc*b( zebwzt31_h0;eK5CA(Dpdn)*cEwC=Mb9|Te{z$EiT{*$Pa&yYsLVliWLQl*aq z<*LCCiyw=OrQ^w!A%-uVU$kDO?>^2MxRHQDij2XVTVT7(N$efIu(N?&m7beh;S6i5 zkcr>1n1V<+_6nwW#|^?wZgr;mB;Wlv{-s5@9P;ZcS;amwnmNgs(uqGb{yku44RAF; zlbeSz*k+7JLuqsw)k#Ks`uWcDh`qpPly3iF5Q(^ZF~n-|=~NX*a$Y*~NjjN5%dg6i zdM~9=HI+(hW5ZDvUh8b}Lz4d(HCg}!u2b0pbJhd!Fv7Ubxtr=?*~S4`7u&X2Hk3P` z91CNBaxdSIkqMv2nNJ~#8TRT|e@>a@6wBQ?tef}VB;l?zZ~Zv`^G>|g`<~zJ`N;_X zbsj^Kz~7Wk_G&SMQ$tu_>KSjVY3$7LSgq=-n+4p4&vUw5KJGkm?4iOMi>|74U|Lp4 zny3p}dvZq}hgp)sFA0ey7{{gp3Qj$P0M zEU2#_kdAc16Imp1T3P*_N{+O@0k6NBXyDebLWzpstFa6b&4y3vO&^V8~b{*ll5Wv z+V@L8tuiV@F0{2Cqco7VbHMNL8uFtJK_r-U^>c?2hVq-?&y_4sv2j+t#P$5;op<8g zb!K{w{|f)U$#NEpg~iEHra(oVky*uaRnw`it67G=oUM1_!f=-olseYig%mO~9OUA} zmd(-5?XS&aI1g68N|}!Kvg0DLYLsqUiX=$Ykdmk6aPQ3zqD-*P#1~u3nU^)ZkJ)o~ z_jz238?167g3zlmwAK3ZV>z2n_&EXtk45DImanTH;5VPH555Ldi)#FTt&DyUh=A)^ z^z&%YFVxRe=`N;kILcr7@`+8uW0mFM+z(x-4$nW&d+_6Ww6MsFGJ-{2GH&P+&?lSr zImk~nU#>ukh$)-}9;U^j)TR4eKCAXDRR16v91wguL6+5XWPw#a32|e#SI{%rZH2Au zvFzlWF<|dHHpT+03RmEdkj!T=R2Rq+1W~O_=zcj5^J%e>`zhfqkt09$4(G#)0gLHB zj&ng8thT!W&t}^90R(Qr7gZg&a zD2y@P1fWe+^i@UQSEs3m>LgPVd5p^`GMWbQGQML+M0$`EnBv|+YAArkLg&`)8{9^s z5{Mg2P3LTqwo7{rj)!gFCJmf~A>03%#nld}>!v z>f6}=`Fdr{G73+o0OI#pH}vVWksE~yD$KTwh2OiAMlxb0Hzwg_`lE&aU*v7R3xHFU zkkbG_zkThNA_ zykN(mYUu23;pJq~07J@@X?}%H-lv_0T;9fGM|H&976j^1>Y94s95JUzx*QCkAgnyc zBU37^Io}so!Y}w!8J7?@1Lb=92zW;$4`G^Hn0VsLlp=!qUecbMa$CX{=~X8l-M#@L zzEs~1G`g^TJk0Go{_`KZ26+SQQs*t7`j=?Cl#Tcja0=L^Oyj1(xR@6tgAXb{gwiy` zpOEnZl8FLI~WZ17ztCR1yfK0@L39l zd95dCzI^#o1>bA_ba&H*j*hN1M_>9yclM~o{3r(6vddtIL2E}d*r@{YikMbDE}oOr zEybJ8dl5b$lc7a*taT;Ap@HtuL!niHs`alC=zJ#~8_Y$}@=23-wj%z0K*2kQCXZ=!NO^aiP5%=&3EM z0$`>`n2w%aElfE_2TZ7UG@fit$ZsA%-y5;9z1*~#H=SN0rMR;7^Bt?s-tG>sl7alj zyAK}(e()7}p+(XM!GzCHT`#E_Dz-P@DpcdndH47b4ehtgIk6a_Omcorsb9yFzl{$F zs@Sy0D~fr3fA|)VI+qoRM-wb-z6D+$AB7|A2h}ByOC)4!zk?HKC^(v<|x!gST4b z)0u|0cG*8GB9duhXuplS!c3oA2OPl#Lm3$Q%$fR>7T{tNP4zG7VB`>+ej|ki;f%bz z{G@xdeD~aFh$gbCy_mLy@rSZlf7wzk(_F~otp={akDzN)zPut8IqvG5F0b6=n6cWO zrS17SA)%%#OM4WIT{#a0x7p6a^~bU64*{4*qxxv(~RseT>VqH|p2yiyE#HM~O}5le)mt<-?@q zCyYSwJzQk}w}o2Jh2)&?Vq#%I$}i@d^wP^FKK94LC#{BNlo{gBjE;?oTUuu4=U`ZZ z>xgoA%0SQd5@=w33ho-Y0WLqtQMa<8vL8C>u=t&9G{4t05KJ5@d9&K2UF9=5<)lE< z%)7MqmMPuu{rfX6a&x_A<;-9}LRNoFP!L@duT87A!g|J|K>GY?Yk=VZ1Pslal-TI} zs^1W=sBRwL*E&x1pB@ZnJsb^w0HW8I7nBb(+w)iREoi-(m;mUcb3Y|4-mJr1jqOX1 zMB_vF82WUXc1;4P3HO23PEA(XBqkl<^Qg_rH zClkg5q0iv7EG$yK;9emqUb{Kt5-DsTz6)|%i;Wvg^^sK#+Q3hSg?q+8O%O+hFA~Y=kns{GtuN9OBt=m@(R;mTVcCU~12e)F{ShA7(tR_;6tl|M}WOLKtO^ zFAc$UKrn4naC^~paCr!u)!5@poW`NMZ>FJ{TqZqtHWq!|U>TicU8=bT{$L`8ux3UE zMvToDd66c#WsECgLo*!_Ee~nJoB3W@ImM(IVx6atk^VG}BpNZGcpEW!EZw?fIH|{#@npIOGJxo!I>KdbYe5s~GmC zrF?ADWu~;7i`8*ic++$#%^KNwOLQs1F{`rJTkT5mu@C-@4~O_LPEvQ}h}tRW!dc6= zpL!015m#=ZW*KFOfvFCtWKhW_<3thT!uN0ACWZ|gbWG1qSNDTaYMP48Ti_O=3ES^2 z*78G6JFA_eYrSTj5CNvgN}5=3V6`LgoRyW81N{A;=nI}kt79PUNC?G827Q5>y#%JM z1&NgjHHGJhuU#qrUPCp?`)>qwco;+r`#@GUQzAQU*qU(O+Gsu?UVfBnL#b*UX$MQ^ zs6^|)|KtEuiA;;2V!D3audtB2*Jj_~)?hNG`qZN1T_}oomy3y|)cd{S zGkAUjZ{*CA^drnH+MS{Uxk%wySav&e={U~PXtIoEKHjQ4HB|6RpbhJHk18mQW;ks< z*`Uf^?k4l|fa!sHoWJ(18G&(@v@1f$t?bO@I};y+QAky@Nk4Txy+q@l+($4&XQY4L zT+BJz2NT*hX%;9$mpRnqC|-Hf(!~c^sSCi3K2lN&E!yt48>~Sx0+CWU2c z6a>SiMxV@y{OuwBIIOb}+R^(y;?4^8(jdkabymo1B}^fs7?PS z1&`&uH-ywI3LQeIDfAq{ATaf5%1Llzgt%xb6>8nVs+OPzN#S5=(bO- zGcHWoxrJOJH+qREr(O~(N}f$f+T=$47i7e_6N`2~?4{#?<4JX9tS{Jmm|kV}2vBD~ z1jInzge}IV7VqzrBSIE(8h<8g;ybu;(YJJS3cBjuGMKX{hi1aT6DxPiXw$dVI2}ZX~$g+>8&?o55TL0TADWo-$^u!yt}rg8*t))muEICI)LX0UjZWS?`OuVFPew^P{BPI> zp*5E}<)pCQi1(w&4G$k*ccv?A3EY-cLRc5GyTWjZ%QO-b3v1E>HDwRxC2@AF!`{WX zZl)-S@IzapK?RyB*T&E*!q0a-3DU3ZQzz2njD|9v>hJn2|qz` zE*6&bHM;)6BH0}YIVm52?ZpAEpN3a)C@Cwa`1UfhvUZZJ!%$0THRC@QnzO;=@Zt;m zn176Ikx1oQo@YSA{o^@I^zjKYXko2q+i(cVdrM<)w8z{}aeZ_@OUwz^sJ+V;W(u-N zlA$N4B9JT>J6IPqx%b$yVv z>qtjK_qWfZA>P~<8;JAu3d-INIcltx`a`J zBfGbMWUEvG@=n21l;7V})!BnAa3?H2X2#Ft;2qKK>!0uJU!iGovHOB9pXa13FgI); zffQ9$orI614d!}e(7KxZMjUz7zY7aj;DA!Ki(+~}q=m@VLEf(R>#Wr(%d2Zj(HD6{ zit}b>$4m5_{$1?%+5=bpRCB8?jr69tP0@e|jU<@NKKGl}s#D*MMc{32SiH!ubp|JP z1Pm2{b8c#|#{fx>$67z__WUNvg*Zxf`~8G!5&0qE$EOSr;74PKyUk})TL|s9q+U;X zRjdth#hX;|2ygi`#eA|qpY5ix{v|{Dyz6e&OIZMaj+$INmj))M&Z=x*npilbe%KFT8QgU zhl5A~*iGF#i&nPTW<2g+e&dbuh8M1Biu zAZ0bK#}D%6t}K~4ouUqUYr{{|cC}qtB=`LL+-hiD%Z&0pkILww*tp*vs#~S5=96Hk z1=;O4pRL}_rS=R&1^C-TF2(3O1H2D@ZBL9G;|HC}{-`&C>UrST?1b-Be=l0GA9iWU2Vzibyj$eoXe zk=fC@yHn%qkj;Ed(i30=WwWc`R(LvY({DNFFI^t3D$z6gPfb8qf@mnS$jT+aS-G4I zN`7RoP)`qOINu}wXZN^)=)(iaEwF(wx+8wH-bH7yb*u(X!+V3X(sZ_~aRV+!QJg5z zfA`;OQD|y`q6ywYyW~5AeIJpZ;euBS^bOtqc_}FtAQK}G`u5LB#s((7%enkaIc)jW zzzgGH?n_Bu9cLqS*Ebrwsg78a-wK{YpE=#k>2hx_duHB*u&;gDwkUmz)mR%H_WuqC zK>ZKqnvYop2__K^5yY*2E9YjHU~f?`jl=VAn3K`148pceoc|G3q4BH@WRKbH?ttoQ z@GQhNjrB>#+FU@eMVj&OU#rBXgN-Yue-Ba_CvYEc?mC18uX=YczPcOj_pVn%@Bi_F zKzvvhD$=oll-)z~*lG{G46krOn+ND---O@(%VoR z3!t=o$|R?k4|`j|^`k@H|AW0i47Q22^cGe3F(GiI*M!}KOU>rXS+IQnd5R0h2W;o> zEe5TIPTS((BkmX0o%^?z=BYKf5{pw~C#@spl{InF? z!QIHb2RW|2R&z!f%8LC%@!GR`n&6Iywc-5n9;d81tMvY|(^Vz);jq=Pt;o*Dd*7T= z;PggR9F%{9c~GTtJ(I;QLGY?w8)S8i8SwbLxm;|^jQ^-ldyEx@EHw?-B8c!grQ$6o zVCJ-+0yQ#oc(~=igoqV8rMoplysrfi_Veq{+FZl9P2k4$EZp%9_7@>m%tKUu)|i_< z)Qs&SqQnH&3MzMYh%qVCv|Cn-btolv3h;RF@eAjjNPVm zKW}{KJDV_(Gu53U@Sxr$V?xe%xFOKZ0)N9*J9k+5X*qS5#|6`C_tot*+E9h4{vIR+ zQcaIaf6y_%r^U8jy=1;LF}iKq+$kh2V=N=AcXoi+C>yDg!(v1LvhL=tSZZIs$(|(% z7k)l_D~?1D26pESjk<`K>OzY~OG_RB<@?-*SscM)Y)TtdYB`R}$G6%E`vuF(-`ey2 z-T_3>`B2bDsp-K-@?4w3TWD__HJ#r1Nm`jN2YioW-mZZv8%k1b0~pBDZ^l_UBxZ;RuT zh}gx}G&3x`{%Bdr0@r@KD1#51;l0HaF5{ciu*q*CVsPqJO`jb~Gf5xe&)Vg|{#Nkx zabuTp-u6vntInwiBS&ge6fa75)|(LU9BwBSn_FI!MLqixUM4{ELiCNz9N!bAW@aq| zEUc)L_ldpkxah}bDkL|bTZ1_?!oF-oPEzYj+N}L7ZMvO7q62fA^`Uto+1w(Kt86#R zf#Qh<^XFD)iW;+~Ry{a7#yW2O)~}(Dn6@KkEn*|-)f-=I_Zr}HA7kvuO~~W_C=vqs z2%;|hT(iiXt3>V?9;tByfjLzElGw=U{(|?C^3UM7fD6_=VVJ3Vu&+`qepZ=E*sFRO zwORef9vCpc0Rs}`J0F}p_4rrr1^De}&+)!|#qmX~K=?EB9VNHq=GQb)KOR@{uVPbD zqM}vSWpvM&{E!fHZ&iU>!8i2hGMej~RwDV!nV{rp&Qh zbyEAaH+9(ZS8zCPW!y%33e(_(F2v&P6nWy=(6lH+vgjix&YV{f5z-I3FQ(Np(An88 zuo+Hr!TK~_haVNRV7_>4EmHd|$Fm1H3gZGcTS=tW{4G7wq}DLy5^Z%Kj^z9_l>`+} zmH48uo(S7y<@l1o?ssid_l&IF8rkxqM-TQ2QFOuHuG?to$JC8{MFIo%d-A;{vH{PZ z{_PZTE&%5NS(40=#>9||RoSWe8OTl@Jj(MfPx!GC>^=2HWUg8Cx!9}5iCh|4os*}WY^#3;O zwx@Owk!S7}aLdVe6zpcDPJ6z=~W!erhb1U)b7~qTY z-u2L_!JN5V4(jF4IlqXR+%;S{J2 zT+MKYKIHrviz!s`?Dv&v_4uvJQ<{Ndn!Nv`JER~FK6#vvDipq4Wttm?NkZtC8Sspe zXaesf?<+{E+1Hl}x0<^NP2{Z9u}`IC#xikFaEdiJr#qxIf9kNszZ$;PKW<)c=25@# z8>IlNosX^|U{)Tx4@$vU7B=JDY8A-^Ij7fWhZZd#m3;bN+1Neo)q&`o6oT)W__8)K z8F%Xnc{?v2;zbDJf=rQ6f#0)!^P!rG&_={3JbWa9;FNhhE>*DyWk)FUdh)yl{+*te zK8;Qd{HCbxRGHK~zIh8+(VPawmj`(RJzvC#tzq2~v*u&oYjGOTHEjW-26ZE|My&)B zNroM>@N++uo%2~vAM_u|p_AI?mlimH4vQKu;*C1H#NuSEwHO-qry3F-m z8>V+G3DU&RXZ^avN7%G?hRJ^^6k|BiuXXZ_k4Z-wG7F@*uB`U{+~Y^ zAMqx4=1H=np7s3C`M6$ak#Zk{QXc;M!Efl;%B(K=F=(9=-b6Vk)Ry zQz4k|JbxJqv)uNzR%$o(mI`IPa&D_$)K}i4?i@)E6Z3>&r9q?`f)Ud|)ZO%lpn#sJ zi|G&1ais?K#1gURNkanAwN_{$0sji_KM;rW6nA2M@EeC*miy*WY>BtC;!l`U$MNt zs@7O#( z3K(Ca&qGdBq5QQw&+d+&t5v9O<{S$zh>neC_j}kO>b4tHJ+Lp_+v*_PFL$e$A%vVb zuM`Y_7#+4#D5sz}p-yNjBl&Hz)s15)psyTh9rLq4 zv>k5TFMUB9gT@2|vh)L+Zud21&}-sg;)huiI$&4Rp>D>eeP;?!NsKIJg8Ml!uUr*L zL_UdduBbcX34==OEuE7Uftp;)9m@o%q{yA!M(b~QGaY0^xjwfAU6Y$H5n1D3DW0>D zqk}mhselZSBT+CCg*#vFp%y-AmuWHK*8CFC_W+QmW3O_~^B6}kBq)Cr++0g_HTl~a|FUq)H?-t?wm`+2 zvBbr$H8#pViT6@q3l;?+;h>6v5SdCkG1VzY4HKfUkK^e(uEGVyrXJ z)Q;{3=gV@4w^JPi%Te3a&z*Ed6qB28OG_qauGvfG-9^>DVaQOp7>D7Ru1{{g{P=(g z1tqmOGnCkGo&oNX5(4+=M#ELQtpzFg1PI@Bw!Ox$G2ZO4_buMsEMIo#%^N)Q@}6s(1($Rx4bYAu zRbH!!;x3Ho98!*<9r8s*1c5ibKBA(XUPkLaafTXMoJ4<1iQTOs)Cud}_^L{is?jII zXBB&l<{2smU)>vT#lU~Yl3-Y$#-4_9D?w|2bUnKy8uaDOURmflATkTO=;FNX*(_U3 zBEPsLQ3p#TZMMapN}B(Lz^lVzf((ytGq)T_7)>lD=h%gb*nyuPwoJBs@Cf~%yy8pF z)WCMR@MiYvUo_UiaUtq3E#Fy!+QPt*Ey`tMrjo?o2Dai(Rue#R;OLyBya{SU6-PxB z!6B3`idayFTE?&diumgQrLy`pzT&yH5-Z#xao*%L$w98tJRGBh zfTBeN?qIamrI)$OnM~47p77G~_PI~_Mt@NvhyKTmY~5hB1g%NEY)+q7Iy%;R?noBw zE8RRvCWh16Pz-ys9b*S>KZds>fxcfeCccr!ss6$E3h&10^b>Ko>-kVBkcS(lGXD+uTH6H|8|py8iGDj5=an_#LBs%-X*RGx++ee&QI`9l&oC) zU<|@elIe4i^M?S*ij~JU#T8)^UTb{9@GWC)AE(C#&Ea=OBH|&QI06fWZn}CQ>Vd__h6ftBKOK-?3?)J`1`s|hm zgHaT}yCa8uF*>Fuyu90xbtTJ&yAO(tVk%f3cT^49KK8acyLiAj{Ao#v7MLKD$}y=! z1NUyET<6@H3T;+a?41s<{&c{n+Q%b8By4N(V={uCuaae}$K-yy2*B?GRZ995*Zo>_ zOfSH#o!E%$rpMU5y3nynIJ)|sHFUPGYgnOZ_iNVwHtmAF)!Ks%RQ=7~7F?ttwyjjF z*r2UZTRn9_L-fC75;*M$#MmivYXdWrIXw1(>(}pjuDLpXS=D=w?tB{hfPwXW6i_eP z8>YQW=@V@#SSU8Sq8FbJx66GGbU!W+&Id(cIGBHEX!mk_IcjL@C%AN{RGx{AOvy9GLc0P` zpq_c)q(FygV=4tnpDL|`hpyfW=AX1cNEO#iw1J^Rd+GHI;5GJkOuH{(xYA`_b;{yr zAGhF9v5}iMk}3JI6!FD(tAnch%mL%T0%;%XA7Wo}7LoXe z7Cul7nr6%~vj}F{_H#wpZ&6`sN#F929c!EUWnJ%E(0@_-B(^k8+;dG(J+~si^i#jA zoH?s(Prg^yp@&^ScRcK_x@41MZa+mZTI{XNRE@|?ionaMZtUpvdFk(1W*CDU0iZWC zvGmgGgC7AQ8`wTiesAlu5@kDicTUi;sEeo?!--%XJPPT2xS4ig*%q^aXiFnfj z3@slvROwt%x;a5Nke zb!S69ACKoiRv?q#DJwm{V7Xbr>TaM{qNUY*$w=!8b=W@d>|THe>k3XvolOgp-nPPp1~7J%GTv#zJ1%a-1yA?k(y(2&In#3 z?r15H;G)hn;br8PGrb(i0vx+v^MfzP`wmR0o92Zpegv}(-Aj41l}xhg0nCUL>$#j9KW65hcJVDlmd$)OJr^H>_|YmdSTY>Kc@wh_upZau{BK!z*+-B+!Wi8tbPnOmkSfSY zI8Sdq&%?odjUa!g`H>arrnR;iA>vyXyH+9jtNF5wJ~Ja$4$wGISQz(75<|tN8Uf|`3}CfQeJ#cI*6snCo5muteC>C^m- z7P9-~sP16>s2=cOaXfk7$3)Rs_>X=tjC(`VXQ}Iq-tE4yb*k_vs68uC`8yfwd_OiW zTLpV{7d0EqD?!yGa9^=~I`q8e_~pOr7!Nn@EbBr8@=|e+21rDQm4Z$nb(0J`=*dIl z-+)2wR<5ogQ#GPezBjY^nW3r%fIha*MiQMwLi-TaSs26}gwBs{o`VPzg_fJ-^Y1mp zG$^ow>|Ig(UdI1U@aioGz2H&-r+7Je>KtYVt?_G=?bFD_uwyNmJEEJc8dx4tr$C*W zIgk91{zD&^e|z7J7vRmXUJoKGSE992oX=ujoZ2<9G0$)?F8t+{?9g7Rao$7z3Xu#3 zlT~mvdk%HTQYssKUS#%7joE2m{OhMU-=X(lXbWR+NAKOXlS1&vkBU8JO)e<>nKXufesYJPzNo`g?0T_UG1Qfy>5 zS&`{5Z-L-LnH9yS&2DHaS=dIJGYFRpK(p=nh4@hVG97HLH)5!Ox&T2s$we)Fi$`5?DN^g|J zM)#|Dh!zCV4~L4%yb5$Oc75WUgCR0L+jWo;K1kY9gYM%B(3U;*e9!ni+QK62u*%d+ z6g48sH1g+}vQ4gnNbvpTK9TgP!ODYzrX!Zj39C#A1u4xjj+2w?pkV4Qx^H(0^jX$C zocRgI*VjeAaRj2J*3e<{UEWfQosZ~^bcqmKlN$xeLmG~jkq280-V*cyH{q9I2D=N> z;PIz1PVay+paDlv$wM%0^LT>7>%z=_+6Ezp8Eo9cN-QtKYGem7`HmcvE47d*-mS8Q z{Fw&=%kCetyEKk*SAhz(e?*>Jnz9+_o*G;|s(j$s&A0H!LHuD^ z*L=p6u(!9I9|`jNC+R>oDYnd%^PRgLPU)S!7hyT0MmeEXo!G8KmT#$IF9pYHXfYzkPY;?Ep;hd78E1+0G~oX6}QO)S>#PDS0)MltIB zmkewH`d7Waw|?~;fT$J;_W(3*{~NX50GRo}*^t~$P%Zu7O?UcXK>4?^T`++ZsV3I& zNzjXnD3^6VL=TA2v$<#5)b4s{*Jd%Gb`)|QYslI+{hswt(*_6gMV%DB3mi0?j!T0| zl#QJ626W|? z)AWhJ#8-}K#Qza52_uBCU{^5}ZeyUN_i{y+-VNAEJT-p1b;|^;M^G%lq`-hj@*h=Q zHlC)iQWh&Ru}^%>iI@ND1WV8-n9iC5N;1wXWxDumYY)V{|2`V!N^iHa_u&`#A9BX~ zNSW3u0!NV=r{%l{h}c>tLtEVWzqY9yLC8l|%~wY+4l;UrIk-=lb>8z{Mg6qBdw{nP zWawZb&bP)!(x`338#>{0jr0UN_J5zX$%BV_{VL3Xya5=tb0M)F^c6`# zOt86X+H$Cgr!{rbnmm}dstf&zuRYxH1gSu@VU(TGol?>2NB9ZqbSkg&0NX1K>&z- z<8^tnzZRk!J&|I~IP4O{owUpCnqqYHYVr*C2)9P2OO6k4Nml2{smPjHjH%GJb!Z#U zxzIeKltVudc9`hwGeY9a74}B(XLU(xuTO$fNKe<*g&F)6(9PW8LNnj4G1r zY1dnV))IAHo|ov`SH)C!m6Zp0$zZVTe_&`8gI!SvoT{hK$B4Xq$7m1lG=4GNGAVX1ja7a)8Q|@cONxE@1nT%&G!$Xk>g5b@3WJX)T@FPs3WV!_; z;a-4rrzA&wIn_$&8B?LJzaK0gOTk3wdWNJXD^mewE}W5`P0qBCTm8Y=Nt$O@{wrJ} z;+BQjg}~{l)1#k9jKy)@9SIghiHlm}AG{23nT)Ba=m;PXMP{7GY}1TY!)9yn#`>}M z0U-zA*JFTd^)>pyP^YSM>*gJNOLI$|4IRCk1FS-mmTA8&n=zhoEzixs#56K!cJx*i z-nhD*h0~?9myTKf&*nl5j_qpzb6*DM*B>O_jJodh&a%FgIZm}URM5_wWMCL=nbyM* zt<2bRd2o(w8?#T!jyl6cls!4SFZuT~_ zqB(VVQX^CPr7o!lgmX0Bi${tQf1wOSH&K_HP6qE)yMUX0f>oS5O~pRwkq_A)_MNQr zeZ(gIvRPBNj;bl3Z8k&uOijXn*~v&yY&cN!p%BpYQZx(wYeh?aV7LsQYotTowk5*s zw|mmROOuiL7<;u$r5M_{qPX&?O>8ic?q28daU3v%qCXon$!g#p3!M7#AM;(?Znp*_6 z`%wWpfDdR@-+6Q5cVWk0hNJXR?7D$JD4(jVY%;F99JVN1ls33?zUO-V0R{#t3W%HH zo`HY{Y~wo01lNpRpL0>yZoU>`&;QblW{V906%NG`1;d1-Sj>m21xb)jkMqaPkX!{u zJtCF9&Qi}SQVgsu1;A^d;}yA~v~KcIp+RH+pV@f5@$goVA{-)UWqnnirT^;FvGCCb zgPqeARAc7BX~9ge&Cgs-?Hy~y^eF2C{&eBSe$Md=JasC3xSTIl*1VFS&QC-=z{QaD zCMj5xI|L0s5;*5Y5rmkvjN+py-M+Qq@VZsg^KmK@nHu71MnYYbst3&UH|Z=+25e zQ^Oh@BB;r&8&vTm7-{A*1(U7$okFpejEDuoNxm2CA$>@s+nUz4p9UO`Mvo z@!%&GRl}FVnFEmzhnA^rYx%4=y;oT`=3-VxxQm`(t-7{DgAUNxUx&NzB%B`%g;KNu zLP29$vp1a8)G4g52c_70E&DL09%91KWa+-anmiP}^@8Vx_ieO^J2US;#nh`6g~mxd z=$Rl=p$@nhyH^%6JcxCWiLCW{RFuFqnEv4!=rM8>^y*X@lM4h2nmHw*V=a~yv1^t# zd-?yt^x>?hqVrGy{p^StGCs|FFBuf!G)M%9g* zDt$q!wq;=Wy~CsUUj>}ICx#iTgS?=!>T&^`s&M4Vr2xU!3gtpjgAXR&7KM zCmP5blM(;CI`T%MXFAm}AOE-<3=q>(kiM@Jls#5a#v?tgdHt2u$r^Tr#oK87;4Fn^ zmC=0F2uW~QUV)ddUltf}s5{7cpwdLiK-@4^BlHJx>}eKSrtEZUvmcG&La%KFsi(95 z3RghO_)?m~Qf2*3TVAHZ6vNW}E^H8c=;sRUdrcPLRo&H7`1_u)tT@DQ}J32b+e1(CSTEJb8wevdy}! z*#oFf;|Jmvtk!}CjdKe!Lm+vl^RsvbQVPE6+YP)WH3miT| zA2T)8w}weGEpX4JLU*o!T%OSyONjpX`@o;^KIN0Q zG8+<>N+kB|!*dovWg)0#rol%OPUvLM%4o^-EwzE9JTxM2J%7VR6WeoN7XSGI3WY;K z>2rF%qRNx!Ycc-K_g!1YO()yqB7X1OTN4LRZLHG$QC2J1G^&gpP#*7#a^nwwUjkAX zZhLRKslkC}(z?ClXWz2uw$sUQEmpN;y(DD$ax+5pgOoNW)&8;J$U)*-@xs=D_tI%u zqU^d~d7pO}XelYz*X<4l z9ibxFD92nQ(*s#sk4Hb+wn8^ChCaaWrJ5eARDo&OT$9Q@oRR=Cj$dPmWc#L%sEtQ& zoiMJPg8cMb$9dK+dWGH{?Vtkc1jZ>FvtDq!(tf;llvrp#pPZTwvOi5o$vpK-?WTpG zlFHTltnXo}!1)mkQ;D#AuPQAxpE{S>X{Py1k+u#)??rUx7$_2$CD_YV>q^9Z3bIto zhMu94?byU7AhDc$&q35<_36*nMlA)ZeU=U98iY$vucm!NHK7ppHGg(s%B-@Vn_GQT zKlfJv@;4qw8y#Z&`awa{4YHa<@Ua5IyJ|WQ++IVSCd#;-!8c2gkU|4_`;Usdv=bh*`Op zy~9qT4-2sMyIT#UXszufLM0?KLI_3nOhd>hj&-b(?NDYM>$J3x zolV0!R>m<8T4uIm9joju9EW55?vHw&@Avn8>iNgZqlfeP-1jx!*ZaEe_kBGEncG#R zHza-9^syV#?zjDasB%mLlbH9SuNldzL0ur!B$>uJloi!){gYz={u=Cid8wV*!K$ss z7yAz3Uugj+(9k1)G4g9=U~A2H_8Td|XitG7n=SP(f|BBTK~9KRadHp+%UzQd(b`ON zhi9Ct=41>V%llKT;`{HYq1LbGcKslwk?eJl^f<*Ex1!~_ zqf>Y4{;C#q5EkU6fu;G1rhMVzR*wvKl|mE$yQorcWyGJ#n8UWm(PO>OLH|&W9x2Ws z`P7!r(tC*aV!P^JS)O`UK@SXVn+ol6%{zc=h8N+kJq@w{bw*(AHMC}%U54T?+S3-4 z#H{MX8CQp)jZr{ymjBEwU@!R==gM$P&GDM~H%TW6_ip(-G?B`~^`Dm>_&p~H^3e&i z!H2&15@z$Mqvbj4+QGck@R7CDV5*1zvhffZ~{Q103; z61$v`TIe@qzuca8C5U*W^cT?=kW2FwQJ`wJ=@T?7bXo#o$H6KBOs)aHMR@hI@0SZk z0hS}3pSg3l20%1MX5OH*fS_n+fmx^Zlg;gRC5d6ySG$ec>TXKx7*oS&jL}jMIog7x z{c?Kq8Zd=t-ol;dN_=+l+CRPwZ_?=LvEw6GD-Czh$a5F_LL%hIJI36fUjJ$)m@}Lf z$c-?lG7|;!4^7w=fK?mjK8e3W-pKk%w*Z6+^!nBbH<1V9DbWdm*m|hX(f^uF0o6U4 zDCYN>!tNNG3)5gt#BM18+GtW$mmt~_`e6$cK`3)FB9g&al+zm zcSM0O#+g*mA6mbhRQ~SoV@!*1^q06*z>dhRGR6phzVxs`7&Q56E=>I@g8uV-=kp+O zC)uoGUQvyf{!}#-i_((J(-7OfYUf+ByQ~Lz+tVV^Y8{ewHqSjfjmQAwxO5EDg~gos zQ}YTqfhnw{3*3L)3kHRBJjL-I*P^6@L@pgwSTsg(<$J@#%3SD~S~_%7 z-{hljx#Z~Vb zr0=$<=R>K^%G$Y{ky)=}(b{3vhR8t#r&>i714M0$2}L z6v&$=A$u^((Skwt;jam{S#v#WmG3`XNd$lD9|jM8)~~_U=+R(S6Xn*cJ+MJ&^h^Kr z*-Td=ZzQkk-5T^)hr3`4R!nu?v%0~`% zW-F5)8x&Poq!iUxrEQ0Vsf1_0qJ*AG`P0!n&LcZhW!wpZLQ*HR4?4elzwfo1fr{K8 z*K1zr4*Ay8kt3z%%-LsS?l+1)?ym!-lVxpAHT!@jIjy zzMb;s^2=f@*u^up$6<|Fw$56IRojL4VsF0XaVZ6<1$U}@)q z>i?F5*HJGk=JaI z<~jMsPY#xL-0d^7FJ9FThOA}S5m;2baI@b*=?fOi=pu4eZlZy^W|3uax#dE4;r7n- z!-QUN{uz7_BZVY0o55qGj%a!M=hL-SrMVoloGCv%FEu7V zN4)1XwQ0!R{@{EMb6O#4C8Dfo2A_9!5|9}3`oo4(mvN{Tvy@+}cL-X&l&>5IrPYQlrW6TzgSl>RXUnVT zp3qO_OaxY);dJKYhgVDPelqc-&b`sB!Im>Gw~mx_S5{P1oG%;le*B+-HI`-<$H zcI^dScGSWmH|KUKa0RB*xO?iN){1E#!+dI+Z|)7n-ozOkYb}fn7rH68``I>BY$Bz} zo(A*nOUS?+!cyhivkLO3)xTZv>o(>2edSscde>w>}(`foN=jb)g?-%&QDI-6%;kl)X|m!BFG zN_~%s+ZTJk3`u(+@mWP?d9*WIbxQqD;dzi~Y(PK(g;s)4cap(u`^Tn@T!M@3tph=< z$KRFEZU4(NZYrR|XlmI(sYkLt;k==?DNPt2)V&f6#hp7gXpLyhN*A+NY;jJVt)+zz zLc!0I-~CW&$4>_;5&+QzY40LRF|B4XK0RbVSGiCrEwSp9HPpYHDNE^@oo3$yk#Wk& zITRxLCT(&;OGOqVig2?GNi0k2yX+de$@I^4U4M)#hfCmSa6?}ta1po!yi1j#Z?$z) zQ7L>&K)V9+dF>;0g7PWdOcR-twlVk{;^v(1XoK);7utT>piUg@&@4WckED{!K{41T zt!q9@#uP1!>h2(L7j?6K=7fL^n$8~MdxTX3vt{H1?+H=(30mGS6n2j4s>C1~$=$^G z8`lV^o;x_o(c}@2H82cw9!T{HXYzhKp+_5ns&04>#nFD#-# zeg~G<@}%9V9DYVDG=b5=V!?xQT^>d}z1W8JTlgw^IB1cXy67PDX8HtS;T$_e3B zco+I(KJAREx1H~W6PUkD@ZfIPx-{EZqe zNk97KC81gYV7`Xj%2+^N(w_*XH1?96VhH z(LqGsje0+DiNNEc>dx-`3$ZcxnEL4Z8^>a@K89Zr8d-SORd^&}Y;Nq=1|p7t4b(5Z zCkhkcT5S5@?(K!ADZAnN<$BOo-H)^||8KC!>yYdxWGlCwM7#QnP!XPaoh6!AmBoYR zL4tVjI!OKx$$?9U6UKrVYTsn%Jb@t5b7t|Aw@tP+_r2Kth2eSFYT8MVBtj z!s_8#QHP~k2cF+CAkq?wi1+SSe+Zu-j<+Wm7c8f@H9y$mk-&TOnE@yL8K3(Bn#9FX z-DTg)d_>yKx(YzZZb3y<>-FovCKUWhjrRTN@1N^kW!Vj>#oRA(#g{mS)=EW4O@ zsi=US?)+4ia+TaqleohJ60Xx*6}r95M@w$_UWW1+GEhn;liK#gsUxQQ|!o=w`gyKpv$_3*nzi>kPR$1}SN{?9J~ja0MJ`S^2%25yDgVhboXDl^V7jgLIEI_x^Xfv zfQD*wduGV4X;74%asA%Lq|_&K_{2*m5xtY|cC8I0B?cSOsjaUt;r_y%vf|zlRZa)i z&gV13{sR(6|M_6M;Wzk5=A>z$7Oa)D+Y>Yvx=-@$Fw=$ z9Z%(qfxa0vf*pz-7Kc)aTLH%G&IK|Vd$NlLg}ugbf~J3K`{sJrTq66D9FdCE;>+&q zQJ5GE_rFuemAgbUIrgVD2;r}!>>D9Wr$hu#bM*H8Oo_jHxOtJh*Tb&0!-J0+C$jZl zBRt#RDvBRtKIS}T2)%A1cb?+HD>FnG<|2RYwm)Rh!1UZV73*}#Z|Ok`Tmdc1(u2v! zXal0ea2=iG{CqJWu_$ozLSd8wKd~k(q0iK(#=aI51rSd8{Nda#PC4(0-Z`*m&(4lL2dmv*QYEtk zR3`B5QqqsWPkV3cU!pk1$o4^?`E|_;Iu^%Usi`=rrubJqZ#DY}{Tr)%u^W}n1j04a zoMUS2XDmyRUHfr{H`aI5+1@;1kPdhTqdQ%9M|#54fxRcb>DZGOfkWFqb-fOA?yF`q zC`aCJEd?<7>6c8hbexK3wl+voo~%G^^IGhAHL&Wpfz)iO^T&r&`F>m8REG|op9|;L zZkTL)!z(3a@csMu+s*MZF60$EuZaZDuSA4X>E*$DBebrAtxDSy{@bb?UZY1`*OwYa zqi=qCT;C8WWVJAeOLYcYCFayGJu^47-t0LFgeAr2;+!jufZX;N5ao+z;McmUuKvt% zpbY-{_3Nx3@m#H4Fbv86bk){obeH8s@MdMd(8qk7^@KwaKW$nVf{}0&LyGWGB{$0vWTp}+J(kTN81R?oD)==f3=qULOb>r@h+q} zz7}4s!8sSDl-rL)w3l4KjV8uqh`A`g$c9GG-4xIPQHN%Mo7F*5wk`6@FHC^+Y*eaq zx)W)BK+J7Y$5k_AV@lg!(05}sGKf_Q5`>-VMwbJ_eYHGCC~i!@{w52xo){4kan;AC zB3=Qd??=R#*IR}tSc^nQM%KG`oAL|kXT4-~uDCwvw}I@~0h-6Lhf|z<$Wv)zzGSzK z+zAE0&3g=e8$gkfe|e%sYHM>J8q2gcy=d&^O;pLa6CI~&E;D+<>&|pbpZ5uQ`duvk z6t>_be_Es4N~7yNH$iUyN^k_Lp3cJKmD>oV|0fdjU*4T8M9n7D08hb9Sba*-MmAR2 ztss}S-jjOBwonY)=FVGgRa+l9z>>eEoPt#IG&!d?9}{Um1Ia;|Y9wFYhl zFi(I(!CQ~KGG$42JH7x36gM=eGqiR@&iMf~%Ekxuinb_icisxGjcN)!eKUOxv_M572X*kKCCr8KDDe-v*Zqx=_naQrYjxqmWXi zDyMI!UTUQ4lhW{Q11=PtAqU+4D6&7!f6Kulz#n)Aja*l0z<z|aw9ferhl&;Jt%3R|+6kI?Am)oIpPPTqWcK~kjxsRt zczJn2it3MN0^$dQyGZvSd1s(j9r@m}wqd*}&R5iEf?jDeZ&w+(e7;P>%zKI#W1ciQ zoSajcwh!&yNN~t0tXM=s!e~*!gedo!l?zMN_)om8H$`7qv0ehRLYrF2nlKbTa?b6G98Ne}5$iNy|M4EV zqOed;MMY&L!~KkTrAbaD*u=?Md}hE8bj?7Tra(?R z?DBJ_dLU}SFecYa*KKTp#;;P{pu49AsN?2kWw0N6p7QN(sOK~KRtB)Fy!VWqr zh5ZtiudZ=^6ZW<;9R`cGsh^DBhbk)@h?j9aGz{b~!OdCq;}xg9laG!Fijwj?Qh)_+hkOXW!2;|5S zA{!fB;1p&M+bx-#d3QR(ccz?N(;BF(OWB{OzCKW6-mqGsIWF9Ga$t;KHz`8#`c|Ab zP0g-cUg7KN#5b4o9W8UR1`?c6&$flrFtvOQM1~D@6E`V>#Gj(?9+)PBVFJ!%aFCc8 zQPzxbKHg)Q?&I945Y}&*hp&a=`mi=kRXZ`-KuJMoVnW*>NG*aOsu8t#I88}7x`?Ya z6PDn90IyFwJB74%k1Q{+X=xDkU)NYC`R{nnTwDX9_G6it9I-hv48K2o^OzYKtwd&C4!t^O=@S^+YT<6-Oq|AdF;!wO zWL~hy#U7laIdbpr@=hH&USgaHy%!CHEzQNwd#pX`58J(;=wM+$b;{-~qq38#`g4T_ zogKxAUf1uNNTr0VJg0R=^WWWNe4z;ZKb1tzk9@- zYegKdDXZRH3sqRsY+ZP?VtrJ>giscoclBT-B8?c`cx44kmIkEnV{mi?pD*LRk`Co< z7gtwE-~SwM z6LM|Z|2=*j@@wVfIm#ui$T|lMsiB;euFGrf>p3--<-%iXn$y=OPO$$W74Lx!nI*T+ zi6KU}c}6q|nj&g3CrO%KdMXb-I&STT8UG`7O0H&!=Aio0fajcV_60y$Mka%R9Rvb$xw({U|fD&G8wUx-B5t9dUru zN2ey3T?k0u=0tC_sd7e6B%-vO%I74#hc>!djv-nLQYV0%)El7rTrQ!T8SolATk5p5#~&dwb0N8rrtqGHwn1jxIm^dB z;N`@;mTtEphPs&jItasbtdiHDYd~5QH?n&3yGR|cWL#6BD?L)p&2ty-jRZ-J0`p)r zeUzJ=tbG5$gY26#UD@I{FASt$ws=pSdbKB+4%Qqat_ta(8(I?UbNz@y>mfU9^lBO! z;Xoi6a{t1&0Xdmzm>D={aZr`{c<`p5d$_@Fc9A@G+TdHo7a`9^F~-hiVX2(7vv#)5 zrFQnu-qODry~pZzN`AM0`aj+R{&+SHrpN>X2#riMCxnBtps}yWLDNvn0Q>yeGkYDI zw%3=%oCoD~?X;_Gz(p9=S%c&H&YqYMpo2Tnk`$em6hx6x2lycV1mMtCYyKT}82<4(Uz>p#nTS%ec` z+x5F!YJUcmk*x=-G-slK} zs2DlZb8Gf7N^|dNDukSO^?Gb`s#%k4z~p{!7(&Mpm1^k>%Zwr;8VRHu13i5HAg?!&9O~V`vF~wn@mfwB63~SH$uSQsGw!_JWjmR zx1i(pom+)J5x)qUiFS7DJ9E{`q@B%)AnM7(rq{2BN?b`Ax?9Vh@7ODb(N2tAuO`g$xpHfHRYXR;bohu%S`taa@foF_CF#$QhWxhi+ z$8JM4kefU1$wBoeeHONbPpT6cSe81c`A2W7p-YE8`*n;C<*ro;yEr>R^$Az&d32St zwC#Owqgwk)`nH8@!69J)$!iA^rT>v+{_-N(sOqU@{wAhUP)^y#^%U7j)tiQM6un{qL56xhC)W6xP|bx_8Z2ZAu>5;NxkaQHP!#Vr#$3ge5zbunyS z_V^K(wUxcD8=Zr1Zhy#1Vly4Ur0iUyeXOr$f@6j^KspfJBamk}X`vuF%0A&s8 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∋V{FXF1(`G>{ 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

CodZGJK#y>X} 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 literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/images/basic-heterogeneous-job.png b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/basic-heterogeneous-job.png new file mode 100644 index 0000000000000000000000000000000000000000..8fbcdb04ea522bb49f2bedf5ef19a8cdbf789915 GIT binary patch literal 30377 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 literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5) (1).xml b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5) (1).xml new file mode 100644 index 0000000000..3c3ecb2977 --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5) (1).xml @@ -0,0 +1 @@ +7Z1bd5u42sc/TdbqXODFQZwuk6bNZLedSdN2pu1NF2CcuLWNBzunfvotAcIghIxtDpKt9N3v2BhjIYSeH//noDPj9fz5KvaW9x+icTg709Xx85lxeabrmuta8D9oy0u6xdSMdMNdPB1nO202fJr+DrONarb1YToOV6Ud11E0W0+X5Y1BtFiEwbq0zYvj6Km82ySalX916d2FlQ2fAm9W3frvdLy+z7Zqqrr54M9wenef/bRjZh/MPbxztmF1742jp8Im482Z8TqOonX6av78OpyhzsP9kn1vET6v0SfX43+82UPWLNvJj3AbrqKHOAgvw1UQT5frKIZfirON6d4/zoxz3Iownnqz6W9vPY0WymMYr+B/070es128rMtiyoGz3/wUzr3FehpcemvvdbRYe9NFGDc5evrtdTxd3L2frsPYm6XXbh0u1qWzXsbRMozX2ai5X6/R9T4/09/C/4O7R7Po7mW0CoOHeLp+GXlz73e0GI3DR/jxJHpYjJMWwDfjqXcXe3Plcbp6yFsGt3twKJquaSmBMZ4oINADxQeOC9+q9sRyPD9w7aQlb9M2X99eV7p1p1bBUTy9WyjTxWoJxynqy7dBNF9GC3jmK/jGAZ6j+uZEMS2gK8DTbMU1HVMJ/cnYt8wJ8MOg3a5ZvazW4VyZo3sWXg+4RQWm4ZqurQDdMRQwsUzFUV1V8ULLnrhjI3SBW+wU+II+EvCnlLGJP8qGO33o53ddXB4Xuwx4TZABr8kBf3IDPvJ/ImOlqzPPhwYzOa9P0JJ88H4lw+pzDA+bNFH9X+RnAxkOmWA6+/yyzK7GCn5hjr6grLPdlZ94Z3wjvflqXN4sDPfX+P7qu33l/9YeLhVNy0dmfuet1i/Y5MWoz0J0APXMuHi6h8P209JLxsATNPJw2/16jhqtwZdwyMPO8GbnM3ix4bZ1hHaYwI75lB0R7TX2VvfJEdGb1TqOfoWv4WWLkx801OQPflK967ObA/1K+FzaFI8nX5ZwpKctLRj91Spco076p3gzGoUzvgqjebiOX+DO2SEVDVvtbIwBkL1/2th84Gbb7gvm3tCIOeQuP/hm1DScsBjXSoBpjNl6ObkJMLl13ilgYsIHAm2iTIzAgp0CYKf4qqqommFaque7+gTUdUrehqenp9GTMYpidIrwcC46U3QS8DaGc4KyeoHD+llZwB801miubPMMSz1+h554FDibPQTrhzhE7fBBGHqBo6ggNBUQwgvuWC4ci2PTmvgusH3b7/QEmXfoNgPTtE06mqxhm+C9/TZpUHAPpxXYmtSYNW2Ofnv19+WPL+dvXq71N/Gv9ev3itXPbKGaQWAaWqCMdaApwA0MeGOM0WUybNsOTKBbky6sPmp+avhrIeBMt2bw44tpySRb/z2gp8SLILWZ52gQ3/mvTHgF4JWAx1VLL//YfAO+usv+mxwXGWbqodEHyip5/EaH17Tlc/Uo57O7CFpSVYH/u/zrr+ShPXpYZluWYDzSwfPMi+EjdfZ7ySVBP1luBtw83Wyj0o2HfktRlPFioSS/Al+Xf2E759gNOUdrwjRe9i6AIxhd+4vJdDYrUMxkElpBQOObsY2mOfQJxCh4Q3xGx7tUdHNA5NHgrxeJxzSqxKPZZpV44FzdMfHYQhOPLYlHEo8kHi6IZxd7JQmofwKq6H7X9u1n9fqnPf14/fLu1r/9crGcKVp2izxu5G/MEdCgLhrhjIpwJpUY1ETRUFappIE+XUTxHF0dEnfWkxHsSQ92dPw4hTsnVgOZigLGpC0ok8x+SkpJIymyxQJOJ7VUUgsLFaSoRwGrLH6YLgUFdIr4YTXQPoYSvvSG6HcqEpdpEwqXOYDCpQtCdrpkOMlwkuG4YDipWvHFbFtUq7blJg3jOzwFgt8Dc6Q5bcpNGpKb4O/kelPpF4p0YTaki1aEpVAbm6FNowrXsg3P4ktYslSCJlUKTZoU0NCM9kDDFAQ0TAkaEjQkaHABGrtYGwkefIFHY85QaZzRROcpYwUVIYjDKPlBiuQwnsxe/gt/TVfLf6am8vbuzdU3QzGs9tSK+yie/kZdzoaOWrWpGXAMRhca4bbS9Cpd6DS3leq0RheMaygAczBbL0lEkogkkYFJhGGPJHjwAh5UBLgL4c9NAyW49xaLrI9z08828uH4LsT+hChe30d30cKbvdlsvShjwGaf91Hy2I8M+c9wvX7Jkmi8h3VURoPUnOM0ForhH3uhM6GGsFiBA2dEluEv3qpUE6NnBniNEBpny6Sb0Lm3jwxxOIMj6TEkjlA1/9lXb6JpQpHYY6KVhQxLJ8x3esbZtwiPV96MXbhCFIKQrCAOKxzJ1N41EFimZtrwDlds4MO+tdUQNsUdK77rT0zLtwIfdAsEFzNv8esveJ2vL5s/c+D5s62rVe2XsTYJVMsKFcOx0JAPVcUxVKBYQTgBkAJVL5NyG55G5w22NNsPoUFRggm8PYGnaopnm2PF0cKxAUFWNw19IGYA8BTj0BujjvGe4P8fJyoTFSTwvgrcU9nsh1GCHdgKH8DXZctfcTGQosB8Oh6nkAHnwN+enxwKYcYSmbfE2pgXZ+Yl3JKc0YUX/LpLgKQUAYv+cGxESiGaRsRKqNn7wvcMw3UndLiwalWFLOE3a+pZnjjaCjq8lPDkQJBQCM1C0UaO6Rb/QPmQ0WQC29oOU4gSTCvDZsVhCqk/HLf+wDBUUnvgQXtIvRJLqscD3tOhgpVv5PNAQX0mJbgi6RL4+Sej4OZYbvFxrIwyiGzKUNBAJHpYo+a8zmtzUIw//PcWHeAC2expuPksC3utSBEbyiiLF/mBcteGWgCd96j/bqLVdJ2aphx4SBLyo/U6mtOYqcBTNB9MEXrUs2qAaBajAd8Z6N29l/Tp/DmZHUbe0wqM4KAewzniOkBNvFjG6YvyPitjQPcL0IngDlMbAV3N/7JDF5wxNiXSw7VHWntJRI4ghNPyo48whBOGAPiG6ykB8H0FqNA6+a6lKdCGO2GguUbotFzzhQPCEdr+l0yDtPp8WX2ZGbxbZnDjYicnmATsOGQ0RcNYTbu9UE1hCpzIWiZSopASBS+IIjN7hSOYDVYWUnrQ5fozhJ0YodiJ6GGFunL2AO9/FO6irjcZPz8b5IPe4yPBAyn4MIwsUapXTSsazf5zR4eCAZNMA26YIKq3mCDKuB4CEAKz9RIbJDZIbBgaG1oyQRInhseJGhhghmDSZ2jAtPc9BGbCCx2/fM2+n7z5ht6MTPz28rn44eVL9q4c0KkfFJ6pZSOqGJ5JDzrKen7goM1WyAIITRa1lkKSBXdkcSTzu4zDZM2d4sRhMmf2k4zO3LmkGKD5QW7iEPZeEEKTN078LulB/RjvkIbSMMuHEUCzLBySEgpKH5DsAhVcBYgCKrYwLV7f4aD7BoDigE8yc6TNAE/G9RcWbGRZDHHARkomxy2ZEBZNhoLypYEQhbeywiXXi9XaWySpw1epX6xxdEWwfED3YvJ1JXOqbeeNpgUs6oInDw+8MNE/aupq8kfLOkF/Qzpc3LLDxckiBLcWyjL1jmURURJRe3kYk/Qg6UHSw570UGuPJEHwQhBteVHYOanH50WhLv9hZR261YuCrdQxeFFEyTFltl7iggC4cCTz+8l7UZhzp+BelO6dQcfmRUncJ4Qj5baQeLyLt4ReL4N+odjJq8I6Sexa9UKgmhnqCFUFKfw5VkksUcAIb+nPqyJKqimz9RJ0BAAdqYscty5yK+tqiCKFhIHeACb0zdQsK2H0UwkDXZgBK5GDsvdG06vuG4vivcFPOV2pMZjpxIQU3PqTg5TJxHDHdqArhuWoCjBCT/HtALbKNk3P9QxXtVtOJOIAUoQ24dKGMp7/x9NH6uM/eqhWMnuCnv8zk1JblaL4xD+fjehLfpVlgXxz0oby1i6aZSfG5vXNlx1bdAhssGtacAwbOVM0jPIokEavVDEj2p03aDDcMAjcMJrhRtexIrlnTEzcONWaHhI3RMONsvUrGB0pH/CFPptYzKQuyQGhmHf7hGKmOsagoZjba2ANZUUdm9OQy1x9EtOMtuy5FcaMSteCdC3wBgp1ZkdyAi+ccMiTP7s2FcdP/tLNsBexuPp+bobOgUXoolx6yw+3wgCLfO4XzZxLG9qimyF99lQTa6KsUnOCPl9EiU2p6P3z2aimdnULzoVdG+M8ww/PNURm6lXJ3TBAY1yr6vVozb3BLsjFMeQI5d6oRp9mncOd88PVOHV+CF0/TD/V+mESgkSDIMIOE5awYIukyMEHoF3CqcZbww6Na0hgTOzABgJ2OaudfBpD2TAL6CNitQ2gV6wYbbkssnpU61ZM6GJRuiwWJX0P0vfAh50mp31pioc3xdDoncfh3RTVM3/1R405pu3ENMkGOwSx13IPmwoP34qf1ZR7IB7wx2bojAFNErBsOF9MzojlOdCbG28N+2mRbNFVrSo/5F+tpY2t9bixzr+9HndmAI+gkoQhdDChwWkwIXtVM8qNL2ftU63bIKGVAq371dJuOdu6Olj6KQne8tMVZczzW8zi3yj+VStgPBU+ZIsX7DIToooXuHjl0OKF0DUZTnZRcBHtgBQvjlu8KE73EoGHFy7grHp+mz2a/EClMqDdqhUw9MJzDLkzW8hgR1T2KWRoZ6W6lfq2wpWCKBkZvw2tZGQoo45U1c5KZO1bpKq3ilOG0FGWBqdRluypmDHrSKsghREJxIcpCtgaSGFEXGHESGDLG9fSGLkDm8DY0R0DEtiuAOaFzoSa+GoFDryRq3SFalwmUadwfDzmYBY+T9d5HXP4Om2MbWZvN41Bb3Bb+uAzp0s+69fTJHTMi8FpzAvzTMg5QcKUhCkJUxKmenGWcQxT68korQOrLqdLNHrCGqjKdlTKu7HRSmeiVRmcOPU9uRrheTKqnieH4nkyOvY84XtPUIRoeeaQnifpeZKepz09T3UmQCLy8F6oQlkvSjptkD7Lo0zZ+M5/ZSIvypkOj6uWXv5RTaA9n91F8J5SFfi/tGRLVuEr2VKTdbytYpiHDqooynixSAuGwdflQ21HBvY6buVwlT5qhWWJr58TLUdJnGJDoYjjlFHEsswKilDrh9lds4jQS7AZcgk2ySKSRfhgkV3skmQUPhiln0gZk5+Unx39NOUVXslqGxrpfxElroaPDKFCXI1LrNGGy3bsFmdzHsfeS2GHbPG8ahgOpjK1XB3EVkuK5Nb9TZOU/tIWDBX0YwqdBYVbzxvMyaAf6aeSfqqh/FQyG0r6qbaijOB+KqJSq+VUxaFB/FRCZ0i1PXNIbUhqQ1Ibkn6qo9OAKsvP4A1IeKD6rtAHyioRQZD/StOWz3Q3lY7lwPTaF/VA+oJ86U9Wlr9r4r3SkfcK0QN2X5V+YTtIuA1BohXvVaiNzdCmKUOuZRuexZf3ylLJJG7LqobSUP1XTteM4grNKK5kFMkoklG4YJRdDJZkF77YpTGqqDRUyegU9lH8OE1WPkKv4CxfSyYs+QIfRskPshU+wMaIHKxi3Efx9DfqcjahlBxPu9PJYCii2SSK2HoVRbDeVqrp7nSLIkAVGUVw6yWKSBSRKMKHXEIzSJI8+CAPreD4ba84LmAvYNNrcdy2I2UECY4BWe0RPoJjFHWk6mrWpG6jYUxnt2gYcn/eomGA0GvsgFr7ynE0DG1SlMZKRsFIdM87Za/wEWyTZBSMuFEw7dQEBuyig4LUBC4rOBg0hq4IjO8yQYGB05p50gpIAefkBBxZEZgvtQacpSWk0JD0nuD/T6ORqLYY76vAPZXNfmyzPHglut31l/1rztHLzLGrzJXypGrJYy91ho/icjUiCZEyZJEBMekZZ9/qTgsRumodELFqHWPKkRZBSiIShk9NEjnlUnXt1v1NHQ0H0FYJRoRCr/3JqXHSN76zjqBYb+aREhR7cOuFwh5ZrFeyjmQdmQQ9CLJxTEAdZlmhWJi+sqy0xllWb74alzcLw/01vr/6bl/5v7WHS0Vjk9tJZ1nBzilrRcBtWCRQU83WOIpx2QTgKGbreeMoaSClZ+zkPGO7GCz5/MCH90y8LCu6HWgaO3PyWVZKThQ4tle1qyhCS7JyjI5JRJQYHWbrJYlIEpEkIpOsJHhsAw8qAtyF8OemgRLce4tF1sdbTH97eVVaa06ixk4hnNRUl+zUXTxO0VlE79hskLbhLCo7sag/pxcT5duL0qlIL6ZLKCo1YTq75lgpukb8kF0SJHf+wlkpy+ps76ghxl0jLGyJmEEljhmQ/qtThOJtjh+mkThJxw92iJ8dHnpM71x26PE6fF6XSaTiNSGli/l0PE6hBw7g356fHAoxQ2bd4HHNizPzEm5JzvPCC37dJYBUWp8J/dFiYdD7rH3qThnczFmeoojAiXUBL0d2Amd5/lArSkk2iDPP7MH8YY1Uyy382SWjr2juyDHUwp9e/ok2k6kZo0xYFOA0gFiaGKm7nJzuIgPjOddcUm/MkurpQaWbFSz4I1+PCy+ESYlLSboEfv7JKLh3llt8OyujCfBYTOCJHtaoka9T40+HDPjvLTrABaKAabj5bAEnCZoEs6GZsmiTHyh39KgFoHqPevUmWk3XqRnLwYokLj9ar6M5jc0K3EbzSBXhSiXgStuEt8B3Bnp37yU9PX9O5oyR97QCIzjUx3DmuA5QEy+WcfqivM/KGNIZZZDLLgFrBPQNC2XH3pI97tojreswGUtoSOpp7uMOksIQAN9wPSUAvq8AFQ4537U0BWKAEwaaa4Q4ae+IIElohChZFwkOfIDD5RRamzXs0LjGuo+JHdhWvunCPhwXOlFsslitaVRDOjsudcLoXWEtlVzaRz7Oy8d5PmwxOe1LU9yvKc6tIzan1/btZ/X6pz39eP3y7ta//XKxnCk4luLRmz1kQ/Rhla/D12ehkjN6vMCWlFZ6NAClGAj17EuSQVXEx8+F3dZXzdfrwyxgmcXhsev+Z23UVyWGVsOxZAwxbvYtTFwKdKFHytjsUJmKGoREh0I2dmdjmbqjAehjeefE6v2uPXa3beYRrO9BM7CgaobURDY16T7Vz32HSpB2MNolvvNfQfRCe+mwnSrx+o+q3qgX0o5zuTFtUVlxHNYxmumLhBxJjKcdXJnFkca4V+ufUNSRCjS3NM/sVWy61/nH3mP+abfkQz4ZabtNRpWpxLMg0Dtbh0S/U0zp2bv/KcZpaYoh54hideriWu0czxdkIAVt5HQwadjbJg3NxKkMOEIBHDZr4JZrI5U4sOaMXCKpZJ+phbowdQwB/Md4sRgtX/D13mlJasZt1kC54nhJag0Q7InTjvtbkpo5hYmpW+m1arXUraRuJXUruST1CepXcknqWnNRxDBZLIXIUK4uBGlUGaXrNakZ101YSLElpEhIkZDCBaTINanFhRfBq6XoTQNwZLUUTdVJFgF6lUU6XpSacRWFZREZ6CNZRLIIHywi66Vwjx7pslOKXgMDtFUG6TEGxTIbwgbfEibZrsoDQ4TeYpVCTIuMWy8tsrTI0iLLVQal+e2x1IehMc2yYKsMDlfVbGukFLZyvZY/OyDeih5Mo+QskyNQs6pmZ+3WDjFwt4tJPDjijjPikTUWZEEzWdBsmIJmbT8FVQdL2wvyyLpsJKwVMwaohFa3JCF9ROgHohm3SxLmkeh1Eep75dTsz2bNE2VUjtlMJ9eF7qjgrF3+GdM2ikfbtjterbqPYrMGVi3FpERdQEqUazVKNJRo2C4a6p0zVS9o2D3hcoKGDXPScPnToZGugYDWReqgARpCV12mfcep9YTQZRulO4CijFkm6wtbQedsr8TGbGpoPbGxRncWM6+RKADdal6jSR+c2eHVkWq6emlcKPiRYYBkaIaDPy/AQHXw40azH1jZK6II4eLXHMLFr3Pi4hd63Qyj1mUrXfzcMap08Z+Ci1+p9UHJB/S+deNN7VHvLvzgJQEYSTLGn9E8QiuTRQ8r1JGzB1RnAjEzqjKQ3N3qz8ivsdwreLA5Ophynx4GHkXJjrFS8CGU/ABs286ukL1T6D49Up+sM12K3B8KByrLp1dgwAA0GtC6xgGhy0IbPd3yEgckDkgcaFz4+gDjIylieIqowYDdVzY12EUCeo8J1A9y7oJsZGzVGfGOAzt3W8EDocsFGLJcgDh4cCTz9NG7Y/dy2YHj8Dx2fxqceB5ZtQMa+4MAzR90E4ew94IQmjzkE8IH9WO8QwP/EAEmy8IhG6crsCsIcOF4wiFxgIotTIvX94qjB0acgbKvRNGMkVlaUpQ4YudLihpClyYwZGkCcbhHyiLHLYsQBk8muxyl1AHYVQn4kjq4jDrXCBeJZoGRYeou0DTbgs85VvmAqQpzcAy6W/nR4tF23P2sZtmTfLFQc5cz7CcBEnudxCQd0HIoaC+h7eLMxBLYBljedHCFh3dNIRETCFnhtmlsKWHpd6hwANgVDkSVDPAU2rdkkI3a7FH14HICKEC2LCKAka0NqSEAoUsLgNqwLqkhHJ9JkhoC1xrCrayTwaF0kHLGksotaM0OBUfyIXJBT44mZdmH4mrxObgst1DLymjCKzqTV6KHNWrk69TGZ+BB5LvAf2/RAS6QsZ+Gm8+ytQIreV8bGCmn8OcHyoMx1QIPvUe9ehOtpuvUdvnReh3NawM8K1xVYC5axGgRjPBJFgNEs6Uj4DsDvbv3km6ePyezxMh7WoERHOdjOFdcB6h9F8s4fVHeZ2VgTiucSt7GWjGm+wLQhOpg2CNXL3BRJoJtyUsxwajretC4LrWgwKSfKDCFIQC+4XpKAHwfPk7AMee7lqZAJHDCQHON0GlZpeEAmITGiZLRkTzBC09QTX0Y6E1sPTurgmNbn2sgpK3PIYBTc48uzIDppcQC7Bpe87Rgxi3q+lIjo2szLnRKSdshXsKY8cnEcMd2oCuG5agKMEJP8e0Atso2Tc/1DFe1W14iVJrxw8y4NKOMx/Lx9JH6YI5keiUzKei5PLMqlQfzsmci3TafjZZgPNJBZSHGsqch35w0ory1i3Y5z/AL5xpiM/Xq5gs37XItZAhf79yiQ0CInXLCMQgdIHr0Sjw1nijcOcVlOFUeBZFKnInejJxMIjyjdWwSOtUGnGqqjcQm0bCJsOKE8SzYLKmM8IV03HpaLOlpkZ4WHZBgYVgjW6uwxUDOFUto5wpu/cnhhXSuiIYX0rnCJUJQrTszz0P579u969tP395Nrt9ePqzsKFbHisa29T0kesArHb/kixqgN4XVp9DbzaoGyTu8rIHoCSK2SdhXG5QP0XrCBGsE8GFJZTTkrpUk2NeUN744kplepkzIMgw1N17RVgiZVMGeUEQpxICTJsjy021mSbBGwImYUxlH3/WzmSSi462tJUSdBfYsxxtgcgcuTwUlfxHFc9TB9VI+WWk0hJekWmsUvSSLje5CNoUC2PgHGpbA/udBAd+mj/r03YMS2V9fwtkH7XV5rY/TqYFtEiv4uVZVHQcuRR5vswo264pICJEQwscJSggRE0LasEwDMAt7UjxpZtndb1DTmewMjePwGxTnu1CZ/f74bfz34ufHa+v3i/LPX2b8Nt2tWEH79ov65//eTpbRV//G+PLug/c81VK7PrQXoh2w4CgZQlqlXa0S+5ryNi8eiYE9emfBttLTjJlTnPrZjHldVs9u4rbR+XDb1EyB7DQLAdw27Kldum22gg1H6QpSMZGKycmxqThAJ4Tbhj3L8Yb6A4DLFHPEZXKJ1OvFau0t4L2qq1fQDi8L1DHdghzB8gHdqMnXlbv0y0XmqAXgBi6TBkuCN8x1IBIrJib6R0vFsJK/ak5H+jegw8VSCYeLW112VDMpDhfN1FvTRRhPM5IdJDvwcIKSHcRkh1pLNAA/9CDaCAkPrflP2At2HZ//5PyXqX/89e/HpRG78x/zN/H4g5+hcdF/whh3R+E/4WghLmlnWvKfcLo82ZGYzJP3nzBmTnH8J4M4gQTwn6Bn7P39J9RlQtJD7rFMSM305jJJRVzfiFMrWgi0UIg6Mgy3+OdYJY1EASO8pUdnintClCMFESmI8Aaq4tAdz+uEsCc33nB/eBmkUtKS3oEGe21RjstLyeLe+/ltyEoXqlF13NBqVOIySZ3JMbjq+EmAioilHY/Eyh09ou1hR/G9d9J2tIti1Yekos5no8AcudwUBD/kXIw9y3Xzdh6vkoyqHwiDR8uXPzopPl5zi7KXiOWY1ISqPs5T1U8LkKwGmrFaiyE2rMEoWU2ymmS1TquJbwAgt6AVE8SNGoNnBUmRhYjWv/46Oyig9W5LQGttMtSgAa2T0AoCGlKMbSTID2hUHYeDwFVGBttJmFTpp5F+GklF3QSu1hicASihhzxdIRHhIBlAF1UGkA6bvXjFJVdjbeqw6V4EwEP5FIhFigBSBODJYaNLO7qncyB9+FQTg6KsUouSSv6JWenWobM0RnqPDp3hztXJ/T3wWiKQVP/pdxHZ4U4dC3SLRd8uInbBe47ZUCgXUe0Ctdw5kFxy2Th+HEinVJlfsqNkx6EcSBvgYFlk0mTx41KSte37qG0fzav1g89aK2yfHv2gsvYGYKLNsZa1J7QfF9vqgvk2AMV+d1/V3gAnZMClu0q6qySD9VzVvqFN4gdVaqeAE0IVKgrsUZLFYC9j00NJlj1Lq6w+ffw3fPvtdhX8c/3z8u5/IXC/vEt3K5ZWYex2DKVVjFNa8+boTAv7mvI2vx2JlTz50iqMKVGc0iqDnIQApVWOozS9wV5oR9jyK3hqF6U0fdZEYJbUEUUzRqahFv6II3ZfbMU4pSV5pCoiVRHe0FUc3hO4cr3RU5eehtLBXu6GL6VjYG2CjgFaJULWcsrHSJWX7Gub8XIex95LYbeMuWp/yK35nbf77Q9fpC2gf1sx9JG55cTS4Vw5sdax5pQW5Dk6m8i+prxN4kdi3o9ezhlAROC/PqvBriQvrkBgDyMQtFufVQMjlZAMnBF5nB5EglOqOy9FAikS8AZE4lCEeBVZDU4XYBgAV5ZUVkEpGMp9IVoTPSWaXeajbEJsjO3JKMttYZ1GmYOii2/vr54//fjw8fv/wkt7cf7VMD8zIeg401AGzE9eGTzmniiaWtUvgD1yM+2sEMJq0zJQwMgkxI4DolRqR+mJUFgYAuAbrqcEwPcVoMLL47uWpkD4csJAc40QV8WRJlwwIWBw/mwY3lmbyNEppDBu/JMmFKptr6SZ1kaziGjcZf2Rvey4VilCqoOKBaflkDrqyGjPgjMCq07CgsscUmnBB7HgPUQ0CmlBeatM3n9xkSMuHtJ1cZDOCoNMzHf/re+n7uXfuvbn37/+dD96xsbGCUZsx1EVJPupz0k0jsqjVFMNoDGaIZ5JrGZ4AN/VDlzJd5LvJN9xUyNksPogjAlCcmhLvqbGATYqCrDJKqwd6IcqR+Ds7YeqXZj7xMBH+qEIuAEVuAH2yNYqfNO9E4qxdvxJII50QknEOUknFOPGl+iCoSPIjeWGG6A5dZJL0LySWQivQFZt7KxRKbMGEcCbUmb1Zcsmnx8mD6/f/3VjBR//db2nd/H1J0VJJ5NaBOm6bBkFT5L+3Cnnp2P7rBMhuVpeu6xgnIFLsc65yW5DfmBcvhMxzzJSV0bqSsLquchZU3M1hODCnBIluFz4NfLJTiTjze4i1J+vxovFj2R5vz+2iCObqieFHf3tjqLNKoLZZV41IRhzY4FoBFPOQrqAO79WUTaS/hq9GyGxqbSBfG+XN2jVd+gY5Q3ke7u8QSMPrxG/r5ENLGyovCsdXiV+Xy00MEnBompKNdrRDqKNToCeSpdpdHWULhCJfrOq0OCPf8DB8AMPhh/5YGDhYlHNyprfUJrKtKX34QR1h0HR2C4dy9IMUhobCkdN/OUcR80qjmqmRsFRvWscxS2ROCpxlIcTlDgqJo5SmYMbwjRbFoGFJEwqxDGry9R0psbEt+3VZWD3PuZ6UgFZwufp+mvh9TdktyEape8unzMznrx5wciy9uL1eRxHTxuMCBdjvCWYQYM9RatGU+rVUOvalFUsMu5Hq7JGWhau6p4be6Ezoa5XnX+jFkiK0+f3t//MnZ8Xf15e/fh58fz0GP6pfb9NdytW/53/e6V4/sv5zffF50vz5VxzV1/TqXnoCjvtcArumVPgFBGN3LYqpoxhzE8p1iOx1EdfKGYfBND4RIBt9w1jXj/p6r+N44o0WuGeJvJaZqYr3wXe6JP3iJZB/4Cmy8bS2quKyDdPv69GD+vlw5omvf3BVOga+BmT8kBNoE5nQl21ytD22kHN6xDtWGWIIvjkqlIVqdjTQd/Vh3AmuzrSbM0qyULZuwMrErllqQngfPkuahGxhpJENW5RTepswutsRwKqzNMg7OyrsrXkSl7S+WTLHrHsc+5cpmPIZISKSsGTjx+nQaig/8Ipu0wmtY+I7QQ73Ufx9DfqAnb0UynaidR0zNAZA5qm4+i+YVmlwOdBXU54kdPc5eRQXE5aBgtFl1OeuNWClMN45j8JOJB2UPqbpL+pEzgo25ueKaAHLVNABGg9hklL/Imw1VwGMRUNsAxikkFMRx7EpON63TlRAqdKlHj5rHIQk94aUbLuRT6g8kiMrwQrKZwd4wPD1iCmKnTwIzO1XK1DQMa8TCqTqzdxqGSLmR2oOV0sLqcP1/dA+Xt+eff9r/fey9NTxJXmFGpjM7RpFOJatuFZQzIBjqvLmcC2q0yAzX9JZcJjuQUmqL2EfACBNBrCGw0JQyeqMjHMTc9EwJjkThgHaiz/PkHNgGn0twc1H7xIJs3dtD2EuBRLTQuGrmWD4mR2eWm9sy5eK/eri9f63Fn9Ao9X03S3Yozxe83T/rN/Be/+Z3g/Pv/4T/O/oOAqtBufq3gCQC4XYQDC7tcsd1k9Fh5t+ZFIR1nNiqBnbYfXgBNiGxEN47aITsbNJiOheZOxjjESuvZpgO9IaIb1kZHQO8Yw6yP4jdvQG6OerixiujXYuBrKPF0kEcxqjlzUWGYqrQF4qWLYFIW+KmrNIDaZvMbVqqh5ElnBS3Vw/DKoVXhEWj2VWDpVGzmmW/wD5UP2ELxsnhBdSeVIKkdSOepEOaIb2FeEmeTKu2TyiYXDEVXDmtUkW93d3qBK558SdxMlDWwZxejoFryY9SFNVFJ6iuKkzlcRj2qfJhs4sOpCbArYVOWRnlxLFlEzx8A1HQuuJZdSMgcQ+U4HOJYYD+oSDyQe8HCCEg/ExIOSjSAswgBE0IMkKSAOaKPE9xeto+Qm/e8hXCEL7c2RjVz4q2W9pTYyTePVH43EDItpsLc7n8omfQ9XFBwJ8cvX4ptC8R30dlN9J3mHy+/s7rCqq55TcmThSkC43E+zSkCkN62WXYrT7efrO3/xKQh/v7eNJ+35ze079fr2rOL6Ytwh3bi+Mg5SR7njaV+xpUfxxOKHjpjzHf3O7mbi3SZrMwagdAdJd5AEym6Bkj2T8UY/XPqWxfGRHabovJ6hbKUd6++kQcjKcrpEwzcs42Dt3C+2eGOaaiXuBueaF+QbnJJelG9azD5nGFYeAEXKN1K+OTlrKw4qNpFvsEEYQLHp4alBQMXGKD/XreCdtAqrkk3VJbMJ8A7Hma+uLlxlR2nHHlra6UqiwYpRLgqlIo29TTKq6jT0us82W+5pJO40jGtm3EydijuKOlJdvC56HgODw3UOi60xHJ0gsH0jn22NzPJy3PKRaiKfz+PYeynslgVS1TfZrDTZZbYMWAd/wWJ/AT+5HPAFQD77pN0ynEhn88PATBNHncxZU3X7JlgC3vEC3tFrgVxqRa0Kz+wJjjcO5tIRIIB2lweQl9ZcplV4qnB9lr8JLWodzfsPwa+QqJBdm2hQi/HU8kYERsN/b9EB6soeEZyu27amWRVOz3YulQTCkezvUd/dRKvpOrW1frReR/PmJYmKDw1biix5iT2DbybTZ9SONEg+jN88piWT0nREaiWmrMeHUyctAmcNNatFUJAmcXh9UZrE21qQJhmpLNxj2QlZ+G30FoYA+IbrKQHwfQWo0Cj7rqUp0I45YaC5Roglbn7o7ehF2Yar5hpV49CzhNdDPpuAEl47HrtP9w/rcfSErnRikuB/P8de8IsVkK21FJF99fOz9jK59r483n/65/fyjb/89veMiQ9COPX0inZiVov9uBSXntmeS6+2a/mwm9KlJ7z1kIrP8So+zNOotxikfRgAFRjz3gmjwhrVAP8xXixGy5ca+9x4+SuHaaC3L3+F/G6r7IF5p2zzanY5paYwVQMoFyIcCgtM06rE+mAK2BLr0/3i5s4JsYGIhkUCk/DAdApsUDU0fGRsOxIB0iuDyvwezgCuZIB9pQFibQCgNov27Z4AXEkAkgAkAUgCaIUAinaGDwRwTx4Baqz+HjWArc1cvV+sbilAtgAKlABdaiAvpSAwpYwcLTR3/4RpagBwTchwLV8U57bx3/GXN8+RG5y796ZlPP12gg9f0t2KMbeMgtY81BLeNXZVJ+M+QTmOqcEXjNIXzkqBomctB4HiGAjJRZxy0bZgMcZdJkjwnjhkcPSRonuAh9VyYEtfQZY9rKMgZJBl43ALjRZuoaJQ/evVj826WfAYsANqc6/OmiVPN1Ru0lpxByg3VQGmuXizYzFgVoJVla/YN1/fxX83aUsAaGV8UbK3h1YEBuWyf4o9Iur5dZ8ggysPSjbilI2kZiQ1Iz7IkHkaDKPIjX6E5zreMI5nAtJpBDTzHhbwwsSJPHhoBGntw107EaReHGQ0olLgpAohA8WXApBXkdkSYYpry7TgRmI8V58ED0jTJyNMZYRpJzxQMhEDEEAPkqGQ5r8195HONNEiuI/KFVgGcR8Zt1er6bdv0W9r+V75a/4+fv8U/XtWcR99f/vP3Pl58efl1Y+fF89Pj+Gf2vfbM27cRxVhw8ILXud0oxHM0FIRFYus+7LNEVX9guoQ92KXjih8A54CXIlombcJ6oz7VTqipCOqe0eUzifCbLtvGAZMOqL2d0RlkttiQbqhunA7FVHhFNxO2a02nNtJt10Co9pZiNIgvE6aVT5CD04nQ3IQ1xwklTfhlbcjoUC206nOAPLjcjL4BDaeWad7l1PtY9wxu5xMsuDsIC4nxhP0SdCANHzS5SRdTkfpcupBHBTS/LfmcgJMEx0uxudxHD0hQWEGDeQ0KFvl7Q6jffKK9l5Lskae2N3RVF6oYKvfrRY/9vBLMSr1dOOXKhYtZRRfO1QgIUDJJIu6NV1MgHQ2mWozN1jregs4IcIS0TxLvxM/jCH9TvUTCG8cs+2+6aGU3An6nUwU610oIZitKYxWKOnE82Qyue/4PE/ZzTaQ50kdqZpllcClpXwnp3xQQlTqwe1kSgziGoOk+ia8+nYkEMg8DYb948fxZPJJbD3CDvDRdfqMihkl05GKpoJZmF+nVjQpi8kmu2lSOk2Tylee3EhK30qKEl1fKtfKa09tqkJMhgFFXYjxuNr1EpMGAJQFbrrTikyXrAZIhjo3FYuqyzXaOpkPXqMXDbGyIkZEHmDqSIzO0SsPEnp3dc2x7z3ejDvzVLaZ4/axiUtVlWt1qDUsOnQhcLGyw6iYJysO7sJRoK6kYNspY0Ct+aFaLqt8QTOJG7TLlDGOFrCW5lvWLpQALZrrTtAFomXtwi5cdxZi8DeQXVYd+eoOXVpKNF9ddncNmCWm2aDEJ5lbbV8e61FBkgtW8Y020h0n3XF8gB3zNIo2jR//m1yuKl98GrNFYT3yAn34G/SoLFb9AU1e8Avn0OJPvACvXV7BE/8h+BUSgDL/90rx/Jfzm++Lz5fmy7nmrr6GTDqJHtZwpgxfp4b7jOo6g//eogNcIAs+DTefZWtUEdqObtuaZlXUoGznsbe6z310GGveox68iVbTdWqo/Gi9juYU7lkjtauKRwW4KtJO7lzMzjdZwyuZl+GbyfQZtSOlrzBO1oRdYSnt3ku6ef6czG8j72mlq6Osx4dLZ7NJwchQq8lsZmY+So4/UM9COyaz1Q4xPqDmSCb/zjEkDAHwDddTAuD7ClChXfVdS1MgfThhoLlGiJdzOyI2E5pcCpakzkb0TAGMqeCkEYDuUUqS9RvICTY75StL+i+avF3MUR9P6KZB1HAxcXxIwUxRA1Q6Xy4S6wY8mCr5qCn8hC0llBPNu2bPLtL6NalIUtOH7MyXFouSEI+tDQJEq4aWPQ66ehzMBpZVNaq0Qiad29RTSjGRNlXaVGlT+7SpMqkDi8Tj6SPVC448zEqmiSI3+CycrKtucHyU1dJb4G2w/d4dCkZVfWRXgofVGhqHuKBUF/cubE6a0or33GZnk2z3nqOQyFVm1gvacNIJDMd51ele5IFMrKYq2OU0E16YAC+y41agQDMGedLmKFdCmhTp6T5GVDoFKqg1UQMI3uyZ7qQJ5UDNm507IaLmDVxQfTx3Kb7Z7i0xR+H0+9xenAbzSqiQUHFyUPFl8WsRPS1uoEnmkyWGN3rNpW7LZVq97qTuycSpkbrzTxo/1tYHgx+h1G25/JhSOdUKP9VKhJBSN2V24Y10e7WpXUndsFNhP8AOSLSEZNYnpIVNgB3c+sH71bMOvpnZW9XBt6eQ9a6Ed4wMWAmnPH/bgyjh6glBg4gWR5KU8CR1CtCwnwXjRyZvOZ9AQLr5N5EGFFzhhq4c4I8xLrz5alzeLAz31/j+6rt95f/WHi4VnU0LO0kHVbvdTzYTBAFc6y8bDCYuB1iw2R2bbEbv8mGxmXcas/W83WiSPSR7nBx7lKf8ng2xOODTkRHObSM2ptf27Wf1+qc9/Xj98u7Wv/1ysZzli0E/erOHbIBe3XzBRjo3qjgpGPZdEK5W2w2rn5dl+TvNss625ynQGk2ad92kaktFmnddVYXjEttrinGumPD6Z2OcfIUNL35fMLyAYniNBoaXuCLNLgE+8E4FE8vyA7UmIqV2YuEC7buQWXn5MeoKaja7eiI1xyC57mk/VOoVbqmQSAeBLCShWCNxO022V99QA+7IsXTVclzLNDVbL485Rx+hjUAzbNfQVKLsc9MS0poLRvkPwGO5ZaS0DBdei0Iryr/SUoFFTSfuJ9tgNtoid9eJO4hdXXG/WwxT/WaWK+ukTetrpVqfupndlCAdx2iX+M5/BacTtJcO26kSr/+oirWwT8/j0Bu/+qNWbiVmhqoW2lzs3F57q6aiFq51US2eVbhtdwg+Kt7QjCmx/ulJHakAL1L8Unje6qkMVtXwxlG0Lu6OSC1NVDfe/B8=7V1bd5s6Fv41ecQLCYnLYy5Np3PSc7KaXqbzcpYAYdNg8IAcx/31I3GxwWDsJDgHJWq62iAJ3ZD0fdrae+vMuJw/fkzJYvY58Wl0BnX/8cy4OoPQMRH/VwSsiwDk4CJgmoZ+EQS2AXfhb1oG6mXoMvRp1kjIkiRi4aIZ6CVxTD3WCCNpmqyayYIkapa6IFPaCrjzSNQO/RH6bFaGAl3fRvyLhtNZWbSNy4g5qRKXAdmM+MmqFmR8ODMu0yRhxW/zx0saib6r+iX8L8r0rx74w/3817cvN/Of//t9pZWZxfSRieSf/O8kWpZ1dTa5fqFZskw9ekUzLw0XLEn5O2kZWCT++8w47ysho2lIovA3YWESaw80zfj/xasPZRJS9m3aUVpZkTs6JzELvSvCyGUSMxLGND0m9+Jtlobx9CZkNCVR8ZEZjdnh7lmkyYKmrBxzM8bEaDk/g9f8L88jiZLpepJRb5mGbD0hc/I7iSc+feDRQbKM/bxa/MEPyTQlc+0hzJab6vJwAiHGDjY1z/ADDXnQ01xkO/xRtwLTJq7nWHlNrouGfPryqfUBnlQrPgfCaayFcbbgo1x08LWXzBdJzLsj4w82Irbu4kDDJoIaIsDSHGxjjbqB75o4QC71hu2abJ0xOtfmYsLzj8RDdIQNBzuWhqBtaCgwsWbrjq4RalqB4xvUQU69U/gv3cOjiu0YxVVUOVmeMHE2Ezk9YgS9eBIBmScRUJPo3U2ixP0l4BPqEXE5guftOoNmxMfJhct/mYpfzn/c8RSXUbL0qziezSa6HPN8dHlh9HW9KL8RWWWaV7wDD83SGoZtpnXG1hUap6LzqMgA8PJWMz6o7xYkHwwrTj942IzNozKaDzo/5J/2kn+ONH/fCPI/PI6Pw6mYKh6PF511MUvS8LfovOptPp14n5LovEzJEpF9xksTs4kGYgLpm0aL1PRxhzIcWGnKdKkffFuIutImMyFZRpnoxe/1iW3U+ucjTeaUpWueuCzarGhTOTKhVT6vttwFVWlmNdqC0M5yNN3kvR1rL1kQiw8r64pY1X5sS2JvS+5uf/7pp+fAQtc/zoFH0l/fBl6+9jVDx56HDeBpPh9tGnI8gy9iPm+Lb1iW5WEEzUCt7AdW9pN3CgowcBwQaIHhmbxTEO8UV9c1HRjY1InrwADt65RNHVar1WRlTJJUNJFn54iWikZAqPGVTcvWfHY+ajEv0GACEoZsYaPHp2L/qWUsXXpsmVJRDxdRSjxb0xHFGqL8g9umI4YhNgPXQZZruSdtYO/0bIDpUyoBdbH5vNY5TlznNfBmfDnkxRfQfQJyIL5EwQ96uEIn9k8pLy70tM3AO4IDoCMpgH6YAlQwH+V4PTKsNppYbRhtrDZMp43V0DwxViOZoXrvkqWQWiG1QmqF1J0NHBFSzkgclzDej5PGdpnsAkrqT+ld+RjzocTxr4mdScpmyTSJSXSTiM1tjpi/KGPrUgxPlixp4ikfj+n6P+X7+cNP8TDBulkFXD3Wo6/W9adb3kKOVKJba3tnUdFnoXF9NHamK48aGEmntC8/c0B0T2nEx/kD3cnhNEhtSC2sN0Yqrb+ISHz/J8eDT1fHfwo8bFvaa6QPAk83TaoZtimQkeqabehIMz0aIA4AOimPnl7SCvPUrTCB5VI+5TUv4NCOiA40YmFfswH1DQ5sEBtQ8aandysG2DKhrlnI5d1q6ZRXxfE113EDbLqm56LTAqgihicUzh/BKr5lNN3DLJabqF46gXvZRLJkvBPo5eaYXeB3kDSk6/znWmTQkryX9CMIo6grOR/IyT3dSeyTbLahKpUw/kY0+DbJQlYgkJswlsz3SuvbUv4tlRF1L3kOgNVz2V5RJMnHIX8IwkdRj4tFEopcPjzkA7LIJJuRvJfnj/mUnJBVhiZ5f49M2ADMprABATCBuCVvsOy2uKEKOxWHwTJTmIFRX0kbXlnaALBtABdpAAPEK8QRk+gW0RwHAw/7lgsde2yg8ub34r2Dd4tzb1Fc7gqFNZr+CGOhKnYYs81ezC5wtVJbK/Gq0EHTdxG2Dyp3UW6eePfLxcSr+iebNOttXKQlsuotdOf9buZ/mjGwiNJ128vP52tRRhHlIfHDo+a8zK/0sRgPl6IwMcozvuXmn2db7Kjg19B3ZP02amEvsDrO5YEBJ/i0+GvKjL8D71cV/ippv5L2v3mG8YpAfyv0y6FeSax3AV+oj1eA04v01uBIX56JPwnnSezNRF80ds9WWxKwgfjno/CQMvnqxL0JwgC2MbhLNw6apwVgS2YAthQAKwBWAKwAeLgtfhMypd7mf7+75ON8D/Y/ZN4mshf77XFhf31zLyUPADuad2Zb8Q7if4AI2DITgYHlpIoIKCKgiMD7JgJ19JSaBuwhAE9X+eu3jqOxfy5M3oUYP+LAGHpHau8d0t17DJl4DUwwROVz+aZZPW9fFQ/1N19b6a8E6YNKf2hAYlFjDl3EoQo7WjewLOFWqBxseQvaoS32DhsouqZ8aTvQW/k4O/kYO/kUXdfKJx/3m0a/mO1IbRA4UnvAcer8vYrm4sB2H0pzUWkuvmNq/Yrk6FYsylk+NaD+4UIYRd7x7HIhUPeZyeYF3oUZH0y1xP0uQPoNJpqCFNgvHwmiZMV5W8omvNeJSzK6xxqx9BjwtbCwcMammWDhjYJBRQdQWxzC9zv7Wc2pxCHVWYycDKGq/dgogoKlt7tqK4HI2xaIHIJKqYUkF4UO4R7Qd+ux/SgPelGe5aqDDWjvMj+o2yqUQS0VyV2jg3no+9E+HtC0vRwVBzDspkAAd3giQF3nIacmAHJ7URupGzVFAI7DOkAxMj1qax7weYVMYGqOY0PN0aEVcNoMAR1YcjICAiA1PDYQRGosPM+/iYB3ju2fyX2+UP2ZMOomyT3/9VOcMRJ7Qk1iHk2YMZlTP1zO92Bn8YW1jOc1F3lpcZmTGPx5Plo7l36MrQPKMRg7Krwz7eaOFzsdCgBd2vi7gvLBAc+QGvAMBXgyA57a8aod79gg/UVAKDUF2IPlT9cZAP3+9A4qDZSH/6WaQHX033/sv1E02OoW/KzHjclJUAVbBxUGKomuRBoD5o7JgwWeqTJg7TgW3mT8ujoDQGrXhGCkvgmfdd4+NNv7h9QGhj6mUXoDSm/gHfNxGQkS7BdmnM5p4pFql/rEcWBD7RI4xujULsGxzhbhkBKdV/W2CKUWz8CRimeeB9tvw90iHPiMSLEPxT4U+5CLfRwQz5zAi/NoqACwpaUCUgsi4JsSRLwNKgAGNqBVVEBRAUUF5KIC/S6YX/NCB+tom9CGYMLCvXKJ8RAPR1riIbW7ZDhSf8nvmngMbMuqiIciHop4yEU8+v1Ij5N4TPTc49SWfDjYkvhUZEjlktdlJFI7kK5qrxjJeBgJVDoZipEoRiIhIxH+urQ7mj7steMULi+1rJaiX3e1XyLypLugd26f8gm1A6/zfgrP5p9zdEYrVlMDE3UYaQLYoUoK0KmtVqQWSQyNmcpqRVmtKKuV92210oJBZYmSL7X9l1jUxQxbicKHbagEmg/HOp80ZN3tA6lvqwAjva7iebv9t+G48eR2JGqzrzb774ZaviovMMlcbLJjN1vk4Kp3BP17uVizfFHvlQv8KpI9QTTQf2bxJNHAzrUYo973G7jz5ubOrf+ukebgZEBq0f/Q+Kl2/mrnr3b+73vn3412Um///6DpZnvfgu37WmQvXPfbWCZLxicU5c2I87ps7paqieX5z7XI4EIAa0i3cR0eG3lyAMwrfLHPvWPjVqzKj+ONaPRtkoWsABg3YSyZdzh6ZELc0Htldv1eLFg9l+3NL+LKpy9/CMJHUY+LhfCcQNMPD/k87vY5TVYZmmy8eP1defEaG2OxsbPjUtow0cSELc4CnTZlMYwJtE7LWqS24hypEafiLIqzKM4iJ2epA7zUTOUrTedhTPZxFdaI7hcuHLhyswRm3lsezbLDAgaXePfTXCTxV8F0ugUPuyoKmNo+6lJRsKFrvPBezVMAf7lubFQUOvxqdrnVPLkfaakv1hzaMFBBvoJ8BfnvG/KbSCk16H9ZxnE+yPXzxWIP8qdFGo1UKfrBv/+WTQX+R4E/hh36idWl7q+K/lJfNDm0dZ5Cf4X+Cv3fN/p3QKbUFOCKusvpdK9qgd+I7jeEPHBDpIL+o6AfjwT6q/zlhP6hzeAU9CvoV9D/vqG/CZVSo/5d8QGhLqwt9kB/UZbmbVL0o3//zZEV+ntrPrn8/MT/EPwXSog37vvmA8iwJm2NRbvjJODUpopVqyQlBOpGSUUIFCFQhGBAQtCBotKwAlFukrBa0o+i9z+L0c4D/w8= \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5).xml b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5).xml new file mode 100644 index 0000000000..ee0dcb5f4b --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/heterogeneous cluster diagrams (5).xml @@ -0,0 +1 @@ +7Z1bl5rI2sc/jWtlLnBxKEAuu9NJJ3uSmUxOk+QmCxC7Tas4SJ/y6XcVJzkUJSpIlTydd7+jiFgURf1/PKcaaS+XT9eBvb5970+9xUiVp08j7WqkqqpsIPwfsuU53oIsPd5wE8yn8SZlu+HT/LeXbJSTrffzqbcp7Bj6/iKcr4sbXX+18tywsM0OAv+xuNvMXxR/dW3feJUNn1x7Ud3673wa3iZbFVnefvDGm9/cJj890ZMPlna6c7Jhc2tP/cfcJu3VSHsZ+H4Yv1o+vfQWpPPSfkm+t/KeQvLJ2+lXe3GfNMucZEf46G38+8D1rryNG8zXoR/gLwXJxnjvnyPtIm2FF8ztxfy3Hc79lfTgBRv833ivh2QXO+mygHLg5Dc/eUt7Fc7dKzu0X/qr0J6vvKDJ0eNvh8F8dfNuHnqBvYivXeitwsJZrwN/7QVhMmpuw5Bc74uR+hr/H97dX/g3z+ON594H8/B5bC/t3/5qPPUe8Mcz/341jVqA30zn9k1gL6WH+eY+axnebquqrlu6IbnadCYhV3UlB00s/FY2Z8bEdlzLjFryOm7z249vK926V6vwKJ7frKT5arPG45T05WvXX679FT7zDX4zQfZEdvSZpBtIlZCtmJKlT3TJc2ZTx9BnyPHcdrtm87wJvaW0JPcsvh54i4x0zdItU0LqRJPQzNCliWzJku0Z5syaap6FrHyn4Bf0kZB+Shmb6UfJcKcP/eyuC4rjYp8Brwgy4BUY8IMb8L7zi4iVKi9sBwtmdF6fsJK8t++iYfU5wIeNmij/z3eSgYyHjDtffH5eJ1djg7+wJF+QwmR36Ve6c3ojqdkYzO6xTficiltAescju8oj7fLxFg/QT2s7utqPWM7xtttwSZqn4Jd4cOPTthcXC3xZ8bbQJzvMcBd8So5I9pram9voiOTNJgz8O+8lvkBB9IOaHP3hT+JWkkN6T7W3fLIpmM6+rPGYjluak/fNxgtJd3zN33Za7oyvPX/phcEz3jn5Fd1M7vkUR1K5ftyKO7KSbbc5XdeU0mRxkx17OzwazkyqIDOTCjOTMDNT552CZrpiWcpMmmmugTsF4U5xZFmSFU03ZNux1Bmq65SsDY+Pj+NHbewH5BTx4SxypuQkVFXCt7m0ecYD+Ela4R/UQjLRtXmGhR6/IY8rEp6g7t3wPvBIOxzkebY7kWTk6RLy8AWfGBYei1PdmDkWMh3T6fQEmffiLnVo2iaVzL+4TXgOfR01yL3FEwhuTaxETZujfrz+++rnl4tXz2/VV8Fd+PKdZJxmtpB119U1xZWmKlIkZLkavjGm5DJppmm6OlKNWReSTZofq3atgo9UY4E/vpzjFzdhpHLxBiKSBeU1/rv30w+kTfTQi7tIVpT10/bD9CgXixsfXy5Zwv8jpxA9K/v362STq4+VydPCDvCDbPJ7UV+Snyw2A2/ONY3KFDb5LUmS8GWwpehX8JvCL+TpQm9IF0oTkrCTdy4eZOTyXM7mi0WOHTxlqnsmjSosw9Rsg3yC4QWP2c/keFcSbl5/oGHIRdDQ5SpoKDoFNBStPdDQBQENHUADQANAgwvQ2EdtADz4Ao/GnCHTOCOcjYns4z4KHuZ44EdTO5nPa7GCihClw0jZQfLkMJ0tnv/z7uab9de5Lr2+eXX9XZM0oz1rxa0fzH+TLmdDR8FcsT9w9EYXil6kC0Wt0kUqqwW6kCet0QXjGgrAHMzWA4kAiQCJ9EwiDD0C8OAFPKgIcOPhn5u7kntrr1ZJH2fSzxZ5b3rjpf4EPwhv/Rt/ZS9ebbdeFjFgu887P3rsJ0L+ywvD5ySWwL4P/SIaxHKeevMpwj+1vcnMpQm/4U7wjJgJP2nsLtnP37tUzVETRQ4JU6dRBC0iQ+At8Eh68EpHqMp/8tUP/jyiyNRjohQNGYZaku/4BJNvFUZhrhn7cIUoBAGsIA4rnMnU3jUQGLqim/gOl0zk4L41ZQ83xZpKjuXMdMMxXAd1CwSXC3t19xe+zm+vmj9zpNNlW1er2i9TZebKhuFJ2sQgQ96TpYkmI8lwvRnCFCjbiSm34Wl03mBDMR0P65PkzvDtiWxZkWxTn0oTxZtqGGRVXVN7YgaETzHw7CnpGPsR//9pZGWigkS6r4T3lLb7pShhMlECP5OHReWvuBjKRoHlfDqNIQPPgb9tJzoUwYw1kbdIbfTLkX6Ft0RndGm7dzcRkOQgYRb9pbERMYUoSilWQk7e576naZY1m7GsCkmQY9Ku0TZYLocdRovo8FykkeNAQirZLCRlPNGt/B8qHtKfzXBb22EKUxCmMIEphGEKsD+ct/2BIVRge+DB9hB7JdZUjwe+pz0ptXwTnwcJ6tMpwRVRl+DPP2k5N8d6h49joxVBZBuNTwMR/z4kzXmZpShQxB//e00OcEk0e+5tP1vh6YBmithSRtF4kR0oc23IOdB5R/rvg7+Zh7E0ZcBTJiHHD0N/SWOmHE/RfDB56JFH1QDRJEYDv9PIu1s76tPlUzQ7jO3HDRrjQT3Fc8RblzTxch3EL4r7bLQe3S9ILQV36MoYqXL2lxw654wxKZEeljlOkagFb8xEEMJp+dFHGMLxPIQczbIlFzmOhGSsTo5lKBLW8InnKpbmTVpOfeGAcITW/4I0gOrzpfpzquq7sQ4SvQ9unBc6CWQZqfi4cuHlH1UOaC9UEw+WOHjmr79GxdiZNZqOVdRmqKZGQjVXqyxSs/gLeUJRFCaitByrOZt5hkv1oExN8gjDV6zmZFKOpmgYq2m2F6qpCJOuBvlqYKIAEwUniLKH3gDB8EEwW6zMpfSQy/XGw53ok9gJ/35DunJxj+9/Eu4ih9uMn18N8kFv0yPhA0npYRhZolSvmpIXzdPnjvYFA3jaKsJAwwRRtcUEUcb1EIAQmK0HbABsAGzoGxtakiDAif5xogYGmCGY9BkaMfX+BIGZ+EIHz9+S70dvvpM3Yz19e/WU//DqOXlXDOhU2w3PVJIhlg/PpEchqS3CSONYi1bIAglNFrVKAWTBHVmcyfwOcZisqVKcOEzmRD7I6MzUAbFZ26tGfhBE84N8CDzce66HJW8a+V3igzpBukMcSpP5OuJfY7o71rlDUkJB6QOSXaCCqwBRdGzgJ1Mce80kSQM+y5kjbQZ4Mq6/sGADZTHEARswmZy3yaSkaBAKypcNpFR4Kylc8na1Ce1VlDp8HfvFGkdXuOt7ci9GX5cSp9pu3mhawKIuePL4wAud/KOmrkZ/tKwT8tenw8UqOlwmSYTgzkJZutqxWUSURNSTPIwBPQA9AD0cSA+1egQEwQtBtOVFYeekDsCL8uqbdvVhpVl309vrH+a181u5v5KMpId3elFS2RLQiyJKjimz9YALAuDCmczvg/eiMKdKwb0o3TuDzs2LErlPSo6Uj7nE4328JfR6GfQLxU5eHYKTxGyROdqtmSGPSVWQ3N/EKBhLJDROt5zOqyJKqimz9QA6AoAO2EXO2y7yEepqiGIK8Vy1AUzklumDShinqYRBLkyPlchR0XujqFX3jUHx3qRPOV1ZY7JVV4WElMGugjqbadbUdFVJMyayhDTPlhzTxa0ydd22bM2SzZYTiTiAFKElHDSU8fw/nT9QH//JQ7WU6Al5/k8kpbYqRf6Jf7kY05f8KpoFss1RG4pbu2iWGenPyw9f9mzRMbDBrmnBMWxkTNEwyiNHGielikWp3VmDesMNrYQbWjPc6DpWJHOEiYkbQ63pAbghGm4U1S8nOmA+4At9trGYUV2SI0Ixbw4JxYztGL2GYu6ugdWXik5MTkMuM+uTmDLasudWGBkF1wK4FngDhTrZAU7ghROOefJn16bi+Mkf3AwHEYulHuZm6BxYhC7Kpbb8cCsMsMBzv2hyDhraopshfvaUIzWRNrGckM9XfqQpFXv/cjGuqV3dgnNh38ZMnvCHFwohM/m64G7ooTGWUfV6tObeYBfk4hhyhHJvVKNPk87hzvlhKZw6P4SuH6YOtX4YQJBoEFTS4ZIS5rQIjBx8ANoVnmrsEHdoUEMC09IObCBgl7Pay6fRl4YZSB2XVttAakXFaMtllatHta5iQheLUqFYFPgewPfAh06Xp32Q4v6lGIveReDdzEk98xd/1MgxbSemJGvsEMSTlnvYVnj4nv+sptxD6QF/qnuTKaKZBAwTzxezUWl5DvLmgx3iflpFW1RZqZofsq/GPdlKPe7U8L+7HrfeIr2ctJKEJnQwocZpMCF7VTPKjQ+z9lDrNgC0UqD1sFraLWdbVwfLaUqCt/x0RRnz/Baz+NcP7moNGI+5D9nGC3aZCVGNF2nxyr6NF0LXZBjsouAi6gAYL87beJGf7gGB+zdc4Fn14mPyaPKTlMrAulVrwFBzzzHlndmGDHZE5SkNGcqoULdS3VW4UlRLRgJ0J7ZkJCgjj2XZTOteHVik6mQVpzShoyw1TqMs2VMxY9YBVQDDCADxcRaFdPIHw4i4hhEtgi17Wktj5R3YBMaO7uiRwPYFMNubzKiJr4Y7wTdyla5Ijcso6hSPj4cMzLyneZjVMcev48aYevJ22xjyJm1LL3yWFvsUz9MkdMyLxmnMC/NMynMCwBTAFMAUwNRJnGUcw1Q4G8d1YOX1fE1Gj1cDVcmOUnE3NlqpTLQqghOnvidLKXmetKrnaULxPGkde57Se09QhGh55gDPE3iewPN0oOepTgIAkfv3QuXKelHSad34WZ5kygY3zgudeFFGKj6uXHj5RzWB9mJx4+N7Spbw/+KSLUmFr2hLTdbxrophNjmoJEnT1SouGIZfFw+1GxnY67gVw1VOUSssSXz9HNlypMgp1heKTCZFFDEMvYIi1PphZtcsIvQSbBoswQYsAizCB4vso0vAKHwwymkiZXR+Un729NMUV3gtV9tQyv4XYeNqeskQysXVWKU12tKyHfvF2VwEgf2c2yFZPK8ahpNSmVysDmLKBYvkzv11vWz6i1vQV9CPLnQWVNp63mAOgn7ATwV+qr78VJANBX6qneQiuJ+qVKnVmFSNQ734qYTOkGp75gDbENiGwDYEfqqzswFVlp9JNxDDA9V3RT6QNpERhPivFGX9RHdTqak5ML72eXsgfUG++Ccry9818V6pxHtF6CF1XxV+YTdIWA1BohXvladMdc+kWYYsw9Rsgy/vlSGXk7gNoxpKQ/VfTbpmFEtoRrGAUYBRgFG4YJR9BAvYhS92aYwqMg1VEjrFfRQ8zKOVj8grPMvXkgnLfJEeRsoOshM+0FZEjrZi3PrB/DfpcjahFBxP+9NJbyiimGUUMdUqiqT2tkJN90m3KIJkkVEkbT2gCKAIoAgf5hKaIAF58EEeSs7x215xXMRewOakxXHbjpQRNTgGJcVIegmOkeSxrMpJC7qNhtEn+0XDlPfnLRoGCb3GDqrVV46jYWiTIogVRMEAumedclD4SCpBEAUjbhRMOzWBEbvooCA1gYsWnBQ0+q4InN5lggIDpzXzQAXAgDM4Aw5UBObLWoNGcQkpMiTtR/z/42gkqhan+0p4T2m7H1uWe69Et7/95fCac/Qyc+wqc4U8qVG31pleisvVGElKKUNGOSAmPsHkW93ZQoSuWodErFrHmHJAEcAkAjA8NJPIkEvVtVv3N3Y0HEFbBRgRCr1aJKfGSd/prSZesd7EIyUo9qStFwp7oFgvsA6wDiRB94JsHBPQJ/vGe29HRkH5c4B/JRo/8v98p4aINvgLS/IFKUx2l36lO6d09OqbdvVhpVl309vrH+a181u5v5IUdrWdvYKJ6bHDEd4kR0xDczKcqjCNHP316G+SssykZMghVE2wRhbF46Qp7bmcGNdKAEBhtp43QAHlAZfT4FxOuwQGQLx/N1SHqdYkIPZUqdZK41RrumywzTeDTrXGnVNiFathpWClxXIwjMsmLKtwakwBVgFWGRyr7CNYwC58sYs4qdZ0HWgaQDv4VGtJkUvrJ8lmFUVomdaK3F6qNeMiCosiEKkLKAIowgeKQKq1AORBZYAbD//c3JXcW3u1Svp4h/b3nl1NCRXZOzRk1DgEJB/ZQe8Qo0VsODJStmL50FPLR2ehsoxBIixbiJg2LM6sB0EbQ2TAXdEOzLl1kNEOLebb0DuXnW+Dn5TDovBWvATlR/XlfDqNNR4P4N+2Ex2KqHxSNgMfV78c6Vd4S3Sel7Z7dxPxQGFRQvJHCwDNRUzIO8M7Kc/6eL5c4V5O2jXKcmHzqs8UhFYkPhnEaX7NsYJfNC9IyniiW/k/VDxkmxVDGKNKWOnnNEsGJAXMCoMzK0D2F+cmhdjbsKZ6Msj6BFJq0Ca+DBIbqFPiLqIuwZ9/0nLui/UO38VGawI4BhNw/PuQNPJlTAV0qMD/XpMDXBLVn3vbz1Z4kqBZGLb0UrRJZAfKHBlyDqDekV794G/mYSxjGUiVCcvxw9Bf0lgsx2k0j0sepuRRNfw0Cd/A7zTy7taOenr5FM0ZY/txg8Z4qE/xzPHWJU28XAfxi+I+G61PZ4tWXlsQGWOkytlfcuwdJVIsc6yUrCat+14MoSHpRHMfd5DkeQg5mmVLLnIcCcl4yDmWoUgYAyaeq1ial2amnxEkCY0QBXUBcOALHOZUcHBj0STIENw4L8iKpvhK4OPKhZd/VFGivUBQPFgaLcHdRiCoRgJBV6ssDrS6yDcbckwm5LQcCDqbeYZLda1MTfJoxFcgqGKUgy+axoF2DgCm0ABgDhQAwEoCVhLuEGcPvQIC4oOAruZYJUPcoUENGExLO7ARoOn6vRzXM5XM8po0ulYV644rmjJ6V1iphhV8QapBqvmQ6vK0D1LcvxTHVWaltIYAvah4+jFThtWmC9CJJcOGyoUMp8cXU4bVlu3CIMMgwyDDRxUWT+d0EOH+RThJICGdMF+T29arkeNkR6m4G1uWW0xW7EuWFaskymr12XhCEeWuyxmoQucQqrU+QRBlEGUQ5T5yCCsSAPLcvzx35bAnrgvU0HWxl08dHedTV9k5juBTz6GIYVQXHqP61M2uWUTonEOV05xDYBFgkcGxyD66BIzCB6N0akJgJxIIYUJQ6xbR6tuEIHQovHqiGw9kG2QbZBtMCMLKc4dVm9XR6ao2q8dVbVZPGqwvWtVmpRx7YOgN4/XLC4K2DilCh+urEK4PkAKQwgek7KNYAC98wYvgZZvVpnkCULZZkdUyixgNCzfrHddtVoXOR1AhHwFYBFiEDxaBus3co0ccq1qDAo+5D5nKr51FakJJkCmLOvWRmJA6SMTU47T1oMegx6DHXCQmgPjyIr5dV2DW2KtM97OWQq5Q4GFrK9TVZfae5uG3pKnk9Xfyeqwn766ech9dPSdv8Kh6yMAk7tEmizbkpw+m7Im1ukPGMikCmb2s7qAJveB22nreiAdK4cI6E7DORD/rTLT9FFQdLFNl5sqG4UnaxCBd6cnSRJORZLjeDGGqlu3Erw3LZRwIa1oyRb74o4bQyjuw0Uw9Es0K5CIUp7WIWWl45E7MSm/A02JWK+YfVWgYUgWEofKNDAQEBAQEdBw6tB3I3hMBdQ9yHBNQUtckFaSaUlZqE/ppWjODa39RpZSVVU156cVjJHTVjLT1vCEDaAF4jAbqMUrndADh/n1G7dWT1PapQsGpCFcKV1GiKHuRYKGLRWhQLAIkGCSYKwmGapK8SXAbz8HsJbLFlGBe4iaFXihag4WiQYJBgrmSYHgK5kaCt+tu2jfeezuKao3yW9/4S//GW3n+/YZ05OJ+E0afhQFuSnR3y798p0a5N/hgS3Iw6TY+DD6KlBxjI6WHkLIDsLW9xaJO9OTH8hrLhWTIvnCgFEKYTJR5GNAQjQaUrnFA6DpQ2oluecABwAHAgcaLPh8hPkAR/VNEDQaQSxjMXcm9tVerpI93aD277tLJEy3UdsPsUNMwu3RHAcPshK7ApEEFJnHw4Ezm6bMP/jsoQAy1fLV6inPr/jQ4jnNL6yVt1vaqIOR15ZgQrRzTh8DDved6WPKmI/JUHB/UCdId4hSrrDRT/GvM0kzr3CEb54CyizKF3lNYJIlK1cey8WE5n05jaMGT82/biQ5FsGVN8gIjcdQvR/oV3hJ16qXt3t1EgFNYlIL8lfIMEMtugafJFb5Uye+NMkNDHmiY4shDiiUq+kokRRvrmpz7Kx3Rn81w40r3Qau5lkJXe9Kg2pM43ANmkfM2i5QEDzKIz9LUgdilnjg3dfDAAErJRaIYaKzpqoUUxTTwc45RPGBsdKnUXLgIAvs5t1sCX7W/alV+NH+0PXfHL+Lfp385i15odoanqSqRep3EJJ209byRzpnMxABsXQAb7xYe3m0KkTGhZFb4mCvPso/tYI+yUYhdNmoAJoN0tm0FF5JRmzyqHl2jSR7LJSMCGptKnzYEJHS9prT1vCkrSBLYEAZnQ/gIxcc4NB3EnLGmcgtZBk1KI/kIuZAnR52yklYWNKPlwGW9g1o2WhNeUZm84t+HpJEvYxhIwKNUnAj/e00OcEnEfu5tP1vhmYFW5WgLI8W6SNmBsmBMOcdD70ivfvA38zDWLscPQ3/ZfAGuHHPRIkbzYJSeZD5ANFmNC7/TyLtbO+rm5VM0S4ztxw0a43E+xXPFW5e073IdxC+K+2y0lNNyp5K1sZbGul9To2R10Myxpea4KDGC7chL0dG46yU2UGqOExOY1IECk+ch5GiWLbnIcfAzAh5zjmUoEkaCiecqluZNWrbScABMQuNEQXSAJ3jhCarUe67aROvZWRUca31mAylrfQYBnMo9uTA9ppdqJU+EolVk3KAu2TnWupZxoVNK2g7xEkbGZzPNmpquKmnGRJaQ5tmSY7q4Vaau25atWbLZcgkqkPHjZBxklPFYPp0/UB/MiZleSiSFPJcnqlJ5MC96JuJty8V4jaZjFVXWti56GrLNUSOKW7to1+QJf+FCIWwmX3/4wk27LINo48u9W3QMCLFTTjgGoSOMHiclnhpPVNo5+ZXNZR4NIpU4E7UZOeml8IzWsUnoVBs01FQbwCbRsKmk4iXxzGkWWEb4QjpuPS0GeFrA06KiMlhoxthUKmzRk3PFENq5krZ+cHgBzhXR8AKcK1wiBFXdmXke0n/fby3HfPz+5+zt66v7jekH8lRS2Fp/gkQPfKWD52xFT/Imt6Qnebtd0zN6ly7qKXqCiKmX9NVExUO0njDBGgF8KClEQ+5bSYJ9TXnjizOZ6SFlAsow1Nx47CWPziupgj339KqxadJEufx0m1kSrBEwEDmFOPqun82AiM63tpYQdRbYsxxvgMkduDzmLPkrP1iSDq435ZcrjXr4klRrjZKX5WKj+5BNrgB2+gMNS2B/vZfQ9/mDOv/zXvLNb8/e4r3yUlKbrm9xXjWwdbP4AG8ZVes4sijm8TarYLOuCEAIQAgfJwgQIiaEtKFMPTALe1IcNLPs7zeo6Ux2hsaZ+g3yE6AnLX7/83369+rXP2+N38/S17/04HW8W76C9scv8pv/vZ6t/W/OB+3Ln+/tp7ny3IeFpB2w4CgZAlRpX1ViX1Pe5sUzEdizdxbsKj3NmCjFqZ/NmMahenYTt43Kh9umZgpkp1mcl9uGrQJn77ZhjYCBgA1YTMBiwhubigN0Qrht2LMcb6jfA7jMU464ii6R/Ha1Ce0VvldV+Rrr8DpHHfMdyOGu78mNGn1duom/nGeOWgBu4DJpsCR4w1yHUmLFTCf/aKkYRvRXzemI/3p0uBhyyeFiVZcdVXSKw0XR1dbsIoynGWAHYAceThDYQUx2qFWiHvjhBEYbIeGhNf8Je8GuAfhPLu509Z+7f/9Za4G1/Ll8FUzfOwkr5/0njIEoov+Eo4W4QGda8p9wujzZmUjm4P0njIlSHP9JL04gAfwn5Bn7cP8JdZmQ+JAHLBNSM71ZTFIZhG8kXdWDv4VC5LGmWfm/iVGwkUhonG45oTPFGhDlgEEEDCK8gao4dMfzOiHsyY033O/fDFIpaUnvQI29tijH5aWguPdhfptypQtZqzpuaDUq0zJJnZlj0qrjgwAVEUs7nonKnT2iHaCj6b03aB3tolj1Mamoy8XY1ccWNwXBjzkX7cBy3bydx4soo+onweDx+vmPToqP19yi7CViOSY1oaqP81T100BlVkPNWK3FEBvWYARWA1YDVuu0mvgWADIFrUgQN9aYdFYAisxFtP711+iogNabHQGttclQvQa0zjzDdWlIMTWJQb5HUZ1MOAhcZWSwDUJSwU8Dfhqgom4CV2sEpwdKOEGerpCIcJQZQBXVDAAOm4N4xSqvxtrUYdO9ESAdykMgFjACgBGAJ4eNCjp6oHMgfviUI0GRNrGixCb/SFa6deistbF6QodOf+c6yfw9+FoSkJS/nnYR2f5OPTXQrVandhGxC95zzIZCuYhqF6jlzoFklZeN48eBNKTK/MCOwI59OZC2wMFS5LJk8eNSgtr2p6ht7y+r9YNHrRW2j49+VFl7DTHR5lzL2pdsP1aq1Tn51hBFv7uvaq+hAQk4uKvAXQUMduKq9g01iR9UqZ0CBoQqVBQ4oCSLxl7G5gQlWdoqrbL59M+/3uvvHzfu17e/rm7+5yHry5/xbvnSKozdBCytog1pzZuzkxb2NeVtfjsTlRx8aRXGDChOaZVeTkKA0irnUZpeYy+0M4TyK6kK9FqaPjkZpBesI5KijXVNzv2Vjth9sRVtSEvygFUErCK8oas4vCdw5XrtRF06DEsHe7kbzi0dPGCAUomQNSbFY8SGluRr2/FyEQT2c263hLlqf8iq+Z3Xh+2PX8QtoH9b0tSxvuPE4uFcObHWsWZIC/KcnSayrylvk/iZyPvZm3N6MCLwX59VY1eSH4SBwGyRDNqtz6qgsVwyGUzG5eOcwEgwpLrzYCQAIwFvQCQORYhXkVXjdAGGHnBlTWUVkoIh3eaiNclTot5lPso2xEbbnYyy3hXWqRU5yL/8/u766dPP9//8+J93Za4uvmn6ZyYEnWcaSo/5yRuNx9wTSZGr9gtkjq3EdpYLYTVpGShorJeMHUdEqdSO0oFQmOch5GiWLbnIcSQk48vjWIYiYfiaeK5iaV5aFQckXDBDQO/82TC8szaRo1NIYdz4gyYUqrZX0kxro1lEFHeoP3KQjiuVIqQqqig4LYd0Io+19hScEVg1CAWHHFJQ8F4U/AQRjUIqKG+VyU9fXOSMi4d0XRyks8IgM/3P/8LbuXX1t6q8+fvujfWPrW01TjBiO4+qIMlPfY6icWQeTTXVABqtGeLppdUMj+C72oELfAd8B3zHTY2Q3uqDMCYI4NCWfE2NA2xkEmCTVFg70g9VjMA52A9VuzD3wMAH/FAluEEVuEHm2FQqfNO9E4qxdvwgEAecUIA4g3RCMW58QJcUOtxMLLfcgOV0El2C5pXMPHwFkmpjo0alzBpEAG9LmdWXLZt9vp/dv3z31wfD/edfy378M3j7SZLiyaQWQbouW0bBk6g/63N+Tq/PaikkV8lql+XEGVkUdc4kuw3zA+PyDUSeIVIXInWBsE5c5KypXPVhcGFOiQAul06N+WQvkrEXNz7pzxfT1epntLzfHzuMI9uqJ7kdnd2Oou0qgsll3jQhGH2rQDSCKWYhXeKdX8okG0l9Sd6NibGpsKH83ixuUKrvyDGKG8rvzeIGpXx4pfT7SrmBuQ2Vd4XDy6Xfl3MNjFKwqDalGtvRHkYbtQR6Mt1Mo8rjeIFI8ptVC0368U88GH6mg+FnNhhYuJi3ZiXNb2iaSmxL77wZ6Q6NYmO7mhiGopVNY33hqJ5+OcNRvYqjiq5QcFTtGkfTlgCOAo7ycIKAo2LiKJU5uCFMvWUjsJCESYU4ZnWZms5UmPi2u7oM7t6HzJ6UQxbvaR5+y73+TnQbo1H87uopkfHozXOKLKEdhBdB4D9uMcJbTdMt7gIL9pysGk2pV0Ota1O0YpXjfpQqa8Rl4aruuantTWbU9aqzb8S9vW/13x+vvy4nvy7fXF3//HX59PjgvVF+fIx3y1f/Xf57LdnO88WHH6vPV/rzhWJtvnktwk1X1X9Zg24gnCKiyO2qYsoYtfyUYj0TpT77QjGHIIBymmu1LwLsum8Y0/igq/82jitSaIV7mpjXEpmufBfZ40/2A1kG/T2ZLhub1l5UjHzL+Puyfx+u70Oa6e0PpoWugZ8xKg/UBOpUJtRVqwztrh3UvA7RnlWGKAafzKpUa+NpUn2IPXO0mskujxVTMQpmoeTdkRWJrKKpCaX58l3UImINJUA1blEN7GzC29nOBFSZp1HS2RdFteTKvKTyyZYnxLLPmXOZjiGzMSkqhU8+eJi7nkT+i6fsIpnUPiK2E+x06wfz36QL2NFPhWinsk1H9yZTRLPpTFRHM4xC4HOvLqd0kdPM5TShuJyUBBbyLqcscasFUw7jmX8QcAA6CP4m8Dd1AgdFvTkxBZzAlikgArQew6RE/kTcai6DmPICDEFMEMR05kFMalqEOyNKNKkSZbp8VjGISW2NKFn3Ih9QeSbiC2AFhrNzfGDYGcRUhQ5+zEwtV+sQkDGvosrk8ofAk5LFzI60OV2urub3b2+R9Pfy6ubHX+/s58dHnyubk6dMdc+kUYhlmJpt9MkEaVxdxgSmWWWCVP4LVqZ0LLfABLWXkA8gANEQXjQAhgZqZWLIzYmJgDHJDRgHapT/kKBmxBT93UHNRy+SSXM37Q4hLsRS04Kh45PfN8b46sr407h8Kd1uLl+qy8nmDj1cz+Pd8jHG7xRb+c+8c//8n2b//PzzP8X5QqKtWuOMY1fxRKi8XISGSrpfs9xl9VjpaMuOVHaU1awIOmo7vAYNiG1EFMZdEZ2MewsioXkzY51jJHTt0wDfkdAMsYFI6D1jmNUx/sZHz56Snq4sYroz2LgayjxfRRHMcoZc1FhmKq0hfKkC3BSJvipqzSDWmbzG1aqoWRJZzkt1yvhl1CKRtbx6amnpVGU80a38Hyoe8gTBy/qA6AosR2A5AstRJ5YjusC+KMkkV94lnU8s7I+oGtasLrPVzccPpNL5p8jdREkDW/sBObqBL2Z9SBOVlB79IKrzlcej2qfJBg6suhCbHDbV8kjXriWjVDNHS2s65lxLFqVkDirlOx3hWGI8qAMeAB7wcIKAB2LiQUEjSorQAxGcwCQpIA4o48j354d+dJP+d+9tiELbS6KRK2ezrldqLbFpvPijkTHDYAr2budTUdIPcEXhkRA8f8u/yRXfIW+31Xeid2n5nf0dVnXVcwqOrLQSUFrup1kloLI3bXSQ6+vz2xtn9cn1fr8ztUfl6dXHP+W3H0cV1xfjlmmTg+Rx5ng61NhyQuOJwQ8dMec7+p3dzcS7y6zNGG/gDgJ3EABlt0DJnsl4ox8ufcvi+MiOs+i8XJBspT3r78RByNJ6vibD1yviYO3cL7bxRtflStxNmmueM9+kKel5802L2ecMYeUBUMB8A+abwamtOKjYxHyTCkIPFpsTPDUIaLHRis91G3wnbbyqyabqktkGeHvTxFdXF66yp2nH7Nu005WJJrUYZUah2Ehj7jIZVe009LrPJtvcc5hxp2FcM+PuarkKoGyl66JnMTDyceae5NjaRC0R2KGRz6ZSzvKaWMUj1UQ+XwSB/ZzbLQmkqm+yXmmyxWwZMo7+gsH+QvrkcsQXUPnZJ+6W/ox0Jj8MzJQ46mTOmqrbl2AAvPMFvLO3BXJpK2rV8Mye4HjjYC4dAQLY7rIA8sKay7QKTxWuT/I3saLW0bxz7955pQrZtYkGtRhPLW9Uwmj87zU5QF3ZoxKnq6apKEaF05OdCyWB0kj2d6TvPvibeRhrreOHob9sXpIo/9Cwo8iSHekZfjObP5F2xEHyXvDqIS6ZFKcjUisxJT3en3XSKOGsJie1CHKmyTRmPm+aTLe1YJpkpLJwj2UDUvhd9OZ5CDmaZUsuchwJyViUHctQJKxjE89VLM1LTdz80NvZG2UbrpqrVcXhxCa8E+SzCWjCa8dj9+n2Ppz6j+RKR5KE//s5sN07VkC20lJE9vWvz8rz7K395eH209ff61fO+vvfCyY+COHUUyu2E71a7MeiuPT09lx6tV3Lh26CS0949QCLz/lafJinUa8YZX3oARUY896AUSEkNcB/Tler8fq5Rp8bL381YQr07uWviN9tkzww75VtXs0up9QUptoAioUI+8ICXTcqsT4pBeyI9el+cfPJgNhARGEBYBIemIbABlWh4SNjewIIEF8ZUub3eAawgAEONQ2U1gZAcrNo3+4JwAICAAIAAgACaIUA8jrDBwJYg0eAGtU/oAawsZ2rD4vVLQTI5kCBEqBLDeSlFASmlJGjheYenjBNDQCuCRmOO3HfmNvp38GXV0++5V5Yt7qhPf6euO+/xLvlY24ZFa57qCW8b+yqWo77RMU4pgZf0ApfGBUCRUctB4GmMRDARZxy0a5gMcZNJUjwnjhkcPaRogeAh9FyYMupgixPsI6CkEGWjcMtFFq4hUxC9d9ufm7XzcLHwB1Qm3s1apY83dByE9eKO8JyUzXANDfe7FkMmJVgVWu/Obz4b3qftpy2hJBSxBcpeXtsRWBULPsnmeNSPb/uE2TSyoPARpyyEdiMwGbEBxkyT4MhitzYj9K5jjeM45mAVBoBLez7Fb4wQWQePDaCtPbhrp0IUjtwExqRKXBSCyGnji9FKKsisyPCNK0t04IbifFcPQgeAOmDCFOIMO2EBwoS0QMBnMBkKKT8t+Y+UpkSLYL7qFiBhQ/3kfbxejP//t3/bazfSX8t3wXvHv1/RxX30Y/XX5eTX5dvrq5//rp8enzw3ig/PrZIKUcaNox0weuMbpQSM7RURMUo133Z5YiqfkGelO7FLh1R6Q04BLgSUZl3GdQZtyc4osAR1b0jSuUTYXbdNwy9AkfU4Y6oxOS2WpXdUF24nfKoAG4n2l3ZsttJNa0SRrWzEKVW8jopRvEIJ3A6acBBXHMQWN6Et7ydCQWynU51AsiPy0njE9h4Zp3uXU61j3Hn7HLSywVne3E5MZ6gB0EDIHzgcgKX01m6nE5gHBRS/ltzOSGmRHur6UUQ+I/EoLDAAjl3i6q822F0SF7RwWtJ1pgn9nc0FRcq2Ol3G3Xpl2KU7mkFZfJFSxnF1441kJRASS8XdWu6mEDZ2aTLzdxgrdtb0IAIS0R5Br8TP4wBfqf6CYQ3jtl135yglNwA/U46ifXOlRBM1hQmK5R04nnSmdw3aM8TahGuskW4ZcUwCuDSUr7TpHjQklHpBG4nHTCIawwC65vw1rczgUDmaTD0jx/Hk84nsZ0QdpBDrtNnUswomo5kMhUsvOw6tWKTMphssp9NSqXZpLKVJ7cmpe8FixLdvlSsldeetWnU2HyUtwsxnl9bDprREKIscNOdrUi3ytUAy6HOTY1F1eUaTbWcD15jL+pjZcUUEXmAqTMRnbO3PAD07uuaY997vIk781R2yXH72MSlVZVr61BrWHTsQuBiZYdRMQ8qDu7DUaiupGDbKWNIrvmhWi6rfEHRSzdolyljHC1gDfINtQsBoEVz3Qm6QDTULuzCdWcQBn+F2WXTka/u2KWlzthXZ7ZIW7ksMcVEBT5J3GqH8tgJLUiwYBXfaAPuOHDH8QF2zNPIaxo//jdYripbfDpli9x65Dn6cLboUVms+j2ZvPAXLrDiz2w3Xbu8gifOvXvnlQBl+e+1ZDvPFx9+rD5f6c8XirX55jHpxL8P8UzpvYwlfkR1neF/r8kBLomCz73tZ8kaVSXbjmqaimJUrEHJzlN7c5v56FKseUd68IO/mYexUDl+GPpLCveExNpVxaMcXOVpJ3MuJucbreEVzcv4zWz+RNoR05cXRGvCblJT2q0ddfPyKZrfxvbjRpXHSY/3l85mlg1GmlxNZtMT+Sg4/lA9C+2ZzFY7xPiAmjOZ/DvHEM9DyNEsW3KR40hIxrrqWIYiYfqYeK5iaV66nNsZsZnQ5JJTkjqNODEFMKaCQSMA3aMUJes3MCeY7JSvJOk/L3lHPbh3kXWtlWq46Gl8SE6mqAEqnS8XmdoNeJAqeNQUfsIGE8pA867ZswuoX5OKJDV9yM58abEoSemxtUGAaKPnPvbQaEVnk4FlVEWVVsikc00dUooJaCpoKmjqKTUVkjpSI/F0/kD1ghMPs5TYRIkbfOHNwqobPD3KZm2v0m24/fYNCUaVHaIr7v0mxOIQ5CzV+b1zm6OmtOI9N9nZJLu95yQkcpPIes42HHUCw3FedbrneSAxVlMt2MU0E16YIF1kx6pAgaL18qTNUa4ESAp4us8RlYZABbUS1YPBmz3TDZpQjrR5s3MnRLR5IwtVH88tim+2eyXmKJz+kNuL02BegAqAisFBxZfV3cp/XH3AkswnS/Qves1N3YbFVL3uTN2z2aTG1J19csxjbZtB33yZug2LHymFqVb4qRYQAkzdlNmFN9I9qaZ2ZerGnYr7AXdAZEuIZv2SaWEbYIe3vrfvTmwH387srdrBd6eQ8WAJ7yBPTKU8f5u9WMLlAUGDiIoDJCU8SQ0BGg5TMH7M5C3nE3BON6QLfT/M7XpNbps4cl979X8=7V1bd5s6Fv41ecQLCYnLYy5Np3PSc7KaXqbzcpYAYdNg8IAcx/31I3GxwWDsJDgHJWq62iAJ3ZD0fdrae+vMuJw/fkzJYvY58Wl0BnX/8cy4OoPQMRH/VwSsiwDk4CJgmoZ+EQS2AXfhb1oG6mXoMvRp1kjIkiRi4aIZ6CVxTD3WCCNpmqyayYIkapa6IFPaCrjzSNQO/RH6bFaGAl3fRvyLhtNZWbSNy4g5qRKXAdmM+MmqFmR8ODMu0yRhxW/zx0saib6r+iX8L8r0rx74w/3817cvN/Of//t9pZWZxfSRieSf/O8kWpZ1dTa5fqFZskw9ekUzLw0XLEn5O2kZWCT++8w47ysho2lIovA3YWESaw80zfj/xasPZRJS9m3aUVpZkTs6JzELvSvCyGUSMxLGND0m9+Jtlobx9CZkNCVR8ZEZjdnh7lmkyYKmrBxzM8bEaDk/g9f8L88jiZLpepJRb5mGbD0hc/I7iSc+feDRQbKM/bxa/MEPyTQlc+0hzJab6vJwAiHGDjY1z/ADDXnQ01xkO/xRtwLTJq7nWHlNrouGfPryqfUBnlQrPgfCaayFcbbgo1x08LWXzBdJzLsj4w82Irbu4kDDJoIaIsDSHGxjjbqB75o4QC71hu2abJ0xOtfmYsLzj8RDdIQNBzuWhqBtaCgwsWbrjq4RalqB4xvUQU69U/gv3cOjiu0YxVVUOVmeMHE2Ezk9YgS9eBIBmScRUJPo3U2ixP0l4BPqEXE5guftOoNmxMfJhct/mYpfzn/c8RSXUbL0qziezSa6HPN8dHlh9HW9KL8RWWWaV7wDD83SGoZtpnXG1hUap6LzqMgA8PJWMz6o7xYkHwwrTj942IzNozKaDzo/5J/2kn+ONH/fCPI/PI6Pw6mYKh6PF511MUvS8LfovOptPp14n5LovEzJEpF9xksTs4kGYgLpm0aL1PRxhzIcWGnKdKkffFuIutImMyFZRpnoxe/1iW3U+ucjTeaUpWueuCzarGhTOTKhVT6vttwFVWlmNdqC0M5yNN3kvR1rL1kQiw8r64pY1X5sS2JvS+5uf/7pp+fAQtc/zoFH0l/fBl6+9jVDx56HDeBpPh9tGnI8gy9iPm+Lb1iW5WEEzUCt7AdW9pN3CgowcBwQaIHhmbxTEO8UV9c1HRjY1InrwADt65RNHVar1WRlTJJUNJFn54iWikZAqPGVTcvWfHY+ajEv0GACEoZsYaPHp2L/qWUsXXpsmVJRDxdRSjxb0xHFGqL8g9umI4YhNgPXQZZruSdtYO/0bIDpUyoBdbH5vNY5TlznNfBmfDnkxRfQfQJyIL5EwQ96uEIn9k8pLy70tM3AO4IDoCMpgH6YAlQwH+V4PTKsNppYbRhtrDZMp43V0DwxViOZoXrvkqWQWiG1QmqF1J0NHBFSzkgclzDej5PGdpnsAkrqT+ld+RjzocTxr4mdScpmyTSJSXSTiM1tjpi/KGPrUgxPlixp4ikfj+n6P+X7+cNP8TDBulkFXD3Wo6/W9adb3kKOVKJba3tnUdFnoXF9NHamK48aGEmntC8/c0B0T2nEx/kD3cnhNEhtSC2sN0Yqrb+ISHz/J8eDT1fHfwo8bFvaa6QPAk83TaoZtimQkeqabehIMz0aIA4AOimPnl7SCvPUrTCB5VI+5TUv4NCOiA40YmFfswH1DQ5sEBtQ8aandysG2DKhrlnI5d1q6ZRXxfE113EDbLqm56LTAqgihicUzh/BKr5lNN3DLJabqF46gXvZRLJkvBPo5eaYXeB3kDSk6/znWmTQkryX9CMIo6grOR/IyT3dSeyTbLahKpUw/kY0+DbJQlYgkJswlsz3SuvbUv4tlRF1L3kOgNVz2V5RJMnHIX8IwkdRj4tFEopcPjzkA7LIJJuRvJfnj/mUnJBVhiZ5f49M2ADMprABATCBuCVvsOy2uKEKOxWHwTJTmIFRX0kbXlnaALBtABdpAAPEK8QRk+gW0RwHAw/7lgsde2yg8ub34r2Dd4tzb1Fc7gqFNZr+CGOhKnYYs81ezC5wtVJbK/Gq0EHTdxG2Dyp3UW6eePfLxcSr+iebNOttXKQlsuotdOf9buZ/mjGwiNJ128vP52tRRhHlIfHDo+a8zK/0sRgPl6IwMcozvuXmn2db7Kjg19B3ZP02amEvsDrO5YEBJ/i0+GvKjL8D71cV/ippv5L2v3mG8YpAfyv0y6FeSax3AV+oj1eA04v01uBIX56JPwnnSezNRF80ds9WWxKwgfjno/CQMvnqxL0JwgC2MbhLNw6apwVgS2YAthQAKwBWAKwAeLgtfhMypd7mf7+75ON8D/Y/ZN4mshf77XFhf31zLyUPADuad2Zb8Q7if4AI2DITgYHlpIoIKCKgiMD7JgJ19JSaBuwhAE9X+eu3jqOxfy5M3oUYP+LAGHpHau8d0t17DJl4DUwwROVz+aZZPW9fFQ/1N19b6a8E6YNKf2hAYlFjDl3EoQo7WjewLOFWqBxseQvaoS32DhsouqZ8aTvQW/k4O/kYO/kUXdfKJx/3m0a/mO1IbRA4UnvAcer8vYrm4sB2H0pzUWkuvmNq/Yrk6FYsylk+NaD+4UIYRd7x7HIhUPeZyeYF3oUZH0y1xP0uQPoNJpqCFNgvHwmiZMV5W8omvNeJSzK6xxqx9BjwtbCwcMammWDhjYJBRQdQWxzC9zv7Wc2pxCHVWYycDKGq/dgogoKlt7tqK4HI2xaIHIJKqYUkF4UO4R7Qd+ux/SgPelGe5aqDDWjvMj+o2yqUQS0VyV2jg3no+9E+HtC0vRwVBzDspkAAd3giQF3nIacmAHJ7URupGzVFAI7DOkAxMj1qax7weYVMYGqOY0PN0aEVcNoMAR1YcjICAiA1PDYQRGosPM+/iYB3ju2fyX2+UP2ZMOomyT3/9VOcMRJ7Qk1iHk2YMZlTP1zO92Bn8YW1jOc1F3lpcZmTGPx5Plo7l36MrQPKMRg7Krwz7eaOFzsdCgBd2vi7gvLBAc+QGvAMBXgyA57a8aod79gg/UVAKDUF2IPlT9cZAP3+9A4qDZSH/6WaQHX033/sv1E02OoW/KzHjclJUAVbBxUGKomuRBoD5o7JgwWeqTJg7TgW3mT8ujoDQGrXhGCkvgmfdd4+NNv7h9QGhj6mUXoDSm/gHfNxGQkS7BdmnM5p4pFql/rEcWBD7RI4xujULsGxzhbhkBKdV/W2CKUWz8CRimeeB9tvw90iHPiMSLEPxT4U+5CLfRwQz5zAi/NoqACwpaUCUgsi4JsSRLwNKgAGNqBVVEBRAUUF5KIC/S6YX/NCB+tom9CGYMLCvXKJ8RAPR1riIbW7ZDhSf8nvmngMbMuqiIciHop4yEU8+v1Ij5N4TPTc49SWfDjYkvhUZEjlktdlJFI7kK5qrxjJeBgJVDoZipEoRiIhIxH+urQ7mj7steMULi+1rJaiX3e1XyLypLugd26f8gm1A6/zfgrP5p9zdEYrVlMDE3UYaQLYoUoK0KmtVqQWSQyNmcpqRVmtKKuV92210oJBZYmSL7X9l1jUxQxbicKHbagEmg/HOp80ZN3tA6lvqwAjva7iebv9t+G48eR2JGqzrzb774ZaviovMMlcbLJjN1vk4Kp3BP17uVizfFHvlQv8KpI9QTTQf2bxJNHAzrUYo973G7jz5ubOrf+ukebgZEBq0f/Q+Kl2/mrnr3b+73vn3412Um///6DpZnvfgu37WmQvXPfbWCZLxicU5c2I87ps7paqieX5z7XI4EIAa0i3cR0eG3lyAMwrfLHPvWPjVqzKj+ONaPRtkoWsABg3YSyZdzh6ZELc0Htldv1eLFg9l+3NL+LKpy9/CMJHUY+LhfCcQNMPD/k87vY5TVYZmmy8eP1defEaG2OxsbPjUtow0cSELc4CnTZlMYwJtE7LWqS24hypEafiLIqzKM4iJ2epA7zUTOUrTedhTPZxFdaI7hcuHLhyswRm3lsezbLDAgaXePfTXCTxV8F0ugUPuyoKmNo+6lJRsKFrvPBezVMAf7lubFQUOvxqdrnVPLkfaakv1hzaMFBBvoJ8BfnvG/KbSCk16H9ZxnE+yPXzxWIP8qdFGo1UKfrBv/+WTQX+R4E/hh36idWl7q+K/lJfNDm0dZ5Cf4X+Cv3fN/p3QKbUFOCKusvpdK9qgd+I7jeEPHBDpIL+o6AfjwT6q/zlhP6hzeAU9CvoV9D/vqG/CZVSo/5d8QGhLqwt9kB/UZbmbVL0o3//zZEV+ntrPrn8/MT/EPwXSog37vvmA8iwJm2NRbvjJODUpopVqyQlBOpGSUUIFCFQhGBAQtCBotKwAlFukrBa0o+i9z+L0c4D/w8= \ No newline at end of file diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/images/homogeneous-vs-heterogeneous-results-table.png b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/homogeneous-vs-heterogeneous-results-table.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9a99213069469c9ba23618a45445ebfcda5059 GIT binary patch literal 29695 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

#t0tO`nS9yO%Vc&NR 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

@Agsb0q0QBcq`r!y|C?DadE^6 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 literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/images/metrics homogeneous cpu and gpu usage.png b/training/heterogeneous-clusters/tf.data.service.sagemaker/images/metrics homogeneous cpu and gpu usage.png new file mode 100644 index 0000000000000000000000000000000000000000..0c3d3f3ebf125e049a2759acc70663e715f01a10 GIT binary patch literal 47674 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

MR(IpG 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 xnfpf$7+jude#1`R_+6>?Rv#jpUMV@`~3q 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 EA6KqY)Bpeg literal 0 HcmV?d00001 diff --git a/training/heterogeneous-clusters/tf.data.service.sagemaker/start_job_utils.py b/training/heterogeneous-clusters/tf.data.service.sagemaker/start_job_utils.py new file mode 100644 index 0000000000..2fd7e1d02e --- /dev/null +++ b/training/heterogeneous-clusters/tf.data.service.sagemaker/start_job_utils.py @@ -0,0 +1,37 @@ +import time +from sagemaker.estimator import EstimatorBase + +def fit_with_retries(retries : int, estimator : EstimatorBase, *args, **kwargs): + """Run estimator fit with retries in case of temporary issues like capacity exception or user exceeded resource usage + Example invocation: fit_with_retries(5, estimator, job_name="my job name") + + Args: + retries (int): How many retries in case of exception_to_try is raised + estimator (EstimatorBase): will call estimator.fit(...) + *args: list of positioned arguments to pass to fit() + **kwargs: list of keyword arguments to pass to fit() + Returns: + None + """ + orig_job_name = kwargs['job_name'] if 'job_name' in kwargs and kwargs['job_name'] else None + for i in range(1, retries+1): + try: + # Ensure job_name is unique between retries (if specified) + if orig_job_name: + kwargs['job_name'] = orig_job_name + f'-{i}' + estimator.fit(*args, **kwargs) + break + except Exception as e: + if not ('CapacityError' in str(e) or 'ResourceLimitExceeded' in str(e)): + raise e + print(f'Caught error: {type(e).__name__}: {e}') + if i == retries: + print(f'Giving up after {retries} failed attempts.') + raise e + else: + if 'ResourceLimitExceeded' in str(e): + seconds = 10 + print(f'ResourceLimitExceeded: Sleeping {seconds}s before retrying.') + time.sleep(seconds) + print(f'Retrying attempt: {i+1}/{retries}') + continue \ No newline at end of file