{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "eb84f2fd", "metadata": {}, "source": [ "# AutoGluon Tabular with Deep Learning Containers on SageMaker" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a389c40c", "metadata": {}, "source": [ "---\n", "\n", "This notebook's CI test result for us-west-2 is as follows. CI test results in other regions can be found at the end of the notebook. \n", "\n", "![This us-west-2 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/us-west-2/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "---" ] }, { "attachments": {}, "cell_type": "markdown", "id": "775e84ba", "metadata": {}, "source": [ "[AutoGluon](https://github.com/awslabs/autogluon) automates machine learning tasks enabling you to easily achieve strong predictive performance in your applications. With just a few lines of code, you can train and deploy high-accuracy deep learning models on tabular, image, and text data.\n", "This example shows how to use AutoGluon-Tabular with Amazon SageMaker by applying [pre-built deep learning containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#autogluon-training-containers)." ] }, { "attachments": {}, "cell_type": "markdown", "id": "f4992c4f", "metadata": {}, "source": [ "# Prerequisites" ] }, { "cell_type": "code", "execution_count": null, "id": "9ea8f68a", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Ensure autogluon the most recent images information is available in SageMaker Python SDK\n", "!pip install -q -U 'sagemaker>=2.126.0'" ] }, { "cell_type": "code", "execution_count": null, "id": "faf25796", "metadata": {}, "outputs": [], "source": [ "import sagemaker\n", "import pandas as pd\n", "from ag_model import (\n", " AutoGluonSagemakerEstimator,\n", " AutoGluonNonRepackInferenceModel,\n", " AutoGluonSagemakerInferenceModel,\n", " AutoGluonRealtimePredictor,\n", " AutoGluonBatchPredictor,\n", ")\n", "from sagemaker import utils\n", "from sagemaker.serializers import CSVSerializer\n", "import os\n", "import boto3\n", "\n", "role = sagemaker.get_execution_role()\n", "sagemaker_session = sagemaker.session.Session()\n", "region = sagemaker_session._region_name\n", "\n", "bucket = sagemaker_session.default_bucket()\n", "s3_prefix = f\"autogluon_sm/{utils.sagemaker_timestamp()}\"\n", "output_path = f\"s3://{bucket}/{s3_prefix}/output/\"" ] }, { "attachments": {}, "cell_type": "markdown", "id": "2c006dc0", "metadata": {}, "source": [ "### Get the data\n", "We'll be using the [Adult Census dataset](https://archive.ics.uci.edu/ml/datasets/adult) for this exercise. \n", "This data was extracted from the [1994 Census bureau database](http://www.census.gov/en.html) by Ronny Kohavi and Barry Becker (Data Mining and Visualization, Silicon Graphics), with the task being to predict if an individual person makes over 50K a year. " ] }, { "cell_type": "code", "execution_count": null, "id": "d00074fc", "metadata": {}, "outputs": [], "source": [ "!mkdir -p data" ] }, { "cell_type": "code", "execution_count": null, "id": "a102722b", "metadata": {}, "outputs": [], "source": [ "columns = [\n", " \"age\",\n", " \"workclass\",\n", " \"fnlwgt\",\n", " \"education\",\n", " \"education-num\",\n", " \"marital-status\",\n", " \"occupation\",\n", " \"relationship\",\n", " \"race\",\n", " \"sex\",\n", " \"capital-gain\",\n", " \"capital-loss\",\n", " \"hours-per-week\",\n", " \"native-country\",\n", " \"class\",\n", "]" ] }, { "cell_type": "code", "execution_count": null, "id": "5f1218fa", "metadata": {}, "outputs": [], "source": [ "# Download the data - needed for examples; in notebooks, S3 URL can be directly used for loading from S3\n", "s3 = boto3.client(\"s3\")\n", "s3.download_file(\n", " f\"sagemaker-example-files-prod-{region}\",\n", " \"datasets/tabular/uci_adult/adult.data\",\n", " \"data/adult.data\",\n", ")\n", "s3.download_file(\n", " f\"sagemaker-example-files-prod-{region}\",\n", " \"datasets/tabular/uci_adult/adult.test\",\n", " \"data/adult.test\",\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "c242a5f8", "metadata": {}, "outputs": [], "source": [ "df_train = pd.read_csv(\"data/adult.data\", header=None, names=columns)\n", "df_train.to_csv(\"data/train.csv\")" ] }, { "cell_type": "code", "execution_count": null, "id": "9f2888ae", "metadata": {}, "outputs": [], "source": [ "df_test = pd.read_csv(\"data/adult.test\", header=None, skiprows=1, names=columns)\n", "df_test[\"class\"] = df_test[\"class\"].map(\n", " {\n", " \" <=50K.\": \" <=50K\",\n", " \" >50K.\": \" >50K\",\n", " }\n", ")\n", "df_test.to_csv(\"data/test.csv\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "8213590f", "metadata": {}, "source": [ "# Training" ] }, { "attachments": {}, "cell_type": "markdown", "id": "0b453761", "metadata": {}, "source": [ "Users can create their own training/inference scripts using [SageMaker Python SDK examples](https://sagemaker.readthedocs.io/en/stable/overview.html#prepare-a-training-script).\n", "The scripts we created allow to pass AutoGluon configuration as a YAML file (located in `data/config` directory).\n", "\n", "We are using [official AutoGluon Deep Learning Container images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#autogluon-training-containers) with custom training scripts (see `scripts/` directory)." ] }, { "cell_type": "code", "execution_count": null, "id": "da167200", "metadata": {}, "outputs": [], "source": [ "ag = AutoGluonSagemakerEstimator(\n", " role=role,\n", " entry_point=\"scripts/tabular_train.py\",\n", " region=region,\n", " instance_count=1,\n", " instance_type=\"ml.m5.2xlarge\",\n", " framework_version=\"0.6\",\n", " py_version=\"py38\",\n", " base_job_name=\"autogluon-tabular-train\",\n", " disable_profiler=True,\n", " debugger_hook_config=False,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "69870f34", "metadata": {}, "source": [ "Upload the data to s3" ] }, { "cell_type": "code", "execution_count": null, "id": "204a60b0", "metadata": {}, "outputs": [], "source": [ "s3_prefix = f\"autogluon_sm/{utils.sagemaker_timestamp()}\"\n", "train_input = ag.sagemaker_session.upload_data(\n", " path=os.path.join(\"data\", \"train.csv\"), key_prefix=s3_prefix\n", ")\n", "eval_input = ag.sagemaker_session.upload_data(\n", " path=os.path.join(\"data\", \"test.csv\"), key_prefix=s3_prefix\n", ")\n", "config_input = ag.sagemaker_session.upload_data(\n", " path=os.path.join(\"config\", \"config-med.yaml\"), key_prefix=s3_prefix\n", ")\n", "\n", "# Provide inference script so the script repacking is not needed later\n", "# See more here: https://docs.aws.amazon.com/sagemaker/latest/dg/mlopsfaq.html\n", "# Q. Why do I see a repack step in my SageMaker pipeline?\n", "inference_script = ag.sagemaker_session.upload_data(\n", " path=os.path.join(\"scripts\", \"tabular_serve.py\"), key_prefix=s3_prefix\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "fedb3195", "metadata": {}, "source": [ "### Fit The Model\n", "For local training set `instance_type` to local.\n", "\n", "For non-local training the recommended instance type is `ml.m5.2xlarge`." ] }, { "cell_type": "code", "execution_count": null, "id": "794ea738", "metadata": {}, "outputs": [], "source": [ "job_name = utils.unique_name_from_base(\"test-autogluon-image\")\n", "ag.fit(\n", " {\n", " \"config\": config_input,\n", " \"train\": train_input,\n", " \"test\": eval_input,\n", " \"serving\": inference_script,\n", " },\n", " job_name=job_name,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a4d57c00", "metadata": {}, "source": [ "### Model export\n", "\n", "AutoGluon models are portable: everything needed to deploy a trained model is in the tarball created by SageMaker.\n", "\n", "The artifact can be used locally, on EC2/ECS/EKS or served via SageMaker Inference." ] }, { "cell_type": "code", "execution_count": null, "id": "e1d5dccd", "metadata": {}, "outputs": [], "source": [ "!aws s3 cp {ag.model_data} ." ] }, { "cell_type": "code", "execution_count": null, "id": "b240c86b", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "!ls -alF model.tar.gz" ] }, { "attachments": {}, "cell_type": "markdown", "id": "7633d597", "metadata": { "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "source": [ "# Endpoint Deployment" ] }, { "attachments": {}, "cell_type": "markdown", "id": "bb4fb9ec", "metadata": {}, "source": [ "Upload the model we trained earlier" ] }, { "cell_type": "code", "execution_count": null, "id": "90f6eaa2", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "endpoint_name = sagemaker.utils.unique_name_from_base(\"sagemaker-autogluon-serving-trained-model\")\n", "\n", "model_data = sagemaker_session.upload_data(\n", " path=os.path.join(\".\", \"model.tar.gz\"), key_prefix=f\"{endpoint_name}/models\"\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "c4c9a075", "metadata": {}, "source": [ "Deploy remote or local endpoint" ] }, { "cell_type": "code", "execution_count": null, "id": "8fa6dd02", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "instance_type = \"ml.m5.2xlarge\"\n", "# instance_type = 'local'" ] }, { "cell_type": "code", "execution_count": null, "id": "ae49533e", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "model = AutoGluonNonRepackInferenceModel(\n", " model_data=model_data,\n", " role=role,\n", " region=region,\n", " framework_version=\"0.6\",\n", " py_version=\"py38\",\n", " instance_type=instance_type,\n", " source_dir=\"scripts\",\n", " entry_point=\"tabular_serve.py\",\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "7e333d24", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "model.deploy(initial_instance_count=1, serializer=CSVSerializer(), instance_type=instance_type)" ] }, { "cell_type": "code", "execution_count": null, "id": "30190a41-71df-4eca-a616-a32ee9b5b50a", "metadata": {}, "outputs": [], "source": [ "predictor = AutoGluonRealtimePredictor(model.endpoint_name)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "52982b98", "metadata": {}, "source": [ "### Predict on unlabeled test data\n", "\n", "Remove target variable (`class`) from the data and get predictions for a sample of 100 rows using the deployed endpoint." ] }, { "cell_type": "code", "execution_count": null, "id": "85e3fab4", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "df = pd.read_csv(\"data/test.csv\")\n", "data = df[:100]" ] }, { "cell_type": "code", "execution_count": null, "id": "c61ab16a", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "preds = predictor.predict(data.drop(columns=\"class\"))\n", "preds" ] }, { "cell_type": "code", "execution_count": null, "id": "2f7a8ab4", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "p = preds[[\"pred\"]]\n", "p = p.join(data[\"class\"]).rename(columns={\"class\": \"actual\"})\n", "p.head()" ] }, { "cell_type": "code", "execution_count": null, "id": "a9d9dcbe", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "print(f\"{(p.pred==p.actual).astype(int).sum()}/{len(p)} are correct\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "084ee65e", "metadata": {}, "source": [ "### Cleanup Endpoint" ] }, { "cell_type": "code", "execution_count": null, "id": "cdd315e3", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "predictor.delete_endpoint()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f8197080", "metadata": {}, "source": [ "# Batch Transform\n", "\n", "Deploying a trained model to a hosted endpoint has been available in SageMaker since launch and is a great way to provide real-time predictions to a service like a website or mobile app. But, if the goal is to generate predictions from a trained model on a large dataset where minimizing latency isn’t a concern, then the batch transform functionality may be easier, more scalable, and more appropriate.\n", "\n", "[Read more about Batch Transform](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html)." ] }, { "cell_type": "code", "execution_count": null, "id": "4b607438", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "endpoint_name = sagemaker.utils.unique_name_from_base(\n", " \"sagemaker-autogluon-batch_transform-trained-model\"\n", ")\n", "\n", "model_data = sagemaker_session.upload_data(\n", " path=os.path.join(\".\", \"model.tar.gz\"), key_prefix=f\"{endpoint_name}/models\"\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "ab078513", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "instance_type = \"ml.m5.2xlarge\"" ] }, { "cell_type": "code", "execution_count": null, "id": "c88630d4", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "model = AutoGluonSagemakerInferenceModel(\n", " model_data=model_data,\n", " role=role,\n", " region=region,\n", " framework_version=\"0.6\",\n", " py_version=\"py38\",\n", " instance_type=instance_type,\n", " entry_point=\"tabular_serve-batch.py\",\n", " source_dir=\"scripts\",\n", " predictor_cls=AutoGluonBatchPredictor,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "276fd30b", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "transformer = model.transformer(\n", " instance_count=1,\n", " instance_type=instance_type,\n", " strategy=\"MultiRecord\",\n", " max_payload=6,\n", " max_concurrent_transforms=1,\n", " output_path=output_path,\n", " accept=\"application/json\",\n", " assemble_with=\"Line\",\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a9559625", "metadata": {}, "source": [ "Prepare data for batch transform" ] }, { "cell_type": "code", "execution_count": null, "id": "a8dde772", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "pd.read_csv(f\"data/test.csv\")[:100].to_csv(\"data/test_no_header.csv\", header=False, index=False)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "355fabc8", "metadata": {}, "source": [ "Upload data to sagemaker session" ] }, { "cell_type": "code", "execution_count": null, "id": "eb3dbd00", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "test_input = transformer.sagemaker_session.upload_data(\n", " path=os.path.join(\"data\", \"test_no_header.csv\"), key_prefix=s3_prefix\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "b21b56f5", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "transformer.transform(\n", " test_input,\n", " input_filter=\"$[:14]\", # filter-out target variable\n", " split_type=\"Line\",\n", " content_type=\"text/csv\",\n", " output_filter=\"$['class']\", # keep only prediction class in the output\n", ")\n", "\n", "transformer.wait()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "ee44ccfb", "metadata": {}, "source": [ "Download batch transform outputs" ] }, { "cell_type": "code", "execution_count": null, "id": "e07ff698", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "!aws s3 cp {transformer.output_path[:-1]}/test_no_header.csv.out ." ] }, { "cell_type": "code", "execution_count": null, "id": "ac3b0953", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "p = pd.concat(\n", " [\n", " pd.read_json(\"test_no_header.csv.out\", orient=\"index\")\n", " .sort_index()\n", " .rename(columns={0: \"preds\"}),\n", " pd.read_csv(\"data/test.csv\")[[\"class\"]].iloc[:100].rename(columns={\"class\": \"actual\"}),\n", " ],\n", " axis=1,\n", ")\n", "p.head()" ] }, { "cell_type": "code", "execution_count": null, "id": "7150fa02", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "print(f\"{(p.preds==p.actual).astype(int).sum()}/{len(p)} are correct\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "cd3e9e5a", "metadata": { "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" } }, "source": [ "# Conclusion\n", "\n", "In this tutorial we successfully trained an AutoGluon model and explored a few options how to deploy it using SageMaker. Any of the sections of this tutorial (training/endpoint inference/batch inference) can be used independently (i.e. train locally, deploy to SageMaker, or vice versa).\n", "\n", "Next steps:\n", "* [Learn more](https://auto.gluon.ai) about AutoGluon, explore [tutorials](https://auto.gluon.ai/stable/tutorials/index.html).\n", "* Explore [SageMaker inference documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)." ] }, { "attachments": {}, "cell_type": "markdown", "id": "cffbeae1", "metadata": {}, "source": [ "## Notebook CI Test Results\n", "\n", "This notebook was tested in multiple regions. The test results are as follows, except for us-west-2 which is shown at the top of the notebook.\n", "\n", "![This us-east-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/us-east-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This us-east-2 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/us-east-2/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This us-west-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/us-west-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This ca-central-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/ca-central-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This sa-east-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/sa-east-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This eu-west-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/eu-west-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This eu-west-2 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/eu-west-2/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This eu-west-3 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/eu-west-3/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This eu-central-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/eu-central-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This eu-north-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/eu-north-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This ap-southeast-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/ap-southeast-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This ap-southeast-2 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/ap-southeast-2/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This ap-northeast-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/ap-northeast-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This ap-northeast-2 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/ap-northeast-2/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n", "\n", "![This ap-south-1 badge failed to load. Check your device's internet connectivity, otherwise the service is currently unavailable](https://h75twx4l60.execute-api.us-west-2.amazonaws.com/sagemaker-nb/ap-south-1/advanced_functionality|autogluon-tabular-containers|AutoGluon_Tabular_SageMaker_Containers.ipynb)\n" ] } ], "metadata": { "instance_type": "ml.t3.medium", "kernelspec": { "display_name": "conda_pytorch_p38", "language": "python", "name": "conda_pytorch_p38" }, "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.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }